diff --git a/Rakefile b/Rakefile index 12bde6f7944649d84dfac1f9d76d9b1b1e7568e7..a6312f067fb46e2868afb78e2fb6f6659e6df615 100644 --- a/Rakefile +++ b/Rakefile @@ -608,18 +608,18 @@ task :deb_info do |f, args| ## When you package is ready, you will need to: ### Push upstream and merge modifications and tags First, push your changes on the master or 3.X branch. EXAMPLES: - git push origin master:refs/for/master - OR git push origin 3.2:refs/for/3.2 + git push origin master + OR git push origin 3.2 Then: - git push origin upstream#{suff}:refs/for/upstream#{suff} - git push origin debian#{suff}:refs/for/debian#{suff} - git push origin #{tag_version}:refs/tags/#{tag_version} - git push origin pristine-tar#{suff}:refs/for/pristine-tar#{suff} - git push origin upstream#{suff}/#{tag_version}:refs/tags/upstream#{suff}/#{tag_version} + git push origin upstream#{suff} + git push origin debian#{suff} + git push origin #{tag_version} + git push origin pristine-tar#{suff} + git push origin upstream#{suff}/#{tag_version} ### After the packaging work, tag the final Debian package, push the tag: git commit -m "Update Debian changelog for #{deb_version}" debian/changelog git-buildpackage --git-tag-only --git-no-hooks --git-ignore-new - git push origin debian#{suff}/#{tag_version}-1:refs/tags/debian#{suff}/#{tag_version}-1 + git push origin debian#{suff}/#{tag_version}-1 ### If you want to build a -dev package, use: DEB_BUILD_OPTIONS=devpkg=dev git-buildpackage -us -uc EOF diff --git a/conf/version b/conf/version index c28f5292427210f2ceb04f5e293e9a23e797df7f..e80871977d49607069d17bdb132986509d85edc1 100644 --- a/conf/version +++ b/conf/version @@ -1 +1 @@ -3.3.9.stable +3.3.10.stable diff --git a/doc/Kadeploy-3.3.9.stable.pdf b/doc/Kadeploy-3.3.10.stable.pdf similarity index 80% rename from doc/Kadeploy-3.3.9.stable.pdf rename to doc/Kadeploy-3.3.10.stable.pdf index a4bd41f04fd196072d53cab2a35083f9f38ef851..7ae3da77f2ff24c71c00ad54a6d9b94e94276694 100644 Binary files a/doc/Kadeploy-3.3.9.stable.pdf and b/doc/Kadeploy-3.3.10.stable.pdf differ diff --git a/doc/api/api_specs-3.3.9.stable.html b/doc/api/api_specs-3.3.10.stable.html similarity index 97% rename from doc/api/api_specs-3.3.9.stable.html rename to doc/api/api_specs-3.3.10.stable.html index a0d52fe252b48f28e999e0ed587fe79ea05b6f16..84e59931cb8d4f6ad5d50705e2d7cb2dd8467194 100644 --- a/doc/api/api_specs-3.3.9.stable.html +++ b/doc/api/api_specs-3.3.10.stable.html @@ -1,4 +1,4 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"><HTML><HEAD><TITLE>Kadeploy 3.3.9.stable REST API specifications</TITLE><LINK rel="stylesheet" type="text/css" href="api.css"></HEAD><BODY><DIV class="apidoc_frame"><H1 class="apidoc_title"><A class="apidoc_title_link" id="title">Kadeploy 3.3.9.stable REST API specifications</A></H1><DIV class="apidoc_index_frame"><UL class="apidoc_index_list"><LI><A class="apidoc_index_link" href="#intro">Introduction</A></LI><UL class="operation_index_list"><LI><A class="intro_index_link" href="#request_parameters">Request's parameters</A></LI><LI><A class="intro_index_link" href="#output_type">Output type and encoding</A></LI><LI><A class="intro_index_link" href="#Global parameters">Global parameters</A></LI><LI><A class="intro_index_link" href="#Authentication">Authentication</A></LI><LI><A class="intro_index_link" href="#Errors management">Errors management</A></LI><LI><A class="intro_index_link" href="#workflow_operations">Workflow based operations</A></LI><LI><A class="intro_index_link" href="#file_export">Exporting files for the server</A></LI><LI><A class="intro_index_link" href="#API documentation notations">API documentation notations</A></LI></UL><LI><A class="apidoc_index_link" href="#Workflow-based operations">Workflow-based operations</A></LI><UL class="operation_index_list"><LI><A class="operation_index_link" href="#POST/%OPERATION"><SPAN class="resource_id_method_POST">POST</SPAN> <SPAN class="resource_id_path">/%OPERATION</SPAN></A></LI><LI><A class="operation_index_link" href="#GET/%OPERATION"><SPAN class="resource_id_method_GET">GET</SPAN> <SPAN class="resource_id_path">/%OPERATION</SPAN></A></LI><LI><A class="operation_index_link" href="#GET/%OPERATION/:id"><SPAN class="resource_id_method_GET">GET</SPAN> <SPAN class="resource_id_path">/%OPERATION/:id</SPAN></A></LI><LI><A class="operation_index_link" href="#GET/%OPERATION/:id/logs/:cluster?"><SPAN class="resource_id_method_GET">GET</SPAN> <SPAN class="resource_id_path">/%OPERATION/:id/logs/:cluster?</SPAN></A></LI><LI><A class="operation_index_link" href="#GET/%OPERATION/:id/debugs/:node?"><SPAN class="resource_id_method_GET">GET</SPAN> <SPAN class="resource_id_path">/%OPERATION/:id/debugs/:node?</SPAN></A></LI><LI><A class="operation_index_link" href="#GET/%OPERATION/:id/state"><SPAN class="resource_id_method_GET">GET</SPAN> <SPAN class="resource_id_path">/%OPERATION/:id/state</SPAN></A></LI><LI><A class="operation_index_link" href="#GET/%OPERATION/:id/status"><SPAN class="resource_id_method_GET">GET</SPAN> <SPAN class="resource_id_path">/%OPERATION/:id/status</SPAN></A></LI><LI><A class="operation_index_link" href="#GET/%OPERATION/:id/error"><SPAN class="resource_id_method_GET">GET</SPAN> <SPAN class="resource_id_path">/%OPERATION/:id/error</SPAN></A></LI><LI><A class="operation_index_link" href="#DELETE/%OPERATION/:id"><SPAN class="resource_id_method_DELETE">DELETE</SPAN> <SPAN class="resource_id_path">/%OPERATION/:id</SPAN></A></LI></UL><LI><A class="apidoc_index_link" href="#Reboot operations">Reboot operations</A></LI><UL class="operation_index_list"><LI><A class="operation_index_link" href="#POST/reboot"><SPAN class="resource_id_method_POST">POST</SPAN> <SPAN class="resource_id_path">/reboot</SPAN></A></LI></UL><LI><A class="apidoc_index_link" href="#Rights management">Rights management</A></LI><UL class="operation_index_list"><LI><A class="operation_index_link" href="#POST/rights"><SPAN class="resource_id_method_POST">POST</SPAN> <SPAN class="resource_id_path">/rights</SPAN></A></LI><LI><A class="operation_index_link" href="#GET/rights/:username?/:node?"><SPAN class="resource_id_method_GET">GET</SPAN> <SPAN class="resource_id_path">/rights/:username?/:node?</SPAN></A></LI><LI><A class="operation_index_link" href="#PUT/rights/:username?/:node?"><SPAN class="resource_id_method_PUT">PUT</SPAN> <SPAN class="resource_id_path">/rights/:username?/:node?</SPAN></A></LI><LI><A class="operation_index_link" href="#DELETE/rights/:username/:node?/:partition?"><SPAN class="resource_id_method_DELETE">DELETE</SPAN> <SPAN class="resource_id_path">/rights/:username/:node?/:partition?</SPAN></A></LI></UL><LI><A class="apidoc_index_link" href="#Statistics">Statistics</A></LI><UL class="operation_index_list"><LI><A class="operation_index_link" href="#GET/stats/%OPERATION?"><SPAN class="resource_id_method_GET">GET</SPAN> <SPAN class="resource_id_path">/stats/%OPERATION?</SPAN></A></LI></UL><LI><A class="apidoc_index_link" href="#Nodes information">Nodes information</A></LI><UL class="operation_index_list"><LI><A class="operation_index_link" href="#GET/nodes/:nodename?"><SPAN class="resource_id_method_GET">GET</SPAN> <SPAN class="resource_id_path">/nodes/:nodename?</SPAN></A></LI></UL><LI><A class="apidoc_index_link" href="#Environments management">Environments management</A></LI><UL class="operation_index_list"><LI><A class="operation_index_link" href="#POST/environments"><SPAN class="resource_id_method_POST">POST</SPAN> <SPAN class="resource_id_path">/environments</SPAN></A></LI><LI><A class="operation_index_link" href="#GET/environments?username=:username?&amp;name=:name?&amp;version=:version?"><SPAN class="resource_id_method_GET">GET</SPAN> <SPAN class="resource_id_path">/environments?username=:username?&name=:name?&version=:version?</SPAN></A></LI><LI><A class="operation_index_link" href="#PUT/environments/:username/:name/:version?"><SPAN class="resource_id_method_PUT">PUT</SPAN> <SPAN class="resource_id_path">/environments/:username/:name/:version?</SPAN></A></LI><LI><A class="operation_index_link" href="#PUT/environments/:username?/:name?/:version?"><SPAN class="resource_id_method_PUT">PUT</SPAN> <SPAN class="resource_id_path">/environments/:username?/:name?/:version?</SPAN></A></LI><LI><A class="operation_index_link" href="#DELETE/environments/:username/:name/:version?"><SPAN class="resource_id_method_DELETE">DELETE</SPAN> <SPAN class="resource_id_path">/environments/:username/:name/:version?</SPAN></A></LI></UL><LI><A class="apidoc_index_link" href="#Global information">Global information</A></LI><UL class="operation_index_list"><LI><A class="operation_index_link" href="#GET/clusters"><SPAN class="resource_id_method_GET">GET</SPAN> <SPAN class="resource_id_path">/clusters</SPAN></A></LI><LI><A class="operation_index_link" href="#GET/auth_headers_prefix"><SPAN class="resource_id_method_GET">GET</SPAN> <SPAN class="resource_id_path">/auth_headers_prefix</SPAN></A></LI><LI><A class="operation_index_link" href="#GET/info"><SPAN class="resource_id_method_GET">GET</SPAN> <SPAN class="resource_id_path">/info</SPAN></A></LI><LI><A class="operation_index_link" href="#GET/version"><SPAN class="resource_id_method_GET">GET</SPAN> <SPAN class="resource_id_path">/version</SPAN></A></LI></UL><LI><A class="apidoc_index_link" href="#Deployment">Deployment</A></LI><UL class="operation_index_list"><LI><A class="operation_index_link" href="#POST/deployment"><SPAN class="resource_id_method_POST">POST</SPAN> <SPAN class="resource_id_path">/deployment</SPAN></A></LI></UL><LI><A class="apidoc_index_link" href="#Console">Console</A></LI><UL class="operation_index_list"><LI><A class="operation_index_link" href="#POST/console"><SPAN class="resource_id_method_POST">POST</SPAN> <SPAN class="resource_id_path">/console</SPAN></A></LI><LI><A class="operation_index_link" href="#GET/console"><SPAN class="resource_id_method_GET">GET</SPAN> <SPAN class="resource_id_path">/console</SPAN></A></LI><LI><A class="operation_index_link" href="#GET/console/:id"><SPAN class="resource_id_method_GET">GET</SPAN> <SPAN class="resource_id_path">/console/:id</SPAN></A></LI><LI><A class="operation_index_link" href="#GET/console/:id/error"><SPAN class="resource_id_method_GET">GET</SPAN> <SPAN class="resource_id_path">/console/:id/error</SPAN></A></LI><LI><A class="operation_index_link" href="#DELETE/console/:id"><SPAN class="resource_id_method_DELETE">DELETE</SPAN> <SPAN class="resource_id_path">/console/:id</SPAN></A></LI></UL><LI><A class="apidoc_index_link" href="#Power operations">Power operations</A></LI><UL class="operation_index_list"><LI><A class="operation_index_link" href="#PUT/power"><SPAN class="resource_id_method_PUT">PUT</SPAN> <SPAN class="resource_id_path">/power</SPAN></A></LI><LI><A class="operation_index_link" href="#GET/power"><SPAN class="resource_id_method_GET">GET</SPAN> <SPAN class="resource_id_path">/power</SPAN></A></LI></UL></UL></DIV><HR class="apidoc_index_sep"><DIV class="intro_frame"><H1 class="intro_title"><A class="intro_title_link" id="intro">Introduction</A></H1><DIV class="section_frame"><H2 class="section_title"><A id="request_parameters">Request's parameters</A></H2><P class="section_paragraph">There is several ways to specify parameters when using the network API. Parameters can be specified in the query's URI parameter but also in the query's body. Remark: it's only possible to use String and Array data structures when specifying parameters using the query's URI to specify more advanced parameters (Numbers, Hashs, ...) it's necessary to specify the parameters using a more advanced description language (JSON/YAML) in the query's body.</P><P class="section_paragraph">The following examples are equivalent:</P><P class="section_paragraph"><B>Specifying parameters in the query's URI</B></P><P class="section_paragraph"><PRE class="code_sample"> POST /deploy?nodes=node-1.testbed.lan&nodes=node-2.testbed.lan HTTP/1.1 +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"><HTML><HEAD><TITLE>Kadeploy 3.3.10.stable REST API specifications</TITLE><LINK rel="stylesheet" type="text/css" href="api.css"></HEAD><BODY><DIV class="apidoc_frame"><H1 class="apidoc_title"><A class="apidoc_title_link" id="title">Kadeploy 3.3.10.stable REST API specifications</A></H1><DIV class="apidoc_index_frame"><UL class="apidoc_index_list"><LI><A class="apidoc_index_link" href="#intro">Introduction</A></LI><UL class="operation_index_list"><LI><A class="intro_index_link" href="#request_parameters">Request's parameters</A></LI><LI><A class="intro_index_link" href="#output_type">Output type and encoding</A></LI><LI><A class="intro_index_link" href="#Global parameters">Global parameters</A></LI><LI><A class="intro_index_link" href="#Authentication">Authentication</A></LI><LI><A class="intro_index_link" href="#Errors management">Errors management</A></LI><LI><A class="intro_index_link" href="#workflow_operations">Workflow based operations</A></LI><LI><A class="intro_index_link" href="#file_export">Exporting files for the server</A></LI><LI><A class="intro_index_link" href="#API documentation notations">API documentation notations</A></LI></UL><LI><A class="apidoc_index_link" href="#Workflow-based operations">Workflow-based operations</A></LI><UL class="operation_index_list"><LI><A class="operation_index_link" href="#POST/%OPERATION"><SPAN class="resource_id_method_POST">POST</SPAN> <SPAN class="resource_id_path">/%OPERATION</SPAN></A></LI><LI><A class="operation_index_link" href="#GET/%OPERATION"><SPAN class="resource_id_method_GET">GET</SPAN> <SPAN class="resource_id_path">/%OPERATION</SPAN></A></LI><LI><A class="operation_index_link" href="#GET/%OPERATION/:id"><SPAN class="resource_id_method_GET">GET</SPAN> <SPAN class="resource_id_path">/%OPERATION/:id</SPAN></A></LI><LI><A class="operation_index_link" href="#GET/%OPERATION/:id/logs/:cluster?"><SPAN class="resource_id_method_GET">GET</SPAN> <SPAN class="resource_id_path">/%OPERATION/:id/logs/:cluster?</SPAN></A></LI><LI><A class="operation_index_link" href="#GET/%OPERATION/:id/debugs/:node?"><SPAN class="resource_id_method_GET">GET</SPAN> <SPAN class="resource_id_path">/%OPERATION/:id/debugs/:node?</SPAN></A></LI><LI><A class="operation_index_link" href="#GET/%OPERATION/:id/state"><SPAN class="resource_id_method_GET">GET</SPAN> <SPAN class="resource_id_path">/%OPERATION/:id/state</SPAN></A></LI><LI><A class="operation_index_link" href="#GET/%OPERATION/:id/status"><SPAN class="resource_id_method_GET">GET</SPAN> <SPAN class="resource_id_path">/%OPERATION/:id/status</SPAN></A></LI><LI><A class="operation_index_link" href="#GET/%OPERATION/:id/error"><SPAN class="resource_id_method_GET">GET</SPAN> <SPAN class="resource_id_path">/%OPERATION/:id/error</SPAN></A></LI><LI><A class="operation_index_link" href="#DELETE/%OPERATION/:id"><SPAN class="resource_id_method_DELETE">DELETE</SPAN> <SPAN class="resource_id_path">/%OPERATION/:id</SPAN></A></LI></UL><LI><A class="apidoc_index_link" href="#Reboot operations">Reboot operations</A></LI><UL class="operation_index_list"><LI><A class="operation_index_link" href="#POST/reboot"><SPAN class="resource_id_method_POST">POST</SPAN> <SPAN class="resource_id_path">/reboot</SPAN></A></LI></UL><LI><A class="apidoc_index_link" href="#Rights management">Rights management</A></LI><UL class="operation_index_list"><LI><A class="operation_index_link" href="#POST/rights"><SPAN class="resource_id_method_POST">POST</SPAN> <SPAN class="resource_id_path">/rights</SPAN></A></LI><LI><A class="operation_index_link" href="#GET/rights/:username?/:node?"><SPAN class="resource_id_method_GET">GET</SPAN> <SPAN class="resource_id_path">/rights/:username?/:node?</SPAN></A></LI><LI><A class="operation_index_link" href="#PUT/rights/:username?/:node?"><SPAN class="resource_id_method_PUT">PUT</SPAN> <SPAN class="resource_id_path">/rights/:username?/:node?</SPAN></A></LI><LI><A class="operation_index_link" href="#DELETE/rights/:username/:node?/:partition?"><SPAN class="resource_id_method_DELETE">DELETE</SPAN> <SPAN class="resource_id_path">/rights/:username/:node?/:partition?</SPAN></A></LI></UL><LI><A class="apidoc_index_link" href="#Statistics">Statistics</A></LI><UL class="operation_index_list"><LI><A class="operation_index_link" href="#GET/stats/%OPERATION?"><SPAN class="resource_id_method_GET">GET</SPAN> <SPAN class="resource_id_path">/stats/%OPERATION?</SPAN></A></LI></UL><LI><A class="apidoc_index_link" href="#Nodes information">Nodes information</A></LI><UL class="operation_index_list"><LI><A class="operation_index_link" href="#GET/nodes/:nodename?"><SPAN class="resource_id_method_GET">GET</SPAN> <SPAN class="resource_id_path">/nodes/:nodename?</SPAN></A></LI></UL><LI><A class="apidoc_index_link" href="#Environments management">Environments management</A></LI><UL class="operation_index_list"><LI><A class="operation_index_link" href="#POST/environments"><SPAN class="resource_id_method_POST">POST</SPAN> <SPAN class="resource_id_path">/environments</SPAN></A></LI><LI><A class="operation_index_link" href="#GET/environments?username=:username?&amp;name=:name?&amp;version=:version?"><SPAN class="resource_id_method_GET">GET</SPAN> <SPAN class="resource_id_path">/environments?username=:username?&name=:name?&version=:version?</SPAN></A></LI><LI><A class="operation_index_link" href="#PUT/environments/:username/:name/:version?"><SPAN class="resource_id_method_PUT">PUT</SPAN> <SPAN class="resource_id_path">/environments/:username/:name/:version?</SPAN></A></LI><LI><A class="operation_index_link" href="#PUT/environments/:username?/:name?/:version?"><SPAN class="resource_id_method_PUT">PUT</SPAN> <SPAN class="resource_id_path">/environments/:username?/:name?/:version?</SPAN></A></LI><LI><A class="operation_index_link" href="#DELETE/environments/:username/:name/:version?"><SPAN class="resource_id_method_DELETE">DELETE</SPAN> <SPAN class="resource_id_path">/environments/:username/:name/:version?</SPAN></A></LI></UL><LI><A class="apidoc_index_link" href="#Global information">Global information</A></LI><UL class="operation_index_list"><LI><A class="operation_index_link" href="#GET/clusters"><SPAN class="resource_id_method_GET">GET</SPAN> <SPAN class="resource_id_path">/clusters</SPAN></A></LI><LI><A class="operation_index_link" href="#GET/auth_headers_prefix"><SPAN class="resource_id_method_GET">GET</SPAN> <SPAN class="resource_id_path">/auth_headers_prefix</SPAN></A></LI><LI><A class="operation_index_link" href="#GET/info"><SPAN class="resource_id_method_GET">GET</SPAN> <SPAN class="resource_id_path">/info</SPAN></A></LI><LI><A class="operation_index_link" href="#GET/version"><SPAN class="resource_id_method_GET">GET</SPAN> <SPAN class="resource_id_path">/version</SPAN></A></LI></UL><LI><A class="apidoc_index_link" href="#Deployment">Deployment</A></LI><UL class="operation_index_list"><LI><A class="operation_index_link" href="#POST/deployment"><SPAN class="resource_id_method_POST">POST</SPAN> <SPAN class="resource_id_path">/deployment</SPAN></A></LI></UL><LI><A class="apidoc_index_link" href="#Console">Console</A></LI><UL class="operation_index_list"><LI><A class="operation_index_link" href="#POST/console"><SPAN class="resource_id_method_POST">POST</SPAN> <SPAN class="resource_id_path">/console</SPAN></A></LI><LI><A class="operation_index_link" href="#GET/console"><SPAN class="resource_id_method_GET">GET</SPAN> <SPAN class="resource_id_path">/console</SPAN></A></LI><LI><A class="operation_index_link" href="#GET/console/:id"><SPAN class="resource_id_method_GET">GET</SPAN> <SPAN class="resource_id_path">/console/:id</SPAN></A></LI><LI><A class="operation_index_link" href="#GET/console/:id/error"><SPAN class="resource_id_method_GET">GET</SPAN> <SPAN class="resource_id_path">/console/:id/error</SPAN></A></LI><LI><A class="operation_index_link" href="#DELETE/console/:id"><SPAN class="resource_id_method_DELETE">DELETE</SPAN> <SPAN class="resource_id_path">/console/:id</SPAN></A></LI></UL><LI><A class="apidoc_index_link" href="#Power operations">Power operations</A></LI><UL class="operation_index_list"><LI><A class="operation_index_link" href="#PUT/power"><SPAN class="resource_id_method_PUT">PUT</SPAN> <SPAN class="resource_id_path">/power</SPAN></A></LI><LI><A class="operation_index_link" href="#GET/power"><SPAN class="resource_id_method_GET">GET</SPAN> <SPAN class="resource_id_path">/power</SPAN></A></LI></UL></UL></DIV><HR class="apidoc_index_sep"><DIV class="intro_frame"><H1 class="intro_title"><A class="intro_title_link" id="intro">Introduction</A></H1><DIV class="section_frame"><H2 class="section_title"><A id="request_parameters">Request's parameters</A></H2><P class="section_paragraph">There is several ways to specify parameters when using the network API. Parameters can be specified in the query's URI parameter but also in the query's body. Remark: it's only possible to use String and Array data structures when specifying parameters using the query's URI to specify more advanced parameters (Numbers, Hashs, ...) it's necessary to specify the parameters using a more advanced description language (JSON/YAML) in the query's body.</P><P class="section_paragraph">The following examples are equivalent:</P><P class="section_paragraph"><B>Specifying parameters in the query's URI</B></P><P class="section_paragraph"><PRE class="code_sample"> POST /deploy?nodes=node-1.testbed.lan&nodes=node-2.testbed.lan HTTP/1.1 Accept: */* Host: kadeploy.testbed.lan:25300 X-Kadeploy-User: frontend diff --git a/lib/kadeploy3/common/fetchfile.rb b/lib/kadeploy3/common/fetchfile.rb index ccd69527101bf710d805bad8559a9d089ec0bdb8..d48a8cab32067a1a83d678d9203e9c95d9219a1a 100644 --- a/lib/kadeploy3/common/fetchfile.rb +++ b/lib/kadeploy3/common/fetchfile.rb @@ -168,7 +168,7 @@ end class LocalFetchFile < HTTPFetchFile def initialize(origin_uri,client=nil) super(origin_uri,client) - raise KadeployError.new(APIError::INVALID_CLIENT,nil,'No client was specified') unless @client + raise KadeployError.new(APIError::INVALID_CLIENT,nil,"There is no way to retrieve #{origin_uri} from the Kadeploy server. Consider using a server:// or a http:// URL") unless @client @origin_uri = File.join(@client.to_s,Base64.urlsafe_encode64(@origin_uri)) begin diff --git a/lib/kadeploy3/server/automata.rb b/lib/kadeploy3/server/automata.rb index 90ced57602c4b93a9fc8b3a3385c9a89ed9aa1a6..b2e2a40f96d17649fe3f8f9fec4c0c66237c3ee6 100644 --- a/lib/kadeploy3/server/automata.rb +++ b/lib/kadeploy3/server/automata.rb @@ -413,7 +413,7 @@ module Automata to_delete2.clear # Treatment of this task is done, cleaning everything - if @threads[task] and @threads[task].empty? and task.nodes.empty? + if @threads[task] and @threads[task].empty? and !task.nodes.nil? and task.nodes.empty? if task.cleaner task.cleaner.kill if task.cleaner.alive? task.cleaner.join diff --git a/lib/kadeploy3/server/microsteps.rb b/lib/kadeploy3/server/microsteps.rb index 5439ad05572e37566881130dc53fb80a22339f27..6cd42510731435320a3b28ac8cfcc267a249b076 100644 --- a/lib/kadeploy3/server/microsteps.rb +++ b/lib/kadeploy3/server/microsteps.rb @@ -16,6 +16,7 @@ class Microstep < Automata::QueueTask @runthread = nil @current_operation = nil @waitreboot_threads = ThreadGroup.new + @waitreboot_threads_lock = Mutex.new @timestart = Time.now.to_i @done = false @lock = Mutex.new @@ -81,14 +82,18 @@ class Microstep < Automata::QueueTask end def status - { - :nodes => { - :OK => @nodes_ok.make_array_of_hostname, - :KO => @nodes_ko.make_array_of_hostname, - :'**' => @nodes.diff(@nodes_ok).diff(@nodes_ko).make_array_of_hostname, - }, - :time => (Time.now.to_i - @timestart), - } + if @nodes.nil? + return { :nodes => { :OK => [], :KO => [], :'**' => [] }, :time => 0 } + else + return { + :nodes => { + :OK => @nodes_ok.make_array_of_hostname, + :KO => @nodes_ko.make_array_of_hostname, + :'**' => @nodes.diff(@nodes_ok).diff(@nodes_ko).make_array_of_hostname, + }, + :time => (Time.now.to_i - @timestart), + } + end end def done?() @@ -96,8 +101,12 @@ class Microstep < Automata::QueueTask end def kill(dofree=true) - @waitreboot_threads.list.each do |thr| - thr.kill if thr.alive? + @waitreboot_threads_lock.synchronize do + if @waitreboot_threads + @waitreboot_threads.list.each do |thr| + thr.kill if thr.alive? + end + end end @lock.synchronize do @current_operation.kill unless @current_operation.nil? @@ -129,7 +138,9 @@ class Microstep < Automata::QueueTask @output = nil @debugger = nil @current_operation.free if @current_operation - @waitreboot_threads = nil + @waitreboot_threads_lock.synchronize do + @waitreboot_threads = nil + end @timestart = nil @done = nil end @@ -1962,14 +1973,18 @@ class Microstep < Automata::QueueTask debug(5,"#{node.hostname} is here after #{Time.now.tv_sec - start}s") end end - @waitreboot_threads.add(thr) + @waitreboot_threads_lock.synchronize do + @waitreboot_threads.add(thr) + end end #let's wait everybody - @waitreboot_threads.list.each do |thr| - thr.join + @waitreboot_threads_lock.synchronize do + @waitreboot_threads.list.each do |thr| + thr.join + end + @waitreboot_threads = ThreadGroup.new end - @waitreboot_threads = ThreadGroup.new end nodes_to_test = nil end diff --git a/man/kaconsole3.1 b/man/kaconsole3.1 index 08837b1524b0b2ea77d1e0a0f7ec7a7a9aa04a1e..5ceac77dbefae6145ea85a726b8f5028406bd82f 100644 --- a/man/kaconsole3.1 +++ b/man/kaconsole3.1 @@ -1,5 +1,5 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.46.4. -.TH KACONSOLE3 "1" "May 2016" "kaconsole3 3.3.9.stable" "User Commands" +.TH KACONSOLE3 "1" "June 2016" "kaconsole3 3.3.10.stable" "User Commands" .SH NAME kaconsole3 \- access the console of deploying nodes .SH SYNOPSIS diff --git a/man/kadeploy3.1 b/man/kadeploy3.1 index 013fbb55a3e33ff7098f50af432355e626ae2a17..d00df4fa83e6ea22125512f3d168a8ef1ff1a194 100644 --- a/man/kadeploy3.1 +++ b/man/kadeploy3.1 @@ -1,5 +1,5 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.46.4. -.TH KADEPLOY3 "1" "May 2016" "kadeploy3 3.3.9.stable" "User Commands" +.TH KADEPLOY3 "1" "June 2016" "kadeploy3 3.3.10.stable" "User Commands" .SH NAME kadeploy3 \- Kadeploy client -- perform efficient deployments on cluster nodes .SH SYNOPSIS diff --git a/man/kadeploy3d.8 b/man/kadeploy3d.8 index 3b6f00d2a3c05783dd071bcfc50584b2f29587e4..9d8ffe297829820c019e8af5e15286afd4719ea7 100644 --- a/man/kadeploy3d.8 +++ b/man/kadeploy3d.8 @@ -1,5 +1,5 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.46.4. -.TH KADEPLOY3D "8" "May 2016" "kadeploy3d 3.3.9.stable" "System Administration Utilities" +.TH KADEPLOY3D "8" "June 2016" "kadeploy3d 3.3.10.stable" "System Administration Utilities" .SH NAME kadeploy3d \- Kadeploy server .SH SYNOPSIS diff --git a/man/kaenv3.1 b/man/kaenv3.1 index 5427faca6ccb7fa119d383ecac6d81c2fcf9f9ea..ce279fb8f211f97c5d15ab5122828c539771f214 100644 --- a/man/kaenv3.1 +++ b/man/kaenv3.1 @@ -1,5 +1,5 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.46.4. -.TH KAENV3 "1" "May 2016" "kaenv3 3.3.9.stable" "User Commands" +.TH KAENV3 "1" "June 2016" "kaenv3 3.3.10.stable" "User Commands" .SH NAME kaenv3 \- manage the Kadeploy environments .SH SYNOPSIS diff --git a/man/kanodes3.1 b/man/kanodes3.1 index a37b3ebd674e6ded290b04740c8bb364db19c506..6070a523b1399e55ab3092326ea1dc100b61d756 100644 --- a/man/kanodes3.1 +++ b/man/kanodes3.1 @@ -1,5 +1,5 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.46.4. -.TH KANODES3 "1" "May 2016" "kanodes3 3.3.9.stable" "User Commands" +.TH KANODES3 "1" "June 2016" "kanodes3 3.3.10.stable" "User Commands" .SH NAME kanodes3 \- get information on the current deployments .SH SYNOPSIS diff --git a/man/kapower3.1 b/man/kapower3.1 index eea5c95204a0fbc5aa91b553cd191b9b9662ccbe..83f174ef3ca5c2ab9577bc68c51dea6de2d0ac91 100644 --- a/man/kapower3.1 +++ b/man/kapower3.1 @@ -1,5 +1,5 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.46.4. -.TH KAPOWER3 "1" "May 2016" "kapower3 3.3.9.stable" "User Commands" +.TH KAPOWER3 "1" "June 2016" "kapower3 3.3.10.stable" "User Commands" .SH NAME kapower3 \- control the power status of nodes .SH SYNOPSIS diff --git a/man/kareboot3.1 b/man/kareboot3.1 index cb193a424f6606d005052226134e3e8da0b792ee..5d639b95bb6956743b3ece9212d42c4b8d9e8104 100644 --- a/man/kareboot3.1 +++ b/man/kareboot3.1 @@ -1,5 +1,5 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.46.4. -.TH KAREBOOT3 "1" "May 2016" "kareboot3 3.3.9.stable" "User Commands" +.TH KAREBOOT3 "1" "June 2016" "kareboot3 3.3.10.stable" "User Commands" .SH NAME kareboot3 \- perform reboot operations on the nodes involved in a deployment .SH SYNOPSIS diff --git a/man/karights3.8 b/man/karights3.8 index 49d9e3d56e2f3e36a9eb81b93758c246eff0d03d..81e0a01fc2663f7bac0652e0d67aecd7aaddc494 100644 --- a/man/karights3.8 +++ b/man/karights3.8 @@ -1,5 +1,5 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.46.4. -.TH KARIGHTS3 "8" "May 2016" "karights3 3.3.9.stable" "System Administration Utilities" +.TH KARIGHTS3 "8" "June 2016" "karights3 3.3.10.stable" "System Administration Utilities" .SH NAME karights3 \- manage users deployment rights .SH SYNOPSIS diff --git a/man/kastat3.1 b/man/kastat3.1 index 9824b99b715c18710b1c3887e82d3903fbfe9293..998e4b673bc5fabde004994c4e3bd7331d7e59bf 100644 --- a/man/kastat3.1 +++ b/man/kastat3.1 @@ -1,5 +1,5 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.46.4. -.TH KASTAT3 "1" "May 2016" "kastat3 3.3.9.stable" "User Commands" +.TH KASTAT3 "1" "June 2016" "kastat3 3.3.10.stable" "User Commands" .SH NAME kastat3 \- get statistics on the deployments .SH SYNOPSIS diff --git a/minor_version b/minor_version index ec635144f60048986bc560c5576355344005e6e7..f599e28b8ab0d8c9c57a486c89c4a5132dcbd3b2 100644 --- a/minor_version +++ b/minor_version @@ -1 +1 @@ -9 +10