diff --git a/conf/version b/conf/version index 4e809edc0570efdc91f6ee8d1c94b0e3b38092f9..5bc5dd65de0a53ad2c97aac989c42c16d0a7b225 100644 --- a/conf/version +++ b/conf/version @@ -1 +1 @@ -3.2.0.6 +3.2.0.7 diff --git a/doc/Kadeploy-3.2.0.6.pdf b/doc/Kadeploy-3.2.0.7.pdf similarity index 95% rename from doc/Kadeploy-3.2.0.6.pdf rename to doc/Kadeploy-3.2.0.7.pdf index f75a0f019ef4172427cabaf5c35b676da40d077e..bc74d471968994928778cb2a46cb58dc109d76be 100644 Binary files a/doc/Kadeploy-3.2.0.6.pdf and b/doc/Kadeploy-3.2.0.7.pdf differ diff --git a/doc/api/api_specs-3.2.0.6.html b/doc/api/api_specs-3.2.0.7.html similarity index 93% rename from doc/api/api_specs-3.2.0.6.html rename to doc/api/api_specs-3.2.0.7.html index 1ee71abb667390ad9319072fdc4b8e42d2480e09..1337becf0ea74899297847364c6f269ae25926c3 100644 --- a/doc/api/api_specs-3.2.0.6.html +++ b/doc/api/api_specs-3.2.0.7.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.2.0.6 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.2.0.6 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="#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="#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="#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="#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="#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="#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="#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="#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><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="#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?/:name?/:version?"><SPAN class="resource_id_method_GET">GET</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="#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></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.2.0.7 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.2.0.7 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="#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="#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="#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="#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="#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="#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="#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="#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><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="#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?/:name?/:version?"><SPAN class="resource_id_method_GET">GET</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="#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></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 @@ -205,7 +205,7 @@ ] } } -</PRE></DIV></P><P class="operation_back_link"><A class="operation_back_link" href="#title">Back to title</A></P></DIV></DIV><HR class="operation_sep"><DIV class="operation_frame"><H1 class="operation_title"><A id="Global information">Global information</A></H1><DIV class="operation_index_frame"><H2 class="operation_index_title">Resources</H2><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></DIV><P class="operation_back_link"><A class="operation_back_link" href="#title">Back to title</A></P><HR class="operation_index_sep"><DIV class="resource_frame"><H2 class="resource_title"><A id="GET/clusters"><B class="resource_method_GET">GET</B> <SPAN style="font-family: monospace;" class="resource_path">/clusters</SPAN></A></H2><P class="resource_desc">Get the list of clusters</P><DIV class="request_frame"><H3 class="request_title">Request <SPAN class="request_title_desc">(<SPAN class="request_type">Hash</SPAN>, <SPAN class="request_content">application/json</SPAN>)</SPAN></H3><DIV class="request_subframe"><H4 class="request_subtitle">Parameters</H4><TABLE class="request_parameters"><TR><TH>Name</TH><TH>Type</TH><TH>Kind</TH><TH>Description</TH></TR></TABLE></DIV></DIV><DIV class="response_frame"><H3 class="response_title">Response <SPAN class="response_title_desc">(<SPAN class="response_type">Array</SPAN>, <SPAN class="response_content">application/json</SPAN>)</SPAN></H3><DIV class="response_subframe"><H4 class="response_subtitle">Fields</H4><TABLE class="response_fields"><TR><TH>Name</TH><TH>Type</TH><TH>Description</TH></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_iter">#i</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">The name of the cluster #i</TD></TR></TABLE><H4 class="response_subtitle">Return codes</H4><TABLE class="response_codes"><TR><TH>Code#</TH><TH>Description</TH></TR><TR class="code_frame"><TD class="code_number">200</TD><TD class="code_desc">OK, the request is successful</TD></TR><TR class="code_frame"><TD class="code_number">500</TD><TD class="code_desc">Internal Server Error, an uncatched exception was thrown on the server</TD></TR><TR class="code_frame"><TD class="code_number">400</TD><TD class="code_desc">Bad Request, Kadeploy Error: please check the X-Application-Error-Code and X-Application-Error-Code headers</TD></TR><TR class="code_frame"><TD class="code_number">401</TD><TD class="code_desc">Unauthorized, you need to be authenticated</TD></TR><TR class="code_frame"><TD class="code_number">403</TD><TD class="code_desc">Forbidden, you do not the rights to perform this operation. Unlike a 401 Unauthorized response, authenticating will make no difference.</TD></TR><TR class="code_frame"><TD class="code_number">415</TD><TD class="code_desc">Unsupported Media Type, check the Content-Type of your request's body</TD></TR></TABLE></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #1 <SPAN class="example_desc">Get the list of clusters</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">GET /clusters HTTP/1.1 +</PRE></DIV></P><P class="operation_back_link"><A class="operation_back_link" href="#title">Back to title</A></P></DIV></DIV><HR class="operation_sep"><DIV class="operation_frame"><H1 class="operation_title"><A id="Global information">Global information</A></H1><DIV class="operation_index_frame"><H2 class="operation_index_title">Resources</H2><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></DIV><P class="operation_back_link"><A class="operation_back_link" href="#title">Back to title</A></P><HR class="operation_index_sep"><DIV class="resource_frame"><H2 class="resource_title"><A id="GET/clusters"><B class="resource_method_GET">GET</B> <SPAN style="font-family: monospace;" class="resource_path">/clusters</SPAN></A></H2><P class="resource_desc">Get the list of clusters</P><DIV class="request_frame"><H3 class="request_title">Request <SPAN class="request_title_desc">(<SPAN class="request_type">Hash</SPAN>, <SPAN class="request_content">application/json</SPAN>)</SPAN></H3><DIV class="request_subframe"><H4 class="request_subtitle">Parameters</H4><TABLE class="request_parameters"><TR><TH>Name</TH><TH>Type</TH><TH>Kind</TH><TH>Description</TH></TR></TABLE></DIV></DIV><DIV class="response_frame"><H3 class="response_title">Response <SPAN class="response_title_desc">(<SPAN class="response_type">Array</SPAN>, <SPAN class="response_content">application/json</SPAN>)</SPAN></H3><DIV class="response_subframe"><H4 class="response_subtitle">Fields</H4><TABLE class="response_fields"><TR><TH>Name</TH><TH>Type</TH><TH>Description</TH></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_iter">#i</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">The name of the cluster #i</TD></TR></TABLE><H4 class="response_subtitle">Return codes</H4><TABLE class="response_codes"><TR><TH>Code#</TH><TH>Description</TH></TR><TR class="code_frame"><TD class="code_number">200</TD><TD class="code_desc">OK, the request is successful</TD></TR><TR class="code_frame"><TD class="code_number">500</TD><TD class="code_desc">Internal Server Error, an uncatched exception was thrown on the server</TD></TR><TR class="code_frame"><TD class="code_number">400</TD><TD class="code_desc">Bad Request, Kadeploy Error: please check the X-Application-Error-Code and X-Application-Error-Code headers</TD></TR><TR class="code_frame"><TD class="code_number">401</TD><TD class="code_desc">Unauthorized, you need to be authenticated</TD></TR><TR class="code_frame"><TD class="code_number">403</TD><TD class="code_desc">Forbidden, you do not the rights to perform this operation. Unlike a 401 Unauthorized response, authenticating will make no difference.</TD></TR><TR class="code_frame"><TD class="code_number">415</TD><TD class="code_desc">Unsupported Media Type, check the Content-Type of your request's body</TD></TR></TABLE></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #1 <SPAN class="example_desc">Get the list of clusters</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">GET /clusters HTTP/1.1 Accept: text/plain, application/json Host: kadeploy.testbed.lan:25300 X-Kadeploy-User: frontend</PRE><H4 class="example_subtitle">Response</H4><PRE class="code_sample">HTTP/1.1 200 OK @@ -214,7 +214,7 @@ Content-Length: 45 [ "griffon-cluster", "graphene-cluster" -]</PRE></DIV></DIV></DIV></DIV><P class="operation_back_link"><A class="operation_back_link" href="#Global information">Back to operation</A></P><HR class="operation_inter_sep"><DIV class="resource_frame"><H2 class="resource_title"><A id="GET/auth_headers_prefix"><B class="resource_method_GET">GET</B> <SPAN style="font-family: monospace;" class="resource_path">/auth_headers_prefix</SPAN></A></H2><P class="resource_desc">Get information about the authentication HTTP headers of the running service</P><DIV class="request_frame"><H3 class="request_title">Request <SPAN class="request_title_desc">(<SPAN class="request_type">Hash</SPAN>, <SPAN class="request_content">application/json</SPAN>)</SPAN></H3><DIV class="request_subframe"><H4 class="request_subtitle">Parameters</H4><TABLE class="request_parameters"><TR><TH>Name</TH><TH>Type</TH><TH>Kind</TH><TH>Description</TH></TR></TABLE></DIV></DIV><DIV class="response_frame"><H3 class="response_title">Response <SPAN class="response_title_desc">(<SPAN class="response_type">String</SPAN>, <SPAN class="response_content">text/plain</SPAN>)</SPAN></H3><DIV class="response_subframe"><H4 class="response_subtitle">Fields</H4><TABLE class="response_fields"><TR><TH>Name</TH><TH>Type</TH><TH>Description</TH></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_dynamic"></SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">The prefix that have to be specified in the HTTP headers when doing a request (for authentication purpose)</TD></TR></TABLE><H4 class="response_subtitle">Return codes</H4><TABLE class="response_codes"><TR><TH>Code#</TH><TH>Description</TH></TR><TR class="code_frame"><TD class="code_number">200</TD><TD class="code_desc">OK, the request is successful</TD></TR><TR class="code_frame"><TD class="code_number">500</TD><TD class="code_desc">Internal Server Error, an uncatched exception was thrown on the server</TD></TR><TR class="code_frame"><TD class="code_number">400</TD><TD class="code_desc">Bad Request, Kadeploy Error: please check the X-Application-Error-Code and X-Application-Error-Code headers</TD></TR><TR class="code_frame"><TD class="code_number">401</TD><TD class="code_desc">Unauthorized, you need to be authenticated</TD></TR><TR class="code_frame"><TD class="code_number">403</TD><TD class="code_desc">Forbidden, you do not the rights to perform this operation. Unlike a 401 Unauthorized response, authenticating will make no difference.</TD></TR><TR class="code_frame"><TD class="code_number">415</TD><TD class="code_desc">Unsupported Media Type, check the Content-Type of your request's body</TD></TR></TABLE></DIV></DIV></DIV><P class="operation_back_link"><A class="operation_back_link" href="#Global information">Back to operation</A></P><HR class="operation_inter_sep"><DIV class="resource_frame"><H2 class="resource_title"><A id="GET/info"><B class="resource_method_GET">GET</B> <SPAN style="font-family: monospace;" class="resource_path">/info</SPAN></A></H2><P class="resource_desc">Get information about the configuration of the running service</P><DIV class="request_frame"><H3 class="request_title">Request <SPAN class="request_title_desc">(<SPAN class="request_type">Hash</SPAN>, <SPAN class="request_content">application/json</SPAN>)</SPAN></H3><DIV class="request_subframe"><H4 class="request_subtitle">Parameters</H4><TABLE class="request_parameters"><TR><TH>Name</TH><TH>Type</TH><TH>Kind</TH><TH>Description</TH></TR></TABLE></DIV></DIV><DIV class="response_frame"><H3 class="response_title">Response <SPAN class="response_title_desc">(<SPAN class="response_type">Hash</SPAN>, <SPAN class="response_content">application/json</SPAN>)</SPAN></H3><DIV class="response_subframe"><H4 class="response_subtitle">Fields</H4><TABLE class="response_fields"><TR><TH>Name</TH><TH>Type</TH><TH>Description</TH></TR><TR class="field_frame"><TD class="field_name">{<SPAN class="element_self"><SPAN class="element_normal">automata</SPAN></SPAN>}</TD><TD class="field_type">Hash</TD><TD class="field_desc">The configuration of the deployment automata</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent">{<SPAN class="element_normal">automata</SPAN>}</SPAN>.{<SPAN class="element_self"><SPAN class="element_dynamic">clustername</SPAN></SPAN>}</TD><TD class="field_type">Hash</TD><TD class="field_desc">The configuration of the deployment automata for the cluster "clustername"</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">automata</SPAN>}</SPAN>.{<SPAN class="element_dynamic">clustername</SPAN>}</SPAN>.[<SPAN class="element_self"><SPAN class="element_dynamic">macrostepkind</SPAN></SPAN>]</TD><TD class="field_type">Array</TD><TD class="field_desc">The configuration of the instances of the step "macrostepkind"</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">automata</SPAN>}</SPAN>.{<SPAN class="element_dynamic">clustername</SPAN>}</SPAN>.[<SPAN class="element_dynamic">macrostepkind</SPAN>]</SPAN>.{<SPAN class="element_self"><SPAN class="element_iter">#i</SPAN></SPAN>}</TD><TD class="field_type">Hash</TD><TD class="field_desc">The configuration of the instances #i</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">automata</SPAN>}</SPAN>.{<SPAN class="element_dynamic">clustername</SPAN>}</SPAN>.[<SPAN class="element_dynamic">macrostepkind</SPAN>]</SPAN>.{<SPAN class="element_iter">#i</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">name</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">The name of the instance</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">automata</SPAN>}</SPAN>.{<SPAN class="element_dynamic">clustername</SPAN>}</SPAN>.[<SPAN class="element_dynamic">macrostepkind</SPAN>]</SPAN>.{<SPAN class="element_iter">#i</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">retries</SPAN></SPAN></TD><TD class="field_type">Integer</TD><TD class="field_desc">The number of retries for the instance</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">automata</SPAN>}</SPAN>.{<SPAN class="element_dynamic">clustername</SPAN>}</SPAN>.[<SPAN class="element_dynamic">macrostepkind</SPAN>]</SPAN>.{<SPAN class="element_iter">#i</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">timeout</SPAN></SPAN></TD><TD class="field_type">Integer</TD><TD class="field_desc">The timeout of the instance</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_normal">pxe</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">The netboot method configured on the server</TD></TR><TR class="field_frame"><TD class="field_name">{<SPAN class="element_self"><SPAN class="element_normal">supported_fs</SPAN></SPAN>}</TD><TD class="field_type">Hash</TD><TD class="field_desc">The filesystem format supported by the deployment environment of the different clusters</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent">{<SPAN class="element_normal">supported_fs</SPAN>}</SPAN>.[<SPAN class="element_self"><SPAN class="element_dynamic">clustername</SPAN></SPAN>]</TD><TD class="field_type">Array</TD><TD class="field_desc">The filesystem format supported by the deployment environment of the cluster "clustername"</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">supported_fs</SPAN>}</SPAN>.[<SPAN class="element_dynamic">clustername</SPAN>]</SPAN>.<SPAN class="element_self"><SPAN class="element_iter">#format</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">The filesystem format name</TD></TR><TR class="field_frame"><TD class="field_name">[<SPAN class="element_self"><SPAN class="element_normal">vars</SPAN></SPAN>]</TD><TD class="field_type">Array</TD><TD class="field_desc">The environment variables exported by the deployment environment when running custom scripts</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent">[<SPAN class="element_normal">vars</SPAN>]</SPAN>.<SPAN class="element_self"><SPAN class="element_iter">#name</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">The variable name</TD></TR></TABLE><H4 class="response_subtitle">Return codes</H4><TABLE class="response_codes"><TR><TH>Code#</TH><TH>Description</TH></TR><TR class="code_frame"><TD class="code_number">200</TD><TD class="code_desc">OK, the request is successful</TD></TR><TR class="code_frame"><TD class="code_number">500</TD><TD class="code_desc">Internal Server Error, an uncatched exception was thrown on the server</TD></TR><TR class="code_frame"><TD class="code_number">400</TD><TD class="code_desc">Bad Request, Kadeploy Error: please check the X-Application-Error-Code and X-Application-Error-Code headers</TD></TR><TR class="code_frame"><TD class="code_number">401</TD><TD class="code_desc">Unauthorized, you need to be authenticated</TD></TR><TR class="code_frame"><TD class="code_number">403</TD><TD class="code_desc">Forbidden, you do not the rights to perform this operation. Unlike a 401 Unauthorized response, authenticating will make no difference.</TD></TR><TR class="code_frame"><TD class="code_number">415</TD><TD class="code_desc">Unsupported Media Type, check the Content-Type of your request's body</TD></TR></TABLE></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #1 <SPAN class="example_desc">Get information about the service's configuration</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">GET /info HTTP/1.1 +]</PRE></DIV></DIV></DIV></DIV><P class="operation_back_link"><A class="operation_back_link" href="#Global information">Back to operation</A></P><HR class="operation_inter_sep"><DIV class="resource_frame"><H2 class="resource_title"><A id="GET/auth_headers_prefix"><B class="resource_method_GET">GET</B> <SPAN style="font-family: monospace;" class="resource_path">/auth_headers_prefix</SPAN></A></H2><P class="resource_desc">Get information about the authentication HTTP headers of the running service</P><DIV class="request_frame"><H3 class="request_title">Request <SPAN class="request_title_desc">(<SPAN class="request_type">Hash</SPAN>, <SPAN class="request_content">application/json</SPAN>)</SPAN></H3><DIV class="request_subframe"><H4 class="request_subtitle">Parameters</H4><TABLE class="request_parameters"><TR><TH>Name</TH><TH>Type</TH><TH>Kind</TH><TH>Description</TH></TR></TABLE></DIV></DIV><DIV class="response_frame"><H3 class="response_title">Response <SPAN class="response_title_desc">(<SPAN class="response_type">String</SPAN>, <SPAN class="response_content">text/plain</SPAN>)</SPAN></H3><DIV class="response_subframe"><H4 class="response_subtitle">Fields</H4><TABLE class="response_fields"><TR><TH>Name</TH><TH>Type</TH><TH>Description</TH></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_dynamic"></SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">The prefix that have to be specified in the HTTP headers when doing a request (for authentication purpose)</TD></TR></TABLE><H4 class="response_subtitle">Return codes</H4><TABLE class="response_codes"><TR><TH>Code#</TH><TH>Description</TH></TR><TR class="code_frame"><TD class="code_number">200</TD><TD class="code_desc">OK, the request is successful</TD></TR><TR class="code_frame"><TD class="code_number">500</TD><TD class="code_desc">Internal Server Error, an uncatched exception was thrown on the server</TD></TR><TR class="code_frame"><TD class="code_number">400</TD><TD class="code_desc">Bad Request, Kadeploy Error: please check the X-Application-Error-Code and X-Application-Error-Code headers</TD></TR><TR class="code_frame"><TD class="code_number">401</TD><TD class="code_desc">Unauthorized, you need to be authenticated</TD></TR><TR class="code_frame"><TD class="code_number">403</TD><TD class="code_desc">Forbidden, you do not the rights to perform this operation. Unlike a 401 Unauthorized response, authenticating will make no difference.</TD></TR><TR class="code_frame"><TD class="code_number">415</TD><TD class="code_desc">Unsupported Media Type, check the Content-Type of your request's body</TD></TR></TABLE></DIV></DIV></DIV><P class="operation_back_link"><A class="operation_back_link" href="#Global information">Back to operation</A></P><HR class="operation_inter_sep"><DIV class="resource_frame"><H2 class="resource_title"><A id="GET/info"><B class="resource_method_GET">GET</B> <SPAN style="font-family: monospace;" class="resource_path">/info</SPAN></A></H2><P class="resource_desc">Get information about the configuration of the running service</P><DIV class="request_frame"><H3 class="request_title">Request <SPAN class="request_title_desc">(<SPAN class="request_type">Hash</SPAN>, <SPAN class="request_content">application/json</SPAN>)</SPAN></H3><DIV class="request_subframe"><H4 class="request_subtitle">Parameters</H4><TABLE class="request_parameters"><TR><TH>Name</TH><TH>Type</TH><TH>Kind</TH><TH>Description</TH></TR></TABLE></DIV></DIV><DIV class="response_frame"><H3 class="response_title">Response <SPAN class="response_title_desc">(<SPAN class="response_type">Hash</SPAN>, <SPAN class="response_content">application/json</SPAN>)</SPAN></H3><DIV class="response_subframe"><H4 class="response_subtitle">Fields</H4><TABLE class="response_fields"><TR><TH>Name</TH><TH>Type</TH><TH>Description</TH></TR><TR class="field_frame"><TD class="field_name">{<SPAN class="element_self"><SPAN class="element_normal">automata</SPAN></SPAN>}</TD><TD class="field_type">Hash</TD><TD class="field_desc">The configuration of the deployment automata</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent">{<SPAN class="element_normal">automata</SPAN>}</SPAN>.{<SPAN class="element_self"><SPAN class="element_dynamic">clustername</SPAN></SPAN>}</TD><TD class="field_type">Hash</TD><TD class="field_desc">The configuration of the deployment automata for the cluster "clustername"</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">automata</SPAN>}</SPAN>.{<SPAN class="element_dynamic">clustername</SPAN>}</SPAN>.[<SPAN class="element_self"><SPAN class="element_dynamic">macrostepkind</SPAN></SPAN>]</TD><TD class="field_type">Array</TD><TD class="field_desc">The configuration of the instances of the step "macrostepkind"</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">automata</SPAN>}</SPAN>.{<SPAN class="element_dynamic">clustername</SPAN>}</SPAN>.[<SPAN class="element_dynamic">macrostepkind</SPAN>]</SPAN>.{<SPAN class="element_self"><SPAN class="element_iter">#i</SPAN></SPAN>}</TD><TD class="field_type">Hash</TD><TD class="field_desc">The configuration of the instances #i</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">automata</SPAN>}</SPAN>.{<SPAN class="element_dynamic">clustername</SPAN>}</SPAN>.[<SPAN class="element_dynamic">macrostepkind</SPAN>]</SPAN>.{<SPAN class="element_iter">#i</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">name</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">The name of the instance</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">automata</SPAN>}</SPAN>.{<SPAN class="element_dynamic">clustername</SPAN>}</SPAN>.[<SPAN class="element_dynamic">macrostepkind</SPAN>]</SPAN>.{<SPAN class="element_iter">#i</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">retries</SPAN></SPAN></TD><TD class="field_type">Integer</TD><TD class="field_desc">The number of retries for the instance</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">automata</SPAN>}</SPAN>.{<SPAN class="element_dynamic">clustername</SPAN>}</SPAN>.[<SPAN class="element_dynamic">macrostepkind</SPAN>]</SPAN>.{<SPAN class="element_iter">#i</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">timeout</SPAN></SPAN></TD><TD class="field_type">Integer</TD><TD class="field_desc">The timeout of the instance</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_normal">pxe</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">The netboot method configured on the server</TD></TR><TR class="field_frame"><TD class="field_name">{<SPAN class="element_self"><SPAN class="element_normal">supported_fs</SPAN></SPAN>}</TD><TD class="field_type">Hash</TD><TD class="field_desc">The filesystem format supported by the deployment environment of the different clusters</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent">{<SPAN class="element_normal">supported_fs</SPAN>}</SPAN>.[<SPAN class="element_self"><SPAN class="element_dynamic">clustername</SPAN></SPAN>]</TD><TD class="field_type">Array</TD><TD class="field_desc">The filesystem format supported by the deployment environment of the cluster "clustername"</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">supported_fs</SPAN>}</SPAN>.[<SPAN class="element_dynamic">clustername</SPAN>]</SPAN>.<SPAN class="element_self"><SPAN class="element_iter">#format</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">The filesystem format name</TD></TR><TR class="field_frame"><TD class="field_name">[<SPAN class="element_self"><SPAN class="element_normal">vars</SPAN></SPAN>]</TD><TD class="field_type">Array</TD><TD class="field_desc">The environment variables exported by the deployment environment when running custom scripts</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent">[<SPAN class="element_normal">vars</SPAN>]</SPAN>.<SPAN class="element_self"><SPAN class="element_iter">#name</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">The variable name</TD></TR></TABLE><H4 class="response_subtitle">Return codes</H4><TABLE class="response_codes"><TR><TH>Code#</TH><TH>Description</TH></TR><TR class="code_frame"><TD class="code_number">200</TD><TD class="code_desc">OK, the request is successful</TD></TR><TR class="code_frame"><TD class="code_number">500</TD><TD class="code_desc">Internal Server Error, an uncatched exception was thrown on the server</TD></TR><TR class="code_frame"><TD class="code_number">400</TD><TD class="code_desc">Bad Request, Kadeploy Error: please check the X-Application-Error-Code and X-Application-Error-Code headers</TD></TR><TR class="code_frame"><TD class="code_number">401</TD><TD class="code_desc">Unauthorized, you need to be authenticated</TD></TR><TR class="code_frame"><TD class="code_number">403</TD><TD class="code_desc">Forbidden, you do not the rights to perform this operation. Unlike a 401 Unauthorized response, authenticating will make no difference.</TD></TR><TR class="code_frame"><TD class="code_number">415</TD><TD class="code_desc">Unsupported Media Type, check the Content-Type of your request's body</TD></TR></TABLE></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #1 <SPAN class="example_desc">Get information about the service's configuration</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">GET /info HTTP/1.1 Accept: text/plain, application/json Host: kadeploy.testbed.lan:25300 X-Kadeploy-User: frontend</PRE><H4 class="example_subtitle">Response</H4><PRE class="code_sample">HTTP/1.1 200 OK @@ -310,13 +310,13 @@ Content-Length: 1851 "KADEPLOY_TMP_DIR", "KADEPLOY_TMP_PART_NUM" ] -}</PRE></DIV></DIV></DIV></DIV><P class="operation_back_link"><A class="operation_back_link" href="#Global information">Back to operation</A></P><HR class="operation_inter_sep"><DIV class="resource_frame"><H2 class="resource_title"><A id="GET/version"><B class="resource_method_GET">GET</B> <SPAN style="font-family: monospace;" class="resource_path">/version</SPAN></A></H2><P class="resource_desc">Get the version of the server</P><DIV class="request_frame"><H3 class="request_title">Request <SPAN class="request_title_desc">(<SPAN class="request_type">Hash</SPAN>, <SPAN class="request_content">application/json</SPAN>)</SPAN></H3><DIV class="request_subframe"><H4 class="request_subtitle">Parameters</H4><TABLE class="request_parameters"><TR><TH>Name</TH><TH>Type</TH><TH>Kind</TH><TH>Description</TH></TR></TABLE></DIV></DIV><DIV class="response_frame"><H3 class="response_title">Response <SPAN class="response_title_desc">(<SPAN class="response_type">String</SPAN>, <SPAN class="response_content">text/plain</SPAN>)</SPAN></H3><DIV class="response_subframe"><H4 class="response_subtitle">Fields</H4><TABLE class="response_fields"><TR><TH>Name</TH><TH>Type</TH><TH>Description</TH></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_dynamic"></SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">The version of the server</TD></TR></TABLE><H4 class="response_subtitle">Return codes</H4><TABLE class="response_codes"><TR><TH>Code#</TH><TH>Description</TH></TR><TR class="code_frame"><TD class="code_number">200</TD><TD class="code_desc">OK, the request is successful</TD></TR><TR class="code_frame"><TD class="code_number">500</TD><TD class="code_desc">Internal Server Error, an uncatched exception was thrown on the server</TD></TR><TR class="code_frame"><TD class="code_number">400</TD><TD class="code_desc">Bad Request, Kadeploy Error: please check the X-Application-Error-Code and X-Application-Error-Code headers</TD></TR><TR class="code_frame"><TD class="code_number">401</TD><TD class="code_desc">Unauthorized, you need to be authenticated</TD></TR><TR class="code_frame"><TD class="code_number">403</TD><TD class="code_desc">Forbidden, you do not the rights to perform this operation. Unlike a 401 Unauthorized response, authenticating will make no difference.</TD></TR><TR class="code_frame"><TD class="code_number">415</TD><TD class="code_desc">Unsupported Media Type, check the Content-Type of your request's body</TD></TR></TABLE></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #1 <SPAN class="example_desc">Get the version of the server "kadeploy.testbed.lan"</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">GET /version HTTP/1.1 +}</PRE></DIV></DIV></DIV></DIV><P class="operation_back_link"><A class="operation_back_link" href="#Global information">Back to operation</A></P><HR class="operation_inter_sep"><DIV class="resource_frame"><H2 class="resource_title"><A id="GET/version"><B class="resource_method_GET">GET</B> <SPAN style="font-family: monospace;" class="resource_path">/version</SPAN></A></H2><P class="resource_desc">Get the version of the server</P><DIV class="request_frame"><H3 class="request_title">Request <SPAN class="request_title_desc">(<SPAN class="request_type">Hash</SPAN>, <SPAN class="request_content">application/json</SPAN>)</SPAN></H3><DIV class="request_subframe"><H4 class="request_subtitle">Parameters</H4><TABLE class="request_parameters"><TR><TH>Name</TH><TH>Type</TH><TH>Kind</TH><TH>Description</TH></TR></TABLE></DIV></DIV><DIV class="response_frame"><H3 class="response_title">Response <SPAN class="response_title_desc">(<SPAN class="response_type">String</SPAN>, <SPAN class="response_content">text/plain</SPAN>)</SPAN></H3><DIV class="response_subframe"><H4 class="response_subtitle">Fields</H4><TABLE class="response_fields"><TR><TH>Name</TH><TH>Type</TH><TH>Description</TH></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_dynamic"></SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">The version of the server</TD></TR></TABLE><H4 class="response_subtitle">Return codes</H4><TABLE class="response_codes"><TR><TH>Code#</TH><TH>Description</TH></TR><TR class="code_frame"><TD class="code_number">200</TD><TD class="code_desc">OK, the request is successful</TD></TR><TR class="code_frame"><TD class="code_number">500</TD><TD class="code_desc">Internal Server Error, an uncatched exception was thrown on the server</TD></TR><TR class="code_frame"><TD class="code_number">400</TD><TD class="code_desc">Bad Request, Kadeploy Error: please check the X-Application-Error-Code and X-Application-Error-Code headers</TD></TR><TR class="code_frame"><TD class="code_number">401</TD><TD class="code_desc">Unauthorized, you need to be authenticated</TD></TR><TR class="code_frame"><TD class="code_number">403</TD><TD class="code_desc">Forbidden, you do not the rights to perform this operation. Unlike a 401 Unauthorized response, authenticating will make no difference.</TD></TR><TR class="code_frame"><TD class="code_number">415</TD><TD class="code_desc">Unsupported Media Type, check the Content-Type of your request's body</TD></TR></TABLE></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #1 <SPAN class="example_desc">Get the version of the server "kadeploy.testbed.lan"</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">GET /version HTTP/1.1 Accept: text/plain, application/json Host: kadeploy.testbed.lan:25300 X-Kadeploy-User: frontend</PRE><H4 class="example_subtitle">Response</H4><PRE class="code_sample">HTTP/1.1 200 OK Content-Type: text/plain Content-Length: 5 -3.2.0</PRE></DIV></DIV></DIV></DIV><P class="operation_back_link"><A class="operation_back_link" href="#Global information">Back to operation</A></P><HR class="operation_inter_sep"></DIV><HR class="operation_sep"><DIV class="operation_frame"><H1 class="operation_title"><A id="Console">Console</A></H1><DIV class="operation_index_frame"><H2 class="operation_index_title">Resources</H2><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></DIV><P class="operation_back_link"><A class="operation_back_link" href="#title">Back to title</A></P><HR class="operation_index_sep"><DIV class="resource_frame"><H2 class="resource_title"><A id="POST/console"><B class="resource_method_POST">POST</B> <SPAN style="font-family: monospace;" class="resource_path">/console</SPAN></A></H2><P class="resource_desc">Create a console binding. The server will create a TCP channel to bind the console inputs/outputs.<BR> To create an interactive shell, you can use a command such as:<BR><TT>stty raw -echo; nc <I>HOST</I> <I>PORT</I>; stty -raw echo</TT></P><DIV class="request_frame"><H3 class="request_title">Request <SPAN class="request_title_desc">(<SPAN class="request_type">Hash</SPAN>, <SPAN class="request_content">application/json</SPAN>)</SPAN></H3><DIV class="request_subframe"><H4 class="request_subtitle">Parameters</H4><TABLE class="request_parameters"><TR><TH>Name</TH><TH>Type</TH><TH>Kind</TH><TH>Description</TH></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">node</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The node to establish the console to</TD></TR></TABLE></DIV></DIV><DIV class="response_frame"><H3 class="response_title">Response <SPAN class="response_title_desc">(<SPAN class="response_type">Hash</SPAN>, <SPAN class="response_content">application/json</SPAN>)</SPAN></H3><DIV class="response_subframe"><H4 class="response_subtitle">Fields</H4><TABLE class="response_fields"><TR><TH>Name</TH><TH>Type</TH><TH>Description</TH></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_normal">id</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">The id# of the operation (prefixed by "C-")</TD></TR><TR class="field_frame"><TD class="field_name">{<SPAN class="element_self"><SPAN class="element_normal">resources</SPAN></SPAN>}</TD><TD class="field_type">Hash</TD><TD class="field_desc">Resources related to the workflow</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent">{<SPAN class="element_normal">resources</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">console</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">URI to the TCP channel used to bind the console inputs/outputs</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent">{<SPAN class="element_normal">resources</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">error</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">URI to the error</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent">{<SPAN class="element_normal">resources</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">resource</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">URI to the resource</TD></TR></TABLE><H4 class="response_subtitle">Return codes</H4><TABLE class="response_codes"><TR><TH>Code#</TH><TH>Description</TH></TR><TR class="code_frame"><TD class="code_number">200</TD><TD class="code_desc">OK, the request is successful</TD></TR><TR class="code_frame"><TD class="code_number">500</TD><TD class="code_desc">Internal Server Error, an uncatched exception was thrown on the server</TD></TR><TR class="code_frame"><TD class="code_number">400</TD><TD class="code_desc">Bad Request, Kadeploy Error: please check the X-Application-Error-Code and X-Application-Error-Code headers</TD></TR><TR class="code_frame"><TD class="code_number">401</TD><TD class="code_desc">Unauthorized, you need to be authenticated</TD></TR><TR class="code_frame"><TD class="code_number">403</TD><TD class="code_desc">Forbidden, you do not the rights to perform this operation. Unlike a 401 Unauthorized response, authenticating will make no difference.</TD></TR><TR class="code_frame"><TD class="code_number">415</TD><TD class="code_desc">Unsupported Media Type, check the Content-Type of your request's body</TD></TR></TABLE></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #1 <SPAN class="example_desc">Require a console connection on node-1. You can then </SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">POST /console?node=node-1.testbed.lan HTTP/1.1 +3.2.0</PRE></DIV></DIV></DIV></DIV><P class="operation_back_link"><A class="operation_back_link" href="#Global information">Back to operation</A></P><HR class="operation_inter_sep"></DIV><HR class="operation_sep"><DIV class="operation_frame"><H1 class="operation_title"><A id="Console">Console</A></H1><DIV class="operation_index_frame"><H2 class="operation_index_title">Resources</H2><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></DIV><P class="operation_back_link"><A class="operation_back_link" href="#title">Back to title</A></P><HR class="operation_index_sep"><DIV class="resource_frame"><H2 class="resource_title"><A id="POST/console"><B class="resource_method_POST">POST</B> <SPAN style="font-family: monospace;" class="resource_path">/console</SPAN></A></H2><P class="resource_desc">Create a console binding. The server will create a TCP channel to bind the console inputs/outputs.<BR> To create an interactive shell, you can use a command such as:<BR><TT>stty raw -echo; nc <I>HOST</I> <I>PORT</I>; stty -raw echo</TT></P><DIV class="request_frame"><H3 class="request_title">Request <SPAN class="request_title_desc">(<SPAN class="request_type">Hash</SPAN>, <SPAN class="request_content">application/json</SPAN>)</SPAN></H3><DIV class="request_subframe"><H4 class="request_subtitle">Parameters</H4><TABLE class="request_parameters"><TR><TH>Name</TH><TH>Type</TH><TH>Kind</TH><TH>Description</TH></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">node</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The node to establish the console to</TD></TR></TABLE></DIV></DIV><DIV class="response_frame"><H3 class="response_title">Response <SPAN class="response_title_desc">(<SPAN class="response_type">Hash</SPAN>, <SPAN class="response_content">application/json</SPAN>)</SPAN></H3><DIV class="response_subframe"><H4 class="response_subtitle">Fields</H4><TABLE class="response_fields"><TR><TH>Name</TH><TH>Type</TH><TH>Description</TH></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_normal">id</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">The id# of the operation (prefixed by "C-")</TD></TR><TR class="field_frame"><TD class="field_name">{<SPAN class="element_self"><SPAN class="element_normal">resources</SPAN></SPAN>}</TD><TD class="field_type">Hash</TD><TD class="field_desc">Resources related to the workflow</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent">{<SPAN class="element_normal">resources</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">console</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">URI to the TCP channel used to bind the console inputs/outputs</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent">{<SPAN class="element_normal">resources</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">error</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">URI to the error</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent">{<SPAN class="element_normal">resources</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">resource</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">URI to the resource</TD></TR></TABLE><H4 class="response_subtitle">Return codes</H4><TABLE class="response_codes"><TR><TH>Code#</TH><TH>Description</TH></TR><TR class="code_frame"><TD class="code_number">200</TD><TD class="code_desc">OK, the request is successful</TD></TR><TR class="code_frame"><TD class="code_number">500</TD><TD class="code_desc">Internal Server Error, an uncatched exception was thrown on the server</TD></TR><TR class="code_frame"><TD class="code_number">400</TD><TD class="code_desc">Bad Request, Kadeploy Error: please check the X-Application-Error-Code and X-Application-Error-Code headers</TD></TR><TR class="code_frame"><TD class="code_number">401</TD><TD class="code_desc">Unauthorized, you need to be authenticated</TD></TR><TR class="code_frame"><TD class="code_number">403</TD><TD class="code_desc">Forbidden, you do not the rights to perform this operation. Unlike a 401 Unauthorized response, authenticating will make no difference.</TD></TR><TR class="code_frame"><TD class="code_number">415</TD><TD class="code_desc">Unsupported Media Type, check the Content-Type of your request's body</TD></TR></TABLE></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #1 <SPAN class="example_desc">Require a console connection on node-1. You can then </SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">POST /console?node=node-1.testbed.lan HTTP/1.1 Accept: text/plain, application/json Host: kadeploy.testbed.lan:25300 X-Kadeploy-User: frontend</PRE><H4 class="example_subtitle">Response</H4><PRE class="code_sample">HTTP/1.1 200 OK @@ -329,7 +329,7 @@ Content-Length: 262 "error": "/console/C-a6efa265-56f7-4221-b41c-81f75bde4699/error", "console": "tcp://kadeploy.testbed.lan:36179" } -}</PRE></DIV></DIV></DIV></DIV><P class="operation_back_link"><A class="operation_back_link" href="#Console">Back to operation</A></P><HR class="operation_inter_sep"><DIV class="resource_frame"><H2 class="resource_title"><A id="GET/console"><B class="resource_method_GET">GET</B> <SPAN style="font-family: monospace;" class="resource_path">/console</SPAN></A></H2><P class="resource_desc">Get the workflow information of every running operation of the kind console</P><DIV class="request_frame"><H3 class="request_title">Request <SPAN class="request_title_desc">(<SPAN class="request_type">Hash</SPAN>, <SPAN class="request_content">application/json</SPAN>)</SPAN></H3><DIV class="request_subframe"><H4 class="request_subtitle">Parameters</H4><TABLE class="request_parameters"><TR><TH>Name</TH><TH>Type</TH><TH>Kind</TH><TH>Description</TH></TR></TABLE></DIV></DIV><DIV class="response_frame"><H3 class="response_title">Response <SPAN class="response_title_desc">(<SPAN class="response_type">Hash</SPAN>, <SPAN class="response_content">application/json</SPAN>)</SPAN></H3><DIV class="response_subframe"><H4 class="response_subtitle">Fields</H4><TABLE class="response_fields"><TR><TH>Name</TH><TH>Type</TH><TH>Description</TH></TR><TR class="field_frame"><TD class="field_name">{<SPAN class="element_self"><SPAN class="element_iter">#i</SPAN></SPAN>}</TD><TD class="field_type">Hash</TD><TD class="field_desc">Information about the workflow #i</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent">{<SPAN class="element_iter">#i</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">attached</SPAN></SPAN></TD><TD class="field_type">Boolean</TD><TD class="field_desc">Set to true if the TCP channel is in use. Only available to the users that have the rights to consult the information about this operation.</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent">{<SPAN class="element_iter">#i</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">console_uri</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">URI to the TCP channel used to bind the console inputs/outputs. Only available to the users that have the rights to consult the information about this operation.</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent">{<SPAN class="element_iter">#i</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">error</SPAN></SPAN></TD><TD class="field_type">Boolean</TD><TD class="field_desc">Set to true if an error was encountered. The error message can be obtained by getting /console/:id/error. Only available to the users that have the rights to consult the information about this operation.</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent">{<SPAN class="element_iter">#i</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">id</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">The id# of the operation (prefixed by "C-")</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent">{<SPAN class="element_iter">#i</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">node</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">The node the console is open to</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent">{<SPAN class="element_iter">#i</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">time</SPAN></SPAN></TD><TD class="field_type">Float</TD><TD class="field_desc">The time elapsed since the start of the operation.</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent">{<SPAN class="element_iter">#i</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">user</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">The user that initiated the operation</TD></TR></TABLE><H4 class="response_subtitle">Return codes</H4><TABLE class="response_codes"><TR><TH>Code#</TH><TH>Description</TH></TR><TR class="code_frame"><TD class="code_number">200</TD><TD class="code_desc">OK, the request is successful</TD></TR><TR class="code_frame"><TD class="code_number">500</TD><TD class="code_desc">Internal Server Error, an uncatched exception was thrown on the server</TD></TR><TR class="code_frame"><TD class="code_number">400</TD><TD class="code_desc">Bad Request, Kadeploy Error: please check the X-Application-Error-Code and X-Application-Error-Code headers</TD></TR><TR class="code_frame"><TD class="code_number">401</TD><TD class="code_desc">Unauthorized, you need to be authenticated</TD></TR><TR class="code_frame"><TD class="code_number">403</TD><TD class="code_desc">Forbidden, you do not the rights to perform this operation. Unlike a 401 Unauthorized response, authenticating will make no difference.</TD></TR><TR class="code_frame"><TD class="code_number">415</TD><TD class="code_desc">Unsupported Media Type, check the Content-Type of your request's body</TD></TR></TABLE></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #1 <SPAN class="example_desc">Get the list of consoles</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">GET /console HTTP/1.1 +}</PRE></DIV></DIV></DIV></DIV><P class="operation_back_link"><A class="operation_back_link" href="#Console">Back to operation</A></P><HR class="operation_inter_sep"><DIV class="resource_frame"><H2 class="resource_title"><A id="GET/console"><B class="resource_method_GET">GET</B> <SPAN style="font-family: monospace;" class="resource_path">/console</SPAN></A></H2><P class="resource_desc">Get the workflow information of every running operation of the kind console</P><DIV class="request_frame"><H3 class="request_title">Request <SPAN class="request_title_desc">(<SPAN class="request_type">Hash</SPAN>, <SPAN class="request_content">application/json</SPAN>)</SPAN></H3><DIV class="request_subframe"><H4 class="request_subtitle">Parameters</H4><TABLE class="request_parameters"><TR><TH>Name</TH><TH>Type</TH><TH>Kind</TH><TH>Description</TH></TR></TABLE></DIV></DIV><DIV class="response_frame"><H3 class="response_title">Response <SPAN class="response_title_desc">(<SPAN class="response_type">Hash</SPAN>, <SPAN class="response_content">application/json</SPAN>)</SPAN></H3><DIV class="response_subframe"><H4 class="response_subtitle">Fields</H4><TABLE class="response_fields"><TR><TH>Name</TH><TH>Type</TH><TH>Description</TH></TR><TR class="field_frame"><TD class="field_name">{<SPAN class="element_self"><SPAN class="element_iter">#i</SPAN></SPAN>}</TD><TD class="field_type">Hash</TD><TD class="field_desc">Information about the workflow #i</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent">{<SPAN class="element_iter">#i</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">attached</SPAN></SPAN></TD><TD class="field_type">Boolean</TD><TD class="field_desc">Set to true if the TCP channel is in use. Only available to the users that have the rights to consult the information about this operation.</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent">{<SPAN class="element_iter">#i</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">console_uri</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">URI to the TCP channel used to bind the console inputs/outputs. Only available to the users that have the rights to consult the information about this operation.</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent">{<SPAN class="element_iter">#i</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">error</SPAN></SPAN></TD><TD class="field_type">Boolean</TD><TD class="field_desc">Set to true if an error was encountered. The error message can be obtained by getting /console/:id/error. Only available to the users that have the rights to consult the information about this operation.</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent">{<SPAN class="element_iter">#i</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">id</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">The id# of the operation (prefixed by "C-")</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent">{<SPAN class="element_iter">#i</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">node</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">The node the console is open to</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent">{<SPAN class="element_iter">#i</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">time</SPAN></SPAN></TD><TD class="field_type">Float</TD><TD class="field_desc">The time elapsed since the start of the operation.</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent">{<SPAN class="element_iter">#i</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">user</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">The user that initiated the operation</TD></TR></TABLE><H4 class="response_subtitle">Return codes</H4><TABLE class="response_codes"><TR><TH>Code#</TH><TH>Description</TH></TR><TR class="code_frame"><TD class="code_number">200</TD><TD class="code_desc">OK, the request is successful</TD></TR><TR class="code_frame"><TD class="code_number">500</TD><TD class="code_desc">Internal Server Error, an uncatched exception was thrown on the server</TD></TR><TR class="code_frame"><TD class="code_number">400</TD><TD class="code_desc">Bad Request, Kadeploy Error: please check the X-Application-Error-Code and X-Application-Error-Code headers</TD></TR><TR class="code_frame"><TD class="code_number">401</TD><TD class="code_desc">Unauthorized, you need to be authenticated</TD></TR><TR class="code_frame"><TD class="code_number">403</TD><TD class="code_desc">Forbidden, you do not the rights to perform this operation. Unlike a 401 Unauthorized response, authenticating will make no difference.</TD></TR><TR class="code_frame"><TD class="code_number">415</TD><TD class="code_desc">Unsupported Media Type, check the Content-Type of your request's body</TD></TR></TABLE></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #1 <SPAN class="example_desc">Get the list of consoles</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">GET /console HTTP/1.1 Accept: text/plain, application/json Host: kadeploy.testbed.lan:25300 X-Kadeploy-User: frontend</PRE><H4 class="example_subtitle">Response</H4><PRE class="code_sample">HTTP/1.1 200 OK @@ -351,7 +351,7 @@ Content-Length: 371 "node": "node-2.testbed.lan", "error": false } -]</PRE></DIV></DIV></DIV></DIV><P class="operation_back_link"><A class="operation_back_link" href="#Console">Back to operation</A></P><HR class="operation_inter_sep"><DIV class="resource_frame"><H2 class="resource_title"><A id="GET/console/:id"><B class="resource_method_GET">GET</B> <SPAN style="font-family: monospace;" class="resource_path">/console/:id</SPAN></A></H2><P class="resource_desc">Get the workflow information of an operation</P><DIV class="request_frame"><H3 class="request_title">Request <SPAN class="request_title_desc">(<SPAN class="request_type">Hash</SPAN>, <SPAN class="request_content">application/json</SPAN>)</SPAN></H3><DIV class="request_subframe"><H4 class="request_subtitle">Parameters</H4><TABLE class="request_parameters"><TR><TH>Name</TH><TH>Type</TH><TH>Kind</TH><TH>Description</TH></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_param">id</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The id# of the operation</TD></TR></TABLE></DIV></DIV><DIV class="response_frame"><H3 class="response_title">Response <SPAN class="response_title_desc">(<SPAN class="response_type">Hash</SPAN>, <SPAN class="response_content">application/json</SPAN>)</SPAN></H3><DIV class="response_subframe"><H4 class="response_subtitle">Fields</H4><TABLE class="response_fields"><TR><TH>Name</TH><TH>Type</TH><TH>Description</TH></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_normal">attached</SPAN></SPAN></TD><TD class="field_type">Boolean</TD><TD class="field_desc">Set to true if the TCP channel is in use. Only available to the users that have the rights to consult the information about this operation.</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_normal">console_uri</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">URI to the TCP channel used to bind the console inputs/outputs. Only available to the users that have the rights to consult the information about this operation.</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_normal">error</SPAN></SPAN></TD><TD class="field_type">Boolean</TD><TD class="field_desc">Set to true if an error was encountered. The error message can be obtained by getting /console/:id/error. Only available to the users that have the rights to consult the information about this operation.</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_normal">id</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">The id# of the operation (prefixed by "C-")</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_normal">node</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">The node the console is open to</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_normal">time</SPAN></SPAN></TD><TD class="field_type">Float</TD><TD class="field_desc">The time elapsed since the start of the operation.</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_normal">user</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">The user that initiated the operation</TD></TR></TABLE><H4 class="response_subtitle">Return codes</H4><TABLE class="response_codes"><TR><TH>Code#</TH><TH>Description</TH></TR><TR class="code_frame"><TD class="code_number">200</TD><TD class="code_desc">OK, the request is successful</TD></TR><TR class="code_frame"><TD class="code_number">500</TD><TD class="code_desc">Internal Server Error, an uncatched exception was thrown on the server</TD></TR><TR class="code_frame"><TD class="code_number">400</TD><TD class="code_desc">Bad Request, Kadeploy Error: please check the X-Application-Error-Code and X-Application-Error-Code headers</TD></TR><TR class="code_frame"><TD class="code_number">401</TD><TD class="code_desc">Unauthorized, you need to be authenticated</TD></TR><TR class="code_frame"><TD class="code_number">403</TD><TD class="code_desc">Forbidden, you do not the rights to perform this operation. Unlike a 401 Unauthorized response, authenticating will make no difference.</TD></TR><TR class="code_frame"><TD class="code_number">415</TD><TD class="code_desc">Unsupported Media Type, check the Content-Type of your request's body</TD></TR></TABLE></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #1 <SPAN class="example_desc">Get information about a console</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">GET /console/C-ef80f906-da3f-4c24-acb7-f6ecd3a7e805 HTTP/1.1 +]</PRE></DIV></DIV></DIV></DIV><P class="operation_back_link"><A class="operation_back_link" href="#Console">Back to operation</A></P><HR class="operation_inter_sep"><DIV class="resource_frame"><H2 class="resource_title"><A id="GET/console/:id"><B class="resource_method_GET">GET</B> <SPAN style="font-family: monospace;" class="resource_path">/console/:id</SPAN></A></H2><P class="resource_desc">Get the workflow information of an operation</P><DIV class="request_frame"><H3 class="request_title">Request <SPAN class="request_title_desc">(<SPAN class="request_type">Hash</SPAN>, <SPAN class="request_content">application/json</SPAN>)</SPAN></H3><DIV class="request_subframe"><H4 class="request_subtitle">Parameters</H4><TABLE class="request_parameters"><TR><TH>Name</TH><TH>Type</TH><TH>Kind</TH><TH>Description</TH></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_param">id</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The id# of the operation</TD></TR></TABLE></DIV></DIV><DIV class="response_frame"><H3 class="response_title">Response <SPAN class="response_title_desc">(<SPAN class="response_type">Hash</SPAN>, <SPAN class="response_content">application/json</SPAN>)</SPAN></H3><DIV class="response_subframe"><H4 class="response_subtitle">Fields</H4><TABLE class="response_fields"><TR><TH>Name</TH><TH>Type</TH><TH>Description</TH></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_normal">attached</SPAN></SPAN></TD><TD class="field_type">Boolean</TD><TD class="field_desc">Set to true if the TCP channel is in use. Only available to the users that have the rights to consult the information about this operation.</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_normal">console_uri</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">URI to the TCP channel used to bind the console inputs/outputs. Only available to the users that have the rights to consult the information about this operation.</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_normal">error</SPAN></SPAN></TD><TD class="field_type">Boolean</TD><TD class="field_desc">Set to true if an error was encountered. The error message can be obtained by getting /console/:id/error. Only available to the users that have the rights to consult the information about this operation.</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_normal">id</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">The id# of the operation (prefixed by "C-")</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_normal">node</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">The node the console is open to</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_normal">time</SPAN></SPAN></TD><TD class="field_type">Float</TD><TD class="field_desc">The time elapsed since the start of the operation.</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_normal">user</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">The user that initiated the operation</TD></TR></TABLE><H4 class="response_subtitle">Return codes</H4><TABLE class="response_codes"><TR><TH>Code#</TH><TH>Description</TH></TR><TR class="code_frame"><TD class="code_number">200</TD><TD class="code_desc">OK, the request is successful</TD></TR><TR class="code_frame"><TD class="code_number">500</TD><TD class="code_desc">Internal Server Error, an uncatched exception was thrown on the server</TD></TR><TR class="code_frame"><TD class="code_number">400</TD><TD class="code_desc">Bad Request, Kadeploy Error: please check the X-Application-Error-Code and X-Application-Error-Code headers</TD></TR><TR class="code_frame"><TD class="code_number">401</TD><TD class="code_desc">Unauthorized, you need to be authenticated</TD></TR><TR class="code_frame"><TD class="code_number">403</TD><TD class="code_desc">Forbidden, you do not the rights to perform this operation. Unlike a 401 Unauthorized response, authenticating will make no difference.</TD></TR><TR class="code_frame"><TD class="code_number">415</TD><TD class="code_desc">Unsupported Media Type, check the Content-Type of your request's body</TD></TR></TABLE></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #1 <SPAN class="example_desc">Get information about a console</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">GET /console/C-ef80f906-da3f-4c24-acb7-f6ecd3a7e805 HTTP/1.1 Accept: text/plain, application/json Host: kadeploy.testbed.lan:25300 X-Kadeploy-User: frontend</PRE><H4 class="example_subtitle">Response</H4><PRE class="code_sample">HTTP/1.1 200 OK @@ -365,7 +365,7 @@ Content-Length: 216 "attached": false, "console_uri": "tcp://kadeploy.testbed.lan:49768", "time": 146.69 -}</PRE></DIV></DIV></DIV></DIV><P class="operation_back_link"><A class="operation_back_link" href="#Console">Back to operation</A></P><HR class="operation_inter_sep"><DIV class="resource_frame"><H2 class="resource_title"><A id="GET/console/:id/error"><B class="resource_method_GET">GET</B> <SPAN style="font-family: monospace;" class="resource_path">/console/:id/error</SPAN></A></H2><P class="resource_desc">Get the error of an operation (the "error" field was set to true on the workflow's info)</P><DIV class="request_frame"><H3 class="request_title">Request <SPAN class="request_title_desc">(<SPAN class="request_type">Hash</SPAN>, <SPAN class="request_content">application/json</SPAN>)</SPAN></H3><DIV class="request_subframe"><H4 class="request_subtitle">Parameters</H4><TABLE class="request_parameters"><TR><TH>Name</TH><TH>Type</TH><TH>Kind</TH><TH>Description</TH></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_param">id</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The id# of the operation</TD></TR></TABLE></DIV></DIV><DIV class="response_frame"><H3 class="response_title">Response <SPAN class="response_title_desc">(<SPAN class="response_type">String</SPAN>, <SPAN class="response_content">text/plain</SPAN>)</SPAN></H3><DIV class="response_subframe"><H4 class="response_subtitle">Fields</H4><TABLE class="response_fields"><TR><TH>Name</TH><TH>Type</TH><TH>Description</TH></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_dynamic"></SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">The error message</TD></TR></TABLE><H4 class="response_subtitle">Return codes</H4><TABLE class="response_codes"><TR><TH>Code#</TH><TH>Description</TH></TR><TR class="code_frame"><TD class="code_number">200</TD><TD class="code_desc">OK, the request is successful</TD></TR><TR class="code_frame"><TD class="code_number">500</TD><TD class="code_desc">Internal Server Error, an uncatched exception was thrown on the server</TD></TR><TR class="code_frame"><TD class="code_number">400</TD><TD class="code_desc">Bad Request, Kadeploy Error: please check the X-Application-Error-Code and X-Application-Error-Code headers</TD></TR><TR class="code_frame"><TD class="code_number">401</TD><TD class="code_desc">Unauthorized, you need to be authenticated</TD></TR><TR class="code_frame"><TD class="code_number">403</TD><TD class="code_desc">Forbidden, you do not the rights to perform this operation. Unlike a 401 Unauthorized response, authenticating will make no difference.</TD></TR><TR class="code_frame"><TD class="code_number">415</TD><TD class="code_desc">Unsupported Media Type, check the Content-Type of your request's body</TD></TR><TR class="code_frame"><TD class="code_number">404</TD><TD class="code_desc">File not found, the workflow :id cannot be found</TD></TR></TABLE></DIV></DIV></DIV><P class="operation_back_link"><A class="operation_back_link" href="#Console">Back to operation</A></P><HR class="operation_inter_sep"><DIV class="resource_frame"><H2 class="resource_title"><A id="DELETE/console/:id"><B class="resource_method_DELETE">DELETE</B> <SPAN style="font-family: monospace;" class="resource_path">/console/:id</SPAN></A></H2><P class="resource_desc">Destroy a console binding (the TCP channel will be closed).</P><DIV class="request_frame"><H3 class="request_title">Request <SPAN class="request_title_desc">(<SPAN class="request_type">Hash</SPAN>, <SPAN class="request_content">application/json</SPAN>)</SPAN></H3><DIV class="request_subframe"><H4 class="request_subtitle">Parameters</H4><TABLE class="request_parameters"><TR><TH>Name</TH><TH>Type</TH><TH>Kind</TH><TH>Description</TH></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_param">id</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The id# of the operation</TD></TR></TABLE></DIV></DIV><DIV class="response_frame"><H3 class="response_title">Response <SPAN class="response_title_desc">(<SPAN class="response_type">Hash</SPAN>, <SPAN class="response_content">application/json</SPAN>)</SPAN></H3><DIV class="response_subframe"><H4 class="response_subtitle">Fields</H4><TABLE class="response_fields"><TR><TH>Name</TH><TH>Type</TH><TH>Description</TH></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_normal">id</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">The id# of the operation (prefixed by "C-")</TD></TR></TABLE><H4 class="response_subtitle">Return codes</H4><TABLE class="response_codes"><TR><TH>Code#</TH><TH>Description</TH></TR><TR class="code_frame"><TD class="code_number">200</TD><TD class="code_desc">OK, the request is successful</TD></TR><TR class="code_frame"><TD class="code_number">500</TD><TD class="code_desc">Internal Server Error, an uncatched exception was thrown on the server</TD></TR><TR class="code_frame"><TD class="code_number">400</TD><TD class="code_desc">Bad Request, Kadeploy Error: please check the X-Application-Error-Code and X-Application-Error-Code headers</TD></TR><TR class="code_frame"><TD class="code_number">401</TD><TD class="code_desc">Unauthorized, you need to be authenticated</TD></TR><TR class="code_frame"><TD class="code_number">403</TD><TD class="code_desc">Forbidden, you do not the rights to perform this operation. Unlike a 401 Unauthorized response, authenticating will make no difference.</TD></TR><TR class="code_frame"><TD class="code_number">415</TD><TD class="code_desc">Unsupported Media Type, check the Content-Type of your request's body</TD></TR></TABLE></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #1 <SPAN class="example_desc">Destroy a console binding</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">DELETE /console/C-ef80f906-da3f-4c24-acb7-f6ecd3a7e805 HTTP/1.1 +}</PRE></DIV></DIV></DIV></DIV><P class="operation_back_link"><A class="operation_back_link" href="#Console">Back to operation</A></P><HR class="operation_inter_sep"><DIV class="resource_frame"><H2 class="resource_title"><A id="GET/console/:id/error"><B class="resource_method_GET">GET</B> <SPAN style="font-family: monospace;" class="resource_path">/console/:id/error</SPAN></A></H2><P class="resource_desc">Get the error of an operation (the "error" field was set to true on the workflow's info)</P><DIV class="request_frame"><H3 class="request_title">Request <SPAN class="request_title_desc">(<SPAN class="request_type">Hash</SPAN>, <SPAN class="request_content">application/json</SPAN>)</SPAN></H3><DIV class="request_subframe"><H4 class="request_subtitle">Parameters</H4><TABLE class="request_parameters"><TR><TH>Name</TH><TH>Type</TH><TH>Kind</TH><TH>Description</TH></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_param">id</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The id# of the operation</TD></TR></TABLE></DIV></DIV><DIV class="response_frame"><H3 class="response_title">Response <SPAN class="response_title_desc">(<SPAN class="response_type">String</SPAN>, <SPAN class="response_content">text/plain</SPAN>)</SPAN></H3><DIV class="response_subframe"><H4 class="response_subtitle">Fields</H4><TABLE class="response_fields"><TR><TH>Name</TH><TH>Type</TH><TH>Description</TH></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_dynamic"></SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">The error message</TD></TR></TABLE><H4 class="response_subtitle">Return codes</H4><TABLE class="response_codes"><TR><TH>Code#</TH><TH>Description</TH></TR><TR class="code_frame"><TD class="code_number">200</TD><TD class="code_desc">OK, the request is successful</TD></TR><TR class="code_frame"><TD class="code_number">500</TD><TD class="code_desc">Internal Server Error, an uncatched exception was thrown on the server</TD></TR><TR class="code_frame"><TD class="code_number">400</TD><TD class="code_desc">Bad Request, Kadeploy Error: please check the X-Application-Error-Code and X-Application-Error-Code headers</TD></TR><TR class="code_frame"><TD class="code_number">401</TD><TD class="code_desc">Unauthorized, you need to be authenticated</TD></TR><TR class="code_frame"><TD class="code_number">403</TD><TD class="code_desc">Forbidden, you do not the rights to perform this operation. Unlike a 401 Unauthorized response, authenticating will make no difference.</TD></TR><TR class="code_frame"><TD class="code_number">415</TD><TD class="code_desc">Unsupported Media Type, check the Content-Type of your request's body</TD></TR><TR class="code_frame"><TD class="code_number">404</TD><TD class="code_desc">File not found, the workflow :id cannot be found</TD></TR></TABLE></DIV></DIV></DIV><P class="operation_back_link"><A class="operation_back_link" href="#Console">Back to operation</A></P><HR class="operation_inter_sep"><DIV class="resource_frame"><H2 class="resource_title"><A id="DELETE/console/:id"><B class="resource_method_DELETE">DELETE</B> <SPAN style="font-family: monospace;" class="resource_path">/console/:id</SPAN></A></H2><P class="resource_desc">Destroy a console binding (the TCP channel will be closed).</P><DIV class="request_frame"><H3 class="request_title">Request <SPAN class="request_title_desc">(<SPAN class="request_type">Hash</SPAN>, <SPAN class="request_content">application/json</SPAN>)</SPAN></H3><DIV class="request_subframe"><H4 class="request_subtitle">Parameters</H4><TABLE class="request_parameters"><TR><TH>Name</TH><TH>Type</TH><TH>Kind</TH><TH>Description</TH></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_param">id</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The id# of the operation</TD></TR></TABLE></DIV></DIV><DIV class="response_frame"><H3 class="response_title">Response <SPAN class="response_title_desc">(<SPAN class="response_type">Hash</SPAN>, <SPAN class="response_content">application/json</SPAN>)</SPAN></H3><DIV class="response_subframe"><H4 class="response_subtitle">Fields</H4><TABLE class="response_fields"><TR><TH>Name</TH><TH>Type</TH><TH>Description</TH></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_normal">id</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">The id# of the operation (prefixed by "C-")</TD></TR></TABLE><H4 class="response_subtitle">Return codes</H4><TABLE class="response_codes"><TR><TH>Code#</TH><TH>Description</TH></TR><TR class="code_frame"><TD class="code_number">200</TD><TD class="code_desc">OK, the request is successful</TD></TR><TR class="code_frame"><TD class="code_number">500</TD><TD class="code_desc">Internal Server Error, an uncatched exception was thrown on the server</TD></TR><TR class="code_frame"><TD class="code_number">400</TD><TD class="code_desc">Bad Request, Kadeploy Error: please check the X-Application-Error-Code and X-Application-Error-Code headers</TD></TR><TR class="code_frame"><TD class="code_number">401</TD><TD class="code_desc">Unauthorized, you need to be authenticated</TD></TR><TR class="code_frame"><TD class="code_number">403</TD><TD class="code_desc">Forbidden, you do not the rights to perform this operation. Unlike a 401 Unauthorized response, authenticating will make no difference.</TD></TR><TR class="code_frame"><TD class="code_number">415</TD><TD class="code_desc">Unsupported Media Type, check the Content-Type of your request's body</TD></TR></TABLE></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #1 <SPAN class="example_desc">Destroy a console binding</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">DELETE /console/C-ef80f906-da3f-4c24-acb7-f6ecd3a7e805 HTTP/1.1 Accept: text/plain, application/json Host: kadeploy.testbed.lan:25300 X-Kadeploy-User: frontend</PRE><H4 class="example_subtitle">Response</H4><PRE class="code_sample">HTTP/1.1 200 OK @@ -373,7 +373,7 @@ Content-Type: application/json Content-Length: 53 { "wid": "C-ef80f906-da3f-4c24-acb7-f6ecd3a7e805" -}</PRE></DIV></DIV></DIV></DIV><P class="operation_back_link"><A class="operation_back_link" href="#Console">Back to operation</A></P><HR class="operation_inter_sep"></DIV><HR class="operation_sep"><DIV class="operation_frame"><H1 class="operation_title"><A id="Statistics">Statistics</A></H1><DIV class="operation_index_frame"><H2 class="operation_index_title">Resources</H2><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></DIV><P class="operation_back_link"><A class="operation_back_link" href="#title">Back to title</A></P><HR class="operation_index_sep"><DIV class="resource_frame"><H2 class="resource_title"><A id="GET/stats/%OPERATION?"><B class="resource_method_GET">GET</B> <SPAN style="font-family: monospace;" class="resource_path">/stats/%OPERATION?</SPAN></A></H2><P class="resource_desc">Gather statistics. The operation can be set to deploy, reboot, power or an empty value</P><DIV class="request_frame"><H3 class="request_title">Request <SPAN class="request_title_desc">(<SPAN class="request_type">Hash</SPAN>, <SPAN class="request_content">application/json</SPAN>)</SPAN></H3><DIV class="request_subframe"><H4 class="request_subtitle">Parameters</H4><TABLE class="request_parameters"><TR><TH>Name</TH><TH>Type</TH><TH>Kind</TH><TH>Description</TH></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">date_max</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">Statistics to a specific date date (RFC 2616 format)</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">date_min</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">Statistics from a specific date date (RFC 2616 format)</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">fields</SPAN></SPAN></TD><TD class="parameter_type">Array</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The fields to be displayed<BR><EM>Expected values: </EM>wid, user, hostname, step1, step2, step3, timeout_step1, timeout_step2, timeout_step3, retry_step1, retry_step2, retry_step3, start, step1_duration, step2_duration, step3_duration, env, md5, success, error<BR><EM>Default value: </EM>["wid", "user", "hostname", "step1", "step2", "step3", "timeout_step1", "timeout_step2", "timeout_step3", "retry_step1", "retry_step2", "retry_step3", "start", "step1_duration", "step2_duration", "step3_duration", "env", "md5", "success", "error"]</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">kind</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The kind of statistics<BR><EM>Expected values: </EM>all, failure_rates<BR><EM>Default value: </EM>all</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">min_failure_rate</SPAN></SPAN></TD><TD class="parameter_type">Float</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The list of nodes which have a specified minimum failure-rate (between 0 and 1). This filter have to be used with the kind <I>failure_rates</I></TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">min_retries</SPAN></SPAN></TD><TD class="parameter_type">Integer</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">Statistics about the nodes that need at least NB attempts to perform specific steps</TD></TR><TR class="parameter_frame"><TD class="parameter_name">[<SPAN class="element_self"><SPAN class="element_normal">nodes</SPAN></SPAN>]</TD><TD class="parameter_type">Array</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The list of nodes to gather the statistics about</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">sort</SPAN></SPAN></TD><TD class="parameter_type">Array</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The fields to sort results by<BR><EM>Expected values: </EM>wid, user, hostname, step1, step2, step3, timeout_step1, timeout_step2, timeout_step3, retry_step1, retry_step2, retry_step3, start, step1_duration, step2_duration, step3_duration, env, md5, success, error<BR><EM>Default value: </EM>["wid", "user", "hostname", "step1", "step2", "step3", "timeout_step1", "timeout_step2", "timeout_step3", "retry_step1", "retry_step2", "retry_step3", "start", "step1_duration", "step2_duration", "step3_duration", "env", "md5", "success", "error"]</TD></TR><TR class="parameter_frame"><TD class="parameter_name">[<SPAN class="element_self"><SPAN class="element_normal">step_retries</SPAN></SPAN>]</TD><TD class="parameter_type">Array</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">Apply the retry filter on the given steps</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">wid</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">Specify the workflow #id</TD></TR></TABLE></DIV></DIV><DIV class="response_frame"><H3 class="response_title">Response <SPAN class="response_title_desc">(<SPAN class="response_type">String</SPAN>, <SPAN class="response_content">gzipped text/csv or application/json</SPAN>)</SPAN></H3><DIV class="response_subframe"><H4 class="response_subtitle">Fields</H4><TABLE class="response_fields"><TR><TH>Name</TH><TH>Type</TH><TH>Description</TH></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_iter">#line</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">A line in the format specified by the <I>fields</I> parameter</TD></TR></TABLE><H4 class="response_subtitle">Return codes</H4><TABLE class="response_codes"><TR><TH>Code#</TH><TH>Description</TH></TR><TR class="code_frame"><TD class="code_number">200</TD><TD class="code_desc">OK, the request is successful</TD></TR><TR class="code_frame"><TD class="code_number">500</TD><TD class="code_desc">Internal Server Error, an uncatched exception was thrown on the server</TD></TR><TR class="code_frame"><TD class="code_number">400</TD><TD class="code_desc">Bad Request, Kadeploy Error: please check the X-Application-Error-Code and X-Application-Error-Code headers</TD></TR><TR class="code_frame"><TD class="code_number">401</TD><TD class="code_desc">Unauthorized, you need to be authenticated</TD></TR><TR class="code_frame"><TD class="code_number">403</TD><TD class="code_desc">Forbidden, you do not the rights to perform this operation. Unlike a 401 Unauthorized response, authenticating will make no difference.</TD></TR><TR class="code_frame"><TD class="code_number">415</TD><TD class="code_desc">Unsupported Media Type, check the Content-Type of your request's body</TD></TR><TR class="code_frame"><TD class="code_number">404</TD><TD class="code_desc">File not found, invalid operation</TD></TR></TABLE></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #1 <SPAN class="example_desc">Gather all statistics</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">GET /stats HTTP/1.1 +}</PRE></DIV></DIV></DIV></DIV><P class="operation_back_link"><A class="operation_back_link" href="#Console">Back to operation</A></P><HR class="operation_inter_sep"></DIV><HR class="operation_sep"><DIV class="operation_frame"><H1 class="operation_title"><A id="Statistics">Statistics</A></H1><DIV class="operation_index_frame"><H2 class="operation_index_title">Resources</H2><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></DIV><P class="operation_back_link"><A class="operation_back_link" href="#title">Back to title</A></P><HR class="operation_index_sep"><DIV class="resource_frame"><H2 class="resource_title"><A id="GET/stats/%OPERATION?"><B class="resource_method_GET">GET</B> <SPAN style="font-family: monospace;" class="resource_path">/stats/%OPERATION?</SPAN></A></H2><P class="resource_desc">Gather statistics. The operation can be set to deploy, reboot, power or an empty value</P><DIV class="request_frame"><H3 class="request_title">Request <SPAN class="request_title_desc">(<SPAN class="request_type">Hash</SPAN>, <SPAN class="request_content">application/json</SPAN>)</SPAN></H3><DIV class="request_subframe"><H4 class="request_subtitle">Parameters</H4><TABLE class="request_parameters"><TR><TH>Name</TH><TH>Type</TH><TH>Kind</TH><TH>Description</TH></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">date_max</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">Statistics to a specific date date (RFC 2616 format)</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">date_min</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">Statistics from a specific date date (RFC 2616 format)</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">fields</SPAN></SPAN></TD><TD class="parameter_type">Array</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The fields to be displayed<BR><EM>Expected values: </EM>wid, user, hostname, step1, step2, step3, timeout_step1, timeout_step2, timeout_step3, retry_step1, retry_step2, retry_step3, start, step1_duration, step2_duration, step3_duration, env, md5, success, error<BR><EM>Default value: </EM>["wid", "user", "hostname", "step1", "step2", "step3", "timeout_step1", "timeout_step2", "timeout_step3", "retry_step1", "retry_step2", "retry_step3", "start", "step1_duration", "step2_duration", "step3_duration", "env", "md5", "success", "error"]</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">kind</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The kind of statistics<BR><EM>Expected values: </EM>all, failure_rates<BR><EM>Default value: </EM>all</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">min_failure_rate</SPAN></SPAN></TD><TD class="parameter_type">Float</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The list of nodes which have a specified minimum failure-rate (between 0 and 1). This filter have to be used with the kind <I>failure_rates</I></TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">min_retries</SPAN></SPAN></TD><TD class="parameter_type">Integer</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">Statistics about the nodes that need at least NB attempts to perform specific steps</TD></TR><TR class="parameter_frame"><TD class="parameter_name">[<SPAN class="element_self"><SPAN class="element_normal">nodes</SPAN></SPAN>]</TD><TD class="parameter_type">Array</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The list of nodes to gather the statistics about</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">sort</SPAN></SPAN></TD><TD class="parameter_type">Array</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The fields to sort results by<BR><EM>Expected values: </EM>wid, user, hostname, step1, step2, step3, timeout_step1, timeout_step2, timeout_step3, retry_step1, retry_step2, retry_step3, start, step1_duration, step2_duration, step3_duration, env, md5, success, error<BR><EM>Default value: </EM>["wid", "user", "hostname", "step1", "step2", "step3", "timeout_step1", "timeout_step2", "timeout_step3", "retry_step1", "retry_step2", "retry_step3", "start", "step1_duration", "step2_duration", "step3_duration", "env", "md5", "success", "error"]</TD></TR><TR class="parameter_frame"><TD class="parameter_name">[<SPAN class="element_self"><SPAN class="element_normal">step_retries</SPAN></SPAN>]</TD><TD class="parameter_type">Array</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">Apply the retry filter on the given steps</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">wid</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">Specify the workflow #id</TD></TR></TABLE></DIV></DIV><DIV class="response_frame"><H3 class="response_title">Response <SPAN class="response_title_desc">(<SPAN class="response_type">String</SPAN>, <SPAN class="response_content">gzipped text/csv or application/json</SPAN>)</SPAN></H3><DIV class="response_subframe"><H4 class="response_subtitle">Fields</H4><TABLE class="response_fields"><TR><TH>Name</TH><TH>Type</TH><TH>Description</TH></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_iter">#line</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">A line in the format specified by the <I>fields</I> parameter</TD></TR></TABLE><H4 class="response_subtitle">Return codes</H4><TABLE class="response_codes"><TR><TH>Code#</TH><TH>Description</TH></TR><TR class="code_frame"><TD class="code_number">200</TD><TD class="code_desc">OK, the request is successful</TD></TR><TR class="code_frame"><TD class="code_number">500</TD><TD class="code_desc">Internal Server Error, an uncatched exception was thrown on the server</TD></TR><TR class="code_frame"><TD class="code_number">400</TD><TD class="code_desc">Bad Request, Kadeploy Error: please check the X-Application-Error-Code and X-Application-Error-Code headers</TD></TR><TR class="code_frame"><TD class="code_number">401</TD><TD class="code_desc">Unauthorized, you need to be authenticated</TD></TR><TR class="code_frame"><TD class="code_number">403</TD><TD class="code_desc">Forbidden, you do not the rights to perform this operation. Unlike a 401 Unauthorized response, authenticating will make no difference.</TD></TR><TR class="code_frame"><TD class="code_number">415</TD><TD class="code_desc">Unsupported Media Type, check the Content-Type of your request's body</TD></TR><TR class="code_frame"><TD class="code_number">404</TD><TD class="code_desc">File not found, invalid operation</TD></TR></TABLE></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #1 <SPAN class="example_desc">Gather all statistics</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">GET /stats HTTP/1.1 Accept: */* Host: kadeploy.testbed.lan:25300 X-Kadeploy-User: frontend</PRE><H4 class="example_subtitle">Response</H4><PRE class="code_sample">HTTP/1.1 200 OK @@ -390,7 +390,7 @@ P-0073d9d7-d25f-46b1-9b95-d9c4fd52484b,frontend,node-1.testbed.lan,Off,,,0,0,0,0 P-0073d9d7-d25f-46b1-9b95-d9c4fd52484b,frontend,node-2.testbed.lan,Off,,,0,0,0,0,0,0,1389348732,10,0,0,,,true, P-130b8e01-9025-483e-9cb3-2216ea66156d,frontend,node-1.testbed.lan,On,,,0,0,0,0,0,0,1389348781,3,0,0,,,true, P-130b8e01-9025-483e-9cb3-2216ea66156d,frontend,node-2.testbed.lan,On,,,0,0,0,0,0,0,1389348781,3,0,0,,,true, ----------------</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #2 <SPAN class="example_desc">Gather deployments statistics</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">GET /stats/deploy HTTP/1.1 +---------------</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #2 <SPAN class="example_desc">Gather deployments statistics</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">GET /stats/deploy HTTP/1.1 Accept: */* Host: kadeploy.testbed.lan:25300 X-Kadeploy-User: frontend</PRE><H4 class="example_subtitle">Response</H4><PRE class="code_sample">HTTP/1.1 200 OK @@ -400,7 +400,7 @@ Content-Length: 179 ---GUNZIPPED--- D-9a87115b-eb7f-45e4-90f2-bec00ccc5dab,frontend,node-1.testbed.lan,SetDeploymentEnvUntrusted,BroadcastEnvKastafior,BootNewEnvKexec,200,200,200,0,0,0,1389347228,165,68,46,debian-base:1,,true, D-9a87115b-eb7f-45e4-90f2-bec00ccc5dab,frontend,node-2.testbed.lan,SetDeploymentEnvUntrusted,BroadcastEnvKastafior,BootNewEnvKexec,200,200,200,0,0,0,1389347228,165,68,46,debian-base:1,,true, ----------------</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #3 <SPAN class="example_desc">Gather the list of nodes with a specific failure rate</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">GET /stats?kind=failure_rates&min_failure_rate=0.0 HTTP/1.1 +---------------</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #3 <SPAN class="example_desc">Gather the list of nodes with a specific failure rate</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">GET /stats?kind=failure_rates&min_failure_rate=0.0 HTTP/1.1 Accept: */* Host: kadeploy.testbed.lan:25300 X-Kadeploy-User: frontend</PRE><H4 class="example_subtitle">Response</H4><PRE class="code_sample">HTTP/1.1 200 OK @@ -409,7 +409,7 @@ Content-Length: 60 { "node-1.testbed.lan": 0.0, "node-2.testbed.lan": 0.0 -}</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #4 <SPAN class="example_desc">Gather all statistics to a specific date</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">GET /stats?kind=all&date_max=Fri%2C+10+Jan+2014+10%3A10%3A00+GMT HTTP/1.1 +}</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #4 <SPAN class="example_desc">Gather all statistics to a specific date</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">GET /stats?kind=all&date_max=Fri%2C+10+Jan+2014+10%3A10%3A00+GMT HTTP/1.1 Accept: */* Host: kadeploy.testbed.lan:25300 X-Kadeploy-User: frontend</PRE><H4 class="example_subtitle">Response</H4><PRE class="code_sample">HTTP/1.1 200 OK @@ -422,7 +422,7 @@ D-9a87115b-eb7f-45e4-90f2-bec00ccc5dab,frontend,node-2.testbed.lan,SetDeployment R-6d5d2255-f533-44a5-a191-ec69fc5f17b9,frontend,node-1.testbed.lan,Simple,,,0,0,0,0,0,0,1389347638,106,0,0,,,true, R-f6aedfae-12fa-42dd-9c18-6278a9b5ad9d,frontend,node-1.testbed.lan,Simple,,,0,0,0,0,0,0,1389348342,112,0,0,,,true, R-f6aedfae-12fa-42dd-9c18-6278a9b5ad9d,frontend,node-2.testbed.lan,Simple,,,0,0,0,0,0,0,1389348342,112,0,0,,,true, ----------------</PRE></DIV></DIV></DIV></DIV><P class="operation_back_link"><A class="operation_back_link" href="#Statistics">Back to operation</A></P><HR class="operation_inter_sep"></DIV><HR class="operation_sep"><DIV class="operation_frame"><H1 class="operation_title"><A id="Deployment">Deployment</A></H1><DIV class="operation_index_frame"><H2 class="operation_index_title">Resources</H2><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></DIV><P class="operation_back_link"><A class="operation_back_link" href="#title">Back to title</A></P><HR class="operation_index_sep"><DIV class="resource_frame"><H2 class="resource_title"><A id="POST/deployment"><B class="resource_method_POST">POST</B> <SPAN style="font-family: monospace;" class="resource_path">/deployment</SPAN></A></H2><P class="resource_desc">Launch a deployment</P><DIV class="request_frame"><H3 class="request_title">Request <SPAN class="request_title_desc">(<SPAN class="request_type">Hash</SPAN>, <SPAN class="request_content">application/json</SPAN>)</SPAN></H3><DIV class="request_subframe"><H4 class="request_subtitle">Parameters</H4><TABLE class="request_parameters"><TR><TH>Name</TH><TH>Type</TH><TH>Kind</TH><TH>Description</TH></TR><TR class="parameter_frame"><TD class="parameter_name">{<SPAN class="element_self"><SPAN class="element_normal">environment</SPAN></SPAN>}</TD><TD class="parameter_type">Hash</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The environment that have to be deployed</TD></TR><TR class="parameter_frame"><TD class="parameter_name">[<SPAN class="element_self"><SPAN class="element_normal">nodes</SPAN></SPAN>]</TD><TD class="parameter_type">Array</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The list of nodes the operation should be applied on</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_dynamic">_generic_parameter_</SPAN></SPAN></TD><TD class="parameter_type">...</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Some workflow-based operation's generic parameter (see more <A href="#workflow_operations">here</A>)</TD></TR><TR class="parameter_frame"><TD class="parameter_name">{<SPAN class="element_self"><SPAN class="element_normal">automata</SPAN></SPAN>}</TD><TD class="parameter_type">Hash</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">...</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">block_device</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The block device the environment should be installed on</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">boot_partition</SPAN></SPAN></TD><TD class="parameter_type">Integer</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The partition the node have to boot on (useful when deploying an image of the whole disk</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">client</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The client used to export files to the server, useful for local:// files (see more <A href="#file_export">here</A>)</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">deploy_partition</SPAN></SPAN></TD><TD class="parameter_type">Integer</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The partition the environment should be installed on</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">disable_bootloader_install</SPAN></SPAN></TD><TD class="parameter_type">Set</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Disable the install of a bootloader on the partition the image is installed on</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">disable_disk_partitioning</SPAN></SPAN></TD><TD class="parameter_type">Set</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Disable the disk partitioning step</TD></TR><TR class="parameter_frame"><TD class="parameter_name">{<SPAN class="element_self"><SPAN class="element_normal">pxe</SPAN></SPAN>}</TD><TD class="parameter_type">Hash</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Specify some custom netboot parameters</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">reformat_tmp_partition</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Reformat the partition that was defined as the tmp partition with the specified format</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">ssh_authorized_keys</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The path to a ssh authorized_keys file that have to be copied in the root directory of the deployed environment (see more <A href="#file_export">here</A>)</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">timeout_reboot_classical</SPAN></SPAN></TD><TD class="parameter_type">Integer</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Overwrite the default value for the reboot timeout</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">timeout_reboot_kexec</SPAN></SPAN></TD><TD class="parameter_type">Integer</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Overwrite the default value for the kexec timeout</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">vlan</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Specify the VLAN the nodes should be reboot in</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">kind</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The kind of environment, recorded or anonymous<BR><EM>Expected values: </EM>anon, database</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">name</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The name of the environment</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_dynamic">fields</SPAN></SPAN></TD><TD class="parameter_type"><A href="#type_Environment">Environment</A></TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Other fields that are used to describe an anonymous environment</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">user</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The owner of the environment</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">version</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The version of the environment</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent">{<SPAN class="element_normal">pxe</SPAN>}</SPAN>.[<SPAN class="element_self"><SPAN class="element_normal">files</SPAN></SPAN>]</TD><TD class="parameter_type">Array</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">A list of path to files that have to be exported in the PXE repository's directory (see more <A href="#file_export">here</A>)</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent">{<SPAN class="element_normal">pxe</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">profile</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">A custom PXE profile, the string FILES_PREFIX-- will be replaced by the prefix to some exported files</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent">{<SPAN class="element_normal">pxe</SPAN>}</SPAN>.{<SPAN class="element_self"><SPAN class="element_normal">singularities</SPAN></SPAN>}</TD><TD class="parameter_type">Hash</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Specify a substitution pattern for each node in the PXE profile (the NODE_SINGULARITY pattern must be used in the PXE profile)</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">pxe</SPAN>}</SPAN>.{<SPAN class="element_normal">singularities</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_dynamic">nodename</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The substitution pattern for the node "nodename"</TD></TR></TABLE></DIV></DIV><DIV class="response_frame"><H3 class="response_title">Response <SPAN class="response_title_desc">(<SPAN class="response_type">Hash</SPAN>, <SPAN class="response_content">application/json</SPAN>)</SPAN></H3><DIV class="response_subframe"><H4 class="response_subtitle">Fields</H4><TABLE class="response_fields"><TR><TH>Name</TH><TH>Type</TH><TH>Description</TH></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_dynamic"></SPAN></SPAN></TD><TD class="field_type"><A href="#type_Workflow">Workflow</A></TD><TD class="field_desc">Information related to the workflow of the deployment</TD></TR></TABLE><H4 class="response_subtitle">Return codes</H4><TABLE class="response_codes"><TR><TH>Code#</TH><TH>Description</TH></TR><TR class="code_frame"><TD class="code_number">200</TD><TD class="code_desc">OK, the request is successful</TD></TR><TR class="code_frame"><TD class="code_number">500</TD><TD class="code_desc">Internal Server Error, an uncatched exception was thrown on the server</TD></TR><TR class="code_frame"><TD class="code_number">400</TD><TD class="code_desc">Bad Request, Kadeploy Error: please check the X-Application-Error-Code and X-Application-Error-Code headers</TD></TR><TR class="code_frame"><TD class="code_number">401</TD><TD class="code_desc">Unauthorized, you need to be authenticated</TD></TR><TR class="code_frame"><TD class="code_number">403</TD><TD class="code_desc">Forbidden, you do not the rights to perform this operation. Unlike a 401 Unauthorized response, authenticating will make no difference.</TD></TR><TR class="code_frame"><TD class="code_number">415</TD><TD class="code_desc">Unsupported Media Type, check the Content-Type of your request's body</TD></TR></TABLE></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #1 <SPAN class="example_desc">Deploy a recorded environment using the user specified key file</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">POST /deployment HTTP/1.1 +---------------</PRE></DIV></DIV></DIV></DIV><P class="operation_back_link"><A class="operation_back_link" href="#Statistics">Back to operation</A></P><HR class="operation_inter_sep"></DIV><HR class="operation_sep"><DIV class="operation_frame"><H1 class="operation_title"><A id="Deployment">Deployment</A></H1><DIV class="operation_index_frame"><H2 class="operation_index_title">Resources</H2><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></DIV><P class="operation_back_link"><A class="operation_back_link" href="#title">Back to title</A></P><HR class="operation_index_sep"><DIV class="resource_frame"><H2 class="resource_title"><A id="POST/deployment"><B class="resource_method_POST">POST</B> <SPAN style="font-family: monospace;" class="resource_path">/deployment</SPAN></A></H2><P class="resource_desc">Launch a deployment</P><DIV class="request_frame"><H3 class="request_title">Request <SPAN class="request_title_desc">(<SPAN class="request_type">Hash</SPAN>, <SPAN class="request_content">application/json</SPAN>)</SPAN></H3><DIV class="request_subframe"><H4 class="request_subtitle">Parameters</H4><TABLE class="request_parameters"><TR><TH>Name</TH><TH>Type</TH><TH>Kind</TH><TH>Description</TH></TR><TR class="parameter_frame"><TD class="parameter_name">{<SPAN class="element_self"><SPAN class="element_normal">environment</SPAN></SPAN>}</TD><TD class="parameter_type">Hash</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The environment that have to be deployed</TD></TR><TR class="parameter_frame"><TD class="parameter_name">[<SPAN class="element_self"><SPAN class="element_normal">nodes</SPAN></SPAN>]</TD><TD class="parameter_type">Array</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The list of nodes the operation should be applied on</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_dynamic">_generic_parameter_</SPAN></SPAN></TD><TD class="parameter_type">...</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Some workflow-based operation's generic parameter (see more <A href="#workflow_operations">here</A>)</TD></TR><TR class="parameter_frame"><TD class="parameter_name">{<SPAN class="element_self"><SPAN class="element_normal">automata</SPAN></SPAN>}</TD><TD class="parameter_type">Hash</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">...</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">block_device</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The block device the environment should be installed on</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">boot_partition</SPAN></SPAN></TD><TD class="parameter_type">Integer</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The partition the node have to boot on (useful when deploying an image of the whole disk</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">client</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The client used to export files to the server, useful for local:// files (see more <A href="#file_export">here</A>)</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">deploy_partition</SPAN></SPAN></TD><TD class="parameter_type">Integer</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The partition the environment should be installed on</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">disable_bootloader_install</SPAN></SPAN></TD><TD class="parameter_type">Set</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Disable the install of a bootloader on the partition the image is installed on</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">disable_disk_partitioning</SPAN></SPAN></TD><TD class="parameter_type">Set</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Disable the disk partitioning step</TD></TR><TR class="parameter_frame"><TD class="parameter_name">{<SPAN class="element_self"><SPAN class="element_normal">pxe</SPAN></SPAN>}</TD><TD class="parameter_type">Hash</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Specify some custom netboot parameters</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">reformat_tmp_partition</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Reformat the partition that was defined as the tmp partition with the specified format</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">ssh_authorized_keys</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The path to a ssh authorized_keys file that have to be copied in the root directory of the deployed environment (see more <A href="#file_export">here</A>)</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">timeout_reboot_classical</SPAN></SPAN></TD><TD class="parameter_type">Integer</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Overwrite the default value for the reboot timeout</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">timeout_reboot_kexec</SPAN></SPAN></TD><TD class="parameter_type">Integer</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Overwrite the default value for the kexec timeout</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">vlan</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Specify the VLAN the nodes should be reboot in</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">kind</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The kind of environment, recorded or anonymous<BR><EM>Expected values: </EM>anon, database</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">name</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The name of the environment</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_dynamic">fields</SPAN></SPAN></TD><TD class="parameter_type"><A href="#type_Environment">Environment</A></TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Other fields that are used to describe an anonymous environment</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">user</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The owner of the environment</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">version</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The version of the environment</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent">{<SPAN class="element_normal">pxe</SPAN>}</SPAN>.[<SPAN class="element_self"><SPAN class="element_normal">files</SPAN></SPAN>]</TD><TD class="parameter_type">Array</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">A list of path to files that have to be exported in the PXE repository's directory (see more <A href="#file_export">here</A>)</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent">{<SPAN class="element_normal">pxe</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">profile</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">A custom PXE profile, the string FILES_PREFIX-- will be replaced by the prefix to some exported files</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent">{<SPAN class="element_normal">pxe</SPAN>}</SPAN>.{<SPAN class="element_self"><SPAN class="element_normal">singularities</SPAN></SPAN>}</TD><TD class="parameter_type">Hash</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Specify a substitution pattern for each node in the PXE profile (the NODE_SINGULARITY pattern must be used in the PXE profile)</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">pxe</SPAN>}</SPAN>.{<SPAN class="element_normal">singularities</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_dynamic">nodename</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The substitution pattern for the node "nodename"</TD></TR></TABLE></DIV></DIV><DIV class="response_frame"><H3 class="response_title">Response <SPAN class="response_title_desc">(<SPAN class="response_type">Hash</SPAN>, <SPAN class="response_content">application/json</SPAN>)</SPAN></H3><DIV class="response_subframe"><H4 class="response_subtitle">Fields</H4><TABLE class="response_fields"><TR><TH>Name</TH><TH>Type</TH><TH>Description</TH></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_dynamic"></SPAN></SPAN></TD><TD class="field_type"><A href="#type_Workflow">Workflow</A></TD><TD class="field_desc">Information related to the workflow of the deployment</TD></TR></TABLE><H4 class="response_subtitle">Return codes</H4><TABLE class="response_codes"><TR><TH>Code#</TH><TH>Description</TH></TR><TR class="code_frame"><TD class="code_number">200</TD><TD class="code_desc">OK, the request is successful</TD></TR><TR class="code_frame"><TD class="code_number">500</TD><TD class="code_desc">Internal Server Error, an uncatched exception was thrown on the server</TD></TR><TR class="code_frame"><TD class="code_number">400</TD><TD class="code_desc">Bad Request, Kadeploy Error: please check the X-Application-Error-Code and X-Application-Error-Code headers</TD></TR><TR class="code_frame"><TD class="code_number">401</TD><TD class="code_desc">Unauthorized, you need to be authenticated</TD></TR><TR class="code_frame"><TD class="code_number">403</TD><TD class="code_desc">Forbidden, you do not the rights to perform this operation. Unlike a 401 Unauthorized response, authenticating will make no difference.</TD></TR><TR class="code_frame"><TD class="code_number">415</TD><TD class="code_desc">Unsupported Media Type, check the Content-Type of your request's body</TD></TR></TABLE></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #1 <SPAN class="example_desc">Deploy a recorded environment using the user specified key file</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">POST /deployment HTTP/1.1 Accept: text/plain, application/json Host: kadeploy.testbed.lan:25300 X-Kadeploy-User: frontend @@ -456,7 +456,7 @@ Content-Length: 545 "status": "/deployment/D-bf5608b0-9354-446b-a648-c3abaa3cab95/status", "error": "/deployment/D-bf5608b0-9354-446b-a648-c3abaa3cab95/error" } -}</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #2 <SPAN class="example_desc">Deploy an anonymous local environment</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">POST /deployment HTTP/1.1 +}</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #2 <SPAN class="example_desc">Deploy an anonymous local environment</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">POST /deployment HTTP/1.1 Accept: text/plain, application/json Host: kadeploy.testbed.lan:25300 X-Kadeploy-User: frontend @@ -512,7 +512,7 @@ Content-Length: 555 "status": "/deployment/D-abbaa88c-243e-42fb-8c5a-9332918a6ee1/status", "error": "/deployment/D-abbaa88c-243e-42fb-8c5a-9332918a6ee1/error" } -}</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #3 <SPAN class="example_desc">Deploy an anonymous HTTP environment</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">POST /deployment HTTP/1.1 +}</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #3 <SPAN class="example_desc">Deploy an anonymous HTTP environment</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">POST /deployment HTTP/1.1 Accept: text/plain, application/json Host: kadeploy.testbed.lan:25300 X-Kadeploy-User: frontend @@ -567,7 +567,7 @@ Content-Length: 545 "status": "/deployment/D-2669bedd-82f2-4be6-b090-a0837ad4e0a9/status", "error": "/deployment/D-2669bedd-82f2-4be6-b090-a0837ad4e0a9/error" } -}</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #4 <SPAN class="example_desc">Deploy a recorded environment and reboot the nodes on a custom kernel with some nodes singularities</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">POST /deployment HTTP/1.1 +}</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #4 <SPAN class="example_desc">Deploy a recorded environment and reboot the nodes on a custom kernel with some nodes singularities</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">POST /deployment HTTP/1.1 Accept: text/plain, application/json Host: kadeploy.testbed.lan:25300 X-Kadeploy-User: frontend @@ -619,7 +619,7 @@ Content-Length: 557 "status": "/deployment/D-af1a66b0-c18c-4dc3-a4ee-73e6502bc5fc/status", "error": "/deployment/D-af1a66b0-c18c-4dc3-a4ee-73e6502bc5fc/error" } -}</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #5 <SPAN class="example_desc">Deploy an environment and overwrite the automata's steps</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">POST /deployment HTTP/1.1 +}</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #5 <SPAN class="example_desc">Deploy an environment and overwrite the automata's steps</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">POST /deployment HTTP/1.1 Accept: text/plain, application/json Host: kadeploy.testbed.lan:25300 X-Kadeploy-User: frontend @@ -675,7 +675,7 @@ Content-Length: 557 "status": "/deployment/D-facf0b49-20b0-4891-838e-06ee04c8045f/status", "error": "/deployment/D-facf0b49-20b0-4891-838e-06ee04c8045f/error" } -}</PRE></DIV></DIV></DIV></DIV><P class="operation_back_link"><A class="operation_back_link" href="#Deployment">Back to operation</A></P><HR class="operation_inter_sep"></DIV><HR class="operation_sep"><DIV class="operation_frame"><H1 class="operation_title"><A id="Rights management">Rights management</A></H1><DIV class="operation_index_frame"><H2 class="operation_index_title">Resources</H2><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><H2 class="operation_index_title">Return types</H2><DIV class="type_frame"><H3 class="type_title"><A id="type_Rights"><B class="type_name">Rights</B><SPAN class="type_title_desc">(<SPAN class="type_basetype">Hash</SPAN>)</SPAN></A></H3><P class="type_desc">Rights of a specific user on some disks/partitions of some nodes</P><DIV class="type_subframe"><TABLE class="type_fields"><TR><TH>Name</TH><TH>Type</TH><TH>Description</TH></TR><TR class="field_frame"><TD class="field_name">{<SPAN class="element_self"><SPAN class="element_dynamic">username</SPAN></SPAN>}</TD><TD class="field_type">Hash</TD><TD class="field_desc">The user the rights are related to</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent">{<SPAN class="element_dynamic">username</SPAN>}</SPAN>.[<SPAN class="element_self"><SPAN class="element_dynamic">nodename</SPAN></SPAN>]</TD><TD class="field_type">Array</TD><TD class="field_desc">The node the rights are applied on. If "nodename" is *, the rights are applied on every nodes</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_dynamic">username</SPAN>}</SPAN>.[<SPAN class="element_dynamic">nodename</SPAN>]</SPAN>.<SPAN class="element_self"><SPAN class="element_iter">#i</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">Partitions the rights are granted to. If "partitions" is *, the rights are applied on every disks/partitions</TD></TR></TABLE></DIV></DIV></DIV><P class="operation_back_link"><A class="operation_back_link" href="#title">Back to title</A></P><HR class="operation_index_sep"><DIV class="resource_frame"><H2 class="resource_title"><A id="POST/rights"><B class="resource_method_POST">POST</B> <SPAN style="font-family: monospace;" class="resource_path">/rights</SPAN></A></H2><P class="resource_desc">Grant the permession to deploy to a specific user on some node's partitions</P><DIV class="request_frame"><H3 class="request_title">Request <SPAN class="request_title_desc">(<SPAN class="request_type">Hash</SPAN>, <SPAN class="request_content">application/json</SPAN>)</SPAN></H3><DIV class="request_subframe"><H4 class="request_subtitle">Parameters</H4><TABLE class="request_parameters"><TR><TH>Name</TH><TH>Type</TH><TH>Kind</TH><TH>Description</TH></TR><TR class="parameter_frame"><TD class="parameter_name">[<SPAN class="element_self"><SPAN class="element_normal">nodes</SPAN></SPAN>]</TD><TD class="parameter_type">Array</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The list of nodes the rights should be added to. If not specified, rights will be added on all the nodes</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">overwrite</SPAN></SPAN></TD><TD class="parameter_type">Boolean</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Overwrite if some rights are already set for this user</TD></TR><TR class="parameter_frame"><TD class="parameter_name">[<SPAN class="element_self"><SPAN class="element_normal">partitions</SPAN></SPAN>]</TD><TD class="parameter_type">Array</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The partitions/disks the rights should be added to. If the array contains *, rights will be added on every partition/disk</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">username</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The name of the user the rights should be granted. Defaults to "user"</TD></TR></TABLE></DIV></DIV><DIV class="response_frame"><H3 class="response_title">Response <SPAN class="response_title_desc">(<SPAN class="response_type">Hash</SPAN>, <SPAN class="response_content">application/json</SPAN>)</SPAN></H3><DIV class="response_subframe"><H4 class="response_subtitle">Fields</H4><TABLE class="response_fields"><TR><TH>Name</TH><TH>Type</TH><TH>Description</TH></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_dynamic"></SPAN></SPAN></TD><TD class="field_type"><A href="#type_Rights">Rights</A></TD><TD class="field_desc">The rights that was added for the user "username"</TD></TR></TABLE><H4 class="response_subtitle">Return codes</H4><TABLE class="response_codes"><TR><TH>Code#</TH><TH>Description</TH></TR><TR class="code_frame"><TD class="code_number">200</TD><TD class="code_desc">OK, the request is successful</TD></TR><TR class="code_frame"><TD class="code_number">500</TD><TD class="code_desc">Internal Server Error, an uncatched exception was thrown on the server</TD></TR><TR class="code_frame"><TD class="code_number">400</TD><TD class="code_desc">Bad Request, Kadeploy Error: please check the X-Application-Error-Code and X-Application-Error-Code headers</TD></TR><TR class="code_frame"><TD class="code_number">401</TD><TD class="code_desc">Unauthorized, you need to be authenticated</TD></TR><TR class="code_frame"><TD class="code_number">403</TD><TD class="code_desc">Forbidden, you do not the rights to perform this operation. Unlike a 401 Unauthorized response, authenticating will make no difference.</TD></TR><TR class="code_frame"><TD class="code_number">415</TD><TD class="code_desc">Unsupported Media Type, check the Content-Type of your request's body</TD></TR><TR class="code_frame"><TD class="code_number">400-11</TD><TD class="code_desc">Some elements of the request are conflicting</TD></TR><TR class="code_frame"><TD class="code_number">400-12</TD><TD class="code_desc">No element has been modified</TD></TR></TABLE></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #1 <SPAN class="example_desc">Grant privileges on every partitions of a specific node</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">POST /rights HTTP/1.1 +}</PRE></DIV></DIV></DIV></DIV><P class="operation_back_link"><A class="operation_back_link" href="#Deployment">Back to operation</A></P><HR class="operation_inter_sep"></DIV><HR class="operation_sep"><DIV class="operation_frame"><H1 class="operation_title"><A id="Rights management">Rights management</A></H1><DIV class="operation_index_frame"><H2 class="operation_index_title">Resources</H2><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><H2 class="operation_index_title">Return types</H2><DIV class="type_frame"><H3 class="type_title"><A id="type_Rights"><B class="type_name">Rights</B><SPAN class="type_title_desc">(<SPAN class="type_basetype">Hash</SPAN>)</SPAN></A></H3><P class="type_desc">Rights of a specific user on some disks/partitions of some nodes</P><DIV class="type_subframe"><TABLE class="type_fields"><TR><TH>Name</TH><TH>Type</TH><TH>Description</TH></TR><TR class="field_frame"><TD class="field_name">{<SPAN class="element_self"><SPAN class="element_dynamic">username</SPAN></SPAN>}</TD><TD class="field_type">Hash</TD><TD class="field_desc">The user the rights are related to</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent">{<SPAN class="element_dynamic">username</SPAN>}</SPAN>.[<SPAN class="element_self"><SPAN class="element_dynamic">nodename</SPAN></SPAN>]</TD><TD class="field_type">Array</TD><TD class="field_desc">The node the rights are applied on. If "nodename" is *, the rights are applied on every nodes</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_dynamic">username</SPAN>}</SPAN>.[<SPAN class="element_dynamic">nodename</SPAN>]</SPAN>.<SPAN class="element_self"><SPAN class="element_iter">#i</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">Partitions the rights are granted to. If "partitions" is *, the rights are applied on every disks/partitions</TD></TR></TABLE></DIV></DIV></DIV><P class="operation_back_link"><A class="operation_back_link" href="#title">Back to title</A></P><HR class="operation_index_sep"><DIV class="resource_frame"><H2 class="resource_title"><A id="POST/rights"><B class="resource_method_POST">POST</B> <SPAN style="font-family: monospace;" class="resource_path">/rights</SPAN></A></H2><P class="resource_desc">Grant the permession to deploy to a specific user on some node's partitions</P><DIV class="request_frame"><H3 class="request_title">Request <SPAN class="request_title_desc">(<SPAN class="request_type">Hash</SPAN>, <SPAN class="request_content">application/json</SPAN>)</SPAN></H3><DIV class="request_subframe"><H4 class="request_subtitle">Parameters</H4><TABLE class="request_parameters"><TR><TH>Name</TH><TH>Type</TH><TH>Kind</TH><TH>Description</TH></TR><TR class="parameter_frame"><TD class="parameter_name">[<SPAN class="element_self"><SPAN class="element_normal">nodes</SPAN></SPAN>]</TD><TD class="parameter_type">Array</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The list of nodes the rights should be added to. If not specified, rights will be added on all the nodes</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">overwrite</SPAN></SPAN></TD><TD class="parameter_type">Boolean</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Overwrite if some rights are already set for this user</TD></TR><TR class="parameter_frame"><TD class="parameter_name">[<SPAN class="element_self"><SPAN class="element_normal">partitions</SPAN></SPAN>]</TD><TD class="parameter_type">Array</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The partitions/disks the rights should be added to. If the array contains *, rights will be added on every partition/disk</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">username</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The name of the user the rights should be granted. Defaults to "user"</TD></TR></TABLE></DIV></DIV><DIV class="response_frame"><H3 class="response_title">Response <SPAN class="response_title_desc">(<SPAN class="response_type">Hash</SPAN>, <SPAN class="response_content">application/json</SPAN>)</SPAN></H3><DIV class="response_subframe"><H4 class="response_subtitle">Fields</H4><TABLE class="response_fields"><TR><TH>Name</TH><TH>Type</TH><TH>Description</TH></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_dynamic"></SPAN></SPAN></TD><TD class="field_type"><A href="#type_Rights">Rights</A></TD><TD class="field_desc">The rights that was added for the user "username"</TD></TR></TABLE><H4 class="response_subtitle">Return codes</H4><TABLE class="response_codes"><TR><TH>Code#</TH><TH>Description</TH></TR><TR class="code_frame"><TD class="code_number">200</TD><TD class="code_desc">OK, the request is successful</TD></TR><TR class="code_frame"><TD class="code_number">500</TD><TD class="code_desc">Internal Server Error, an uncatched exception was thrown on the server</TD></TR><TR class="code_frame"><TD class="code_number">400</TD><TD class="code_desc">Bad Request, Kadeploy Error: please check the X-Application-Error-Code and X-Application-Error-Code headers</TD></TR><TR class="code_frame"><TD class="code_number">401</TD><TD class="code_desc">Unauthorized, you need to be authenticated</TD></TR><TR class="code_frame"><TD class="code_number">403</TD><TD class="code_desc">Forbidden, you do not the rights to perform this operation. Unlike a 401 Unauthorized response, authenticating will make no difference.</TD></TR><TR class="code_frame"><TD class="code_number">415</TD><TD class="code_desc">Unsupported Media Type, check the Content-Type of your request's body</TD></TR><TR class="code_frame"><TD class="code_number">400-11</TD><TD class="code_desc">Some elements of the request are conflicting</TD></TR><TR class="code_frame"><TD class="code_number">400-12</TD><TD class="code_desc">No element has been modified</TD></TR></TABLE></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #1 <SPAN class="example_desc">Grant privileges on every partitions of a specific node</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">POST /rights HTTP/1.1 Accept: text/plain, application/json Host: kadeploy.testbed.lan:25300 X-Kadeploy-User: frontend @@ -696,7 +696,7 @@ Content-Length: 67 "*" ] } -}</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #2 <SPAN class="example_desc">Grant privileges on a specific partition of some nodes</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">POST /rights?user=root&overwrite HTTP/1.1 +}</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #2 <SPAN class="example_desc">Grant privileges on a specific partition of some nodes</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">POST /rights?user=root&overwrite HTTP/1.1 Accept: text/plain, application/json Host: kadeploy.testbed.lan:25300 X-Kadeploy-User: frontend @@ -723,7 +723,7 @@ Content-Length: 128 "/dev/sda3" ] } -}</PRE></DIV></DIV></DIV></DIV><P class="operation_back_link"><A class="operation_back_link" href="#Rights management">Back to operation</A></P><HR class="operation_inter_sep"><DIV class="resource_frame"><H2 class="resource_title"><A id="GET/rights/:username?/:node?"><B class="resource_method_GET">GET</B> <SPAN style="font-family: monospace;" class="resource_path">/rights/:username?/:node?</SPAN></A></H2><P class="resource_desc">Gather information about someone's deploy permission on nodes</P><DIV class="request_frame"><H3 class="request_title">Request <SPAN class="request_title_desc">(<SPAN class="request_type">Hash</SPAN>, <SPAN class="request_content">application/json</SPAN>)</SPAN></H3><DIV class="request_subframe"><H4 class="request_subtitle">Parameters</H4><TABLE class="request_parameters"><TR><TH>Name</TH><TH>Type</TH><TH>Kind</TH><TH>Description</TH></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_param">node</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The node to check the rights on</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_param">username</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The name of the user to check the rights for. If not specified, returns the rights of every users</TD></TR><TR class="parameter_frame"><TD class="parameter_name">[<SPAN class="element_self"><SPAN class="element_normal">nodes</SPAN></SPAN>]</TD><TD class="parameter_type">Array</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The list of nodes the rights should be checked on. If nor "node" or "nodes" are specified, rights of all the nodes will be returned. If both "node" and "nodes" are specified, the rights of [nodes]+node will be returned</TD></TR></TABLE></DIV></DIV><DIV class="response_frame"><H3 class="response_title">Response <SPAN class="response_title_desc">(<SPAN class="response_type">Hash</SPAN>, <SPAN class="response_content">application/json</SPAN>)</SPAN></H3><DIV class="response_subframe"><H4 class="response_subtitle">Fields</H4><TABLE class="response_fields"><TR><TH>Name</TH><TH>Type</TH><TH>Description</TH></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_dynamic"></SPAN></SPAN></TD><TD class="field_type"><A href="#type_Rights">Rights</A></TD><TD class="field_desc">The rights of the user "username"</TD></TR></TABLE><H4 class="response_subtitle">Return codes</H4><TABLE class="response_codes"><TR><TH>Code#</TH><TH>Description</TH></TR><TR class="code_frame"><TD class="code_number">200</TD><TD class="code_desc">OK, the request is successful</TD></TR><TR class="code_frame"><TD class="code_number">500</TD><TD class="code_desc">Internal Server Error, an uncatched exception was thrown on the server</TD></TR><TR class="code_frame"><TD class="code_number">400</TD><TD class="code_desc">Bad Request, Kadeploy Error: please check the X-Application-Error-Code and X-Application-Error-Code headers</TD></TR><TR class="code_frame"><TD class="code_number">401</TD><TD class="code_desc">Unauthorized, you need to be authenticated</TD></TR><TR class="code_frame"><TD class="code_number">403</TD><TD class="code_desc">Forbidden, you do not the rights to perform this operation. Unlike a 401 Unauthorized response, authenticating will make no difference.</TD></TR><TR class="code_frame"><TD class="code_number">415</TD><TD class="code_desc">Unsupported Media Type, check the Content-Type of your request's body</TD></TR><TR class="code_frame"><TD class="code_number">404</TD><TD class="code_desc">File not found, username or node not found</TD></TR></TABLE></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #1 <SPAN class="example_desc">Get the rights of every users</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">GET /rights?user=root HTTP/1.1 +}</PRE></DIV></DIV></DIV></DIV><P class="operation_back_link"><A class="operation_back_link" href="#Rights management">Back to operation</A></P><HR class="operation_inter_sep"><DIV class="resource_frame"><H2 class="resource_title"><A id="GET/rights/:username?/:node?"><B class="resource_method_GET">GET</B> <SPAN style="font-family: monospace;" class="resource_path">/rights/:username?/:node?</SPAN></A></H2><P class="resource_desc">Gather information about someone's deploy permission on nodes</P><DIV class="request_frame"><H3 class="request_title">Request <SPAN class="request_title_desc">(<SPAN class="request_type">Hash</SPAN>, <SPAN class="request_content">application/json</SPAN>)</SPAN></H3><DIV class="request_subframe"><H4 class="request_subtitle">Parameters</H4><TABLE class="request_parameters"><TR><TH>Name</TH><TH>Type</TH><TH>Kind</TH><TH>Description</TH></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_param">node</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The node to check the rights on</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_param">username</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The name of the user to check the rights for. If not specified, returns the rights of every users</TD></TR><TR class="parameter_frame"><TD class="parameter_name">[<SPAN class="element_self"><SPAN class="element_normal">nodes</SPAN></SPAN>]</TD><TD class="parameter_type">Array</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The list of nodes the rights should be checked on. If nor "node" or "nodes" are specified, rights of all the nodes will be returned. If both "node" and "nodes" are specified, the rights of [nodes]+node will be returned</TD></TR></TABLE></DIV></DIV><DIV class="response_frame"><H3 class="response_title">Response <SPAN class="response_title_desc">(<SPAN class="response_type">Hash</SPAN>, <SPAN class="response_content">application/json</SPAN>)</SPAN></H3><DIV class="response_subframe"><H4 class="response_subtitle">Fields</H4><TABLE class="response_fields"><TR><TH>Name</TH><TH>Type</TH><TH>Description</TH></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_dynamic"></SPAN></SPAN></TD><TD class="field_type"><A href="#type_Rights">Rights</A></TD><TD class="field_desc">The rights of the user "username"</TD></TR></TABLE><H4 class="response_subtitle">Return codes</H4><TABLE class="response_codes"><TR><TH>Code#</TH><TH>Description</TH></TR><TR class="code_frame"><TD class="code_number">200</TD><TD class="code_desc">OK, the request is successful</TD></TR><TR class="code_frame"><TD class="code_number">500</TD><TD class="code_desc">Internal Server Error, an uncatched exception was thrown on the server</TD></TR><TR class="code_frame"><TD class="code_number">400</TD><TD class="code_desc">Bad Request, Kadeploy Error: please check the X-Application-Error-Code and X-Application-Error-Code headers</TD></TR><TR class="code_frame"><TD class="code_number">401</TD><TD class="code_desc">Unauthorized, you need to be authenticated</TD></TR><TR class="code_frame"><TD class="code_number">403</TD><TD class="code_desc">Forbidden, you do not the rights to perform this operation. Unlike a 401 Unauthorized response, authenticating will make no difference.</TD></TR><TR class="code_frame"><TD class="code_number">415</TD><TD class="code_desc">Unsupported Media Type, check the Content-Type of your request's body</TD></TR><TR class="code_frame"><TD class="code_number">404</TD><TD class="code_desc">File not found, username or node not found</TD></TR></TABLE></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #1 <SPAN class="example_desc">Get the rights of every users</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">GET /rights?user=root HTTP/1.1 Accept: text/plain, application/json Host: kadeploy.testbed.lan:25300 X-Kadeploy-User: frontend</PRE><H4 class="example_subtitle">Response</H4><PRE class="code_sample">HTTP/1.1 200 OK @@ -743,7 +743,7 @@ Content-Length: 172 "/dev/sda3" ] } -}</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #2 <SPAN class="example_desc">Get the rights of a specific user</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">GET /rights/frontend?user=root HTTP/1.1 +}</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #2 <SPAN class="example_desc">Get the rights of a specific user</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">GET /rights/frontend?user=root HTTP/1.1 Accept: text/plain, application/json Host: kadeploy.testbed.lan:25300 X-Kadeploy-User: frontend</PRE><H4 class="example_subtitle">Response</H4><PRE class="code_sample">HTTP/1.1 200 OK @@ -758,7 +758,7 @@ Content-Length: 172 "/dev/sda3" ] } -}</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #3 <SPAN class="example_desc">Get the rights of a specific user on a specific node</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">GET /rights/frontend/node-1.testbed.lan?user=root HTTP/1.1 +}</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #3 <SPAN class="example_desc">Get the rights of a specific user on a specific node</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">GET /rights/frontend/node-1.testbed.lan?user=root HTTP/1.1 Accept: text/plain, application/json Host: kadeploy.testbed.lan:25300 X-Kadeploy-User: frontend</PRE><H4 class="example_subtitle">Response</H4><PRE class="code_sample">HTTP/1.1 200 OK @@ -770,7 +770,7 @@ Content-Length: 75 "/dev/sda3" ] } -}</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #4 <SPAN class="example_desc">Get the rights of a specific user on several nodes</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">GET /rights/frontend?user=root HTTP/1.1 +}</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #4 <SPAN class="example_desc">Get the rights of a specific user on several nodes</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">GET /rights/frontend?user=root HTTP/1.1 Accept: text/plain, application/json Host: kadeploy.testbed.lan:25300 X-Kadeploy-User: frontend @@ -793,7 +793,7 @@ Content-Length: 128 "/dev/sda3" ] } -}</PRE></DIV></DIV></DIV></DIV><P class="operation_back_link"><A class="operation_back_link" href="#Rights management">Back to operation</A></P><HR class="operation_inter_sep"><DIV class="resource_frame"><H2 class="resource_title"><A id="PUT/rights/:username?/:node?"><B class="resource_method_PUT">PUT</B> <SPAN style="font-family: monospace;" class="resource_path">/rights/:username?/:node?</SPAN></A></H2><P class="resource_desc">Not implemented ATM</P></DIV><P class="operation_back_link"><A class="operation_back_link" href="#Rights management">Back to operation</A></P><HR class="operation_inter_sep"><DIV class="resource_frame"><H2 class="resource_title"><A id="DELETE/rights/:username/:node?/:partition?"><B class="resource_method_DELETE">DELETE</B> <SPAN style="font-family: monospace;" class="resource_path">/rights/:username/:node?/:partition?</SPAN></A></H2><P class="resource_desc">Remove some rights on some nodes.<BR>If no more rights are remaining on some of the nodes, every operations (workflows) involving this nodes will be killed.</P><DIV class="request_frame"><H3 class="request_title">Request <SPAN class="request_title_desc">(<SPAN class="request_type">Hash</SPAN>, <SPAN class="request_content">application/json</SPAN>)</SPAN></H3><DIV class="request_subframe"><H4 class="request_subtitle">Parameters</H4><TABLE class="request_parameters"><TR><TH>Name</TH><TH>Type</TH><TH>Kind</TH><TH>Description</TH></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_param">username</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The name of the username to remove the rights to</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_param">node</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The node to remove the rights from</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_param">partition</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The partitions to remove the rights from (should be urlencoded)</TD></TR><TR class="parameter_frame"><TD class="parameter_name">[<SPAN class="element_self"><SPAN class="element_normal">nodes</SPAN></SPAN>]</TD><TD class="parameter_type">Array</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The list of nodes the rights should removed from. If nor "node" or "nodes" are specified, rights of all the nodes will be removed. If both "node" and "nodes" are specified, the rights of [nodes]+node will be removed</TD></TR></TABLE></DIV></DIV><DIV class="response_frame"><H3 class="response_title">Response <SPAN class="response_title_desc">(<SPAN class="response_type">Hash</SPAN>, <SPAN class="response_content">application/json</SPAN>)</SPAN></H3><DIV class="response_subframe"><H4 class="response_subtitle">Fields</H4><TABLE class="response_fields"><TR><TH>Name</TH><TH>Type</TH><TH>Description</TH></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_dynamic"></SPAN></SPAN></TD><TD class="field_type"><A href="#type_Rights">Rights</A></TD><TD class="field_desc">The rights that was removed</TD></TR></TABLE><H4 class="response_subtitle">Return codes</H4><TABLE class="response_codes"><TR><TH>Code#</TH><TH>Description</TH></TR><TR class="code_frame"><TD class="code_number">200</TD><TD class="code_desc">OK, the request is successful</TD></TR><TR class="code_frame"><TD class="code_number">500</TD><TD class="code_desc">Internal Server Error, an uncatched exception was thrown on the server</TD></TR><TR class="code_frame"><TD class="code_number">400</TD><TD class="code_desc">Bad Request, Kadeploy Error: please check the X-Application-Error-Code and X-Application-Error-Code headers</TD></TR><TR class="code_frame"><TD class="code_number">401</TD><TD class="code_desc">Unauthorized, you need to be authenticated</TD></TR><TR class="code_frame"><TD class="code_number">403</TD><TD class="code_desc">Forbidden, you do not the rights to perform this operation. Unlike a 401 Unauthorized response, authenticating will make no difference.</TD></TR><TR class="code_frame"><TD class="code_number">415</TD><TD class="code_desc">Unsupported Media Type, check the Content-Type of your request's body</TD></TR><TR class="code_frame"><TD class="code_number">404</TD><TD class="code_desc">File not found, username or node not found</TD></TR><TR class="code_frame"><TD class="code_number">400-11</TD><TD class="code_desc">Some elements of the request are conflicting</TD></TR><TR class="code_frame"><TD class="code_number">400-12</TD><TD class="code_desc">No element has been modified</TD></TR></TABLE></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #1 <SPAN class="example_desc">Remove the rights on every nodes from a specific user</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">DELETE /rights/frontend?user=root HTTP/1.1 +}</PRE></DIV></DIV></DIV></DIV><P class="operation_back_link"><A class="operation_back_link" href="#Rights management">Back to operation</A></P><HR class="operation_inter_sep"><DIV class="resource_frame"><H2 class="resource_title"><A id="PUT/rights/:username?/:node?"><B class="resource_method_PUT">PUT</B> <SPAN style="font-family: monospace;" class="resource_path">/rights/:username?/:node?</SPAN></A></H2><P class="resource_desc">Not implemented ATM</P></DIV><P class="operation_back_link"><A class="operation_back_link" href="#Rights management">Back to operation</A></P><HR class="operation_inter_sep"><DIV class="resource_frame"><H2 class="resource_title"><A id="DELETE/rights/:username/:node?/:partition?"><B class="resource_method_DELETE">DELETE</B> <SPAN style="font-family: monospace;" class="resource_path">/rights/:username/:node?/:partition?</SPAN></A></H2><P class="resource_desc">Remove some rights on some nodes.<BR>If no more rights are remaining on some of the nodes, every operations (workflows) involving this nodes will be killed.</P><DIV class="request_frame"><H3 class="request_title">Request <SPAN class="request_title_desc">(<SPAN class="request_type">Hash</SPAN>, <SPAN class="request_content">application/json</SPAN>)</SPAN></H3><DIV class="request_subframe"><H4 class="request_subtitle">Parameters</H4><TABLE class="request_parameters"><TR><TH>Name</TH><TH>Type</TH><TH>Kind</TH><TH>Description</TH></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_param">username</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The name of the username to remove the rights to</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_param">node</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The node to remove the rights from</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_param">partition</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The partitions to remove the rights from (should be urlencoded)</TD></TR><TR class="parameter_frame"><TD class="parameter_name">[<SPAN class="element_self"><SPAN class="element_normal">nodes</SPAN></SPAN>]</TD><TD class="parameter_type">Array</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The list of nodes the rights should removed from. If nor "node" or "nodes" are specified, rights of all the nodes will be removed. If both "node" and "nodes" are specified, the rights of [nodes]+node will be removed</TD></TR></TABLE></DIV></DIV><DIV class="response_frame"><H3 class="response_title">Response <SPAN class="response_title_desc">(<SPAN class="response_type">Hash</SPAN>, <SPAN class="response_content">application/json</SPAN>)</SPAN></H3><DIV class="response_subframe"><H4 class="response_subtitle">Fields</H4><TABLE class="response_fields"><TR><TH>Name</TH><TH>Type</TH><TH>Description</TH></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_dynamic"></SPAN></SPAN></TD><TD class="field_type"><A href="#type_Rights">Rights</A></TD><TD class="field_desc">The rights that was removed</TD></TR></TABLE><H4 class="response_subtitle">Return codes</H4><TABLE class="response_codes"><TR><TH>Code#</TH><TH>Description</TH></TR><TR class="code_frame"><TD class="code_number">200</TD><TD class="code_desc">OK, the request is successful</TD></TR><TR class="code_frame"><TD class="code_number">500</TD><TD class="code_desc">Internal Server Error, an uncatched exception was thrown on the server</TD></TR><TR class="code_frame"><TD class="code_number">400</TD><TD class="code_desc">Bad Request, Kadeploy Error: please check the X-Application-Error-Code and X-Application-Error-Code headers</TD></TR><TR class="code_frame"><TD class="code_number">401</TD><TD class="code_desc">Unauthorized, you need to be authenticated</TD></TR><TR class="code_frame"><TD class="code_number">403</TD><TD class="code_desc">Forbidden, you do not the rights to perform this operation. Unlike a 401 Unauthorized response, authenticating will make no difference.</TD></TR><TR class="code_frame"><TD class="code_number">415</TD><TD class="code_desc">Unsupported Media Type, check the Content-Type of your request's body</TD></TR><TR class="code_frame"><TD class="code_number">404</TD><TD class="code_desc">File not found, username or node not found</TD></TR><TR class="code_frame"><TD class="code_number">400-11</TD><TD class="code_desc">Some elements of the request are conflicting</TD></TR><TR class="code_frame"><TD class="code_number">400-12</TD><TD class="code_desc">No element has been modified</TD></TR></TABLE></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #1 <SPAN class="example_desc">Remove the rights on every nodes from a specific user</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">DELETE /rights/frontend?user=root HTTP/1.1 Accept: text/plain, application/json Host: kadeploy.testbed.lan:25300 X-Kadeploy-User: frontend</PRE><H4 class="example_subtitle">Response</H4><PRE class="code_sample">HTTP/1.1 200 OK @@ -805,7 +805,7 @@ Content-Length: 50 "*" ] } -}</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #2 <SPAN class="example_desc">Remove the rights on a specific node from a specific user</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">DELETE /rights/frontend/node-1.testbed.lan?user=root HTTP/1.1 +}</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #2 <SPAN class="example_desc">Remove the rights on a specific node from a specific user</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">DELETE /rights/frontend/node-1.testbed.lan?user=root HTTP/1.1 Accept: text/plain, application/json Host: kadeploy.testbed.lan:25300 X-Kadeploy-User: frontend</PRE><H4 class="example_subtitle">Response</H4><PRE class="code_sample">HTTP/1.1 200 OK @@ -817,7 +817,7 @@ Content-Length: 67 "*" ] } -}</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #3 <SPAN class="example_desc">Remove the rights on several nodes from a specific user</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">DELETE /rights/frontend?user=root HTTP/1.1 +}</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #3 <SPAN class="example_desc">Remove the rights on several nodes from a specific user</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">DELETE /rights/frontend?user=root HTTP/1.1 Accept: text/plain, application/json Host: kadeploy.testbed.lan:25300 X-Kadeploy-User: frontend @@ -840,7 +840,7 @@ Content-Length: 112 "*" ] } -}</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #4 <SPAN class="example_desc">Remove the rights on a specific partition of a specific node from a specific user</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">DELETE /rights/frontend?user=root&nodes=node-1.testbed.lan&partitions=%2Fdev%2Fsda3 HTTP/1.1 +}</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #4 <SPAN class="example_desc">Remove the rights on a specific partition of a specific node from a specific user</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">DELETE /rights/frontend?user=root&nodes=node-1.testbed.lan&partitions=%2Fdev%2Fsda3 HTTP/1.1 Accept: text/plain, application/json Host: kadeploy.testbed.lan:25300 X-Kadeploy-User: frontend</PRE><H4 class="example_subtitle">Response</H4><PRE class="code_sample">HTTP/1.1 200 OK @@ -852,7 +852,7 @@ Content-Length: 75 "/dev/sda3" ] } -}</PRE></DIV></DIV></DIV></DIV><P class="operation_back_link"><A class="operation_back_link" href="#Rights management">Back to operation</A></P><HR class="operation_inter_sep"></DIV><HR class="operation_sep"><DIV class="operation_frame"><H1 class="operation_title"><A id="Nodes information">Nodes information</A></H1><DIV class="operation_index_frame"><H2 class="operation_index_title">Resources</H2><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><H2 class="operation_index_title">Return types</H2><DIV class="type_frame"><H3 class="type_title"><A id="type_NodeStatus"><B class="type_name">NodeStatus</B><SPAN class="type_title_desc">(<SPAN class="type_basetype">Hash</SPAN>)</SPAN></A></H3><P class="type_desc">Status of nodes</P><DIV class="type_subframe"><TABLE class="type_fields"><TR><TH>Name</TH><TH>Type</TH><TH>Description</TH></TR><TR class="field_frame"><TD class="field_name">{<SPAN class="element_self"><SPAN class="element_dynamic">nodename</SPAN></SPAN>}</TD><TD class="field_type">Hash</TD><TD class="field_desc">The status of the node nodename</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent">{<SPAN class="element_dynamic">nodename</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">state</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">The current state of the node<BR>Possible values: 1, 2, 3, ...</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent">{<SPAN class="element_dynamic">nodename</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">user</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">The last user that deployed the node</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent">{<SPAN class="element_dynamic">nodename</SPAN>}</SPAN>.{<SPAN class="element_self"><SPAN class="element_normal">environment</SPAN></SPAN>}</TD><TD class="field_type">Hash</TD><TD class="field_desc">The last environment that was deployed on the node</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_dynamic">nodename</SPAN>}</SPAN>.{<SPAN class="element_normal">environment</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">user</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">The owner of the environment</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_dynamic">nodename</SPAN>}</SPAN>.{<SPAN class="element_normal">environment</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">name</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">The name of the environment</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_dynamic">nodename</SPAN>}</SPAN>.{<SPAN class="element_normal">environment</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">version</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">The version of the environment</TD></TR></TABLE></DIV></DIV></DIV><P class="operation_back_link"><A class="operation_back_link" href="#title">Back to title</A></P><HR class="operation_index_sep"><DIV class="resource_frame"><H2 class="resource_title"><A id="GET/nodes/:nodename?"><B class="resource_method_GET">GET</B> <SPAN style="font-family: monospace;" class="resource_path">/nodes/:nodename?</SPAN></A></H2><P class="resource_desc">Gather nodes information</P><DIV class="request_frame"><H3 class="request_title">Request <SPAN class="request_title_desc">(<SPAN class="request_type">Hash</SPAN>, <SPAN class="request_content">application/json</SPAN>)</SPAN></H3><DIV class="request_subframe"><H4 class="request_subtitle">Parameters</H4><TABLE class="request_parameters"><TR><TH>Name</TH><TH>Type</TH><TH>Kind</TH><TH>Description</TH></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_param">nodename</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Gather information of a specific node</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">list</SPAN></SPAN></TD><TD class="parameter_type">Boolean</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Ask to return an Array of node names corresponding to the nodes that are managed by the server</TD></TR></TABLE></DIV></DIV><DIV class="response_frame"><H3 class="response_title">Response <SPAN class="response_title_desc">(<SPAN class="response_type">Hash/Array</SPAN>, <SPAN class="response_content">application/json</SPAN>)</SPAN></H3><DIV class="response_subframe"><H4 class="response_subtitle">Fields</H4><TABLE class="response_fields"><TR><TH>Name</TH><TH>Type</TH><TH>Description</TH></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_dynamic"></SPAN></SPAN></TD><TD class="field_type"><A href="#type_NodeStatus">NodeStatus</A></TD><TD class="field_desc">Status of the nodes</TD></TR></TABLE><H4 class="response_subtitle">Return codes</H4><TABLE class="response_codes"><TR><TH>Code#</TH><TH>Description</TH></TR><TR class="code_frame"><TD class="code_number">200</TD><TD class="code_desc">OK, the request is successful</TD></TR><TR class="code_frame"><TD class="code_number">500</TD><TD class="code_desc">Internal Server Error, an uncatched exception was thrown on the server</TD></TR><TR class="code_frame"><TD class="code_number">400</TD><TD class="code_desc">Bad Request, Kadeploy Error: please check the X-Application-Error-Code and X-Application-Error-Code headers</TD></TR><TR class="code_frame"><TD class="code_number">401</TD><TD class="code_desc">Unauthorized, you need to be authenticated</TD></TR><TR class="code_frame"><TD class="code_number">403</TD><TD class="code_desc">Forbidden, you do not the rights to perform this operation. Unlike a 401 Unauthorized response, authenticating will make no difference.</TD></TR><TR class="code_frame"><TD class="code_number">415</TD><TD class="code_desc">Unsupported Media Type, check the Content-Type of your request's body</TD></TR><TR class="code_frame"><TD class="code_number">404</TD><TD class="code_desc">File not found, nodename not found</TD></TR></TABLE></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #1 <SPAN class="example_desc">Get the status of every nodes</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">GET /nodes HTTP/1.1 +}</PRE></DIV></DIV></DIV></DIV><P class="operation_back_link"><A class="operation_back_link" href="#Rights management">Back to operation</A></P><HR class="operation_inter_sep"></DIV><HR class="operation_sep"><DIV class="operation_frame"><H1 class="operation_title"><A id="Nodes information">Nodes information</A></H1><DIV class="operation_index_frame"><H2 class="operation_index_title">Resources</H2><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><H2 class="operation_index_title">Return types</H2><DIV class="type_frame"><H3 class="type_title"><A id="type_NodeStatus"><B class="type_name">NodeStatus</B><SPAN class="type_title_desc">(<SPAN class="type_basetype">Hash</SPAN>)</SPAN></A></H3><P class="type_desc">Status of nodes</P><DIV class="type_subframe"><TABLE class="type_fields"><TR><TH>Name</TH><TH>Type</TH><TH>Description</TH></TR><TR class="field_frame"><TD class="field_name">{<SPAN class="element_self"><SPAN class="element_dynamic">nodename</SPAN></SPAN>}</TD><TD class="field_type">Hash</TD><TD class="field_desc">The status of the node nodename</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent">{<SPAN class="element_dynamic">nodename</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">state</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">The current state of the node<BR>Possible values: 1, 2, 3, ...</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent">{<SPAN class="element_dynamic">nodename</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">user</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">The last user that deployed the node</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent">{<SPAN class="element_dynamic">nodename</SPAN>}</SPAN>.{<SPAN class="element_self"><SPAN class="element_normal">environment</SPAN></SPAN>}</TD><TD class="field_type">Hash</TD><TD class="field_desc">The last environment that was deployed on the node</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_dynamic">nodename</SPAN>}</SPAN>.{<SPAN class="element_normal">environment</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">user</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">The owner of the environment</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_dynamic">nodename</SPAN>}</SPAN>.{<SPAN class="element_normal">environment</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">name</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">The name of the environment</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_dynamic">nodename</SPAN>}</SPAN>.{<SPAN class="element_normal">environment</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">version</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">The version of the environment</TD></TR></TABLE></DIV></DIV></DIV><P class="operation_back_link"><A class="operation_back_link" href="#title">Back to title</A></P><HR class="operation_index_sep"><DIV class="resource_frame"><H2 class="resource_title"><A id="GET/nodes/:nodename?"><B class="resource_method_GET">GET</B> <SPAN style="font-family: monospace;" class="resource_path">/nodes/:nodename?</SPAN></A></H2><P class="resource_desc">Gather nodes information</P><DIV class="request_frame"><H3 class="request_title">Request <SPAN class="request_title_desc">(<SPAN class="request_type">Hash</SPAN>, <SPAN class="request_content">application/json</SPAN>)</SPAN></H3><DIV class="request_subframe"><H4 class="request_subtitle">Parameters</H4><TABLE class="request_parameters"><TR><TH>Name</TH><TH>Type</TH><TH>Kind</TH><TH>Description</TH></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_param">nodename</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Gather information of a specific node</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">list</SPAN></SPAN></TD><TD class="parameter_type">Boolean</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Ask to return an Array of node names corresponding to the nodes that are managed by the server</TD></TR></TABLE></DIV></DIV><DIV class="response_frame"><H3 class="response_title">Response <SPAN class="response_title_desc">(<SPAN class="response_type">Hash/Array</SPAN>, <SPAN class="response_content">application/json</SPAN>)</SPAN></H3><DIV class="response_subframe"><H4 class="response_subtitle">Fields</H4><TABLE class="response_fields"><TR><TH>Name</TH><TH>Type</TH><TH>Description</TH></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_dynamic"></SPAN></SPAN></TD><TD class="field_type"><A href="#type_NodeStatus">NodeStatus</A></TD><TD class="field_desc">Status of the nodes</TD></TR></TABLE><H4 class="response_subtitle">Return codes</H4><TABLE class="response_codes"><TR><TH>Code#</TH><TH>Description</TH></TR><TR class="code_frame"><TD class="code_number">200</TD><TD class="code_desc">OK, the request is successful</TD></TR><TR class="code_frame"><TD class="code_number">500</TD><TD class="code_desc">Internal Server Error, an uncatched exception was thrown on the server</TD></TR><TR class="code_frame"><TD class="code_number">400</TD><TD class="code_desc">Bad Request, Kadeploy Error: please check the X-Application-Error-Code and X-Application-Error-Code headers</TD></TR><TR class="code_frame"><TD class="code_number">401</TD><TD class="code_desc">Unauthorized, you need to be authenticated</TD></TR><TR class="code_frame"><TD class="code_number">403</TD><TD class="code_desc">Forbidden, you do not the rights to perform this operation. Unlike a 401 Unauthorized response, authenticating will make no difference.</TD></TR><TR class="code_frame"><TD class="code_number">415</TD><TD class="code_desc">Unsupported Media Type, check the Content-Type of your request's body</TD></TR><TR class="code_frame"><TD class="code_number">404</TD><TD class="code_desc">File not found, nodename not found</TD></TR></TABLE></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #1 <SPAN class="example_desc">Get the status of every nodes</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">GET /nodes HTTP/1.1 Accept: text/plain, application/json Host: kadeploy.testbed.lan:25300 X-Kadeploy-User: frontend</PRE><H4 class="example_subtitle">Response</H4><PRE class="code_sample">HTTP/1.1 200 OK @@ -877,7 +877,7 @@ Content-Length: 356 "user": "root" } } -}</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #2 <SPAN class="example_desc">Get the status of a specific node</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">GET /nodes/node-1.testbed.lan HTTP/1.1 +}</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #2 <SPAN class="example_desc">Get the status of a specific node</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">GET /nodes/node-1.testbed.lan HTTP/1.1 Accept: text/plain, application/json Host: kadeploy.testbed.lan:25300 X-Kadeploy-User: frontend</PRE><H4 class="example_subtitle">Response</H4><PRE class="code_sample">HTTP/1.1 200 OK @@ -891,7 +891,7 @@ Content-Length: 134 "version": 1, "user": "root" } -}</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #3 <SPAN class="example_desc">Get the list of nodes</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">GET /nodes?list HTTP/1.1 +}</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #3 <SPAN class="example_desc">Get the list of nodes</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">GET /nodes?list HTTP/1.1 Accept: text/plain, application/json Host: kadeploy.testbed.lan:25300 X-Kadeploy-User: frontend</PRE><H4 class="example_subtitle">Response</H4><PRE class="code_sample">HTTP/1.1 200 OK @@ -953,7 +953,7 @@ Content-Length: 43 ] }, "time": 1.01 -}</PRE></DIV></DIV><P class="operation_back_link"><A class="operation_back_link" href="#title">Back to title</A></P><HR class="operation_index_sep"><DIV class="resource_frame"><H2 class="resource_title"><A id="POST/%OPERATION"><B class="resource_method_POST">POST</B> <SPAN style="font-family: monospace;" class="resource_path">/%OPERATION</SPAN></A></H2><P class="resource_desc">Launch an operation</P><DIV class="request_frame"><H3 class="request_title">Request <SPAN class="request_title_desc">(<SPAN class="request_type">Hash</SPAN>, <SPAN class="request_content">application/json</SPAN>)</SPAN></H3><DIV class="request_subframe"><H4 class="request_subtitle">Parameters</H4><TABLE class="request_parameters"><TR><TH>Name</TH><TH>Type</TH><TH>Kind</TH><TH>Description</TH></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">...</SPAN></SPAN></TD><TD class="parameter_type">Deployment/Reboot/Power</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The operation's parameters</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">breakpoint</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The name of a step to breakpoint on (can be MacrostepName or MacrostepName:MicrostepName)</TD></TR><TR class="parameter_frame"><TD class="parameter_name">{<SPAN class="element_self"><SPAN class="element_normal">custom_operations</SPAN></SPAN>}</TD><TD class="parameter_type">Hash</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Add some custom steps to the operation's workflow</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">debug</SPAN></SPAN></TD><TD class="parameter_type">Set</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Enable the command's debugging</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">force</SPAN></SPAN></TD><TD class="parameter_type">Set</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Force the operation, even if the nodes seems to be already involved in another one</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">hook</SPAN></SPAN></TD><TD class="parameter_type">Set</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Enable the server-side hook at the end of the operation</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">verbose_level</SPAN></SPAN></TD><TD class="parameter_type">Integer</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The verbose level of the logs<BR><EM>Expected values: </EM>1, 2, 3, 4, 5</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent">{<SPAN class="element_normal">custom_operations</SPAN>}</SPAN>.{<SPAN class="element_self"><SPAN class="element_dynamic">macrostepname</SPAN></SPAN>}</TD><TD class="parameter_type">Hash</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The macro-step the custom-step has to be added to</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">custom_operations</SPAN>}</SPAN>.{<SPAN class="element_dynamic">macrostepname</SPAN>}</SPAN>.{<SPAN class="element_self"><SPAN class="element_dynamic">microstepname</SPAN></SPAN>}</TD><TD class="parameter_type">Hash</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The micro-step the custom-step has to be added to</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">custom_operations</SPAN>}</SPAN>.{<SPAN class="element_dynamic">macrostepname</SPAN>}</SPAN>.{<SPAN class="element_dynamic">microstepname</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_dynamic">overwrite</SPAN></SPAN></TD><TD class="parameter_type">Boolean</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Overwrite the custom-steps that were add in the configuration by the administrators<BR><EM>Default value: </EM>false</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">custom_operations</SPAN>}</SPAN>.{<SPAN class="element_dynamic">macrostepname</SPAN>}</SPAN>.{<SPAN class="element_dynamic">microstepname</SPAN>}</SPAN>.[<SPAN class="element_self"><SPAN class="element_dynamic">where</SPAN></SPAN>]</TD><TD class="parameter_type">Array</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">A list of actions to be substitued/pre/post to this step<BR><EM>Expected values: </EM>substitute, pre-ops, post-ops</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">custom_operations</SPAN>}</SPAN>.{<SPAN class="element_dynamic">macrostepname</SPAN>}</SPAN>.{<SPAN class="element_dynamic">microstepname</SPAN>}</SPAN>.[<SPAN class="element_dynamic">where</SPAN>]</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">action</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The action that have to be performed<BR><EM>Expected values: </EM>run, send, exec</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">custom_operations</SPAN>}</SPAN>.{<SPAN class="element_dynamic">macrostepname</SPAN>}</SPAN>.{<SPAN class="element_dynamic">microstepname</SPAN>}</SPAN>.[<SPAN class="element_dynamic">where</SPAN>]</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">command</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">(To be specified if the action is "exec") The command to be executed. If you want to call a script, dont forget to add a "." (or use "source") before the script name to be able to use Kadeploy3 environment variables inside of it (example: "command: . /myscript.sh").</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">custom_operations</SPAN>}</SPAN>.{<SPAN class="element_dynamic">macrostepname</SPAN>}</SPAN>.{<SPAN class="element_dynamic">microstepname</SPAN>}</SPAN>.[<SPAN class="element_dynamic">where</SPAN>]</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">destination</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">(To be specified if the action is "send") The destination directory on the nodes (Kadeploy3 environment variables are substitued in the path)</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">custom_operations</SPAN>}</SPAN>.{<SPAN class="element_dynamic">macrostepname</SPAN>}</SPAN>.{<SPAN class="element_dynamic">microstepname</SPAN>}</SPAN>.[<SPAN class="element_dynamic">where</SPAN>]</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">file</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">(To be specified if the action is "send" or "run") The path to the file to be send/executed (if the action is "send" the file name will remains the same, if the action is "run" this file need to contain a script)</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">custom_operations</SPAN>}</SPAN>.{<SPAN class="element_dynamic">macrostepname</SPAN>}</SPAN>.{<SPAN class="element_dynamic">microstepname</SPAN>}</SPAN>.[<SPAN class="element_dynamic">where</SPAN>]</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">name</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The name of the custom operation</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">custom_operations</SPAN>}</SPAN>.{<SPAN class="element_dynamic">macrostepname</SPAN>}</SPAN>.{<SPAN class="element_dynamic">microstepname</SPAN>}</SPAN>.[<SPAN class="element_dynamic">where</SPAN>]</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">params</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">(To be specified if the action is "run") The parameters of the script.<BR><EM>Default value: </EM>empty string</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">custom_operations</SPAN>}</SPAN>.{<SPAN class="element_dynamic">macrostepname</SPAN>}</SPAN>.{<SPAN class="element_dynamic">microstepname</SPAN>}</SPAN>.[<SPAN class="element_dynamic">where</SPAN>]</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">retries</SPAN></SPAN></TD><TD class="parameter_type">Integer</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The number of retries for this custom operation<BR><EM>Default value: </EM>0</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">custom_operations</SPAN>}</SPAN>.{<SPAN class="element_dynamic">macrostepname</SPAN>}</SPAN>.{<SPAN class="element_dynamic">microstepname</SPAN>}</SPAN>.[<SPAN class="element_dynamic">where</SPAN>]</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">scattering</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The scattering kind for this custom operation<BR><EM>Expected values: </EM>tree, chain<BR><EM>Default value: </EM>tree</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">custom_operations</SPAN>}</SPAN>.{<SPAN class="element_dynamic">macrostepname</SPAN>}</SPAN>.{<SPAN class="element_dynamic">microstepname</SPAN>}</SPAN>.[<SPAN class="element_dynamic">where</SPAN>]</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">timeout</SPAN></SPAN></TD><TD class="parameter_type">Integer</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The timeout (seconds) of this custom operation<BR><EM>Default value: </EM>0</TD></TR></TABLE></DIV></DIV><DIV class="response_frame"><H3 class="response_title">Response <SPAN class="response_title_desc">(<SPAN class="response_type">Hash</SPAN>, <SPAN class="response_content">application/json</SPAN>)</SPAN></H3><DIV class="response_subframe"><H4 class="response_subtitle">Fields</H4><TABLE class="response_fields"><TR><TH>Name</TH><TH>Type</TH><TH>Description</TH></TR><TR class="field_frame"><TD class="field_name">{<SPAN class="element_self"><SPAN class="element_normal">resources</SPAN></SPAN>}</TD><TD class="field_type">Hash</TD><TD class="field_desc">The resources associated with the workflow and their URL</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent">{<SPAN class="element_normal">resources</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">debug</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">Concatenated debugs</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent">{<SPAN class="element_normal">resources</SPAN>}</SPAN>.{<SPAN class="element_self"><SPAN class="element_normal">debugs</SPAN></SPAN>}</TD><TD class="field_type">Hash</TD><TD class="field_desc">Debugs by node</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">resources</SPAN>}</SPAN>.{<SPAN class="element_normal">debugs</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_dynamic">nodename</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">Debug of node nodename</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent">{<SPAN class="element_normal">resources</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">error</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">Error message</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent">{<SPAN class="element_normal">resources</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">output</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">Concatenated outputs</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent">{<SPAN class="element_normal">resources</SPAN>}</SPAN>.{<SPAN class="element_self"><SPAN class="element_normal">outputs</SPAN></SPAN>}</TD><TD class="field_type">Hash</TD><TD class="field_desc">Outputs by cluster</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">resources</SPAN>}</SPAN>.{<SPAN class="element_normal">outputs</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_dynamic">clustername</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">Output of cluster clustername</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent">{<SPAN class="element_normal">resources</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">state</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">Deployment state of nodes</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent">{<SPAN class="element_normal">resources</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">status</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">Status of operation's instances (one instance by cluster)</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_normal">wid</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">The id# of the workflow that was initiated</TD></TR></TABLE><H4 class="response_subtitle">Return codes</H4><TABLE class="response_codes"><TR><TH>Code#</TH><TH>Description</TH></TR><TR class="code_frame"><TD class="code_number">200</TD><TD class="code_desc">OK, the request is successful</TD></TR><TR class="code_frame"><TD class="code_number">500</TD><TD class="code_desc">Internal Server Error, an uncatched exception was thrown on the server</TD></TR><TR class="code_frame"><TD class="code_number">400</TD><TD class="code_desc">Bad Request, Kadeploy Error: please check the X-Application-Error-Code and X-Application-Error-Code headers</TD></TR><TR class="code_frame"><TD class="code_number">401</TD><TD class="code_desc">Unauthorized, you need to be authenticated</TD></TR><TR class="code_frame"><TD class="code_number">403</TD><TD class="code_desc">Forbidden, you do not the rights to perform this operation. Unlike a 401 Unauthorized response, authenticating will make no difference.</TD></TR><TR class="code_frame"><TD class="code_number">415</TD><TD class="code_desc">Unsupported Media Type, check the Content-Type of your request's body</TD></TR></TABLE></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #1 <SPAN class="example_desc">Deploy a recorded environment</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">POST /deployment HTTP/1.1 +}</PRE></DIV></DIV><P class="operation_back_link"><A class="operation_back_link" href="#title">Back to title</A></P><HR class="operation_index_sep"><DIV class="resource_frame"><H2 class="resource_title"><A id="POST/%OPERATION"><B class="resource_method_POST">POST</B> <SPAN style="font-family: monospace;" class="resource_path">/%OPERATION</SPAN></A></H2><P class="resource_desc">Launch an operation</P><DIV class="request_frame"><H3 class="request_title">Request <SPAN class="request_title_desc">(<SPAN class="request_type">Hash</SPAN>, <SPAN class="request_content">application/json</SPAN>)</SPAN></H3><DIV class="request_subframe"><H4 class="request_subtitle">Parameters</H4><TABLE class="request_parameters"><TR><TH>Name</TH><TH>Type</TH><TH>Kind</TH><TH>Description</TH></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">...</SPAN></SPAN></TD><TD class="parameter_type">Deployment/Reboot/Power</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The operation's parameters</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">breakpoint</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The name of a step to breakpoint on (can be MacrostepName or MacrostepName:MicrostepName)</TD></TR><TR class="parameter_frame"><TD class="parameter_name">{<SPAN class="element_self"><SPAN class="element_normal">custom_operations</SPAN></SPAN>}</TD><TD class="parameter_type">Hash</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Add some custom steps to the operation's workflow</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">debug</SPAN></SPAN></TD><TD class="parameter_type">Set</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Enable the command's debugging</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">force</SPAN></SPAN></TD><TD class="parameter_type">Set</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Force the operation, even if the nodes seems to be already involved in another one</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">hook</SPAN></SPAN></TD><TD class="parameter_type">Set</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Enable the server-side hook at the end of the operation</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">verbose_level</SPAN></SPAN></TD><TD class="parameter_type">Integer</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The verbose level of the logs<BR><EM>Expected values: </EM>1, 2, 3, 4, 5</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent">{<SPAN class="element_normal">custom_operations</SPAN>}</SPAN>.{<SPAN class="element_self"><SPAN class="element_dynamic">macrostepname</SPAN></SPAN>}</TD><TD class="parameter_type">Hash</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The macro-step the custom-step has to be added to</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">custom_operations</SPAN>}</SPAN>.{<SPAN class="element_dynamic">macrostepname</SPAN>}</SPAN>.{<SPAN class="element_self"><SPAN class="element_dynamic">microstepname</SPAN></SPAN>}</TD><TD class="parameter_type">Hash</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The micro-step the custom-step has to be added to</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">custom_operations</SPAN>}</SPAN>.{<SPAN class="element_dynamic">macrostepname</SPAN>}</SPAN>.{<SPAN class="element_dynamic">microstepname</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_dynamic">overwrite</SPAN></SPAN></TD><TD class="parameter_type">Boolean</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Overwrite the custom-steps that were add in the configuration by the administrators<BR><EM>Default value: </EM>false</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">custom_operations</SPAN>}</SPAN>.{<SPAN class="element_dynamic">macrostepname</SPAN>}</SPAN>.{<SPAN class="element_dynamic">microstepname</SPAN>}</SPAN>.[<SPAN class="element_self"><SPAN class="element_dynamic">where</SPAN></SPAN>]</TD><TD class="parameter_type">Array</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">A list of actions to be substitued/pre/post to this step<BR><EM>Expected values: </EM>substitute, pre-ops, post-ops</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">custom_operations</SPAN>}</SPAN>.{<SPAN class="element_dynamic">macrostepname</SPAN>}</SPAN>.{<SPAN class="element_dynamic">microstepname</SPAN>}</SPAN>.[<SPAN class="element_dynamic">where</SPAN>]</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">action</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The action that have to be performed<BR><EM>Expected values: </EM>run, send, exec</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">custom_operations</SPAN>}</SPAN>.{<SPAN class="element_dynamic">macrostepname</SPAN>}</SPAN>.{<SPAN class="element_dynamic">microstepname</SPAN>}</SPAN>.[<SPAN class="element_dynamic">where</SPAN>]</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">command</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">(To be specified if the action is "exec") The command to be executed. If you want to call a script, dont forget to add a "." (or use "source") before the script name to be able to use Kadeploy3 environment variables inside of it (example: "command: . /myscript.sh").</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">custom_operations</SPAN>}</SPAN>.{<SPAN class="element_dynamic">macrostepname</SPAN>}</SPAN>.{<SPAN class="element_dynamic">microstepname</SPAN>}</SPAN>.[<SPAN class="element_dynamic">where</SPAN>]</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">destination</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">(To be specified if the action is "send") The destination directory on the nodes (Kadeploy3 environment variables are substitued in the path)</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">custom_operations</SPAN>}</SPAN>.{<SPAN class="element_dynamic">macrostepname</SPAN>}</SPAN>.{<SPAN class="element_dynamic">microstepname</SPAN>}</SPAN>.[<SPAN class="element_dynamic">where</SPAN>]</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">file</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">(To be specified if the action is "send" or "run") The path to the file to be send/executed (if the action is "send" the file name will remains the same, if the action is "run" this file need to contain a script)</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">custom_operations</SPAN>}</SPAN>.{<SPAN class="element_dynamic">macrostepname</SPAN>}</SPAN>.{<SPAN class="element_dynamic">microstepname</SPAN>}</SPAN>.[<SPAN class="element_dynamic">where</SPAN>]</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">name</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The name of the custom operation</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">custom_operations</SPAN>}</SPAN>.{<SPAN class="element_dynamic">macrostepname</SPAN>}</SPAN>.{<SPAN class="element_dynamic">microstepname</SPAN>}</SPAN>.[<SPAN class="element_dynamic">where</SPAN>]</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">params</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">(To be specified if the action is "run") The parameters of the script.<BR><EM>Default value: </EM>empty string</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">custom_operations</SPAN>}</SPAN>.{<SPAN class="element_dynamic">macrostepname</SPAN>}</SPAN>.{<SPAN class="element_dynamic">microstepname</SPAN>}</SPAN>.[<SPAN class="element_dynamic">where</SPAN>]</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">retries</SPAN></SPAN></TD><TD class="parameter_type">Integer</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The number of retries for this custom operation<BR><EM>Default value: </EM>0</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">custom_operations</SPAN>}</SPAN>.{<SPAN class="element_dynamic">macrostepname</SPAN>}</SPAN>.{<SPAN class="element_dynamic">microstepname</SPAN>}</SPAN>.[<SPAN class="element_dynamic">where</SPAN>]</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">scattering</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The scattering kind for this custom operation<BR><EM>Expected values: </EM>tree, chain<BR><EM>Default value: </EM>tree</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">custom_operations</SPAN>}</SPAN>.{<SPAN class="element_dynamic">macrostepname</SPAN>}</SPAN>.{<SPAN class="element_dynamic">microstepname</SPAN>}</SPAN>.[<SPAN class="element_dynamic">where</SPAN>]</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">timeout</SPAN></SPAN></TD><TD class="parameter_type">Integer</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The timeout (seconds) of this custom operation<BR><EM>Default value: </EM>0</TD></TR></TABLE></DIV></DIV><DIV class="response_frame"><H3 class="response_title">Response <SPAN class="response_title_desc">(<SPAN class="response_type">Hash</SPAN>, <SPAN class="response_content">application/json</SPAN>)</SPAN></H3><DIV class="response_subframe"><H4 class="response_subtitle">Fields</H4><TABLE class="response_fields"><TR><TH>Name</TH><TH>Type</TH><TH>Description</TH></TR><TR class="field_frame"><TD class="field_name">{<SPAN class="element_self"><SPAN class="element_normal">resources</SPAN></SPAN>}</TD><TD class="field_type">Hash</TD><TD class="field_desc">The resources associated with the workflow and their URL</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent">{<SPAN class="element_normal">resources</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">debug</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">Concatenated debugs</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent">{<SPAN class="element_normal">resources</SPAN>}</SPAN>.{<SPAN class="element_self"><SPAN class="element_normal">debugs</SPAN></SPAN>}</TD><TD class="field_type">Hash</TD><TD class="field_desc">Debugs by node</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">resources</SPAN>}</SPAN>.{<SPAN class="element_normal">debugs</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_dynamic">nodename</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">Debug of node nodename</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent">{<SPAN class="element_normal">resources</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">error</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">Error message</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent">{<SPAN class="element_normal">resources</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">output</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">Concatenated outputs</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent">{<SPAN class="element_normal">resources</SPAN>}</SPAN>.{<SPAN class="element_self"><SPAN class="element_normal">outputs</SPAN></SPAN>}</TD><TD class="field_type">Hash</TD><TD class="field_desc">Outputs by cluster</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">resources</SPAN>}</SPAN>.{<SPAN class="element_normal">outputs</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_dynamic">clustername</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">Output of cluster clustername</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent">{<SPAN class="element_normal">resources</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">state</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">Deployment state of nodes</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent">{<SPAN class="element_normal">resources</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">status</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">Status of operation's instances (one instance by cluster)</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_normal">wid</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">The id# of the workflow that was initiated</TD></TR></TABLE><H4 class="response_subtitle">Return codes</H4><TABLE class="response_codes"><TR><TH>Code#</TH><TH>Description</TH></TR><TR class="code_frame"><TD class="code_number">200</TD><TD class="code_desc">OK, the request is successful</TD></TR><TR class="code_frame"><TD class="code_number">500</TD><TD class="code_desc">Internal Server Error, an uncatched exception was thrown on the server</TD></TR><TR class="code_frame"><TD class="code_number">400</TD><TD class="code_desc">Bad Request, Kadeploy Error: please check the X-Application-Error-Code and X-Application-Error-Code headers</TD></TR><TR class="code_frame"><TD class="code_number">401</TD><TD class="code_desc">Unauthorized, you need to be authenticated</TD></TR><TR class="code_frame"><TD class="code_number">403</TD><TD class="code_desc">Forbidden, you do not the rights to perform this operation. Unlike a 401 Unauthorized response, authenticating will make no difference.</TD></TR><TR class="code_frame"><TD class="code_number">415</TD><TD class="code_desc">Unsupported Media Type, check the Content-Type of your request's body</TD></TR></TABLE></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #1 <SPAN class="example_desc">Deploy a recorded environment</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">POST /deployment HTTP/1.1 Accept: text/plain, application/json Host: kadeploy.testbed.lan:25300 X-Kadeploy-User: frontend @@ -987,7 +987,7 @@ Content-Length: 555 "status": "/deployment/D-bf5608b0-9354-446b-a648-c3abaa3cab95/status", "error": "/deployment/D-bf5608b0-9354-446b-a648-c3abaa3cab95/error" } -}</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #2 <SPAN class="example_desc">Perform a simple reboot</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">POST /reboot HTTP/1.1 +}</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #2 <SPAN class="example_desc">Perform a simple reboot</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">POST /reboot HTTP/1.1 Accept: text/plain, application/json Host: kadeploy.testbed.lan:25300 X-Kadeploy-User: frontend @@ -1015,7 +1015,7 @@ Content-Length: 533 "status": "/reboot/R-6b7950ee-8889-4e0a-810e-9cb8db5286f7/status", "error": "/reboot/R-6b7950ee-8889-4e0a-810e-9cb8db5286f7/error" } -}</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #3 <SPAN class="example_desc">Perform a power-off</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">PUT /power HTTP/1.1 +}</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #3 <SPAN class="example_desc">Perform a power-off</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">PUT /power HTTP/1.1 Accept: text/plain, application/json Host: kadeploy.testbed.lan:25300 X-Kadeploy-User: frontend @@ -1042,7 +1042,7 @@ Content-Length: 527 "status": "/power/P-e69b39a2-8b5b-416e-b016-7139b5a7e255/status", "error": "/power/P-e69b39a2-8b5b-416e-b016-7139b5a7e255/error" } -}</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #4 <SPAN class="example_desc">Launch a deployment with some custom operations</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">POST /deployment HTTP/1.1 +}</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #4 <SPAN class="example_desc">Launch a deployment with some custom operations</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">POST /deployment HTTP/1.1 Accept: text/plain, application/json Host: kadeploy.testbed.lan:25300 X-Kadeploy-User: frontend @@ -1117,7 +1117,7 @@ Content-Length: 555 "status": "/deployment/D-4fd6eeae-d0c3-4d29-ac58-691dd114a63d/status", "error": "/deployment/D-4fd6eeae-d0c3-4d29-ac58-691dd114a63d/error" } -}</PRE></DIV></DIV></DIV></DIV><P class="operation_back_link"><A class="operation_back_link" href="#Workflow-based operations">Back to operation</A></P><HR class="operation_inter_sep"><DIV class="resource_frame"><H2 class="resource_title"><A id="GET/%OPERATION"><B class="resource_method_GET">GET</B> <SPAN style="font-family: monospace;" class="resource_path">/%OPERATION</SPAN></A></H2><P class="resource_desc">Get the workflow information of every running operation of the kind OPERATION</P><DIV class="request_frame"><H3 class="request_title">Request <SPAN class="request_title_desc">(<SPAN class="request_type">Hash</SPAN>, <SPAN class="request_content">application/json</SPAN>)</SPAN></H3><DIV class="request_subframe"><H4 class="request_subtitle">Parameters</H4><TABLE class="request_parameters"><TR><TH>Name</TH><TH>Type</TH><TH>Kind</TH><TH>Description</TH></TR></TABLE></DIV></DIV><DIV class="response_frame"><H3 class="response_title">Response <SPAN class="response_title_desc">(<SPAN class="response_type">Hash</SPAN>, <SPAN class="response_content">application/json</SPAN>)</SPAN></H3><DIV class="response_subframe"><H4 class="response_subtitle">Fields</H4><TABLE class="response_fields"><TR><TH>Name</TH><TH>Type</TH><TH>Description</TH></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_iter">#i</SPAN></SPAN></TD><TD class="field_type"><A href="#type_Workflow">Workflow</A></TD><TD class="field_desc">The list of current operation's worklow information</TD></TR></TABLE><H4 class="response_subtitle">Return codes</H4><TABLE class="response_codes"><TR><TH>Code#</TH><TH>Description</TH></TR><TR class="code_frame"><TD class="code_number">200</TD><TD class="code_desc">OK, the request is successful</TD></TR><TR class="code_frame"><TD class="code_number">500</TD><TD class="code_desc">Internal Server Error, an uncatched exception was thrown on the server</TD></TR><TR class="code_frame"><TD class="code_number">400</TD><TD class="code_desc">Bad Request, Kadeploy Error: please check the X-Application-Error-Code and X-Application-Error-Code headers</TD></TR><TR class="code_frame"><TD class="code_number">401</TD><TD class="code_desc">Unauthorized, you need to be authenticated</TD></TR><TR class="code_frame"><TD class="code_number">403</TD><TD class="code_desc">Forbidden, you do not the rights to perform this operation. Unlike a 401 Unauthorized response, authenticating will make no difference.</TD></TR><TR class="code_frame"><TD class="code_number">415</TD><TD class="code_desc">Unsupported Media Type, check the Content-Type of your request's body</TD></TR></TABLE></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #1 <SPAN class="example_desc">Get the list of current deployments</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">GET /deployment HTTP/1.1 +}</PRE></DIV></DIV></DIV></DIV><P class="operation_back_link"><A class="operation_back_link" href="#Workflow-based operations">Back to operation</A></P><HR class="operation_inter_sep"><DIV class="resource_frame"><H2 class="resource_title"><A id="GET/%OPERATION"><B class="resource_method_GET">GET</B> <SPAN style="font-family: monospace;" class="resource_path">/%OPERATION</SPAN></A></H2><P class="resource_desc">Get the workflow information of every running operation of the kind OPERATION</P><DIV class="request_frame"><H3 class="request_title">Request <SPAN class="request_title_desc">(<SPAN class="request_type">Hash</SPAN>, <SPAN class="request_content">application/json</SPAN>)</SPAN></H3><DIV class="request_subframe"><H4 class="request_subtitle">Parameters</H4><TABLE class="request_parameters"><TR><TH>Name</TH><TH>Type</TH><TH>Kind</TH><TH>Description</TH></TR></TABLE></DIV></DIV><DIV class="response_frame"><H3 class="response_title">Response <SPAN class="response_title_desc">(<SPAN class="response_type">Hash</SPAN>, <SPAN class="response_content">application/json</SPAN>)</SPAN></H3><DIV class="response_subframe"><H4 class="response_subtitle">Fields</H4><TABLE class="response_fields"><TR><TH>Name</TH><TH>Type</TH><TH>Description</TH></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_iter">#i</SPAN></SPAN></TD><TD class="field_type"><A href="#type_Workflow">Workflow</A></TD><TD class="field_desc">The list of current operation's worklow information</TD></TR></TABLE><H4 class="response_subtitle">Return codes</H4><TABLE class="response_codes"><TR><TH>Code#</TH><TH>Description</TH></TR><TR class="code_frame"><TD class="code_number">200</TD><TD class="code_desc">OK, the request is successful</TD></TR><TR class="code_frame"><TD class="code_number">500</TD><TD class="code_desc">Internal Server Error, an uncatched exception was thrown on the server</TD></TR><TR class="code_frame"><TD class="code_number">400</TD><TD class="code_desc">Bad Request, Kadeploy Error: please check the X-Application-Error-Code and X-Application-Error-Code headers</TD></TR><TR class="code_frame"><TD class="code_number">401</TD><TD class="code_desc">Unauthorized, you need to be authenticated</TD></TR><TR class="code_frame"><TD class="code_number">403</TD><TD class="code_desc">Forbidden, you do not the rights to perform this operation. Unlike a 401 Unauthorized response, authenticating will make no difference.</TD></TR><TR class="code_frame"><TD class="code_number">415</TD><TD class="code_desc">Unsupported Media Type, check the Content-Type of your request's body</TD></TR></TABLE></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #1 <SPAN class="example_desc">Get the list of current deployments</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">GET /deployment HTTP/1.1 Accept: text/plain, application/json Host: kadeploy.testbed.lan:25300 X-Kadeploy-User: frontend</PRE><H4 class="example_subtitle">Response</H4><PRE class="code_sample">HTTP/1.1 200 OK @@ -1156,7 +1156,7 @@ Content-Length: 578 "node-1.testbed.lan" ] } -]</PRE></DIV></DIV></DIV></DIV><P class="operation_back_link"><A class="operation_back_link" href="#Workflow-based operations">Back to operation</A></P><HR class="operation_inter_sep"><DIV class="resource_frame"><H2 class="resource_title"><A id="GET/%OPERATION/:id"><B class="resource_method_GET">GET</B> <SPAN style="font-family: monospace;" class="resource_path">/%OPERATION/:id</SPAN></A></H2><P class="resource_desc">Get the workflow information (polling) of an operation</P><DIV class="request_frame"><H3 class="request_title">Request <SPAN class="request_title_desc">(<SPAN class="request_type">Hash</SPAN>, <SPAN class="request_content">application/json</SPAN>)</SPAN></H3><DIV class="request_subframe"><H4 class="request_subtitle">Parameters</H4><TABLE class="request_parameters"><TR><TH>Name</TH><TH>Type</TH><TH>Kind</TH><TH>Description</TH></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_param">id</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The id# of the operation</TD></TR></TABLE></DIV></DIV><DIV class="response_frame"><H3 class="response_title">Response <SPAN class="response_title_desc">(<SPAN class="response_type">Hash</SPAN>, <SPAN class="response_content">application/json</SPAN>)</SPAN></H3><DIV class="response_subframe"><H4 class="response_subtitle">Fields</H4><TABLE class="response_fields"><TR><TH>Name</TH><TH>Type</TH><TH>Description</TH></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_dynamic"></SPAN></SPAN></TD><TD class="field_type"><A href="#type_Workflow">Workflow</A></TD><TD class="field_desc">The workflow information related to the operation #:id</TD></TR></TABLE><H4 class="response_subtitle">Return codes</H4><TABLE class="response_codes"><TR><TH>Code#</TH><TH>Description</TH></TR><TR class="code_frame"><TD class="code_number">200</TD><TD class="code_desc">OK, the request is successful</TD></TR><TR class="code_frame"><TD class="code_number">500</TD><TD class="code_desc">Internal Server Error, an uncatched exception was thrown on the server</TD></TR><TR class="code_frame"><TD class="code_number">400</TD><TD class="code_desc">Bad Request, Kadeploy Error: please check the X-Application-Error-Code and X-Application-Error-Code headers</TD></TR><TR class="code_frame"><TD class="code_number">401</TD><TD class="code_desc">Unauthorized, you need to be authenticated</TD></TR><TR class="code_frame"><TD class="code_number">403</TD><TD class="code_desc">Forbidden, you do not the rights to perform this operation. Unlike a 401 Unauthorized response, authenticating will make no difference.</TD></TR><TR class="code_frame"><TD class="code_number">415</TD><TD class="code_desc">Unsupported Media Type, check the Content-Type of your request's body</TD></TR><TR class="code_frame"><TD class="code_number">404</TD><TD class="code_desc">File not found, the workflow :id cannot be found</TD></TR></TABLE></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #1 <SPAN class="example_desc">Gather a specific deployment status</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">GET /deployment/D-bed42b5d-f667-4701-adf3-2be22dfe7853 HTTP/1.1 +]</PRE></DIV></DIV></DIV></DIV><P class="operation_back_link"><A class="operation_back_link" href="#Workflow-based operations">Back to operation</A></P><HR class="operation_inter_sep"><DIV class="resource_frame"><H2 class="resource_title"><A id="GET/%OPERATION/:id"><B class="resource_method_GET">GET</B> <SPAN style="font-family: monospace;" class="resource_path">/%OPERATION/:id</SPAN></A></H2><P class="resource_desc">Get the workflow information (polling) of an operation</P><DIV class="request_frame"><H3 class="request_title">Request <SPAN class="request_title_desc">(<SPAN class="request_type">Hash</SPAN>, <SPAN class="request_content">application/json</SPAN>)</SPAN></H3><DIV class="request_subframe"><H4 class="request_subtitle">Parameters</H4><TABLE class="request_parameters"><TR><TH>Name</TH><TH>Type</TH><TH>Kind</TH><TH>Description</TH></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_param">id</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The id# of the operation</TD></TR></TABLE></DIV></DIV><DIV class="response_frame"><H3 class="response_title">Response <SPAN class="response_title_desc">(<SPAN class="response_type">Hash</SPAN>, <SPAN class="response_content">application/json</SPAN>)</SPAN></H3><DIV class="response_subframe"><H4 class="response_subtitle">Fields</H4><TABLE class="response_fields"><TR><TH>Name</TH><TH>Type</TH><TH>Description</TH></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_dynamic"></SPAN></SPAN></TD><TD class="field_type"><A href="#type_Workflow">Workflow</A></TD><TD class="field_desc">The workflow information related to the operation #:id</TD></TR></TABLE><H4 class="response_subtitle">Return codes</H4><TABLE class="response_codes"><TR><TH>Code#</TH><TH>Description</TH></TR><TR class="code_frame"><TD class="code_number">200</TD><TD class="code_desc">OK, the request is successful</TD></TR><TR class="code_frame"><TD class="code_number">500</TD><TD class="code_desc">Internal Server Error, an uncatched exception was thrown on the server</TD></TR><TR class="code_frame"><TD class="code_number">400</TD><TD class="code_desc">Bad Request, Kadeploy Error: please check the X-Application-Error-Code and X-Application-Error-Code headers</TD></TR><TR class="code_frame"><TD class="code_number">401</TD><TD class="code_desc">Unauthorized, you need to be authenticated</TD></TR><TR class="code_frame"><TD class="code_number">403</TD><TD class="code_desc">Forbidden, you do not the rights to perform this operation. Unlike a 401 Unauthorized response, authenticating will make no difference.</TD></TR><TR class="code_frame"><TD class="code_number">415</TD><TD class="code_desc">Unsupported Media Type, check the Content-Type of your request's body</TD></TR><TR class="code_frame"><TD class="code_number">404</TD><TD class="code_desc">File not found, the workflow :id cannot be found</TD></TR></TABLE></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #1 <SPAN class="example_desc">Gather a specific deployment status</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">GET /deployment/D-bed42b5d-f667-4701-adf3-2be22dfe7853 HTTP/1.1 Accept: text/plain, application/json Host: kadeploy.testbed.lan:25300 X-Kadeploy-User: frontend</PRE><H4 class="example_subtitle">Response</H4><PRE class="code_sample">HTTP/1.1 200 OK @@ -1184,7 +1184,7 @@ Content-Length: 383 "node-2.testbed.lan" ] }, -}</PRE></DIV></DIV></DIV></DIV><P class="operation_back_link"><A class="operation_back_link" href="#Workflow-based operations">Back to operation</A></P><HR class="operation_inter_sep"><DIV class="resource_frame"><H2 class="resource_title"><A id="GET/%OPERATION/:id/logs/:cluster?"><B class="resource_method_GET">GET</B> <SPAN style="font-family: monospace;" class="resource_path">/%OPERATION/:id/logs/:cluster?</SPAN></A></H2><P class="resource_desc">Get logs of a running operation (the "logs" field was set to true on the workflow's info)</P><DIV class="request_frame"><H3 class="request_title">Request <SPAN class="request_title_desc">(<SPAN class="request_type">Hash</SPAN>, <SPAN class="request_content">application/json</SPAN>)</SPAN></H3><DIV class="request_subframe"><H4 class="request_subtitle">Parameters</H4><TABLE class="request_parameters"><TR><TH>Name</TH><TH>Type</TH><TH>Kind</TH><TH>Description</TH></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_param">id</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The id# of the operation</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_param">cluster</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The name of the specific cluster to get the logs for</TD></TR></TABLE></DIV></DIV><DIV class="response_frame"><H3 class="response_title">Response <SPAN class="response_title_desc">(<SPAN class="response_type">String</SPAN>, <SPAN class="response_content">text/plain</SPAN>)</SPAN></H3><DIV class="response_subframe"><H4 class="response_subtitle">Fields</H4><TABLE class="response_fields"><TR><TH>Name</TH><TH>Type</TH><TH>Description</TH></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_dynamic"></SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">The logs of the current operation prefixed by the timestamp of each line plus '|' in order to be able to sort them</TD></TR></TABLE><H4 class="response_subtitle">Return codes</H4><TABLE class="response_codes"><TR><TH>Code#</TH><TH>Description</TH></TR><TR class="code_frame"><TD class="code_number">200</TD><TD class="code_desc">OK, the request is successful</TD></TR><TR class="code_frame"><TD class="code_number">500</TD><TD class="code_desc">Internal Server Error, an uncatched exception was thrown on the server</TD></TR><TR class="code_frame"><TD class="code_number">400</TD><TD class="code_desc">Bad Request, Kadeploy Error: please check the X-Application-Error-Code and X-Application-Error-Code headers</TD></TR><TR class="code_frame"><TD class="code_number">401</TD><TD class="code_desc">Unauthorized, you need to be authenticated</TD></TR><TR class="code_frame"><TD class="code_number">403</TD><TD class="code_desc">Forbidden, you do not the rights to perform this operation. Unlike a 401 Unauthorized response, authenticating will make no difference.</TD></TR><TR class="code_frame"><TD class="code_number">415</TD><TD class="code_desc">Unsupported Media Type, check the Content-Type of your request's body</TD></TR><TR class="code_frame"><TD class="code_number">404</TD><TD class="code_desc">File not found, the workflow :id cannot be found</TD></TR></TABLE></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #1 <SPAN class="example_desc">Gather a specific deployment logs</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">GET /deployment/D-f98782d7-f45b-4895-8bf5-80fd421e5d8d/logs HTTP/1.1 +}</PRE></DIV></DIV></DIV></DIV><P class="operation_back_link"><A class="operation_back_link" href="#Workflow-based operations">Back to operation</A></P><HR class="operation_inter_sep"><DIV class="resource_frame"><H2 class="resource_title"><A id="GET/%OPERATION/:id/logs/:cluster?"><B class="resource_method_GET">GET</B> <SPAN style="font-family: monospace;" class="resource_path">/%OPERATION/:id/logs/:cluster?</SPAN></A></H2><P class="resource_desc">Get logs of a running operation (the "logs" field was set to true on the workflow's info)</P><DIV class="request_frame"><H3 class="request_title">Request <SPAN class="request_title_desc">(<SPAN class="request_type">Hash</SPAN>, <SPAN class="request_content">application/json</SPAN>)</SPAN></H3><DIV class="request_subframe"><H4 class="request_subtitle">Parameters</H4><TABLE class="request_parameters"><TR><TH>Name</TH><TH>Type</TH><TH>Kind</TH><TH>Description</TH></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_param">id</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The id# of the operation</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_param">cluster</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The name of the specific cluster to get the logs for</TD></TR></TABLE></DIV></DIV><DIV class="response_frame"><H3 class="response_title">Response <SPAN class="response_title_desc">(<SPAN class="response_type">String</SPAN>, <SPAN class="response_content">text/plain</SPAN>)</SPAN></H3><DIV class="response_subframe"><H4 class="response_subtitle">Fields</H4><TABLE class="response_fields"><TR><TH>Name</TH><TH>Type</TH><TH>Description</TH></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_dynamic"></SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">The logs of the current operation prefixed by the timestamp of each line plus '|' in order to be able to sort them</TD></TR></TABLE><H4 class="response_subtitle">Return codes</H4><TABLE class="response_codes"><TR><TH>Code#</TH><TH>Description</TH></TR><TR class="code_frame"><TD class="code_number">200</TD><TD class="code_desc">OK, the request is successful</TD></TR><TR class="code_frame"><TD class="code_number">500</TD><TD class="code_desc">Internal Server Error, an uncatched exception was thrown on the server</TD></TR><TR class="code_frame"><TD class="code_number">400</TD><TD class="code_desc">Bad Request, Kadeploy Error: please check the X-Application-Error-Code and X-Application-Error-Code headers</TD></TR><TR class="code_frame"><TD class="code_number">401</TD><TD class="code_desc">Unauthorized, you need to be authenticated</TD></TR><TR class="code_frame"><TD class="code_number">403</TD><TD class="code_desc">Forbidden, you do not the rights to perform this operation. Unlike a 401 Unauthorized response, authenticating will make no difference.</TD></TR><TR class="code_frame"><TD class="code_number">415</TD><TD class="code_desc">Unsupported Media Type, check the Content-Type of your request's body</TD></TR><TR class="code_frame"><TD class="code_number">404</TD><TD class="code_desc">File not found, the workflow :id cannot be found</TD></TR></TABLE></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #1 <SPAN class="example_desc">Gather a specific deployment logs</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">GET /deployment/D-f98782d7-f45b-4895-8bf5-80fd421e5d8d/logs HTTP/1.1 Accept: text/plain, application/json Host: kadeploy.testbed.lan:25300 X-Kadeploy-User: frontend</PRE><H4 class="example_subtitle">Response</H4><PRE class="code_sample">HTTP/1.1 200 OK @@ -1195,7 +1195,7 @@ Content-Length: 288 1381236580.19662| switch_pxe 1381236580.70964| reboot 1381236580.70982| * Performing a soft reboot on node-1.testbed.lan -1381236590.22287| wait_reboot</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #2 <SPAN class="example_desc">Gather logs of a specific cluster</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">GET /deployment/D-f98782d7-f45b-4895-8bf5-80fd421e5d8d/logs/graphene-cluster HTTP/1.1 +1381236590.22287| wait_reboot</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #2 <SPAN class="example_desc">Gather logs of a specific cluster</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">GET /deployment/D-f98782d7-f45b-4895-8bf5-80fd421e5d8d/logs/graphene-cluster HTTP/1.1 Accept: text/plain, application/json Host: kadeploy.testbed.lan:25300 X-Kadeploy-User: frontend</PRE><H4 class="example_subtitle">Response</H4><PRE class="code_sample">HTTP/1.1 200 OK @@ -1223,7 +1223,7 @@ Content-Length: 1054 1381236761.43468| wait_reboot 1381236803.43984|End of step Deploy[BootNewEnvKexec] after 45s 1381236803.45057|End of deployment for node-1.testbed.lan after 223s -1381236803.89096|End of deployment on cluster griffon-cluster after 223s</PRE></DIV></DIV></DIV></DIV><P class="operation_back_link"><A class="operation_back_link" href="#Workflow-based operations">Back to operation</A></P><HR class="operation_inter_sep"><DIV class="resource_frame"><H2 class="resource_title"><A id="GET/%OPERATION/:id/debugs/:node?"><B class="resource_method_GET">GET</B> <SPAN style="font-family: monospace;" class="resource_path">/%OPERATION/:id/debugs/:node?</SPAN></A></H2><P class="resource_desc">Gather the command's debugs of some/every nodes (the "debugs" field was set to true on the workflow's info)</P><DIV class="request_frame"><H3 class="request_title">Request <SPAN class="request_title_desc">(<SPAN class="request_type">Hash</SPAN>, <SPAN class="request_content">application/json</SPAN>)</SPAN></H3><DIV class="request_subframe"><H4 class="request_subtitle">Parameters</H4><TABLE class="request_parameters"><TR><TH>Name</TH><TH>Type</TH><TH>Kind</TH><TH>Description</TH></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_param">id</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The id# of the operation</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_param">node</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The name of the specific node to get the debugs for</TD></TR></TABLE></DIV></DIV><DIV class="response_frame"><H3 class="response_title">Response <SPAN class="response_title_desc">(<SPAN class="response_type">String</SPAN>, <SPAN class="response_content">text/plain</SPAN>)</SPAN></H3><DIV class="response_subframe"><H4 class="response_subtitle">Fields</H4><TABLE class="response_fields"><TR><TH>Name</TH><TH>Type</TH><TH>Description</TH></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_dynamic"></SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">The logs of the current operation prefixed by the timestamp of each line plus '|' in order to be able to sort them</TD></TR></TABLE><H4 class="response_subtitle">Return codes</H4><TABLE class="response_codes"><TR><TH>Code#</TH><TH>Description</TH></TR><TR class="code_frame"><TD class="code_number">200</TD><TD class="code_desc">OK, the request is successful</TD></TR><TR class="code_frame"><TD class="code_number">500</TD><TD class="code_desc">Internal Server Error, an uncatched exception was thrown on the server</TD></TR><TR class="code_frame"><TD class="code_number">400</TD><TD class="code_desc">Bad Request, Kadeploy Error: please check the X-Application-Error-Code and X-Application-Error-Code headers</TD></TR><TR class="code_frame"><TD class="code_number">401</TD><TD class="code_desc">Unauthorized, you need to be authenticated</TD></TR><TR class="code_frame"><TD class="code_number">403</TD><TD class="code_desc">Forbidden, you do not the rights to perform this operation. Unlike a 401 Unauthorized response, authenticating will make no difference.</TD></TR><TR class="code_frame"><TD class="code_number">415</TD><TD class="code_desc">Unsupported Media Type, check the Content-Type of your request's body</TD></TR><TR class="code_frame"><TD class="code_number">404</TD><TD class="code_desc">File not found, the workflow :id cannot be found</TD></TR></TABLE></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #1 <SPAN class="example_desc">Get debugs of every nodes</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">GET /deployment/D-1267f271-d078-491a-9e2e-f2bfed571c4d/debugs HTTP/1.1 +1381236803.89096|End of deployment on cluster griffon-cluster after 223s</PRE></DIV></DIV></DIV></DIV><P class="operation_back_link"><A class="operation_back_link" href="#Workflow-based operations">Back to operation</A></P><HR class="operation_inter_sep"><DIV class="resource_frame"><H2 class="resource_title"><A id="GET/%OPERATION/:id/debugs/:node?"><B class="resource_method_GET">GET</B> <SPAN style="font-family: monospace;" class="resource_path">/%OPERATION/:id/debugs/:node?</SPAN></A></H2><P class="resource_desc">Gather the command's debugs of some/every nodes (the "debugs" field was set to true on the workflow's info)</P><DIV class="request_frame"><H3 class="request_title">Request <SPAN class="request_title_desc">(<SPAN class="request_type">Hash</SPAN>, <SPAN class="request_content">application/json</SPAN>)</SPAN></H3><DIV class="request_subframe"><H4 class="request_subtitle">Parameters</H4><TABLE class="request_parameters"><TR><TH>Name</TH><TH>Type</TH><TH>Kind</TH><TH>Description</TH></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_param">id</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The id# of the operation</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_param">node</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The name of the specific node to get the debugs for</TD></TR></TABLE></DIV></DIV><DIV class="response_frame"><H3 class="response_title">Response <SPAN class="response_title_desc">(<SPAN class="response_type">String</SPAN>, <SPAN class="response_content">text/plain</SPAN>)</SPAN></H3><DIV class="response_subframe"><H4 class="response_subtitle">Fields</H4><TABLE class="response_fields"><TR><TH>Name</TH><TH>Type</TH><TH>Description</TH></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_dynamic"></SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">The logs of the current operation prefixed by the timestamp of each line plus '|' in order to be able to sort them</TD></TR></TABLE><H4 class="response_subtitle">Return codes</H4><TABLE class="response_codes"><TR><TH>Code#</TH><TH>Description</TH></TR><TR class="code_frame"><TD class="code_number">200</TD><TD class="code_desc">OK, the request is successful</TD></TR><TR class="code_frame"><TD class="code_number">500</TD><TD class="code_desc">Internal Server Error, an uncatched exception was thrown on the server</TD></TR><TR class="code_frame"><TD class="code_number">400</TD><TD class="code_desc">Bad Request, Kadeploy Error: please check the X-Application-Error-Code and X-Application-Error-Code headers</TD></TR><TR class="code_frame"><TD class="code_number">401</TD><TD class="code_desc">Unauthorized, you need to be authenticated</TD></TR><TR class="code_frame"><TD class="code_number">403</TD><TD class="code_desc">Forbidden, you do not the rights to perform this operation. Unlike a 401 Unauthorized response, authenticating will make no difference.</TD></TR><TR class="code_frame"><TD class="code_number">415</TD><TD class="code_desc">Unsupported Media Type, check the Content-Type of your request's body</TD></TR><TR class="code_frame"><TD class="code_number">404</TD><TD class="code_desc">File not found, the workflow :id cannot be found</TD></TR></TABLE></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #1 <SPAN class="example_desc">Get debugs of every nodes</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">GET /deployment/D-1267f271-d078-491a-9e2e-f2bfed571c4d/debugs HTTP/1.1 Accept: text/plain, application/json Host: kadeploy.testbed.lan:25300 X-Kadeploy-User: frontend</PRE><H4 class="example_subtitle">Response</H4><PRE class="code_sample">HTTP/1.1 200 OK @@ -1268,7 +1268,7 @@ X-Kadeploy-User: frontend</PRE><H4 class="example_subtitle">Response</H4><PRE cl " -o connector="$type/$pid/$host/".length("$command").":$command".length("$line").":$line"." " -o state="$type/$pid/$host/".length("$command").":$command".length("$line").":$line".length("$peer").":$peer"." " -o info -o message -o taktuk -m 192.168.209.89 -m 192.168.209.90 broadcast exec [ mkdir -p /mnt/dest; umount /dev/sda3 2>/dev/null; mkfs -t ext3 -q -b 4096 -O sparse_super,filetype,resize_inode,dir_index /dev/sda3 ] - 1381238180.50833|STATUS: 0</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #2 <SPAN class="example_desc">Get debugs of a specific node</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">GET /deployment/D-1267f271-d078-491a-9e2e-f2bfed571c4d/debugs/node-1.testbed.lan HTTP/1.1 + 1381238180.50833|STATUS: 0</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #2 <SPAN class="example_desc">Get debugs of a specific node</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">GET /deployment/D-1267f271-d078-491a-9e2e-f2bfed571c4d/debugs/node-1.testbed.lan HTTP/1.1 Accept: text/plain, application/json Host: kadeploy.testbed.lan:25300 X-Kadeploy-User: frontend</PRE><H4 class="example_subtitle">Response</H4><PRE class="code_sample">HTTP/1.1 200 OK @@ -1297,7 +1297,7 @@ Content-Length: 2244 1381237762.64785|STDOUT: griffon-89.nancy.grid5000.fr 1381237762.64787|STDERR: Warning: Permanently added 'kavlan-2.nancy.grid5000.fr,172.16.79.121' (RSA) to the list of known hosts. 1381237762.64788|STDERR: Warning: Permanently added 'kavlan-2.nancy.grid5000.fr,172.16.79.121' (RSA) to the list of known hosts. -1381237762.64790|STATUS: 0</PRE></DIV></DIV></DIV></DIV><P class="operation_back_link"><A class="operation_back_link" href="#Workflow-based operations">Back to operation</A></P><HR class="operation_inter_sep"><DIV class="resource_frame"><H2 class="resource_title"><A id="GET/%OPERATION/:id/state"><B class="resource_method_GET">GET</B> <SPAN style="font-family: monospace;" class="resource_path">/%OPERATION/:id/state</SPAN></A></H2><P class="resource_desc">Get the state of every nodes in a specific operation. Available when the operation is done.</P><DIV class="request_frame"><H3 class="request_title">Request <SPAN class="request_title_desc">(<SPAN class="request_type">Hash</SPAN>, <SPAN class="request_content">application/json</SPAN>)</SPAN></H3><DIV class="request_subframe"><H4 class="request_subtitle">Parameters</H4><TABLE class="request_parameters"><TR><TH>Name</TH><TH>Type</TH><TH>Kind</TH><TH>Description</TH></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_param">id</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The id# of the operation</TD></TR></TABLE></DIV></DIV><DIV class="response_frame"><H3 class="response_title">Response <SPAN class="response_title_desc">(<SPAN class="response_type">Hash</SPAN>, <SPAN class="response_content">application/json</SPAN>)</SPAN></H3><DIV class="response_subframe"><H4 class="response_subtitle">Fields</H4><TABLE class="response_fields"><TR><TH>Name</TH><TH>Type</TH><TH>Description</TH></TR><TR class="field_frame"><TD class="field_name">{<SPAN class="element_self"><SPAN class="element_dynamic">nodename</SPAN></SPAN>}</TD><TD class="field_type">Hash</TD><TD class="field_desc">The state of the node nodename</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent">{<SPAN class="element_dynamic">nodename</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">error</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">If the node is KO, contains the error message</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent">{<SPAN class="element_dynamic">nodename</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">macro</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">The macro-step operation the node is performing</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent">{<SPAN class="element_dynamic">nodename</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">micro</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">The micro-step operation the node is performing</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent">{<SPAN class="element_dynamic">nodename</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">state</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">The state of the node</TD></TR></TABLE><H4 class="response_subtitle">Return codes</H4><TABLE class="response_codes"><TR><TH>Code#</TH><TH>Description</TH></TR><TR class="code_frame"><TD class="code_number">200</TD><TD class="code_desc">OK, the request is successful</TD></TR><TR class="code_frame"><TD class="code_number">500</TD><TD class="code_desc">Internal Server Error, an uncatched exception was thrown on the server</TD></TR><TR class="code_frame"><TD class="code_number">400</TD><TD class="code_desc">Bad Request, Kadeploy Error: please check the X-Application-Error-Code and X-Application-Error-Code headers</TD></TR><TR class="code_frame"><TD class="code_number">401</TD><TD class="code_desc">Unauthorized, you need to be authenticated</TD></TR><TR class="code_frame"><TD class="code_number">403</TD><TD class="code_desc">Forbidden, you do not the rights to perform this operation. Unlike a 401 Unauthorized response, authenticating will make no difference.</TD></TR><TR class="code_frame"><TD class="code_number">415</TD><TD class="code_desc">Unsupported Media Type, check the Content-Type of your request's body</TD></TR><TR class="code_frame"><TD class="code_number">404</TD><TD class="code_desc">File not found, the workflow :id cannot be found</TD></TR></TABLE></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #1 <SPAN class="example_desc">Get state of a specific deployment</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">GET /deployment/D-877303c3-e838-4cbf-b7e3-c9862baab93f/state HTTP/1.1 +1381237762.64790|STATUS: 0</PRE></DIV></DIV></DIV></DIV><P class="operation_back_link"><A class="operation_back_link" href="#Workflow-based operations">Back to operation</A></P><HR class="operation_inter_sep"><DIV class="resource_frame"><H2 class="resource_title"><A id="GET/%OPERATION/:id/state"><B class="resource_method_GET">GET</B> <SPAN style="font-family: monospace;" class="resource_path">/%OPERATION/:id/state</SPAN></A></H2><P class="resource_desc">Get the state of every nodes in a specific operation. Available when the operation is done.</P><DIV class="request_frame"><H3 class="request_title">Request <SPAN class="request_title_desc">(<SPAN class="request_type">Hash</SPAN>, <SPAN class="request_content">application/json</SPAN>)</SPAN></H3><DIV class="request_subframe"><H4 class="request_subtitle">Parameters</H4><TABLE class="request_parameters"><TR><TH>Name</TH><TH>Type</TH><TH>Kind</TH><TH>Description</TH></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_param">id</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The id# of the operation</TD></TR></TABLE></DIV></DIV><DIV class="response_frame"><H3 class="response_title">Response <SPAN class="response_title_desc">(<SPAN class="response_type">Hash</SPAN>, <SPAN class="response_content">application/json</SPAN>)</SPAN></H3><DIV class="response_subframe"><H4 class="response_subtitle">Fields</H4><TABLE class="response_fields"><TR><TH>Name</TH><TH>Type</TH><TH>Description</TH></TR><TR class="field_frame"><TD class="field_name">{<SPAN class="element_self"><SPAN class="element_dynamic">nodename</SPAN></SPAN>}</TD><TD class="field_type">Hash</TD><TD class="field_desc">The state of the node nodename</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent">{<SPAN class="element_dynamic">nodename</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">error</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">If the node is KO, contains the error message</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent">{<SPAN class="element_dynamic">nodename</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">macro</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">The macro-step operation the node is performing</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent">{<SPAN class="element_dynamic">nodename</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">micro</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">The micro-step operation the node is performing</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent">{<SPAN class="element_dynamic">nodename</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">state</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">The state of the node</TD></TR></TABLE><H4 class="response_subtitle">Return codes</H4><TABLE class="response_codes"><TR><TH>Code#</TH><TH>Description</TH></TR><TR class="code_frame"><TD class="code_number">200</TD><TD class="code_desc">OK, the request is successful</TD></TR><TR class="code_frame"><TD class="code_number">500</TD><TD class="code_desc">Internal Server Error, an uncatched exception was thrown on the server</TD></TR><TR class="code_frame"><TD class="code_number">400</TD><TD class="code_desc">Bad Request, Kadeploy Error: please check the X-Application-Error-Code and X-Application-Error-Code headers</TD></TR><TR class="code_frame"><TD class="code_number">401</TD><TD class="code_desc">Unauthorized, you need to be authenticated</TD></TR><TR class="code_frame"><TD class="code_number">403</TD><TD class="code_desc">Forbidden, you do not the rights to perform this operation. Unlike a 401 Unauthorized response, authenticating will make no difference.</TD></TR><TR class="code_frame"><TD class="code_number">415</TD><TD class="code_desc">Unsupported Media Type, check the Content-Type of your request's body</TD></TR><TR class="code_frame"><TD class="code_number">404</TD><TD class="code_desc">File not found, the workflow :id cannot be found</TD></TR></TABLE></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #1 <SPAN class="example_desc">Get state of a specific deployment</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">GET /deployment/D-877303c3-e838-4cbf-b7e3-c9862baab93f/state HTTP/1.1 Accept: text/plain, application/json Host: kadeploy.testbed.lan:25300 X-Kadeploy-User: frontend</PRE><H4 class="example_subtitle">Response</H4><PRE class="code_sample">HTTP/1.1 200 OK @@ -1314,7 +1314,7 @@ Content-Length: 272 "micro": "wait_reboot", "state": "reboot_in_progress" } -}</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #2 <SPAN class="example_desc">Get state of a specific power operation</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">GET /power/P-d31fa2c1-d686-4b94-a639-21476a876d64/state HTTP/1.1 +}</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #2 <SPAN class="example_desc">Get state of a specific power operation</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">GET /power/P-d31fa2c1-d686-4b94-a639-21476a876d64/state HTTP/1.1 Accept: text/plain, application/json Host: kadeploy.testbed.lan:25300 X-Kadeploy-User: frontend</PRE><H4 class="example_subtitle">Response</H4><PRE class="code_sample">HTTP/1.1 200 OK @@ -1331,7 +1331,7 @@ Content-Length: 184 "micro": "power", "state": "ok" } -}</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #3 <SPAN class="example_desc">Get state of a deployment that failed</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">GET /power/D-b55916dc-30db-4979-8c67-d83fb1b2cad4/state HTTP/1.1 +}</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #3 <SPAN class="example_desc">Get state of a deployment that failed</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">GET /power/D-b55916dc-30db-4979-8c67-d83fb1b2cad4/state HTTP/1.1 Accept: text/plain, application/json Host: kadeploy.testbed.lan:25300 X-Kadeploy-User: frontend</PRE><H4 class="example_subtitle">Response</H4><PRE class="code_sample">HTTP/1.1 200 OK @@ -1350,7 +1350,7 @@ Content-Length: 412 "state": "ko", "error": "SetDeploymentEnvUntrusted-reboot: very_hard_reboot command is not provided" } -}</PRE></DIV></DIV></DIV></DIV><P class="operation_back_link"><A class="operation_back_link" href="#Workflow-based operations">Back to operation</A></P><HR class="operation_inter_sep"><DIV class="resource_frame"><H2 class="resource_title"><A id="GET/%OPERATION/:id/status"><B class="resource_method_GET">GET</B> <SPAN style="font-family: monospace;" class="resource_path">/%OPERATION/:id/status</SPAN></A></H2><P class="resource_desc">Get the global status of an operation (where are every nodes in the operation)</P><DIV class="request_frame"><H3 class="request_title">Request <SPAN class="request_title_desc">(<SPAN class="request_type">Hash</SPAN>, <SPAN class="request_content">application/json</SPAN>)</SPAN></H3><DIV class="request_subframe"><H4 class="request_subtitle">Parameters</H4><TABLE class="request_parameters"><TR><TH>Name</TH><TH>Type</TH><TH>Kind</TH><TH>Description</TH></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_param">id</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The id# of the operation</TD></TR></TABLE></DIV></DIV><DIV class="response_frame"><H3 class="response_title">Response <SPAN class="response_title_desc">(<SPAN class="response_type">Hash</SPAN>, <SPAN class="response_content">application/json</SPAN>)</SPAN></H3><DIV class="response_subframe"><H4 class="response_subtitle">Fields</H4><TABLE class="response_fields"><TR><TH>Name</TH><TH>Type</TH><TH>Description</TH></TR><TR class="field_frame"><TD class="field_name">{<SPAN class="element_self"><SPAN class="element_dynamic">clustername</SPAN></SPAN>}</TD><TD class="field_type">Hash</TD><TD class="field_desc">The status of the cluster clustername</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent">{<SPAN class="element_dynamic">clustername</SPAN>}</SPAN>.{<SPAN class="element_self"><SPAN class="element_dynamic">macrostepname</SPAN></SPAN>}</TD><TD class="field_type">Hash</TD><TD class="field_desc">The status of the macro-step macroname</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_dynamic">clustername</SPAN>}</SPAN>.{<SPAN class="element_dynamic">macrostepname</SPAN>}</SPAN>.{<SPAN class="element_self"><SPAN class="element_dynamic">microstepname</SPAN></SPAN>}</TD><TD class="field_type">Hash</TD><TD class="field_desc">The status of the micro-step microname</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_dynamic">clustername</SPAN>}</SPAN>.{<SPAN class="element_dynamic">macrostepname</SPAN>}</SPAN>.{<SPAN class="element_dynamic">microstepname</SPAN>}</SPAN>.{<SPAN class="element_self"><SPAN class="element_normal">nodes</SPAN></SPAN>}</TD><TD class="field_type">Hash</TD><TD class="field_desc">The status of the nodes (of clustername) in the step macroname-microname</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_dynamic">clustername</SPAN>}</SPAN>.{<SPAN class="element_dynamic">macrostepname</SPAN>}</SPAN>.{<SPAN class="element_dynamic">microstepname</SPAN>}</SPAN>.{<SPAN class="element_normal">nodes</SPAN>}</SPAN>.[<SPAN class="element_self"><SPAN class="element_normal">**</SPAN></SPAN>]</TD><TD class="field_type">Array</TD><TD class="field_desc">The nodes that are processing the step</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_dynamic">clustername</SPAN>}</SPAN>.{<SPAN class="element_dynamic">macrostepname</SPAN>}</SPAN>.{<SPAN class="element_dynamic">microstepname</SPAN>}</SPAN>.{<SPAN class="element_normal">nodes</SPAN>}</SPAN>.[<SPAN class="element_self"><SPAN class="element_normal">KO</SPAN></SPAN>]</TD><TD class="field_type">Array</TD><TD class="field_desc">The nodes that have failed the step</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_dynamic">clustername</SPAN>}</SPAN>.{<SPAN class="element_dynamic">macrostepname</SPAN>}</SPAN>.{<SPAN class="element_dynamic">microstepname</SPAN>}</SPAN>.{<SPAN class="element_normal">nodes</SPAN>}</SPAN>.[<SPAN class="element_self"><SPAN class="element_normal">OK</SPAN></SPAN>]</TD><TD class="field_type">Array</TD><TD class="field_desc">The nodes that have successfully done the step</TD></TR></TABLE><H4 class="response_subtitle">Return codes</H4><TABLE class="response_codes"><TR><TH>Code#</TH><TH>Description</TH></TR><TR class="code_frame"><TD class="code_number">200</TD><TD class="code_desc">OK, the request is successful</TD></TR><TR class="code_frame"><TD class="code_number">500</TD><TD class="code_desc">Internal Server Error, an uncatched exception was thrown on the server</TD></TR><TR class="code_frame"><TD class="code_number">400</TD><TD class="code_desc">Bad Request, Kadeploy Error: please check the X-Application-Error-Code and X-Application-Error-Code headers</TD></TR><TR class="code_frame"><TD class="code_number">401</TD><TD class="code_desc">Unauthorized, you need to be authenticated</TD></TR><TR class="code_frame"><TD class="code_number">403</TD><TD class="code_desc">Forbidden, you do not the rights to perform this operation. Unlike a 401 Unauthorized response, authenticating will make no difference.</TD></TR><TR class="code_frame"><TD class="code_number">415</TD><TD class="code_desc">Unsupported Media Type, check the Content-Type of your request's body</TD></TR><TR class="code_frame"><TD class="code_number">404</TD><TD class="code_desc">File not found, the workflow :id cannot be found</TD></TR></TABLE></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #1 <SPAN class="example_desc">Get the status of a specific deployment</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">GET /deployment/D-877303c3-e838-4cbf-b7e3-c9862baab93f/status HTTP/1.1 +}</PRE></DIV></DIV></DIV></DIV><P class="operation_back_link"><A class="operation_back_link" href="#Workflow-based operations">Back to operation</A></P><HR class="operation_inter_sep"><DIV class="resource_frame"><H2 class="resource_title"><A id="GET/%OPERATION/:id/status"><B class="resource_method_GET">GET</B> <SPAN style="font-family: monospace;" class="resource_path">/%OPERATION/:id/status</SPAN></A></H2><P class="resource_desc">Get the global status of an operation (where are every nodes in the operation)</P><DIV class="request_frame"><H3 class="request_title">Request <SPAN class="request_title_desc">(<SPAN class="request_type">Hash</SPAN>, <SPAN class="request_content">application/json</SPAN>)</SPAN></H3><DIV class="request_subframe"><H4 class="request_subtitle">Parameters</H4><TABLE class="request_parameters"><TR><TH>Name</TH><TH>Type</TH><TH>Kind</TH><TH>Description</TH></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_param">id</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The id# of the operation</TD></TR></TABLE></DIV></DIV><DIV class="response_frame"><H3 class="response_title">Response <SPAN class="response_title_desc">(<SPAN class="response_type">Hash</SPAN>, <SPAN class="response_content">application/json</SPAN>)</SPAN></H3><DIV class="response_subframe"><H4 class="response_subtitle">Fields</H4><TABLE class="response_fields"><TR><TH>Name</TH><TH>Type</TH><TH>Description</TH></TR><TR class="field_frame"><TD class="field_name">{<SPAN class="element_self"><SPAN class="element_dynamic">clustername</SPAN></SPAN>}</TD><TD class="field_type">Hash</TD><TD class="field_desc">The status of the cluster clustername</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent">{<SPAN class="element_dynamic">clustername</SPAN>}</SPAN>.{<SPAN class="element_self"><SPAN class="element_dynamic">macrostepname</SPAN></SPAN>}</TD><TD class="field_type">Hash</TD><TD class="field_desc">The status of the macro-step macroname</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_dynamic">clustername</SPAN>}</SPAN>.{<SPAN class="element_dynamic">macrostepname</SPAN>}</SPAN>.{<SPAN class="element_self"><SPAN class="element_dynamic">microstepname</SPAN></SPAN>}</TD><TD class="field_type">Hash</TD><TD class="field_desc">The status of the micro-step microname</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_dynamic">clustername</SPAN>}</SPAN>.{<SPAN class="element_dynamic">macrostepname</SPAN>}</SPAN>.{<SPAN class="element_dynamic">microstepname</SPAN>}</SPAN>.{<SPAN class="element_self"><SPAN class="element_normal">nodes</SPAN></SPAN>}</TD><TD class="field_type">Hash</TD><TD class="field_desc">The status of the nodes (of clustername) in the step macroname-microname</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_dynamic">clustername</SPAN>}</SPAN>.{<SPAN class="element_dynamic">macrostepname</SPAN>}</SPAN>.{<SPAN class="element_dynamic">microstepname</SPAN>}</SPAN>.{<SPAN class="element_normal">nodes</SPAN>}</SPAN>.[<SPAN class="element_self"><SPAN class="element_normal">**</SPAN></SPAN>]</TD><TD class="field_type">Array</TD><TD class="field_desc">The nodes that are processing the step</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_dynamic">clustername</SPAN>}</SPAN>.{<SPAN class="element_dynamic">macrostepname</SPAN>}</SPAN>.{<SPAN class="element_dynamic">microstepname</SPAN>}</SPAN>.{<SPAN class="element_normal">nodes</SPAN>}</SPAN>.[<SPAN class="element_self"><SPAN class="element_normal">KO</SPAN></SPAN>]</TD><TD class="field_type">Array</TD><TD class="field_desc">The nodes that have failed the step</TD></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_dynamic">clustername</SPAN>}</SPAN>.{<SPAN class="element_dynamic">macrostepname</SPAN>}</SPAN>.{<SPAN class="element_dynamic">microstepname</SPAN>}</SPAN>.{<SPAN class="element_normal">nodes</SPAN>}</SPAN>.[<SPAN class="element_self"><SPAN class="element_normal">OK</SPAN></SPAN>]</TD><TD class="field_type">Array</TD><TD class="field_desc">The nodes that have successfully done the step</TD></TR></TABLE><H4 class="response_subtitle">Return codes</H4><TABLE class="response_codes"><TR><TH>Code#</TH><TH>Description</TH></TR><TR class="code_frame"><TD class="code_number">200</TD><TD class="code_desc">OK, the request is successful</TD></TR><TR class="code_frame"><TD class="code_number">500</TD><TD class="code_desc">Internal Server Error, an uncatched exception was thrown on the server</TD></TR><TR class="code_frame"><TD class="code_number">400</TD><TD class="code_desc">Bad Request, Kadeploy Error: please check the X-Application-Error-Code and X-Application-Error-Code headers</TD></TR><TR class="code_frame"><TD class="code_number">401</TD><TD class="code_desc">Unauthorized, you need to be authenticated</TD></TR><TR class="code_frame"><TD class="code_number">403</TD><TD class="code_desc">Forbidden, you do not the rights to perform this operation. Unlike a 401 Unauthorized response, authenticating will make no difference.</TD></TR><TR class="code_frame"><TD class="code_number">415</TD><TD class="code_desc">Unsupported Media Type, check the Content-Type of your request's body</TD></TR><TR class="code_frame"><TD class="code_number">404</TD><TD class="code_desc">File not found, the workflow :id cannot be found</TD></TR></TABLE></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #1 <SPAN class="example_desc">Get the status of a specific deployment</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">GET /deployment/D-877303c3-e838-4cbf-b7e3-c9862baab93f/status HTTP/1.1 Accept: text/plain, application/json Host: kadeploy.testbed.lan:25300 X-Kadeploy-User: frontend</PRE><H4 class="example_subtitle">Response</H4><PRE class="code_sample">HTTP/1.1 200 OK @@ -1374,7 +1374,7 @@ Content-Length: 312 } } } -}</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #2 <SPAN class="example_desc">Get the status of a specific power operation</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">GET /power/P-d31fa2c1-d686-4b94-a639-21476a876d64/status HTTP/1.1 +}</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #2 <SPAN class="example_desc">Get the status of a specific power operation</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">GET /power/P-d31fa2c1-d686-4b94-a639-21476a876d64/status HTTP/1.1 Accept: text/plain, application/json Host: kadeploy.testbed.lan:25300 X-Kadeploy-User: frontend</PRE><H4 class="example_subtitle">Response</H4><PRE class="code_sample">HTTP/1.1 200 OK @@ -1398,7 +1398,7 @@ Content-Length: 285 } } } -}</PRE></DIV></DIV></DIV></DIV><P class="operation_back_link"><A class="operation_back_link" href="#Workflow-based operations">Back to operation</A></P><HR class="operation_inter_sep"><DIV class="resource_frame"><H2 class="resource_title"><A id="GET/%OPERATION/:id/error"><B class="resource_method_GET">GET</B> <SPAN style="font-family: monospace;" class="resource_path">/%OPERATION/:id/error</SPAN></A></H2><P class="resource_desc">Get the error of an operation (the "error" field was set to true on the workflow's info)</P><DIV class="request_frame"><H3 class="request_title">Request <SPAN class="request_title_desc">(<SPAN class="request_type">Hash</SPAN>, <SPAN class="request_content">application/json</SPAN>)</SPAN></H3><DIV class="request_subframe"><H4 class="request_subtitle">Parameters</H4><TABLE class="request_parameters"><TR><TH>Name</TH><TH>Type</TH><TH>Kind</TH><TH>Description</TH></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_param">id</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The id# of the operation</TD></TR></TABLE></DIV></DIV><DIV class="response_frame"><H3 class="response_title">Response <SPAN class="response_title_desc">(<SPAN class="response_type">String</SPAN>, <SPAN class="response_content">text/plain</SPAN>)</SPAN></H3><DIV class="response_subframe"><H4 class="response_subtitle">Fields</H4><TABLE class="response_fields"><TR><TH>Name</TH><TH>Type</TH><TH>Description</TH></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_dynamic"></SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">The error message</TD></TR></TABLE><H4 class="response_subtitle">Return codes</H4><TABLE class="response_codes"><TR><TH>Code#</TH><TH>Description</TH></TR><TR class="code_frame"><TD class="code_number">200</TD><TD class="code_desc">OK, the request is successful</TD></TR><TR class="code_frame"><TD class="code_number">500</TD><TD class="code_desc">Internal Server Error, an uncatched exception was thrown on the server</TD></TR><TR class="code_frame"><TD class="code_number">400</TD><TD class="code_desc">Bad Request, Kadeploy Error: please check the X-Application-Error-Code and X-Application-Error-Code headers</TD></TR><TR class="code_frame"><TD class="code_number">401</TD><TD class="code_desc">Unauthorized, you need to be authenticated</TD></TR><TR class="code_frame"><TD class="code_number">403</TD><TD class="code_desc">Forbidden, you do not the rights to perform this operation. Unlike a 401 Unauthorized response, authenticating will make no difference.</TD></TR><TR class="code_frame"><TD class="code_number">415</TD><TD class="code_desc">Unsupported Media Type, check the Content-Type of your request's body</TD></TR><TR class="code_frame"><TD class="code_number">404</TD><TD class="code_desc">File not found, the workflow :id cannot be found</TD></TR></TABLE></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #1 <SPAN class="example_desc">Gather information about a deployment error</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">GET /deployment/D-ec823946-b4fc-4a1f-b7fb-4c24b6a9ef51/error HTTP/1.1 +}</PRE></DIV></DIV></DIV></DIV><P class="operation_back_link"><A class="operation_back_link" href="#Workflow-based operations">Back to operation</A></P><HR class="operation_inter_sep"><DIV class="resource_frame"><H2 class="resource_title"><A id="GET/%OPERATION/:id/error"><B class="resource_method_GET">GET</B> <SPAN style="font-family: monospace;" class="resource_path">/%OPERATION/:id/error</SPAN></A></H2><P class="resource_desc">Get the error of an operation (the "error" field was set to true on the workflow's info)</P><DIV class="request_frame"><H3 class="request_title">Request <SPAN class="request_title_desc">(<SPAN class="request_type">Hash</SPAN>, <SPAN class="request_content">application/json</SPAN>)</SPAN></H3><DIV class="request_subframe"><H4 class="request_subtitle">Parameters</H4><TABLE class="request_parameters"><TR><TH>Name</TH><TH>Type</TH><TH>Kind</TH><TH>Description</TH></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_param">id</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The id# of the operation</TD></TR></TABLE></DIV></DIV><DIV class="response_frame"><H3 class="response_title">Response <SPAN class="response_title_desc">(<SPAN class="response_type">String</SPAN>, <SPAN class="response_content">text/plain</SPAN>)</SPAN></H3><DIV class="response_subframe"><H4 class="response_subtitle">Fields</H4><TABLE class="response_fields"><TR><TH>Name</TH><TH>Type</TH><TH>Description</TH></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_dynamic"></SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">The error message</TD></TR></TABLE><H4 class="response_subtitle">Return codes</H4><TABLE class="response_codes"><TR><TH>Code#</TH><TH>Description</TH></TR><TR class="code_frame"><TD class="code_number">200</TD><TD class="code_desc">OK, the request is successful</TD></TR><TR class="code_frame"><TD class="code_number">500</TD><TD class="code_desc">Internal Server Error, an uncatched exception was thrown on the server</TD></TR><TR class="code_frame"><TD class="code_number">400</TD><TD class="code_desc">Bad Request, Kadeploy Error: please check the X-Application-Error-Code and X-Application-Error-Code headers</TD></TR><TR class="code_frame"><TD class="code_number">401</TD><TD class="code_desc">Unauthorized, you need to be authenticated</TD></TR><TR class="code_frame"><TD class="code_number">403</TD><TD class="code_desc">Forbidden, you do not the rights to perform this operation. Unlike a 401 Unauthorized response, authenticating will make no difference.</TD></TR><TR class="code_frame"><TD class="code_number">415</TD><TD class="code_desc">Unsupported Media Type, check the Content-Type of your request's body</TD></TR><TR class="code_frame"><TD class="code_number">404</TD><TD class="code_desc">File not found, the workflow :id cannot be found</TD></TR></TABLE></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #1 <SPAN class="example_desc">Gather information about a deployment error</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">GET /deployment/D-ec823946-b4fc-4a1f-b7fb-4c24b6a9ef51/error HTTP/1.1 Accept: text/plain, application/json Host: kadeploy.testbed.lan:25300 X-Kadeploy-User: frontend</PRE><H4 class="example_subtitle">Response</H4><PRE class="code_sample">HTTP/1.1 400 Bad Request @@ -1406,7 +1406,7 @@ X-Application-Error-Code: 5 X-Application-Error-Info: SW52YWxpZCBmaWxlIC0tIFVuYWJsZSB0byBnZXQgdGhlIGNoZWNrc3VtIG9mIGh0dHA6Ly90ZXN0YmVkLmxhbi9kZWJpYW4tYmFzZS1ub25lLnRneiAoaHR0cCBlcnJvciAjNDA0KQ== Content-Type: text/plain Content-Length: 104 -Invalid file -- Unable to get the checksum of http://testbed.lan/debian-base-none.tgz (http error #404)</PRE></DIV></DIV></DIV></DIV><P class="operation_back_link"><A class="operation_back_link" href="#Workflow-based operations">Back to operation</A></P><HR class="operation_inter_sep"><DIV class="resource_frame"><H2 class="resource_title"><A id="DELETE/%OPERATION/:id"><B class="resource_method_DELETE">DELETE</B> <SPAN style="font-family: monospace;" class="resource_path">/%OPERATION/:id</SPAN></A></H2><P class="resource_desc">Cancel a running operation or delete information about one that encountered an error</P><DIV class="request_frame"><H3 class="request_title">Request <SPAN class="request_title_desc">(<SPAN class="request_type">Hash</SPAN>, <SPAN class="request_content">application/json</SPAN>)</SPAN></H3><DIV class="request_subframe"><H4 class="request_subtitle">Parameters</H4><TABLE class="request_parameters"><TR><TH>Name</TH><TH>Type</TH><TH>Kind</TH><TH>Description</TH></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_param">id</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The id# of the operatiooperationn</TD></TR></TABLE></DIV></DIV><DIV class="response_frame"><H3 class="response_title">Response <SPAN class="response_title_desc">(<SPAN class="response_type">Hash</SPAN>, <SPAN class="response_content">application/json</SPAN>)</SPAN></H3><DIV class="response_subframe"><H4 class="response_subtitle">Fields</H4><TABLE class="response_fields"><TR><TH>Name</TH><TH>Type</TH><TH>Description</TH></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_normal">wid</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">The id# of the operation that was deleted</TD></TR></TABLE><H4 class="response_subtitle">Return codes</H4><TABLE class="response_codes"><TR><TH>Code#</TH><TH>Description</TH></TR><TR class="code_frame"><TD class="code_number">200</TD><TD class="code_desc">OK, the request is successful</TD></TR><TR class="code_frame"><TD class="code_number">500</TD><TD class="code_desc">Internal Server Error, an uncatched exception was thrown on the server</TD></TR><TR class="code_frame"><TD class="code_number">400</TD><TD class="code_desc">Bad Request, Kadeploy Error: please check the X-Application-Error-Code and X-Application-Error-Code headers</TD></TR><TR class="code_frame"><TD class="code_number">401</TD><TD class="code_desc">Unauthorized, you need to be authenticated</TD></TR><TR class="code_frame"><TD class="code_number">403</TD><TD class="code_desc">Forbidden, you do not the rights to perform this operation. Unlike a 401 Unauthorized response, authenticating will make no difference.</TD></TR><TR class="code_frame"><TD class="code_number">415</TD><TD class="code_desc">Unsupported Media Type, check the Content-Type of your request's body</TD></TR><TR class="code_frame"><TD class="code_number">404</TD><TD class="code_desc">File not found, the workflow :id cannot be found</TD></TR></TABLE></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #1 <SPAN class="example_desc">Cancel a specific deployment</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">DELETE /deployment/D-ec823946-b4fc-4a1f-b7fb-4c24b6a9ef51 HTTP/1.1 +Invalid file -- Unable to get the checksum of http://testbed.lan/debian-base-none.tgz (http error #404)</PRE></DIV></DIV></DIV></DIV><P class="operation_back_link"><A class="operation_back_link" href="#Workflow-based operations">Back to operation</A></P><HR class="operation_inter_sep"><DIV class="resource_frame"><H2 class="resource_title"><A id="DELETE/%OPERATION/:id"><B class="resource_method_DELETE">DELETE</B> <SPAN style="font-family: monospace;" class="resource_path">/%OPERATION/:id</SPAN></A></H2><P class="resource_desc">Cancel a running operation or delete information about one that encountered an error</P><DIV class="request_frame"><H3 class="request_title">Request <SPAN class="request_title_desc">(<SPAN class="request_type">Hash</SPAN>, <SPAN class="request_content">application/json</SPAN>)</SPAN></H3><DIV class="request_subframe"><H4 class="request_subtitle">Parameters</H4><TABLE class="request_parameters"><TR><TH>Name</TH><TH>Type</TH><TH>Kind</TH><TH>Description</TH></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_param">id</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The id# of the operatiooperationn</TD></TR></TABLE></DIV></DIV><DIV class="response_frame"><H3 class="response_title">Response <SPAN class="response_title_desc">(<SPAN class="response_type">Hash</SPAN>, <SPAN class="response_content">application/json</SPAN>)</SPAN></H3><DIV class="response_subframe"><H4 class="response_subtitle">Fields</H4><TABLE class="response_fields"><TR><TH>Name</TH><TH>Type</TH><TH>Description</TH></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_normal">wid</SPAN></SPAN></TD><TD class="field_type">String</TD><TD class="field_desc">The id# of the operation that was deleted</TD></TR></TABLE><H4 class="response_subtitle">Return codes</H4><TABLE class="response_codes"><TR><TH>Code#</TH><TH>Description</TH></TR><TR class="code_frame"><TD class="code_number">200</TD><TD class="code_desc">OK, the request is successful</TD></TR><TR class="code_frame"><TD class="code_number">500</TD><TD class="code_desc">Internal Server Error, an uncatched exception was thrown on the server</TD></TR><TR class="code_frame"><TD class="code_number">400</TD><TD class="code_desc">Bad Request, Kadeploy Error: please check the X-Application-Error-Code and X-Application-Error-Code headers</TD></TR><TR class="code_frame"><TD class="code_number">401</TD><TD class="code_desc">Unauthorized, you need to be authenticated</TD></TR><TR class="code_frame"><TD class="code_number">403</TD><TD class="code_desc">Forbidden, you do not the rights to perform this operation. Unlike a 401 Unauthorized response, authenticating will make no difference.</TD></TR><TR class="code_frame"><TD class="code_number">415</TD><TD class="code_desc">Unsupported Media Type, check the Content-Type of your request's body</TD></TR><TR class="code_frame"><TD class="code_number">404</TD><TD class="code_desc">File not found, the workflow :id cannot be found</TD></TR></TABLE></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #1 <SPAN class="example_desc">Cancel a specific deployment</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">DELETE /deployment/D-ec823946-b4fc-4a1f-b7fb-4c24b6a9ef51 HTTP/1.1 Accept: text/plain, application/json Host: kadeploy.testbed.lan:25300 X-Kadeploy-User: frontend</PRE><H4 class="example_subtitle">Response</H4><PRE class="code_sample">HTTP/1.1 200 OK @@ -1414,7 +1414,7 @@ Content-Type: application/json Content-Length: 53 { "wid": "D-ec823946-b4fc-4a1f-b7fb-4c24b6a9ef51" -}</PRE></DIV></DIV></DIV></DIV><P class="operation_back_link"><A class="operation_back_link" href="#Workflow-based operations">Back to operation</A></P><HR class="operation_inter_sep"></DIV><HR class="operation_sep"><DIV class="operation_frame"><H1 class="operation_title"><A id="Power operations">Power operations</A></H1><DIV class="operation_index_frame"><H2 class="operation_index_title">Resources</H2><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></DIV><P class="operation_back_link"><A class="operation_back_link" href="#title">Back to title</A></P><HR class="operation_index_sep"><DIV class="resource_frame"><H2 class="resource_title"><A id="PUT/power"><B class="resource_method_PUT">PUT</B> <SPAN style="font-family: monospace;" class="resource_path">/power</SPAN></A></H2><P class="resource_desc">Launch a power operation</P><DIV class="request_frame"><H3 class="request_title">Request <SPAN class="request_title_desc">(<SPAN class="request_type">Hash</SPAN>, <SPAN class="request_content">application/json</SPAN>)</SPAN></H3><DIV class="request_subframe"><H4 class="request_subtitle">Parameters</H4><TABLE class="request_parameters"><TR><TH>Name</TH><TH>Type</TH><TH>Kind</TH><TH>Description</TH></TR><TR class="parameter_frame"><TD class="parameter_name">[<SPAN class="element_self"><SPAN class="element_normal">nodes</SPAN></SPAN>]</TD><TD class="parameter_type">Array</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The list of nodes the operation should be applied on</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">status</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The status to be applied<BR><EM>Expected values: </EM>on, off</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_dynamic">_generic_parameter_</SPAN></SPAN></TD><TD class="parameter_type">...</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Some workflow-based operation's generic parameter (see more <A href="#workflow_operations">here</A>)</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">level</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The level of the command that will be performed<BR><EM>Expected values: </EM>soft, hard, very_hard<BR><EM>Default value: </EM>soft</TD></TR></TABLE></DIV></DIV><DIV class="response_frame"><H3 class="response_title">Response <SPAN class="response_title_desc">(<SPAN class="response_type">Hash</SPAN>, <SPAN class="response_content">application/json</SPAN>)</SPAN></H3><DIV class="response_subframe"><H4 class="response_subtitle">Fields</H4><TABLE class="response_fields"><TR><TH>Name</TH><TH>Type</TH><TH>Description</TH></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_dynamic"></SPAN></SPAN></TD><TD class="field_type"><A href="#type_Workflow">Workflow</A></TD><TD class="field_desc">Information related to the workflow of the power operation</TD></TR></TABLE><H4 class="response_subtitle">Return codes</H4><TABLE class="response_codes"><TR><TH>Code#</TH><TH>Description</TH></TR><TR class="code_frame"><TD class="code_number">200</TD><TD class="code_desc">OK, the request is successful</TD></TR><TR class="code_frame"><TD class="code_number">500</TD><TD class="code_desc">Internal Server Error, an uncatched exception was thrown on the server</TD></TR><TR class="code_frame"><TD class="code_number">400</TD><TD class="code_desc">Bad Request, Kadeploy Error: please check the X-Application-Error-Code and X-Application-Error-Code headers</TD></TR><TR class="code_frame"><TD class="code_number">401</TD><TD class="code_desc">Unauthorized, you need to be authenticated</TD></TR><TR class="code_frame"><TD class="code_number">403</TD><TD class="code_desc">Forbidden, you do not the rights to perform this operation. Unlike a 401 Unauthorized response, authenticating will make no difference.</TD></TR><TR class="code_frame"><TD class="code_number">415</TD><TD class="code_desc">Unsupported Media Type, check the Content-Type of your request's body</TD></TR></TABLE></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #1 <SPAN class="example_desc">Perform a power-on on some nodes</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">PUT /power HTTP/1.1 +}</PRE></DIV></DIV></DIV></DIV><P class="operation_back_link"><A class="operation_back_link" href="#Workflow-based operations">Back to operation</A></P><HR class="operation_inter_sep"></DIV><HR class="operation_sep"><DIV class="operation_frame"><H1 class="operation_title"><A id="Power operations">Power operations</A></H1><DIV class="operation_index_frame"><H2 class="operation_index_title">Resources</H2><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></DIV><P class="operation_back_link"><A class="operation_back_link" href="#title">Back to title</A></P><HR class="operation_index_sep"><DIV class="resource_frame"><H2 class="resource_title"><A id="PUT/power"><B class="resource_method_PUT">PUT</B> <SPAN style="font-family: monospace;" class="resource_path">/power</SPAN></A></H2><P class="resource_desc">Launch a power operation</P><DIV class="request_frame"><H3 class="request_title">Request <SPAN class="request_title_desc">(<SPAN class="request_type">Hash</SPAN>, <SPAN class="request_content">application/json</SPAN>)</SPAN></H3><DIV class="request_subframe"><H4 class="request_subtitle">Parameters</H4><TABLE class="request_parameters"><TR><TH>Name</TH><TH>Type</TH><TH>Kind</TH><TH>Description</TH></TR><TR class="parameter_frame"><TD class="parameter_name">[<SPAN class="element_self"><SPAN class="element_normal">nodes</SPAN></SPAN>]</TD><TD class="parameter_type">Array</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The list of nodes the operation should be applied on</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">status</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The status to be applied<BR><EM>Expected values: </EM>on, off</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_dynamic">_generic_parameter_</SPAN></SPAN></TD><TD class="parameter_type">...</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Some workflow-based operation's generic parameter (see more <A href="#workflow_operations">here</A>)</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">level</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The level of the command that will be performed<BR><EM>Expected values: </EM>soft, hard, very_hard<BR><EM>Default value: </EM>soft</TD></TR></TABLE></DIV></DIV><DIV class="response_frame"><H3 class="response_title">Response <SPAN class="response_title_desc">(<SPAN class="response_type">Hash</SPAN>, <SPAN class="response_content">application/json</SPAN>)</SPAN></H3><DIV class="response_subframe"><H4 class="response_subtitle">Fields</H4><TABLE class="response_fields"><TR><TH>Name</TH><TH>Type</TH><TH>Description</TH></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_dynamic"></SPAN></SPAN></TD><TD class="field_type"><A href="#type_Workflow">Workflow</A></TD><TD class="field_desc">Information related to the workflow of the power operation</TD></TR></TABLE><H4 class="response_subtitle">Return codes</H4><TABLE class="response_codes"><TR><TH>Code#</TH><TH>Description</TH></TR><TR class="code_frame"><TD class="code_number">200</TD><TD class="code_desc">OK, the request is successful</TD></TR><TR class="code_frame"><TD class="code_number">500</TD><TD class="code_desc">Internal Server Error, an uncatched exception was thrown on the server</TD></TR><TR class="code_frame"><TD class="code_number">400</TD><TD class="code_desc">Bad Request, Kadeploy Error: please check the X-Application-Error-Code and X-Application-Error-Code headers</TD></TR><TR class="code_frame"><TD class="code_number">401</TD><TD class="code_desc">Unauthorized, you need to be authenticated</TD></TR><TR class="code_frame"><TD class="code_number">403</TD><TD class="code_desc">Forbidden, you do not the rights to perform this operation. Unlike a 401 Unauthorized response, authenticating will make no difference.</TD></TR><TR class="code_frame"><TD class="code_number">415</TD><TD class="code_desc">Unsupported Media Type, check the Content-Type of your request's body</TD></TR></TABLE></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #1 <SPAN class="example_desc">Perform a power-on on some nodes</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">PUT /power HTTP/1.1 Accept: text/plain, application/json Host: kadeploy.testbed.lan:25300 X-Kadeploy-User: frontend @@ -1441,7 +1441,7 @@ Content-Length: 527 "status": "/power/P-eae4fb69-c130-40a6-8c2a-f0a45fa8d6e8/status", "error": "/power/P-eae4fb69-c130-40a6-8c2a-f0a45fa8d6e8/error" } -}</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #2 <SPAN class="example_desc">Perform a hard power-off on some nodes</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">PUT /power HTTP/1.1 +}</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #2 <SPAN class="example_desc">Perform a hard power-off on some nodes</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">PUT /power HTTP/1.1 Accept: text/plain, application/json Host: kadeploy.testbed.lan:25300 X-Kadeploy-User: frontend @@ -1469,7 +1469,7 @@ Content-Length: 527 "status": "/power/P-2dbf2f2d-6e15-4e8a-8cb7-57ac4bb86a9b/status", "error": "/power/P-2dbf2f2d-6e15-4e8a-8cb7-57ac4bb86a9b/error" } -}</PRE></DIV></DIV></DIV></DIV><P class="operation_back_link"><A class="operation_back_link" href="#Power operations">Back to operation</A></P><HR class="operation_inter_sep"><DIV class="resource_frame"><H2 class="resource_title"><A id="GET/power"><B class="resource_method_GET">GET</B> <SPAN style="font-family: monospace;" class="resource_path">/power</SPAN></A></H2><P class="resource_desc">Get the power status of some nodes</P><DIV class="request_frame"><H3 class="request_title">Request <SPAN class="request_title_desc">(<SPAN class="request_type">Hash</SPAN>, <SPAN class="request_content">application/json</SPAN>)</SPAN></H3><DIV class="request_subframe"><H4 class="request_subtitle">Parameters</H4><TABLE class="request_parameters"><TR><TH>Name</TH><TH>Type</TH><TH>Kind</TH><TH>Description</TH></TR><TR class="parameter_frame"><TD class="parameter_name">[<SPAN class="element_self"><SPAN class="element_normal">nodes</SPAN></SPAN>]</TD><TD class="parameter_type">Array</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The list of nodes the power status should be returned</TD></TR></TABLE></DIV></DIV><DIV class="response_frame"><H3 class="response_title">Response <SPAN class="response_title_desc">(<SPAN class="response_type">Hash</SPAN>, <SPAN class="response_content">application/json</SPAN>)</SPAN></H3><DIV class="response_subframe"><H4 class="response_subtitle">Fields</H4><TABLE class="response_fields"><TR><TH>Name</TH><TH>Type</TH><TH>Description</TH></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_dynamic"></SPAN></SPAN></TD><TD class="field_type"><A href="#type_Workflow">Workflow</A></TD><TD class="field_desc">Information related to the workflow of the power operation</TD></TR></TABLE><H4 class="response_subtitle">Return codes</H4><TABLE class="response_codes"><TR><TH>Code#</TH><TH>Description</TH></TR><TR class="code_frame"><TD class="code_number">200</TD><TD class="code_desc">OK, the request is successful</TD></TR><TR class="code_frame"><TD class="code_number">500</TD><TD class="code_desc">Internal Server Error, an uncatched exception was thrown on the server</TD></TR><TR class="code_frame"><TD class="code_number">400</TD><TD class="code_desc">Bad Request, Kadeploy Error: please check the X-Application-Error-Code and X-Application-Error-Code headers</TD></TR><TR class="code_frame"><TD class="code_number">401</TD><TD class="code_desc">Unauthorized, you need to be authenticated</TD></TR><TR class="code_frame"><TD class="code_number">403</TD><TD class="code_desc">Forbidden, you do not the rights to perform this operation. Unlike a 401 Unauthorized response, authenticating will make no difference.</TD></TR><TR class="code_frame"><TD class="code_number">415</TD><TD class="code_desc">Unsupported Media Type, check the Content-Type of your request's body</TD></TR></TABLE></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #1 <SPAN class="example_desc">Get the power-status of some nodes</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">GET /power?nodes=node-1.testbed.lan&nodes=node-2.testbed.lan HTTP/1.1 +}</PRE></DIV></DIV></DIV></DIV><P class="operation_back_link"><A class="operation_back_link" href="#Power operations">Back to operation</A></P><HR class="operation_inter_sep"><DIV class="resource_frame"><H2 class="resource_title"><A id="GET/power"><B class="resource_method_GET">GET</B> <SPAN style="font-family: monospace;" class="resource_path">/power</SPAN></A></H2><P class="resource_desc">Get the power status of some nodes</P><DIV class="request_frame"><H3 class="request_title">Request <SPAN class="request_title_desc">(<SPAN class="request_type">Hash</SPAN>, <SPAN class="request_content">application/json</SPAN>)</SPAN></H3><DIV class="request_subframe"><H4 class="request_subtitle">Parameters</H4><TABLE class="request_parameters"><TR><TH>Name</TH><TH>Type</TH><TH>Kind</TH><TH>Description</TH></TR><TR class="parameter_frame"><TD class="parameter_name">[<SPAN class="element_self"><SPAN class="element_normal">nodes</SPAN></SPAN>]</TD><TD class="parameter_type">Array</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The list of nodes the power status should be returned</TD></TR></TABLE></DIV></DIV><DIV class="response_frame"><H3 class="response_title">Response <SPAN class="response_title_desc">(<SPAN class="response_type">Hash</SPAN>, <SPAN class="response_content">application/json</SPAN>)</SPAN></H3><DIV class="response_subframe"><H4 class="response_subtitle">Fields</H4><TABLE class="response_fields"><TR><TH>Name</TH><TH>Type</TH><TH>Description</TH></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_dynamic"></SPAN></SPAN></TD><TD class="field_type"><A href="#type_Workflow">Workflow</A></TD><TD class="field_desc">Information related to the workflow of the power operation</TD></TR></TABLE><H4 class="response_subtitle">Return codes</H4><TABLE class="response_codes"><TR><TH>Code#</TH><TH>Description</TH></TR><TR class="code_frame"><TD class="code_number">200</TD><TD class="code_desc">OK, the request is successful</TD></TR><TR class="code_frame"><TD class="code_number">500</TD><TD class="code_desc">Internal Server Error, an uncatched exception was thrown on the server</TD></TR><TR class="code_frame"><TD class="code_number">400</TD><TD class="code_desc">Bad Request, Kadeploy Error: please check the X-Application-Error-Code and X-Application-Error-Code headers</TD></TR><TR class="code_frame"><TD class="code_number">401</TD><TD class="code_desc">Unauthorized, you need to be authenticated</TD></TR><TR class="code_frame"><TD class="code_number">403</TD><TD class="code_desc">Forbidden, you do not the rights to perform this operation. Unlike a 401 Unauthorized response, authenticating will make no difference.</TD></TR><TR class="code_frame"><TD class="code_number">415</TD><TD class="code_desc">Unsupported Media Type, check the Content-Type of your request's body</TD></TR></TABLE></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #1 <SPAN class="example_desc">Get the power-status of some nodes</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">GET /power?nodes=node-1.testbed.lan&nodes=node-2.testbed.lan HTTP/1.1 Accept: text/plain, application/json Host: kadeploy.testbed.lan:25300 X-Kadeploy-User: frontend</PRE><H4 class="example_subtitle">Response</H4><PRE class="code_sample">HTTP/1.1 200 OK @@ -1487,7 +1487,7 @@ Content-Length: 527 "status": "/power/P-1c609d50-b304-4c46-bcd9-ebda4eb9d369/status", "error": "/power/P-1c609d50-b304-4c46-bcd9-ebda4eb9d369/error" } -}</PRE></DIV></DIV></DIV></DIV><P class="operation_back_link"><A class="operation_back_link" href="#Power operations">Back to operation</A></P><HR class="operation_inter_sep"></DIV><HR class="operation_sep"><DIV class="operation_frame"><H1 class="operation_title"><A id="Reboot operations">Reboot operations</A></H1><DIV class="operation_index_frame"><H2 class="operation_index_title">Resources</H2><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></DIV><P class="operation_back_link"><A class="operation_back_link" href="#title">Back to title</A></P><HR class="operation_index_sep"><DIV class="resource_frame"><H2 class="resource_title"><A id="POST/reboot"><B class="resource_method_POST">POST</B> <SPAN style="font-family: monospace;" class="resource_path">/reboot</SPAN></A></H2><P class="resource_desc">Launch a reboot operation</P><DIV class="request_frame"><H3 class="request_title">Request <SPAN class="request_title_desc">(<SPAN class="request_type">Hash</SPAN>, <SPAN class="request_content">application/json</SPAN>)</SPAN></H3><DIV class="request_subframe"><H4 class="request_subtitle">Parameters</H4><TABLE class="request_parameters"><TR><TH>Name</TH><TH>Type</TH><TH>Kind</TH><TH>Description</TH></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">kind</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The kind of reboot to be performed<BR><EM>Expected values: </EM>set_pxe, simple, deploy_env, recorded_env</TD></TR><TR class="parameter_frame"><TD class="parameter_name">[<SPAN class="element_self"><SPAN class="element_normal">nodes</SPAN></SPAN>]</TD><TD class="parameter_type">Array</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The list of nodes the operation should be applied on</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_dynamic">_generic_parameter_</SPAN></SPAN></TD><TD class="parameter_type">...</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Some workflow-based operation's generic parameter (see more <A href="#workflow_operations">here</A>)</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">block_device</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The block device the environment has been installed on</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">check_destructive</SPAN></SPAN></TD><TD class="parameter_type">Set</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Check if the last deployed environment has the destructive flag, if it does, do not perform the reboot operation</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">client</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The client used to export files to the server, useful for local:// files (see more <A href="#file_export">here</A>)</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">deploy_partition</SPAN></SPAN></TD><TD class="parameter_type">Integer</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The partition the environment has been installed on</TD></TR><TR class="parameter_frame"><TD class="parameter_name">{<SPAN class="element_self"><SPAN class="element_normal">environment</SPAN></SPAN>}</TD><TD class="parameter_type">Hash</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The environment that has been deployed. This field is mandatory when using the kind "recorded_env".</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">level</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The level of the command that will be performed<BR><EM>Expected values: </EM>soft, hard, very_hard<BR><EM>Default value: </EM>soft</TD></TR><TR class="parameter_frame"><TD class="parameter_name">{<SPAN class="element_self"><SPAN class="element_normal">pxe</SPAN></SPAN>}</TD><TD class="parameter_type">Hash</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Specify some custom netboot parameters. This field is mandatory when using the kind "set_pxe".</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">ssh_authorized_keys</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The path to a ssh authorized_keys file that have to be copied in the root directory of the deployed environment (see more <A href="#file_export">here</A>)</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">timeout_reboot_classical</SPAN></SPAN></TD><TD class="parameter_type">Integer</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Overwrite the default value for the reboot timeout</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">vlan</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Specify the VLAN the nodes should be reboot in</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">name</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The name of the environment</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">user</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The owner of the environment</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">version</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The version of the environment</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent">{<SPAN class="element_normal">pxe</SPAN>}</SPAN>.[<SPAN class="element_self"><SPAN class="element_normal">files</SPAN></SPAN>]</TD><TD class="parameter_type">Array</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">A list of path to files that have to be exported in the PXE repository's directory (see more <A href="#file_export">here</A>)</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent">{<SPAN class="element_normal">pxe</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">pxe</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">A custom PXE profile, the string FILES_PREFIX-- will be replaced by the prefix to some exported files</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent">{<SPAN class="element_normal">pxe</SPAN>}</SPAN>.{<SPAN class="element_self"><SPAN class="element_normal">singularities</SPAN></SPAN>}</TD><TD class="parameter_type">Hash</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Specify a substitution pattern for each node in the PXE profile (the NODE_SINGULARITY pattern must be used in the PXE profile)</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">pxe</SPAN>}</SPAN>.{<SPAN class="element_normal">singularities</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_dynamic">nodename</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The substitution pattern for the node "nodename"</TD></TR></TABLE></DIV></DIV><DIV class="response_frame"><H3 class="response_title">Response <SPAN class="response_title_desc">(<SPAN class="response_type">Hash</SPAN>, <SPAN class="response_content">application/json</SPAN>)</SPAN></H3><DIV class="response_subframe"><H4 class="response_subtitle">Fields</H4><TABLE class="response_fields"><TR><TH>Name</TH><TH>Type</TH><TH>Description</TH></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_dynamic"></SPAN></SPAN></TD><TD class="field_type"><A href="#type_Workflow">Workflow</A></TD><TD class="field_desc">Information related to the workflow of the reboot operation</TD></TR></TABLE><H4 class="response_subtitle">Return codes</H4><TABLE class="response_codes"><TR><TH>Code#</TH><TH>Description</TH></TR><TR class="code_frame"><TD class="code_number">200</TD><TD class="code_desc">OK, the request is successful</TD></TR><TR class="code_frame"><TD class="code_number">500</TD><TD class="code_desc">Internal Server Error, an uncatched exception was thrown on the server</TD></TR><TR class="code_frame"><TD class="code_number">400</TD><TD class="code_desc">Bad Request, Kadeploy Error: please check the X-Application-Error-Code and X-Application-Error-Code headers</TD></TR><TR class="code_frame"><TD class="code_number">401</TD><TD class="code_desc">Unauthorized, you need to be authenticated</TD></TR><TR class="code_frame"><TD class="code_number">403</TD><TD class="code_desc">Forbidden, you do not the rights to perform this operation. Unlike a 401 Unauthorized response, authenticating will make no difference.</TD></TR><TR class="code_frame"><TD class="code_number">415</TD><TD class="code_desc">Unsupported Media Type, check the Content-Type of your request's body</TD></TR></TABLE></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #1 <SPAN class="example_desc">Perform a simple hard reboot on nodes (do not re-write the PXE profile)</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">POST /reboot HTTP/1.1 +}</PRE></DIV></DIV></DIV></DIV><P class="operation_back_link"><A class="operation_back_link" href="#Power operations">Back to operation</A></P><HR class="operation_inter_sep"></DIV><HR class="operation_sep"><DIV class="operation_frame"><H1 class="operation_title"><A id="Reboot operations">Reboot operations</A></H1><DIV class="operation_index_frame"><H2 class="operation_index_title">Resources</H2><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></DIV><P class="operation_back_link"><A class="operation_back_link" href="#title">Back to title</A></P><HR class="operation_index_sep"><DIV class="resource_frame"><H2 class="resource_title"><A id="POST/reboot"><B class="resource_method_POST">POST</B> <SPAN style="font-family: monospace;" class="resource_path">/reboot</SPAN></A></H2><P class="resource_desc">Launch a reboot operation</P><DIV class="request_frame"><H3 class="request_title">Request <SPAN class="request_title_desc">(<SPAN class="request_type">Hash</SPAN>, <SPAN class="request_content">application/json</SPAN>)</SPAN></H3><DIV class="request_subframe"><H4 class="request_subtitle">Parameters</H4><TABLE class="request_parameters"><TR><TH>Name</TH><TH>Type</TH><TH>Kind</TH><TH>Description</TH></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">kind</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The kind of reboot to be performed<BR><EM>Expected values: </EM>set_pxe, simple, deploy_env, recorded_env</TD></TR><TR class="parameter_frame"><TD class="parameter_name">[<SPAN class="element_self"><SPAN class="element_normal">nodes</SPAN></SPAN>]</TD><TD class="parameter_type">Array</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The list of nodes the operation should be applied on</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_dynamic">_generic_parameter_</SPAN></SPAN></TD><TD class="parameter_type">...</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Some workflow-based operation's generic parameter (see more <A href="#workflow_operations">here</A>)</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">block_device</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The block device the environment has been installed on</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">check_destructive</SPAN></SPAN></TD><TD class="parameter_type">Set</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Check if the last deployed environment has the destructive flag, if it does, do not perform the reboot operation</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">client</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The client used to export files to the server, useful for local:// files (see more <A href="#file_export">here</A>)</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">deploy_partition</SPAN></SPAN></TD><TD class="parameter_type">Integer</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The partition the environment has been installed on</TD></TR><TR class="parameter_frame"><TD class="parameter_name">{<SPAN class="element_self"><SPAN class="element_normal">environment</SPAN></SPAN>}</TD><TD class="parameter_type">Hash</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The environment that has been deployed. This field is mandatory when using the kind "recorded_env".</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">level</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The level of the command that will be performed<BR><EM>Expected values: </EM>soft, hard, very_hard<BR><EM>Default value: </EM>soft</TD></TR><TR class="parameter_frame"><TD class="parameter_name">{<SPAN class="element_self"><SPAN class="element_normal">pxe</SPAN></SPAN>}</TD><TD class="parameter_type">Hash</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Specify some custom netboot parameters. This field is mandatory when using the kind "set_pxe".</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">ssh_authorized_keys</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The path to a ssh authorized_keys file that have to be copied in the root directory of the deployed environment (see more <A href="#file_export">here</A>)</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">timeout_reboot_classical</SPAN></SPAN></TD><TD class="parameter_type">Integer</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Overwrite the default value for the reboot timeout</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">vlan</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Specify the VLAN the nodes should be reboot in</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">name</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The name of the environment</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">user</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The owner of the environment</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">version</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The version of the environment</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent">{<SPAN class="element_normal">pxe</SPAN>}</SPAN>.[<SPAN class="element_self"><SPAN class="element_normal">files</SPAN></SPAN>]</TD><TD class="parameter_type">Array</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">A list of path to files that have to be exported in the PXE repository's directory (see more <A href="#file_export">here</A>)</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent">{<SPAN class="element_normal">pxe</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">pxe</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">A custom PXE profile, the string FILES_PREFIX-- will be replaced by the prefix to some exported files</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent">{<SPAN class="element_normal">pxe</SPAN>}</SPAN>.{<SPAN class="element_self"><SPAN class="element_normal">singularities</SPAN></SPAN>}</TD><TD class="parameter_type">Hash</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Specify a substitution pattern for each node in the PXE profile (the NODE_SINGULARITY pattern must be used in the PXE profile)</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">pxe</SPAN>}</SPAN>.{<SPAN class="element_normal">singularities</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_dynamic">nodename</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The substitution pattern for the node "nodename"</TD></TR></TABLE></DIV></DIV><DIV class="response_frame"><H3 class="response_title">Response <SPAN class="response_title_desc">(<SPAN class="response_type">Hash</SPAN>, <SPAN class="response_content">application/json</SPAN>)</SPAN></H3><DIV class="response_subframe"><H4 class="response_subtitle">Fields</H4><TABLE class="response_fields"><TR><TH>Name</TH><TH>Type</TH><TH>Description</TH></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_dynamic"></SPAN></SPAN></TD><TD class="field_type"><A href="#type_Workflow">Workflow</A></TD><TD class="field_desc">Information related to the workflow of the reboot operation</TD></TR></TABLE><H4 class="response_subtitle">Return codes</H4><TABLE class="response_codes"><TR><TH>Code#</TH><TH>Description</TH></TR><TR class="code_frame"><TD class="code_number">200</TD><TD class="code_desc">OK, the request is successful</TD></TR><TR class="code_frame"><TD class="code_number">500</TD><TD class="code_desc">Internal Server Error, an uncatched exception was thrown on the server</TD></TR><TR class="code_frame"><TD class="code_number">400</TD><TD class="code_desc">Bad Request, Kadeploy Error: please check the X-Application-Error-Code and X-Application-Error-Code headers</TD></TR><TR class="code_frame"><TD class="code_number">401</TD><TD class="code_desc">Unauthorized, you need to be authenticated</TD></TR><TR class="code_frame"><TD class="code_number">403</TD><TD class="code_desc">Forbidden, you do not the rights to perform this operation. Unlike a 401 Unauthorized response, authenticating will make no difference.</TD></TR><TR class="code_frame"><TD class="code_number">415</TD><TD class="code_desc">Unsupported Media Type, check the Content-Type of your request's body</TD></TR></TABLE></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #1 <SPAN class="example_desc">Perform a simple hard reboot on nodes (do not re-write the PXE profile)</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">POST /reboot HTTP/1.1 Accept: text/plain, application/json Host: kadeploy.testbed.lan:25300 X-Kadeploy-User: frontend @@ -1515,7 +1515,7 @@ Content-Length: 533 "status": "/reboot/R-27714bc3-860d-40e7-8371-b7419f6c9021/status", "error": "/reboot/R-27714bc3-860d-40e7-8371-b7419f6c9021/error" } -}</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #2 <SPAN class="example_desc">Reboot nodes on the deployment environment and send the user's SSH authorized_keys file</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">POST /reboot HTTP/1.1 +}</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #2 <SPAN class="example_desc">Reboot nodes on the deployment environment and send the user's SSH authorized_keys file</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">POST /reboot HTTP/1.1 Accept: text/plain, application/json Host: kadeploy.testbed.lan:25300 X-Kadeploy-User: frontend @@ -1545,7 +1545,7 @@ Content-Length: 533 "status": "/reboot/R-52269f0e-1a5b-4f23-8cbf-0f17b166c420/status", "error": "/reboot/R-52269f0e-1a5b-4f23-8cbf-0f17b166c420/error" } -}</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #3 <SPAN class="example_desc">Reboot nodes on a (previously installed) recorded environment and check if the partition table was destroyed</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">POST /reboot HTTP/1.1 +}</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #3 <SPAN class="example_desc">Reboot nodes on a (previously installed) recorded environment and check if the partition table was destroyed</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">POST /reboot HTTP/1.1 Accept: text/plain, application/json Host: kadeploy.testbed.lan:25300 X-Kadeploy-User: frontend @@ -1581,7 +1581,7 @@ Content-Length: 533 "status": "/reboot/R-7b52716a-2b72-4c66-b725-dc9f1726d0a6/status", "error": "/reboot/R-7b52716a-2b72-4c66-b725-dc9f1726d0a6/error" } -}</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #4 <SPAN class="example_desc">Reboot nodes on a specified kernel using a custom PXE profile with some nodes singularities</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">POST /reboot HTTP/1.1 +}</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #4 <SPAN class="example_desc">Reboot nodes on a specified kernel using a custom PXE profile with some nodes singularities</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">POST /reboot HTTP/1.1 Accept: text/plain, application/json Host: kadeploy.testbed.lan:25300 X-Kadeploy-User: frontend @@ -1708,7 +1708,7 @@ Content-Length: 533 ] } } -}</PRE></DIV></DIV><P class="operation_back_link"><A class="operation_back_link" href="#title">Back to title</A></P><HR class="operation_index_sep"><DIV class="resource_frame"><H2 class="resource_title"><A id="POST/environments"><B class="resource_method_POST">POST</B> <SPAN style="font-family: monospace;" class="resource_path">/environments</SPAN></A></H2><P class="resource_desc"></P><DIV class="request_frame"><H3 class="request_title">Request <SPAN class="request_title_desc">(<SPAN class="request_type">Hash</SPAN>, <SPAN class="request_content">application/json</SPAN>)</SPAN></H3><DIV class="request_subframe"><H4 class="request_subtitle">Parameters</H4><TABLE class="request_parameters"><TR><TH>Name</TH><TH>Type</TH><TH>Kind</TH><TH>Description</TH></TR><TR class="parameter_frame"><TD class="parameter_name">{<SPAN class="element_self"><SPAN class="element_normal">environment</SPAN></SPAN>}</TD><TD class="parameter_type">Hash</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The environment to add</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">client</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The client used to export files to the server, useful for local:// files (see more <A href="#file_export">here</A>)</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.{<SPAN class="element_self"><SPAN class="element_normal">image</SPAN></SPAN>}</TD><TD class="parameter_type">Hash</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The image file that contains the environment</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">name</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The name of the environment</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">os</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The operating system of the environment<BR><EM>Expected values: </EM>linux, xen, other</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">author</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The author of the environment<BR><EM>Default value: </EM>empty string</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.{<SPAN class="element_self"><SPAN class="element_normal">boot</SPAN></SPAN>}</TD><TD class="parameter_type">Hash</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The environment's boot parameters</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">description</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The description of the environment<BR><EM>Default value: </EM>empty string</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">destructive</SPAN></SPAN></TD><TD class="parameter_type">Boolean</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The environment destruct the disk partitioning<BR><EM>Default value: </EM>false</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">filesystem</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The filesystem type of the environment, useful for tar environments<BR><EM>Default value: </EM>empty string</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">multipart</SPAN></SPAN></TD><TD class="parameter_type">Boolean</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The environment image is a multi-partitioned archive<BR><EM>Default value: </EM>false</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">options</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Custom options</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">partition_type</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The partition type that will be set when partitioning the disk<BR><EM>Default value: </EM>0</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.[<SPAN class="element_self"><SPAN class="element_normal">postinstalls</SPAN></SPAN>]</TD><TD class="parameter_type">Array</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">A list of postinstall script archives</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.{<SPAN class="element_self"><SPAN class="element_normal">preinstall</SPAN></SPAN>}</TD><TD class="parameter_type">Hash</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">A preinstall script archive</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">version</SPAN></SPAN></TD><TD class="parameter_type">Integer</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The version of the environment<BR><EM>Default value: </EM>1</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">visibility</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The visibility of the environment<BR><EM>Expected values: </EM>public, private, shared<BR><EM>Default value: </EM>private</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.{<SPAN class="element_normal">boot</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">block_device</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The block device environment should be installed on, useful for multi-partitioned environments<BR><EM>Default value: </EM>empty string</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.{<SPAN class="element_normal">boot</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">deploy_part</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The partition the environment should be installed on, useful for multi-partitioned environments<BR><EM>Default value: </EM>empty string</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.{<SPAN class="element_normal">boot</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">hypervisor</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Path to the hypervisor file (inside the environment\s image), useful when deploying Xen environments<BR><EM>Default value: </EM>empty string</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.{<SPAN class="element_normal">boot</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">hypervisor_params</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The parameters to be given to the hypervisor at launch time, useful when deploying Xen environments<BR><EM>Default value: </EM>empty string</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.{<SPAN class="element_normal">boot</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">initrd</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Path to the initrd file (inside the environment\s image)<BR><EM>Default value: </EM>empty string</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.{<SPAN class="element_normal">boot</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">kernel</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Path to the kernel file (inside the environment\s image)<BR><EM>Default value: </EM>empty string</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.{<SPAN class="element_normal">boot</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">kernel_params</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The parameters to be given to the kernel at launch time<BR><EM>Default value: </EM>empty string</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.{<SPAN class="element_normal">image</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">compression</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The compression algorithm used to compress the image<BR><EM>Expected values: </EM>gzip, bzip2, xz</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.{<SPAN class="element_normal">image</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">file</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The path to the image file (see more <A href="#file_export">here</A>)</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.{<SPAN class="element_normal">image</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">kind</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The kind of image<BR><EM>Expected values: </EM>tar, dd, fsa</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.<SPAN class="element_normal">options</SPAN></SPAN>.[<SPAN class="element_self"><SPAN class="element_normal">partitions</SPAN></SPAN>]</TD><TD class="parameter_type">Array</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">A list of id/partition association</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.<SPAN class="element_normal">options</SPAN></SPAN>.[<SPAN class="element_normal">partitions</SPAN>]</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">device</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The physical device this archive part should be installed on</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.<SPAN class="element_normal">options</SPAN></SPAN>.[<SPAN class="element_normal">partitions</SPAN>]</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">id</SPAN></SPAN></TD><TD class="parameter_type">Integer</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The id of the partition inside the compressed archive</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.[<SPAN class="element_normal">postinstalls</SPAN>]</SPAN>.{<SPAN class="element_iter">#i</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">compression</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The compression algorithm used to compress the archive<BR><EM>Expected values: </EM>gzip, bzip2, xz</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.[<SPAN class="element_normal">postinstalls</SPAN>]</SPAN>.{<SPAN class="element_iter">#i</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">file</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The path to the archive file (see more <A href="#file_export">here</A>)</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.[<SPAN class="element_normal">postinstalls</SPAN>]</SPAN>.{<SPAN class="element_iter">#i</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">script</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">Path to a script (inside the archive) that will be launched during the post-install step<BR><EM>Default value: </EM>none</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.[<SPAN class="element_normal">postinstalls</SPAN>]</SPAN>.{<SPAN class="element_self"><SPAN class="element_iter">#i</SPAN></SPAN>}</TD><TD class="parameter_type">Hash</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">A postinstall script archive</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.{<SPAN class="element_normal">preinstall</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">compression</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The compression algorithm used to compress the archive<BR><EM>Expected values: </EM>gzip, bzip2, xz</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.{<SPAN class="element_normal">preinstall</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">file</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The path to the archive file (see more <A href="#file_export">here</A>)</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.{<SPAN class="element_normal">preinstall</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">script</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">Path to a script (inside the archive) that will be launched during the pre-install step<BR><EM>Default value: </EM>none</TD></TR></TABLE></DIV></DIV><DIV class="response_frame"><H3 class="response_title">Response <SPAN class="response_title_desc">(<SPAN class="response_type">Hash</SPAN>, <SPAN class="response_content">application/json</SPAN>)</SPAN></H3><DIV class="response_subframe"><H4 class="response_subtitle">Fields</H4><TABLE class="response_fields"><TR><TH>Name</TH><TH>Type</TH><TH>Description</TH></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_dynamic"></SPAN></SPAN></TD><TD class="field_type"><A href="#type_Environment">Environment</A></TD><TD class="field_desc">The environment that was added</TD></TR></TABLE><H4 class="response_subtitle">Return codes</H4><TABLE class="response_codes"><TR><TH>Code#</TH><TH>Description</TH></TR><TR class="code_frame"><TD class="code_number">200</TD><TD class="code_desc">OK, the request is successful</TD></TR><TR class="code_frame"><TD class="code_number">500</TD><TD class="code_desc">Internal Server Error, an uncatched exception was thrown on the server</TD></TR><TR class="code_frame"><TD class="code_number">400</TD><TD class="code_desc">Bad Request, Kadeploy Error: please check the X-Application-Error-Code and X-Application-Error-Code headers</TD></TR><TR class="code_frame"><TD class="code_number">401</TD><TD class="code_desc">Unauthorized, you need to be authenticated</TD></TR><TR class="code_frame"><TD class="code_number">403</TD><TD class="code_desc">Forbidden, you do not the rights to perform this operation. Unlike a 401 Unauthorized response, authenticating will make no difference.</TD></TR><TR class="code_frame"><TD class="code_number">415</TD><TD class="code_desc">Unsupported Media Type, check the Content-Type of your request's body</TD></TR><TR class="code_frame"><TD class="code_number">400-6</TD><TD class="code_desc">Invalid environment, something went wrong with the environment description checking, check the error message</TD></TR><TR class="code_frame"><TD class="code_number">400-9</TD><TD class="code_desc">Invalid content, check your JSON's structure</TD></TR><TR class="code_frame"><TD class="code_number">400-10</TD><TD class="code_desc">Already existing element, an environment with the same user/name/version already exists</TD></TR><TR class="code_frame"><TD class="code_number">400-12</TD><TD class="code_desc">Nothing modified</TD></TR></TABLE></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #1 <SPAN class="example_desc">Create a basic environment (the image's archive is exported from the client to the server)</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">POST /environments HTTP/1.1 +}</PRE></DIV></DIV><P class="operation_back_link"><A class="operation_back_link" href="#title">Back to title</A></P><HR class="operation_index_sep"><DIV class="resource_frame"><H2 class="resource_title"><A id="POST/environments"><B class="resource_method_POST">POST</B> <SPAN style="font-family: monospace;" class="resource_path">/environments</SPAN></A></H2><P class="resource_desc"></P><DIV class="request_frame"><H3 class="request_title">Request <SPAN class="request_title_desc">(<SPAN class="request_type">Hash</SPAN>, <SPAN class="request_content">application/json</SPAN>)</SPAN></H3><DIV class="request_subframe"><H4 class="request_subtitle">Parameters</H4><TABLE class="request_parameters"><TR><TH>Name</TH><TH>Type</TH><TH>Kind</TH><TH>Description</TH></TR><TR class="parameter_frame"><TD class="parameter_name">{<SPAN class="element_self"><SPAN class="element_normal">environment</SPAN></SPAN>}</TD><TD class="parameter_type">Hash</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The environment to add</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">client</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The client used to export files to the server, useful for local:// files (see more <A href="#file_export">here</A>)</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.{<SPAN class="element_self"><SPAN class="element_normal">image</SPAN></SPAN>}</TD><TD class="parameter_type">Hash</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The image file that contains the environment</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">name</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The name of the environment</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">os</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The operating system of the environment<BR><EM>Expected values: </EM>linux, xen, other</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">author</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The author of the environment<BR><EM>Default value: </EM>empty string</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.{<SPAN class="element_self"><SPAN class="element_normal">boot</SPAN></SPAN>}</TD><TD class="parameter_type">Hash</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The environment's boot parameters</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">description</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The description of the environment<BR><EM>Default value: </EM>empty string</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">destructive</SPAN></SPAN></TD><TD class="parameter_type">Boolean</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The environment destruct the disk partitioning<BR><EM>Default value: </EM>false</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">filesystem</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The filesystem type of the environment, useful for tar environments<BR><EM>Default value: </EM>empty string</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">multipart</SPAN></SPAN></TD><TD class="parameter_type">Boolean</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The environment image is a multi-partitioned archive<BR><EM>Default value: </EM>false</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">options</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Custom options</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">partition_type</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The partition type that will be set when partitioning the disk<BR><EM>Default value: </EM>0</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.[<SPAN class="element_self"><SPAN class="element_normal">postinstalls</SPAN></SPAN>]</TD><TD class="parameter_type">Array</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">A list of postinstall script archives</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.{<SPAN class="element_self"><SPAN class="element_normal">preinstall</SPAN></SPAN>}</TD><TD class="parameter_type">Hash</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">A preinstall script archive</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">version</SPAN></SPAN></TD><TD class="parameter_type">Integer</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The version of the environment<BR><EM>Default value: </EM>1</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">visibility</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The visibility of the environment<BR><EM>Expected values: </EM>public, private, shared<BR><EM>Default value: </EM>private</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.{<SPAN class="element_normal">boot</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">block_device</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The block device environment should be installed on, useful for multi-partitioned environments<BR><EM>Default value: </EM>empty string</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.{<SPAN class="element_normal">boot</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">deploy_part</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The partition the environment should be installed on, useful for multi-partitioned environments<BR><EM>Default value: </EM>empty string</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.{<SPAN class="element_normal">boot</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">hypervisor</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Path to the hypervisor file (inside the environment\s image), useful when deploying Xen environments<BR><EM>Default value: </EM>empty string</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.{<SPAN class="element_normal">boot</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">hypervisor_params</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The parameters to be given to the hypervisor at launch time, useful when deploying Xen environments<BR><EM>Default value: </EM>empty string</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.{<SPAN class="element_normal">boot</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">initrd</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Path to the initrd file (inside the environment\s image)<BR><EM>Default value: </EM>empty string</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.{<SPAN class="element_normal">boot</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">kernel</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Path to the kernel file (inside the environment\s image)<BR><EM>Default value: </EM>empty string</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.{<SPAN class="element_normal">boot</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">kernel_params</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The parameters to be given to the kernel at launch time<BR><EM>Default value: </EM>empty string</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.{<SPAN class="element_normal">image</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">compression</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The compression algorithm used to compress the image<BR><EM>Expected values: </EM>gzip, bzip2, xz</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.{<SPAN class="element_normal">image</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">file</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The path to the image file (see more <A href="#file_export">here</A>)</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.{<SPAN class="element_normal">image</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">kind</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The kind of image<BR><EM>Expected values: </EM>tar, dd, fsa</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.<SPAN class="element_normal">options</SPAN></SPAN>.[<SPAN class="element_self"><SPAN class="element_normal">partitions</SPAN></SPAN>]</TD><TD class="parameter_type">Array</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">A list of id/partition association</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.<SPAN class="element_normal">options</SPAN></SPAN>.[<SPAN class="element_normal">partitions</SPAN>]</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">device</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The physical device this archive part should be installed on</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.<SPAN class="element_normal">options</SPAN></SPAN>.[<SPAN class="element_normal">partitions</SPAN>]</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">id</SPAN></SPAN></TD><TD class="parameter_type">Integer</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The id of the partition inside the compressed archive</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.[<SPAN class="element_normal">postinstalls</SPAN>]</SPAN>.{<SPAN class="element_iter">#i</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">compression</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The compression algorithm used to compress the archive<BR><EM>Expected values: </EM>gzip, bzip2, xz</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.[<SPAN class="element_normal">postinstalls</SPAN>]</SPAN>.{<SPAN class="element_iter">#i</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">file</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The path to the archive file (see more <A href="#file_export">here</A>)</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.[<SPAN class="element_normal">postinstalls</SPAN>]</SPAN>.{<SPAN class="element_iter">#i</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">script</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">Path to a script (inside the archive) that will be launched during the post-install step<BR><EM>Default value: </EM>none</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.[<SPAN class="element_normal">postinstalls</SPAN>]</SPAN>.{<SPAN class="element_self"><SPAN class="element_iter">#i</SPAN></SPAN>}</TD><TD class="parameter_type">Hash</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">A postinstall script archive</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.{<SPAN class="element_normal">preinstall</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">compression</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The compression algorithm used to compress the archive<BR><EM>Expected values: </EM>gzip, bzip2, xz</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.{<SPAN class="element_normal">preinstall</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">file</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The path to the archive file (see more <A href="#file_export">here</A>)</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent"><SPAN class="element_parent">{<SPAN class="element_normal">environment</SPAN>}</SPAN>.{<SPAN class="element_normal">preinstall</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_normal">script</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">Path to a script (inside the archive) that will be launched during the pre-install step<BR><EM>Default value: </EM>none</TD></TR></TABLE></DIV></DIV><DIV class="response_frame"><H3 class="response_title">Response <SPAN class="response_title_desc">(<SPAN class="response_type">Hash</SPAN>, <SPAN class="response_content">application/json</SPAN>)</SPAN></H3><DIV class="response_subframe"><H4 class="response_subtitle">Fields</H4><TABLE class="response_fields"><TR><TH>Name</TH><TH>Type</TH><TH>Description</TH></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_dynamic"></SPAN></SPAN></TD><TD class="field_type"><A href="#type_Environment">Environment</A></TD><TD class="field_desc">The environment that was added</TD></TR></TABLE><H4 class="response_subtitle">Return codes</H4><TABLE class="response_codes"><TR><TH>Code#</TH><TH>Description</TH></TR><TR class="code_frame"><TD class="code_number">200</TD><TD class="code_desc">OK, the request is successful</TD></TR><TR class="code_frame"><TD class="code_number">500</TD><TD class="code_desc">Internal Server Error, an uncatched exception was thrown on the server</TD></TR><TR class="code_frame"><TD class="code_number">400</TD><TD class="code_desc">Bad Request, Kadeploy Error: please check the X-Application-Error-Code and X-Application-Error-Code headers</TD></TR><TR class="code_frame"><TD class="code_number">401</TD><TD class="code_desc">Unauthorized, you need to be authenticated</TD></TR><TR class="code_frame"><TD class="code_number">403</TD><TD class="code_desc">Forbidden, you do not the rights to perform this operation. Unlike a 401 Unauthorized response, authenticating will make no difference.</TD></TR><TR class="code_frame"><TD class="code_number">415</TD><TD class="code_desc">Unsupported Media Type, check the Content-Type of your request's body</TD></TR><TR class="code_frame"><TD class="code_number">400-6</TD><TD class="code_desc">Invalid environment, something went wrong with the environment description checking, check the error message</TD></TR><TR class="code_frame"><TD class="code_number">400-9</TD><TD class="code_desc">Invalid content, check your JSON's structure</TD></TR><TR class="code_frame"><TD class="code_number">400-10</TD><TD class="code_desc">Already existing element, an environment with the same user/name/version already exists</TD></TR><TR class="code_frame"><TD class="code_number">400-12</TD><TD class="code_desc">Nothing modified</TD></TR></TABLE></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #1 <SPAN class="example_desc">Create a basic environment (the image's archive is exported from the client to the server)</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">POST /environments HTTP/1.1 Accept: text/plain, application/json Host: kadeploy.testbed.lan:25300 X-Kadeploy-User: frontend @@ -1774,7 +1774,7 @@ Content-Length: 605 "filesystem": "ext3", "partition_type": 83, "multipart": false -}</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #2 <SPAN class="example_desc">Create a minimal environment (the image's archive is accessible on HTTP)</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">POST /environments HTTP/1.1 +}</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #2 <SPAN class="example_desc">Create a minimal environment (the image's archive is accessible on HTTP)</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">POST /environments HTTP/1.1 Accept: text/plain, application/json Host: kadeploy.testbed.lan:25300 X-Kadeploy-User: frontend @@ -1816,7 +1816,7 @@ Content-Length: 364 "filesystem": "ext3", "partition_type": 0, "multipart": false -}</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #3 <SPAN class="example_desc">Create a multi-partitioned environment (the image's archive is stored on the server)</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">POST /environments HTTP/1.1 +}</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #3 <SPAN class="example_desc">Create a multi-partitioned environment (the image's archive is stored on the server)</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">POST /environments HTTP/1.1 Accept: text/plain, application/json Host: kadeploy.testbed.lan:25300 X-Kadeploy-User: frontend @@ -1896,7 +1896,7 @@ Content-Length: 642 } ] } -}</PRE></DIV></DIV></DIV></DIV><P class="operation_back_link"><A class="operation_back_link" href="#Environments management">Back to operation</A></P><HR class="operation_inter_sep"><DIV class="resource_frame"><H2 class="resource_title"><A id="GET/environments/:username?/:name?/:version?"><B class="resource_method_GET">GET</B> <SPAN style="font-family: monospace;" class="resource_path">/environments/:username?/:name?/:version?</SPAN></A></H2><P class="resource_desc">Gather the description of environments. If no user is given, the public environment will be displayed, otherwise a list of all environments that are public or owned by the user will be returned. The :username or the :name fields have to be encoded following the RFC 3986 specifications (non-ASCII characters are encoded with a percent notation)</P><DIV class="request_frame"><H3 class="request_title">Request <SPAN class="request_title_desc">(<SPAN class="request_type">Hash</SPAN>, <SPAN class="request_content">application/json</SPAN>)</SPAN></H3><DIV class="request_subframe"><H4 class="request_subtitle">Parameters</H4><TABLE class="request_parameters"><TR><TH>Name</TH><TH>Type</TH><TH>Kind</TH><TH>Description</TH></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_param">name</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The name of the environment</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_param">username</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The owner of the environment</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_param">version</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The version of the environment</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">last</SPAN></SPAN></TD><TD class="parameter_type">Set</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Show the last version of environments (by default every versions are returned)</TD></TR></TABLE></DIV></DIV><DIV class="response_frame"><H3 class="response_title">Response <SPAN class="response_title_desc">(<SPAN class="response_type">Array</SPAN>, <SPAN class="response_content">application/json</SPAN>)</SPAN></H3><DIV class="response_subframe"><H4 class="response_subtitle">Fields</H4><TABLE class="response_fields"><TR><TH>Name</TH><TH>Type</TH><TH>Description</TH></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_iter">#i</SPAN></SPAN></TD><TD class="field_type"><A href="#type_Environment">Environment</A></TD><TD class="field_desc">One of the environment that were matching the request's parameters</TD></TR></TABLE><H4 class="response_subtitle">Return codes</H4><TABLE class="response_codes"><TR><TH>Code#</TH><TH>Description</TH></TR><TR class="code_frame"><TD class="code_number">200</TD><TD class="code_desc">OK, the request is successful</TD></TR><TR class="code_frame"><TD class="code_number">500</TD><TD class="code_desc">Internal Server Error, an uncatched exception was thrown on the server</TD></TR><TR class="code_frame"><TD class="code_number">400</TD><TD class="code_desc">Bad Request, Kadeploy Error: please check the X-Application-Error-Code and X-Application-Error-Code headers</TD></TR><TR class="code_frame"><TD class="code_number">401</TD><TD class="code_desc">Unauthorized, you need to be authenticated</TD></TR><TR class="code_frame"><TD class="code_number">403</TD><TD class="code_desc">Forbidden, you do not the rights to perform this operation. Unlike a 401 Unauthorized response, authenticating will make no difference.</TD></TR><TR class="code_frame"><TD class="code_number">415</TD><TD class="code_desc">Unsupported Media Type, check the Content-Type of your request's body</TD></TR><TR class="code_frame"><TD class="code_number">404</TD><TD class="code_desc">File not found, the resource you are looking for cannot be found</TD></TR></TABLE></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #1 <SPAN class="example_desc">Get the list of all visible environments</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">GET /environments HTTP/1.1 +}</PRE></DIV></DIV></DIV></DIV><P class="operation_back_link"><A class="operation_back_link" href="#Environments management">Back to operation</A></P><HR class="operation_inter_sep"><DIV class="resource_frame"><H2 class="resource_title"><A id="GET/environments/:username?/:name?/:version?"><B class="resource_method_GET">GET</B> <SPAN style="font-family: monospace;" class="resource_path">/environments/:username?/:name?/:version?</SPAN></A></H2><P class="resource_desc">Gather the description of environments. If no user is given, the public environment will be displayed, otherwise a list of all environments that are public or owned by the user will be returned. The :username or the :name fields have to be encoded following the RFC 3986 specifications (non-ASCII characters are encoded with a percent notation)</P><DIV class="request_frame"><H3 class="request_title">Request <SPAN class="request_title_desc">(<SPAN class="request_type">Hash</SPAN>, <SPAN class="request_content">application/json</SPAN>)</SPAN></H3><DIV class="request_subframe"><H4 class="request_subtitle">Parameters</H4><TABLE class="request_parameters"><TR><TH>Name</TH><TH>Type</TH><TH>Kind</TH><TH>Description</TH></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_param">name</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The name of the environment</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_param">username</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The owner of the environment</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_param">version</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The version of the environment</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">last</SPAN></SPAN></TD><TD class="parameter_type">Set</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Show the last version of environments (by default every versions are returned)</TD></TR></TABLE></DIV></DIV><DIV class="response_frame"><H3 class="response_title">Response <SPAN class="response_title_desc">(<SPAN class="response_type">Array</SPAN>, <SPAN class="response_content">application/json</SPAN>)</SPAN></H3><DIV class="response_subframe"><H4 class="response_subtitle">Fields</H4><TABLE class="response_fields"><TR><TH>Name</TH><TH>Type</TH><TH>Description</TH></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_iter">#i</SPAN></SPAN></TD><TD class="field_type"><A href="#type_Environment">Environment</A></TD><TD class="field_desc">One of the environment that were matching the request's parameters</TD></TR></TABLE><H4 class="response_subtitle">Return codes</H4><TABLE class="response_codes"><TR><TH>Code#</TH><TH>Description</TH></TR><TR class="code_frame"><TD class="code_number">200</TD><TD class="code_desc">OK, the request is successful</TD></TR><TR class="code_frame"><TD class="code_number">500</TD><TD class="code_desc">Internal Server Error, an uncatched exception was thrown on the server</TD></TR><TR class="code_frame"><TD class="code_number">400</TD><TD class="code_desc">Bad Request, Kadeploy Error: please check the X-Application-Error-Code and X-Application-Error-Code headers</TD></TR><TR class="code_frame"><TD class="code_number">401</TD><TD class="code_desc">Unauthorized, you need to be authenticated</TD></TR><TR class="code_frame"><TD class="code_number">403</TD><TD class="code_desc">Forbidden, you do not the rights to perform this operation. Unlike a 401 Unauthorized response, authenticating will make no difference.</TD></TR><TR class="code_frame"><TD class="code_number">415</TD><TD class="code_desc">Unsupported Media Type, check the Content-Type of your request's body</TD></TR><TR class="code_frame"><TD class="code_number">404</TD><TD class="code_desc">File not found, the resource you are looking for cannot be found</TD></TR></TABLE></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #1 <SPAN class="example_desc">Get the list of all visible environments</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">GET /environments HTTP/1.1 Accept: text/plain, application/json Host: kadeploy.testbed.lan:25300 X-Kadeploy-User: frontend</PRE><H4 class="example_subtitle">Response</H4><PRE class="code_sample">HTTP/1.1 200 OK @@ -1961,7 +1961,7 @@ Content-Length: 1589 "multipart": false, "user": "root" } -]</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #2 <SPAN class="example_desc">Get the list of the environments a specified user can see</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">GET /environments/frontend HTTP/1.1 +]</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #2 <SPAN class="example_desc">Get the list of the environments a specified user can see</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">GET /environments/frontend HTTP/1.1 Accept: text/plain, application/json Host: kadeploy.testbed.lan:25300 X-Kadeploy-User: frontend</PRE><H4 class="example_subtitle">Response</H4><PRE class="code_sample">HTTP/1.1 200 OK @@ -2046,7 +2046,7 @@ Content-Length: 2029 "multipart": false, "user": "root" } -]</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #3 <SPAN class="example_desc">Get the description of a specific environment</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">GET /environments/frontend/debian-custom HTTP/1.1 +]</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #3 <SPAN class="example_desc">Get the description of a specific environment</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">GET /environments/frontend/debian-custom HTTP/1.1 Accept: text/plain, application/json Host: kadeploy.testbed.lan:25300 X-Kadeploy-User: frontend</PRE><H4 class="example_subtitle">Response</H4><PRE class="code_sample">HTTP/1.1 200 OK @@ -2073,7 +2073,7 @@ Content-Length: 442 "multipart": false, "user": "frontend" } -]</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #4 <SPAN class="example_desc">Get the description of a specific version of a specific environment</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">GET /environments/frontend/debian-custom/1 HTTP/1.1 +]</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #4 <SPAN class="example_desc">Get the description of a specific version of a specific environment</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">GET /environments/frontend/debian-custom/1 HTTP/1.1 Accept: text/plain, application/json Host: kadeploy.testbed.lan:25300 X-Kadeploy-User: frontend</PRE><H4 class="example_subtitle">Response</H4><PRE class="code_sample">HTTP/1.1 200 OK @@ -2100,7 +2100,7 @@ Content-Length: 432 "multipart": false, "user": "frontend" } -]</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #5 <SPAN class="example_desc">Get the description of every versions of a specific environment</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">GET /environments/frontend/debian-custom HTTP/1.1 +]</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #5 <SPAN class="example_desc">Get the description of every versions of a specific environment</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">GET /environments/frontend/debian-custom HTTP/1.1 Accept: text/plain, application/json Host: kadeploy.testbed.lan:25300 X-Kadeploy-User: frontend</PRE><H4 class="example_subtitle">Response</H4><PRE class="code_sample">HTTP/1.1 200 OK @@ -2147,7 +2147,7 @@ Content-Length: 872 "multipart": false, "user": "frontend" } -]</PRE></DIV></DIV></DIV></DIV><P class="operation_back_link"><A class="operation_back_link" href="#Environments management">Back to operation</A></P><HR class="operation_inter_sep"><DIV class="resource_frame"><H2 class="resource_title"><A id="PUT/environments/:username/:name/:version?"><B class="resource_method_PUT">PUT</B> <SPAN style="font-family: monospace;" class="resource_path">/environments/:username/:name/:version?</SPAN></A></H2><P class="resource_desc">Modify some environment(s) properties, returns the modified environment. If no version is specified, modify the last version. The :username or the :name fields have to be encoded following the RFC 3986 specifications (non-ASCII characters are encoded with a percent notation)</P><DIV class="request_frame"><H3 class="request_title">Request <SPAN class="request_title_desc">(<SPAN class="request_type">Hash</SPAN>, <SPAN class="request_content">application/json</SPAN>)</SPAN></H3><DIV class="request_subframe"><H4 class="request_subtitle">Parameters</H4><TABLE class="request_parameters"><TR><TH>Name</TH><TH>Type</TH><TH>Kind</TH><TH>Description</TH></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_param">name</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The name of the environment, mandatory if the operation is not update_file</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_param">username</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The owner of the environment, mandatory if the operation is not update_file</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_param">version</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The version of the environment</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">client</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The client used to export files to the server, needed to update the checksum of local:// files (see more <A href="#file_export">here</A>)</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">toggle_destructive</SPAN></SPAN></TD><TD class="parameter_type">Set</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Toggle the destructive flag</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">update_image_checksum</SPAN></SPAN></TD><TD class="parameter_type">Set</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Update the checksum of the image's archive in the database (the server will get the checksum of the recorded archive file)</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">update_postinstalls_checksum</SPAN></SPAN></TD><TD class="parameter_type">Set</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Update the checksum of the preinstall's archive(s) in the database (the server will get the checksum of the recorded archive file)</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">update_preinstall_checksum</SPAN></SPAN></TD><TD class="parameter_type">Set</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Update the checksum of the preinstall's archive in the database (the server will get the checksum of the recorded archive file)</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">visibility</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Set the visibility of the environment</TD></TR></TABLE></DIV></DIV><DIV class="response_frame"><H3 class="response_title">Response <SPAN class="response_title_desc">(<SPAN class="response_type">Hash/Array</SPAN>, <SPAN class="response_content">application/json</SPAN>)</SPAN></H3><DIV class="response_subframe"><H4 class="response_subtitle">Fields</H4><TABLE class="response_fields"><TR><TH>Name</TH><TH>Type</TH><TH>Description</TH></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_dynamic"></SPAN></SPAN></TD><TD class="field_type"><A href="#type_Environment">Environment</A></TD><TD class="field_desc">The environment that was modified</TD></TR></TABLE><H4 class="response_subtitle">Return codes</H4><TABLE class="response_codes"><TR><TH>Code#</TH><TH>Description</TH></TR><TR class="code_frame"><TD class="code_number">200</TD><TD class="code_desc">OK, the request is successful</TD></TR><TR class="code_frame"><TD class="code_number">500</TD><TD class="code_desc">Internal Server Error, an uncatched exception was thrown on the server</TD></TR><TR class="code_frame"><TD class="code_number">400</TD><TD class="code_desc">Bad Request, Kadeploy Error: please check the X-Application-Error-Code and X-Application-Error-Code headers</TD></TR><TR class="code_frame"><TD class="code_number">401</TD><TD class="code_desc">Unauthorized, you need to be authenticated</TD></TR><TR class="code_frame"><TD class="code_number">403</TD><TD class="code_desc">Forbidden, you do not the rights to perform this operation. Unlike a 401 Unauthorized response, authenticating will make no difference.</TD></TR><TR class="code_frame"><TD class="code_number">415</TD><TD class="code_desc">Unsupported Media Type, check the Content-Type of your request's body</TD></TR><TR class="code_frame"><TD class="code_number">400-9</TD><TD class="code_desc">Invalid content, check your JSON's structure</TD></TR><TR class="code_frame"><TD class="code_number">400-12</TD><TD class="code_desc">Nothing modified</TD></TR></TABLE></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #1 <SPAN class="example_desc">Change the visibility flag of an environment</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">PUT /environments/frontend/debian-custom HTTP/1.1 +]</PRE></DIV></DIV></DIV></DIV><P class="operation_back_link"><A class="operation_back_link" href="#Environments management">Back to operation</A></P><HR class="operation_inter_sep"><DIV class="resource_frame"><H2 class="resource_title"><A id="PUT/environments/:username/:name/:version?"><B class="resource_method_PUT">PUT</B> <SPAN style="font-family: monospace;" class="resource_path">/environments/:username/:name/:version?</SPAN></A></H2><P class="resource_desc">Modify some environment(s) properties, returns the modified environment. If no version is specified, modify the last version. The :username or the :name fields have to be encoded following the RFC 3986 specifications (non-ASCII characters are encoded with a percent notation)</P><DIV class="request_frame"><H3 class="request_title">Request <SPAN class="request_title_desc">(<SPAN class="request_type">Hash</SPAN>, <SPAN class="request_content">application/json</SPAN>)</SPAN></H3><DIV class="request_subframe"><H4 class="request_subtitle">Parameters</H4><TABLE class="request_parameters"><TR><TH>Name</TH><TH>Type</TH><TH>Kind</TH><TH>Description</TH></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_param">name</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The name of the environment, mandatory if the operation is not update_file</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_param">username</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The owner of the environment, mandatory if the operation is not update_file</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_param">version</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The version of the environment</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">client</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The client used to export files to the server, needed to update the checksum of local:// files (see more <A href="#file_export">here</A>)</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">toggle_destructive</SPAN></SPAN></TD><TD class="parameter_type">Set</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Toggle the destructive flag</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">update_image_checksum</SPAN></SPAN></TD><TD class="parameter_type">Set</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Update the checksum of the image's archive in the database (the server will get the checksum of the recorded archive file)</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">update_postinstalls_checksum</SPAN></SPAN></TD><TD class="parameter_type">Set</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Update the checksum of the preinstall's archive(s) in the database (the server will get the checksum of the recorded archive file)</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">update_preinstall_checksum</SPAN></SPAN></TD><TD class="parameter_type">Set</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Update the checksum of the preinstall's archive in the database (the server will get the checksum of the recorded archive file)</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">visibility</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Set the visibility of the environment</TD></TR></TABLE></DIV></DIV><DIV class="response_frame"><H3 class="response_title">Response <SPAN class="response_title_desc">(<SPAN class="response_type">Hash/Array</SPAN>, <SPAN class="response_content">application/json</SPAN>)</SPAN></H3><DIV class="response_subframe"><H4 class="response_subtitle">Fields</H4><TABLE class="response_fields"><TR><TH>Name</TH><TH>Type</TH><TH>Description</TH></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_dynamic"></SPAN></SPAN></TD><TD class="field_type"><A href="#type_Environment">Environment</A></TD><TD class="field_desc">The environment that was modified</TD></TR></TABLE><H4 class="response_subtitle">Return codes</H4><TABLE class="response_codes"><TR><TH>Code#</TH><TH>Description</TH></TR><TR class="code_frame"><TD class="code_number">200</TD><TD class="code_desc">OK, the request is successful</TD></TR><TR class="code_frame"><TD class="code_number">500</TD><TD class="code_desc">Internal Server Error, an uncatched exception was thrown on the server</TD></TR><TR class="code_frame"><TD class="code_number">400</TD><TD class="code_desc">Bad Request, Kadeploy Error: please check the X-Application-Error-Code and X-Application-Error-Code headers</TD></TR><TR class="code_frame"><TD class="code_number">401</TD><TD class="code_desc">Unauthorized, you need to be authenticated</TD></TR><TR class="code_frame"><TD class="code_number">403</TD><TD class="code_desc">Forbidden, you do not the rights to perform this operation. Unlike a 401 Unauthorized response, authenticating will make no difference.</TD></TR><TR class="code_frame"><TD class="code_number">415</TD><TD class="code_desc">Unsupported Media Type, check the Content-Type of your request's body</TD></TR><TR class="code_frame"><TD class="code_number">400-9</TD><TD class="code_desc">Invalid content, check your JSON's structure</TD></TR><TR class="code_frame"><TD class="code_number">400-12</TD><TD class="code_desc">Nothing modified</TD></TR></TABLE></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #1 <SPAN class="example_desc">Change the visibility flag of an environment</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">PUT /environments/frontend/debian-custom HTTP/1.1 Accept: text/plain, application/json Host: kadeploy.testbed.lan:25300 X-Kadeploy-User: frontend @@ -2176,7 +2176,7 @@ Content-Length: 375 "filesystem": "ext4", "partition_type": 0, "multipart": false -}</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #2 <SPAN class="example_desc">Tell the server to gather the new checksum of the image's archive</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">PUT /environments/frontend/debian-custom?update_image_checksum HTTP/1.1 +}</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #2 <SPAN class="example_desc">Tell the server to gather the new checksum of the image's archive</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">PUT /environments/frontend/debian-custom?update_image_checksum HTTP/1.1 Accept: text/plain, application/json Host: kadeploy.testbed.lan:25300 X-Kadeploy-User: frontend</PRE><H4 class="example_subtitle">Response</H4><PRE class="code_sample">HTTP/1.1 200 OK @@ -2200,7 +2200,7 @@ Content-Length: 369 "filesystem": "ext3", "partition_type": 0, "multipart": false -}</PRE></DIV></DIV></DIV></DIV><P class="operation_back_link"><A class="operation_back_link" href="#Environments management">Back to operation</A></P><HR class="operation_inter_sep"><DIV class="resource_frame"><H2 class="resource_title"><A id="PUT/environments/:username?/:name?/:version?"><B class="resource_method_PUT">PUT</B> <SPAN style="font-family: monospace;" class="resource_path">/environments/:username?/:name?/:version?</SPAN></A></H2><P class="resource_desc">Modify some environment(s) properties, returns the modified environment. If no version is specified, modify the last version. The :username or the :name fields have to be encoded following the RFC 3986 specifications (non-ASCII characters are encoded with a percent notation)</P><DIV class="request_frame"><H3 class="request_title">Request <SPAN class="request_title_desc">(<SPAN class="request_type">Hash</SPAN>, <SPAN class="request_content">application/json</SPAN>)</SPAN></H3><DIV class="request_subframe"><H4 class="request_subtitle">Parameters</H4><TABLE class="request_parameters"><TR><TH>Name</TH><TH>Type</TH><TH>Kind</TH><TH>Description</TH></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_param">name</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The name of the environment, mandatory if the operation is not update_file</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_param">username</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The owner of the environment, mandatory if the operation is not update_file</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_param">version</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The version of the environment</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">client</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The client used to export files to the server, needed to update the checksum of local:// files (see more <A href="#file_export">here</A>)</TD></TR><TR class="parameter_frame"><TD class="parameter_name">{<SPAN class="element_self"><SPAN class="element_normal">update_files</SPAN></SPAN>}</TD><TD class="parameter_type">Hash</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Batch renaming of file's paths, admins only</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent">{<SPAN class="element_normal">update_files</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_dynamic">old_path_prefix</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The new path prefix</TD></TR></TABLE></DIV></DIV><DIV class="response_frame"><H3 class="response_title">Response <SPAN class="response_title_desc">(<SPAN class="response_type">Hash/Array</SPAN>, <SPAN class="response_content">application/json</SPAN>)</SPAN></H3><DIV class="response_subframe"><H4 class="response_subtitle">Fields</H4><TABLE class="response_fields"><TR><TH>Name</TH><TH>Type</TH><TH>Description</TH></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_dynamic"></SPAN></SPAN></TD><TD class="field_type"><A href="#type_Environment">Environment</A></TD><TD class="field_desc">The environment that was modified</TD></TR></TABLE><H4 class="response_subtitle">Return codes</H4><TABLE class="response_codes"><TR><TH>Code#</TH><TH>Description</TH></TR><TR class="code_frame"><TD class="code_number">200</TD><TD class="code_desc">OK, the request is successful</TD></TR><TR class="code_frame"><TD class="code_number">500</TD><TD class="code_desc">Internal Server Error, an uncatched exception was thrown on the server</TD></TR><TR class="code_frame"><TD class="code_number">400</TD><TD class="code_desc">Bad Request, Kadeploy Error: please check the X-Application-Error-Code and X-Application-Error-Code headers</TD></TR><TR class="code_frame"><TD class="code_number">401</TD><TD class="code_desc">Unauthorized, you need to be authenticated</TD></TR><TR class="code_frame"><TD class="code_number">403</TD><TD class="code_desc">Forbidden, you do not the rights to perform this operation. Unlike a 401 Unauthorized response, authenticating will make no difference.</TD></TR><TR class="code_frame"><TD class="code_number">415</TD><TD class="code_desc">Unsupported Media Type, check the Content-Type of your request's body</TD></TR><TR class="code_frame"><TD class="code_number">400-9</TD><TD class="code_desc">Invalid content, check your JSON's structure</TD></TR><TR class="code_frame"><TD class="code_number">400-12</TD><TD class="code_desc">Nothing modified</TD></TR></TABLE></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #1 <SPAN class="example_desc">Change the path to some files on all the environments</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">PUT /environments HTTP/1.1 +}</PRE></DIV></DIV></DIV></DIV><P class="operation_back_link"><A class="operation_back_link" href="#Environments management">Back to operation</A></P><HR class="operation_inter_sep"><DIV class="resource_frame"><H2 class="resource_title"><A id="PUT/environments/:username?/:name?/:version?"><B class="resource_method_PUT">PUT</B> <SPAN style="font-family: monospace;" class="resource_path">/environments/:username?/:name?/:version?</SPAN></A></H2><P class="resource_desc">Modify some environment(s) properties, returns the modified environment. If no version is specified, modify the last version. The :username or the :name fields have to be encoded following the RFC 3986 specifications (non-ASCII characters are encoded with a percent notation)</P><DIV class="request_frame"><H3 class="request_title">Request <SPAN class="request_title_desc">(<SPAN class="request_type">Hash</SPAN>, <SPAN class="request_content">application/json</SPAN>)</SPAN></H3><DIV class="request_subframe"><H4 class="request_subtitle">Parameters</H4><TABLE class="request_parameters"><TR><TH>Name</TH><TH>Type</TH><TH>Kind</TH><TH>Description</TH></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_param">name</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The name of the environment, mandatory if the operation is not update_file</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_param">username</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The owner of the environment, mandatory if the operation is not update_file</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_param">version</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The version of the environment</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_normal">client</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The client used to export files to the server, needed to update the checksum of local:// files (see more <A href="#file_export">here</A>)</TD></TR><TR class="parameter_frame"><TD class="parameter_name">{<SPAN class="element_self"><SPAN class="element_normal">update_files</SPAN></SPAN>}</TD><TD class="parameter_type">Hash</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">Batch renaming of file's paths, admins only</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_parent">{<SPAN class="element_normal">update_files</SPAN>}</SPAN>.<SPAN class="element_self"><SPAN class="element_dynamic">old_path_prefix</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Mandatory</TD><TD class="parameter_desc">The new path prefix</TD></TR></TABLE></DIV></DIV><DIV class="response_frame"><H3 class="response_title">Response <SPAN class="response_title_desc">(<SPAN class="response_type">Hash/Array</SPAN>, <SPAN class="response_content">application/json</SPAN>)</SPAN></H3><DIV class="response_subframe"><H4 class="response_subtitle">Fields</H4><TABLE class="response_fields"><TR><TH>Name</TH><TH>Type</TH><TH>Description</TH></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_dynamic"></SPAN></SPAN></TD><TD class="field_type"><A href="#type_Environment">Environment</A></TD><TD class="field_desc">The environment that was modified</TD></TR></TABLE><H4 class="response_subtitle">Return codes</H4><TABLE class="response_codes"><TR><TH>Code#</TH><TH>Description</TH></TR><TR class="code_frame"><TD class="code_number">200</TD><TD class="code_desc">OK, the request is successful</TD></TR><TR class="code_frame"><TD class="code_number">500</TD><TD class="code_desc">Internal Server Error, an uncatched exception was thrown on the server</TD></TR><TR class="code_frame"><TD class="code_number">400</TD><TD class="code_desc">Bad Request, Kadeploy Error: please check the X-Application-Error-Code and X-Application-Error-Code headers</TD></TR><TR class="code_frame"><TD class="code_number">401</TD><TD class="code_desc">Unauthorized, you need to be authenticated</TD></TR><TR class="code_frame"><TD class="code_number">403</TD><TD class="code_desc">Forbidden, you do not the rights to perform this operation. Unlike a 401 Unauthorized response, authenticating will make no difference.</TD></TR><TR class="code_frame"><TD class="code_number">415</TD><TD class="code_desc">Unsupported Media Type, check the Content-Type of your request's body</TD></TR><TR class="code_frame"><TD class="code_number">400-9</TD><TD class="code_desc">Invalid content, check your JSON's structure</TD></TR><TR class="code_frame"><TD class="code_number">400-12</TD><TD class="code_desc">Nothing modified</TD></TR></TABLE></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #1 <SPAN class="example_desc">Change the path to some files on all the environments</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">PUT /environments HTTP/1.1 Accept: text/plain, application/json Host: kadeploy.testbed.lan:25300 X-Kadeploy-User: frontend @@ -2253,7 +2253,7 @@ Content-Length: 830 "partition_type": 0, "multipart": false } -]</PRE></DIV></DIV></DIV></DIV><P class="operation_back_link"><A class="operation_back_link" href="#Environments management">Back to operation</A></P><HR class="operation_inter_sep"><DIV class="resource_frame"><H2 class="resource_title"><A id="DELETE/environments/:username/:name/:version?"><B class="resource_method_DELETE">DELETE</B> <SPAN style="font-family: monospace;" class="resource_path">/environments/:username/:name/:version?</SPAN></A></H2><P class="resource_desc">Delete a specific environment, returns the resources that was deleted. The :username or the :name fields have to be encoded following the RFC 3986 specifications (non-ASCII characters are encoded with a percent notation)</P><DIV class="request_frame"><H3 class="request_title">Request <SPAN class="request_title_desc">(<SPAN class="request_type">Hash</SPAN>, <SPAN class="request_content">application/json</SPAN>)</SPAN></H3><DIV class="request_subframe"><H4 class="request_subtitle">Parameters</H4><TABLE class="request_parameters"><TR><TH>Name</TH><TH>Type</TH><TH>Kind</TH><TH>Description</TH></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_param">name</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The name of the environment</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_param">username</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The owner of the environment</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_param">version</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The version of the environment</TD></TR></TABLE></DIV></DIV><DIV class="response_frame"><H3 class="response_title">Response <SPAN class="response_title_desc">(<SPAN class="response_type">Hash/Array</SPAN>, <SPAN class="response_content">application/json</SPAN>)</SPAN></H3><DIV class="response_subframe"><H4 class="response_subtitle">Fields</H4><TABLE class="response_fields"><TR><TH>Name</TH><TH>Type</TH><TH>Description</TH></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_dynamic"></SPAN></SPAN></TD><TD class="field_type"><A href="#type_Environment">Environment</A></TD><TD class="field_desc">The environment(s) that was deleted</TD></TR></TABLE><H4 class="response_subtitle">Return codes</H4><TABLE class="response_codes"><TR><TH>Code#</TH><TH>Description</TH></TR><TR class="code_frame"><TD class="code_number">200</TD><TD class="code_desc">OK, the request is successful</TD></TR><TR class="code_frame"><TD class="code_number">500</TD><TD class="code_desc">Internal Server Error, an uncatched exception was thrown on the server</TD></TR><TR class="code_frame"><TD class="code_number">400</TD><TD class="code_desc">Bad Request, Kadeploy Error: please check the X-Application-Error-Code and X-Application-Error-Code headers</TD></TR><TR class="code_frame"><TD class="code_number">401</TD><TD class="code_desc">Unauthorized, you need to be authenticated</TD></TR><TR class="code_frame"><TD class="code_number">403</TD><TD class="code_desc">Forbidden, you do not the rights to perform this operation. Unlike a 401 Unauthorized response, authenticating will make no difference.</TD></TR><TR class="code_frame"><TD class="code_number">415</TD><TD class="code_desc">Unsupported Media Type, check the Content-Type of your request's body</TD></TR><TR class="code_frame"><TD class="code_number">400-12</TD><TD class="code_desc">Nothing modified, no environment was deleted (none were matching the conditions)</TD></TR></TABLE></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #1 <SPAN class="example_desc">Delete every versions of a specific environment</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">DELETE /environments/frontend/debian-custom HTTP/1.1 +]</PRE></DIV></DIV></DIV></DIV><P class="operation_back_link"><A class="operation_back_link" href="#Environments management">Back to operation</A></P><HR class="operation_inter_sep"><DIV class="resource_frame"><H2 class="resource_title"><A id="DELETE/environments/:username/:name/:version?"><B class="resource_method_DELETE">DELETE</B> <SPAN style="font-family: monospace;" class="resource_path">/environments/:username/:name/:version?</SPAN></A></H2><P class="resource_desc">Delete a specific environment, returns the resources that was deleted. The :username or the :name fields have to be encoded following the RFC 3986 specifications (non-ASCII characters are encoded with a percent notation)</P><DIV class="request_frame"><H3 class="request_title">Request <SPAN class="request_title_desc">(<SPAN class="request_type">Hash</SPAN>, <SPAN class="request_content">application/json</SPAN>)</SPAN></H3><DIV class="request_subframe"><H4 class="request_subtitle">Parameters</H4><TABLE class="request_parameters"><TR><TH>Name</TH><TH>Type</TH><TH>Kind</TH><TH>Description</TH></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_param">name</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The name of the environment</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_param">username</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The owner of the environment</TD></TR><TR class="parameter_frame"><TD class="parameter_name"><SPAN class="element_self"><SPAN class="element_param">version</SPAN></SPAN></TD><TD class="parameter_type">String</TD><TD class="parameter_mandat">Optional</TD><TD class="parameter_desc">The version of the environment</TD></TR></TABLE></DIV></DIV><DIV class="response_frame"><H3 class="response_title">Response <SPAN class="response_title_desc">(<SPAN class="response_type">Hash/Array</SPAN>, <SPAN class="response_content">application/json</SPAN>)</SPAN></H3><DIV class="response_subframe"><H4 class="response_subtitle">Fields</H4><TABLE class="response_fields"><TR><TH>Name</TH><TH>Type</TH><TH>Description</TH></TR><TR class="field_frame"><TD class="field_name"><SPAN class="element_self"><SPAN class="element_dynamic"></SPAN></SPAN></TD><TD class="field_type"><A href="#type_Environment">Environment</A></TD><TD class="field_desc">The environment(s) that was deleted</TD></TR></TABLE><H4 class="response_subtitle">Return codes</H4><TABLE class="response_codes"><TR><TH>Code#</TH><TH>Description</TH></TR><TR class="code_frame"><TD class="code_number">200</TD><TD class="code_desc">OK, the request is successful</TD></TR><TR class="code_frame"><TD class="code_number">500</TD><TD class="code_desc">Internal Server Error, an uncatched exception was thrown on the server</TD></TR><TR class="code_frame"><TD class="code_number">400</TD><TD class="code_desc">Bad Request, Kadeploy Error: please check the X-Application-Error-Code and X-Application-Error-Code headers</TD></TR><TR class="code_frame"><TD class="code_number">401</TD><TD class="code_desc">Unauthorized, you need to be authenticated</TD></TR><TR class="code_frame"><TD class="code_number">403</TD><TD class="code_desc">Forbidden, you do not the rights to perform this operation. Unlike a 401 Unauthorized response, authenticating will make no difference.</TD></TR><TR class="code_frame"><TD class="code_number">415</TD><TD class="code_desc">Unsupported Media Type, check the Content-Type of your request's body</TD></TR><TR class="code_frame"><TD class="code_number">400-12</TD><TD class="code_desc">Nothing modified, no environment was deleted (none were matching the conditions)</TD></TR></TABLE></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #1 <SPAN class="example_desc">Delete every versions of a specific environment</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">DELETE /environments/frontend/debian-custom HTTP/1.1 Accept: text/plain, application/json Host: kadeploy.testbed.lan:25300 X-Kadeploy-User: frontend</PRE><H4 class="example_subtitle">Response</H4><PRE class="code_sample">HTTP/1.1 200 OK @@ -2298,7 +2298,7 @@ Content-Length: 830 "partition_type": 0, "multipart": false } -]</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #2 <SPAN class="example_desc">Delete a specific version of an environment</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">DELETE /environments/frontend/debian-custom/2 HTTP/1.1 +]</PRE></DIV></DIV></DIV><DIV class="example_frame"><H3 class="example_title">Example #2 <SPAN class="example_desc">Delete a specific version of an environment</SPAN></H3><DIV onclick="this.lastChild.style.display = (this.lastChild.style.display == 'none' ? 'block' : 'none');this.firstChild.style.display = (this.firstChild.style.display == 'none' ? 'block' : 'none');" class="example_subframe"><P class="toggle_link">show</P><DIV class="toggle_content" style="display: none;"><H4 class="example_subtitle">Request</H4><PRE class="code_sample">DELETE /environments/frontend/debian-custom/2 HTTP/1.1 Accept: text/plain, application/json Host: kadeploy.testbed.lan:25300 X-Kadeploy-User: frontend</PRE><H4 class="example_subtitle">Response</H4><PRE class="code_sample">HTTP/1.1 200 OK diff --git a/lib/kadeploy3/client/client.rb b/lib/kadeploy3/client/client.rb index a91d772e7dccc10fa8ca68e61683d76f44139ef1..14c675c7d10f762eba9bb0dbd6772ca047446713 100644 --- a/lib/kadeploy3/client/client.rb +++ b/lib/kadeploy3/client/client.rb @@ -323,7 +323,15 @@ class Client unreachables = [] options[:servers].each_pair do |server,inf| next if server.downcase == "default" - unless PortScanner::is_open?(inf[0], inf[1]) + + reachable = nil + 4.times do + reachable = PortScanner::is_open?(inf[0], inf[1]) + break if reachable + sleep 2 + end + + unless reachable debug("The #{server} server is unreachable") unreachables << server end @@ -481,13 +489,13 @@ class Client def self.get(host,port,path,secure,headers=nil) ret = nil begin - Timeout.timeout(8) do + Timeout.timeout(32) do ret = HTTP::Client::get(host,port,path,secure,nil,nil,nil,headers) end rescue Timeout::Error - error("Request timeout: cannot GET #{path} on the #{server} server") + error("Request timeout: cannot GET #{path} on #{host}:#{port}") rescue Errno::ECONNRESET - error("The #{server} server refused the connection on port #{port}") + error("The server refused the connection on #{host}:#{port}") rescue HTTP::ClientError => e error(e.message) end diff --git a/lib/kadeploy3/common/execute.rb b/lib/kadeploy3/common/execute.rb index 91fdb62123fa0359d64a64d49cb576ea95c6f9e2..0ebeba969c59450550c06c0eeb6c0ca9fb4d7906 100644 --- a/lib/kadeploy3/common/execute.rb +++ b/lib/kadeploy3/common/execute.rb @@ -24,12 +24,8 @@ class Execute def free @command = nil - @exec_pid = nil @stdout = nil @stderr = nil - @status = nil - @child_io = nil - @parent_io = nil end def self.[](*cmd) @@ -58,33 +54,34 @@ class Execute @child_io, @parent_io = Execute.init_ios(opts) @parent_io.each { |io| io.fcntl(Fcntl::F_SETFD, Fcntl::FD_CLOEXEC) if io } @exec_pid = fork { - @parent_io.each do |io| - begin - io.close if io and !io.closed? - rescue IOError + begin + @parent_io.each do |io| + begin + io.close if io and !io.closed? + rescue IOError + end end - end - std = nil - if opts[:stdin] - std = [STDIN, STDOUT, STDERR] - else - std = [nil, STDOUT, STDERR] - end + std = nil + if opts[:stdin] + std = [STDIN, STDOUT, STDERR] + else + std = [nil, STDOUT, STDERR] + end - std.each_index do |i| - next unless std[i] - std[i].reopen(@child_io[i]) - begin - @child_io[i].close - rescue IOError + std.each_index do |i| + next unless std[i] + begin + std[i].reopen(@child_io[i]) + @child_io[i].close + rescue IOError + end end - end - begin exec(*@command) - rescue SystemCallError => sce - STDERR.puts "#{sce.message} (#{sce.class.name})" + rescue SystemCallError, Exception => e + STDERR.puts "Fork Error: #{e.message} (#{e.class.name})" + STDERR.puts e.backtrace end exit! 1 } @@ -131,55 +128,63 @@ class Execute unless @exec_pid.nil? emptypipes = true begin - begin - @parent_io[0].close if @parent_io[0] and !@parent_io[0].closed? - rescue IOError + if @parent_io + begin + @parent_io[0].close if @parent_io[0] and !@parent_io[0].closed? + rescue IOError + end end - if opts[:stdout_size] and opts[:stdout_size] > 0 - @stdout = @parent_io[1].read(opts[:stdout_size]) unless @parent_io[1].closed? - emptypipes = false unless @parent_io[1].eof? - unless @parent_io[1].closed? - begin - @parent_io[1].readpartial(4096) while true - rescue EOFError + if @parent_io + if opts[:stdout_size] and opts[:stdout_size] > 0 + @stdout = @parent_io[1].read(opts[:stdout_size]) unless @parent_io[1].closed? + emptypipes = false if !@parent_io[1].closed? and !@parent_io[1].eof? + unless @parent_io[1].closed? + begin + @parent_io[1].readpartial(4096) while true + rescue EOFError + end end + else + @stdout = @parent_io[1].read unless @parent_io[1].closed? end - else - @stdout = @parent_io[1].read unless @parent_io[1].closed? end - if opts[:stderr_size] and opts[:stderr_size] > 0 - @stderr = @parent_io[2].read(opts[:stderr_size]) unless @parent_io[2].closed? - emptypipes = false unless @parent_io[2].eof? - unless @parent_io[2].closed? - begin - @parent_io[2].readpartial(4096) while true - rescue EOFError + if @parent_io + if opts[:stderr_size] and opts[:stderr_size] > 0 + @stderr = @parent_io[2].read(opts[:stderr_size]) unless @parent_io[2].closed? + emptypipes = false if !@parent_io[1].closed? and !@parent_io[2].eof? + unless @parent_io[2].closed? + begin + @parent_io[2].readpartial(4096) while true + rescue EOFError + end end + else + @stderr = @parent_io[2].read unless @parent_io[2].closed? end - else - @stderr = @parent_io[2].read unless @parent_io[2].closed? end - _, @status = Process.wait2(@exec_pid) @exec_pid = nil - rescue Errno::ECHILD - @status = nil - @exec_pid = nil ensure if @exec_pid # Process.wait2 did not finish, the current thread was probably killed kill() + begin + _, @status = Process.wait2(@exec_pid) + rescue Errno::ESRCH + end + @exec_pid = nil else - @parent_io.each do |io| - begin - io.close if io and !io.closed? - rescue IOError - end - end if @parent_io + @kill_lock.synchronize do + @parent_io.each do |io| + begin + io.close if io and !io.closed? + rescue IOError + end + end if @parent_io + end end - @parent_io = nil - @child_io = nil + raise SignalException.new(@status.termsig) if @status and @status.signaled? end raise KadeployExecuteError.new( @@ -191,51 +196,48 @@ class Execute end def self.kill_recursive(pid) - begin - # Check that the process still exists - Process.kill(0,pid) - # SIGSTOPs the process to avoid it creating new children - Process.kill('STOP',pid) - # Gather the list of children before killing the parent in order to - # be able to kill children that will be re-attached to init - children = `ps --ppid #{pid} -o pid=`.split("\n").collect!{|p| p.strip.to_i} - # Directly kill the process not to generate <defunct> children - Process.kill('KILL',pid) - children.each do |cpid| - kill_recursive(cpid) - end - rescue Errno::ESRCH - end + # Check that the process still exists + Process.kill(0,pid) + # SIGSTOPs the process to avoid it creating new children + Process.kill('STOP',pid) + # Gather the list of children before killing the parent in order to + # be able to kill children that will be re-attached to init + children = `ps --ppid #{pid} -o pid=`.split("\n").collect!{|p| p.strip.to_i rescue nil} + children.compact! + # Check that the process still exists + # Directly kill the process not to generate <defunct> children + children.each do |cpid| + kill_recursive(cpid) + end if children + Process.kill('KILL',pid) end def kill() - @kill_lock.synchronize do - @parent_io.each do |io| - begin - io.close if io and !io.closed? - rescue IOError - end - end if @parent_io - @parent_io = nil - - @child_io.each do |io| - begin - io.close if io and !io.closed? - rescue IOError - end - end if @child_io - @child_io = nil + @kill_lock.synchronize{ kill! } + end - unless @exec_pid.nil? - begin - Execute.kill_recursive(@exec_pid) - Process.wait(@exec_pid) - rescue Errno::ESRCH - end - @exec_pid = nil + def kill!() + unless @exec_pid.nil? + begin + Execute.kill_recursive(@exec_pid) + rescue Errno::ESRCH end - free() + # This function do not wait the PID since the thread that use wait() is supposed to be running and to do so end + + @parent_io.each do |io| + begin + io.close if io and !io.closed? + rescue IOError + end + end if @parent_io + + @child_io.each do |io| + begin + io.close if io and !io.closed? + rescue IOError + end + end if @child_io end def self.do(*cmd,&block) diff --git a/lib/kadeploy3/common/fetchfile.rb b/lib/kadeploy3/common/fetchfile.rb index b7ad8c8107a6554619f0b5c79abf2ac65179f599..5244bb62f8500cab6779ec4f9e88dd0c25174964 100644 --- a/lib/kadeploy3/common/fetchfile.rb +++ b/lib/kadeploy3/common/fetchfile.rb @@ -138,12 +138,16 @@ class HTTPFetchFile < FetchFile def grab(dest,dir=nil) begin - if (code = HTTP.fetch_file(@path,dest)) != 200 - error("Unable to grab the file #{@path} (http error ##{code})") - end + HTTP.fetch_file(@path,dest) nil rescue KadeployError => ke raise ke + rescue KadeployHTTPError => k + error("Unable to grab the file #{@path} (http error ##{k.errno})") + rescue KadeployError => ke + raise ke + rescue Errno::ECONNREFUSED + error("Unable to grab the file #{@path} (connection refused)") rescue Exception => e error("Unable to grab the file #{@path} (#{e.message})") end diff --git a/lib/kadeploy3/common/http.rb b/lib/kadeploy3/common/http.rb index 2a92479694bd78511788b5911a785bf25630f708..55787115e6f69098d1bb06f516cf8ce3e8562535 100644 --- a/lib/kadeploy3/common/http.rb +++ b/lib/kadeploy3/common/http.rb @@ -24,8 +24,25 @@ module HTTP # Output # * return http_response and ETag def self.fetch_file(uri,destfile) - out = `LANG=C wget --server-response --no-verbose --no-check-certificate #{uri} --output-document=#{destfile} 2>&1` - return out[/^\s*HTTP\/[0-9\.]+\s+(\d+)/,1].to_i rescue nil + ret = nil + url = URI.parse(uri) + http = Net::HTTP.new(url.host, url.port) + http.use_ssl = url.is_a?(URI::HTTPS) + http.verify_mode = OpenSSL::SSL::VERIFY_NONE + http.start + http.request_get(url.path,{}) do |resp| + raise KadeployHTTPError.new(resp.code) if !resp.is_a?(Net::HTTPSuccess) and !resp.is_a?(Net::HTTPNotModified) + + ret = resp.to_hash + File.open(destfile,'w+') do |f| + resp.read_body do |chunk| + f.write chunk + nil + end + end + end + + return ret end def self.check_file(uri, expected_etag=nil) @@ -98,7 +115,7 @@ module HTTP raise unless request.is_a?(Net::HTTPRequest) response = client.request(request) rescue Exception => e - error("Invalid request on #{server}:#{port} (#{e.class.name})") + error("Invalid request on #{server}:#{port} (#{e.message})") end body = nil diff --git a/lib/kadeploy3/common/httpd.rb b/lib/kadeploy3/common/httpd.rb index ba75f54b7be96725e8363b802d6fccd72c49af0a..b98f44c9b72f21ccb02c842b8af80d7bf6474256 100644 --- a/lib/kadeploy3/common/httpd.rb +++ b/lib/kadeploy3/common/httpd.rb @@ -263,7 +263,7 @@ module HTTPd Thread.current[:run_thr] = Thread.new{ ret = handle(req,resp,request_handler) } sock = Thread.current[:WEBrickSocket] - while Thread.current[:run_thr].alive? do + while Thread.current[:run_thr] and Thread.current[:run_thr].alive? do if IO.select([sock], nil, nil, 0.5) and sock.eof? # The client disconnected kill() @@ -272,7 +272,7 @@ module HTTPd raise WEBrick::HTTPStatus::EOFError end end - Thread.current[:run_thr].join + Thread.current[:run_thr].join if Thread.current[:run_thr] Thread.current[:run_thr] = nil if IO.select([sock], nil, nil, 0) and sock.eof? @@ -409,16 +409,11 @@ module HTTPd @method = method @args = args @blocks = blocks - @params = {} end - def handle(request, response, request_handler) - args = nil - if @args.is_a?(ContentBinding) - args = @args[get_method(request)] - else - args = @args - end + def handle(request, response, request_handler, args=nil, params={}) + args = @args.dup if args.nil? and !@args.nil? + args = args[get_method(request)] if args.is_a?(ContentBinding) args = [] if args.nil? args = [args] unless args.is_a?(Array) @@ -429,11 +424,9 @@ module HTTPd name = @method.to_s.to_sym end - @params[:kind] = get_method(request) - @params[:request] = request - @params[:params] = request_handler.params - params = @params - @params = {} + params[:kind] = get_method(request) + params[:request] = request + params[:params] = request_handler.params begin return @obj.send(name,params,*args)#,&proc{request}) @@ -467,7 +460,9 @@ module HTTPd end def handle(request, response, request_handler) - @args = [] + args = (@args.nil? ? nil : @args.dup) + args = [] if args.nil? + params = {} filter = nil if @filter.is_a?(ContentBinding) @@ -481,9 +476,9 @@ module HTTPd if @static if @static.is_a?(ContentBinding) - @args += @static[get_method(request)] + args += @static[get_method(request)] else - @args += @static + args += @static end end @@ -503,16 +498,16 @@ module HTTPd #end fields = request.request_uri.path.split('/')[1..-1] - @args += fields.values_at(*filter).compact.collect{|v| URI.decode_www_form_component(v)} - @params[:names] = fields.values_at(*names).compact - @params[:names] = nil if @params[:names].empty? + args += fields.values_at(*filter).compact.collect{|v| URI.decode_www_form_component(v)} + params[:names] = fields.values_at(*names).compact + params[:names] = nil if params[:names].empty? #if suffix.empty? # @method = prefix.to_sym #else # @method = (prefix.to_s + '_' + suffix.join('_')).to_sym #end - return super(request, response, request_handler) + return super(request, response, request_handler, args, params) end end diff --git a/lib/kadeploy3/server/automata.rb b/lib/kadeploy3/server/automata.rb index 6c139b312cc0dded95f8c2e7a5f04a4aef6e1ffa..793473f816819ac8546e6edb8853cd16382d25cd 100644 --- a/lib/kadeploy3/server/automata.rb +++ b/lib/kadeploy3/server/automata.rb @@ -452,8 +452,9 @@ module Automata task.context[:local][:timeout] = timeout timestart = Time.now - thr = Thread.new { task.run } + thr = nil @threads_lock.synchronize do + thr = Thread.new { task.run } @threads[task] = {} unless @threads[task] @threads[task][:run] = thr end @@ -663,14 +664,14 @@ module Automata def kill(dofree=true) @threads_lock.synchronize{ clean_threads() } if @threads - @queue.clear() unless @runthread.nil? @runthread.kill if @runthread.alive? - @runthread.join @runthread = nil end + @queue.clear() + unless @cleaner.nil? @cleaner.kill if @cleaner.alive? @cleaner.join @@ -682,8 +683,7 @@ module Automata @threads.each_pair do |task,threads| task.kill(false) threads.each_pair do |key,thread| - thread.kill - thread.join + thread.kill if thread.alive? end task.free end diff --git a/lib/kadeploy3/server/dump.rb b/lib/kadeploy3/server/dump.rb index 97b9e0961449fe9a31cf33be8b76e607ab0a7121..49bb7aedb788f962e6f815a53664433d5ee325b1 100644 --- a/lib/kadeploy3/server/dump.rb +++ b/lib/kadeploy3/server/dump.rb @@ -10,14 +10,33 @@ end module Kadeploy def self.dump(file=nil,width=80) + file = STDOUT unless file + GC.start + + objects = Hash.new(0) + total = ObjectSpace.each_object{|obj| objects[obj.class] += 1 } + objects[Object] = total + + file.puts("--- Objects by number ---") + PP.pp(Hash[objects.select{|k,v| v > 4}.sort_by{|k,v| -v}],file,width) + + file.puts("\n--- Objects by name ---") + PP.pp(Hash[objects.sort_by{|k,v| k.name}],file,width) + objects = nil + + if ObjectSpace.respond_to?(:count_objects) + file.puts("\n--- Raw objects ---") + PP.pp(ObjectSpace.count_objects,file,width) + end + + if GC.respond_to?(:stat) + file.puts("\n--- GC stats ---") + PP.pp(GC.stat,file,width) + end + if $kadeploy - file = STDOUT unless file + file.puts("\n--- Kadeploy structures ---") PP.pp($kadeploy,file,width) end - objects = Hash.new(0) - ObjectSpace.each_object{|obj| objects[obj.class] += 1 } - PP.pp(objects.sort_by{|k,v| -v},file,width) - objects = nil - PP.pp(GC.stat,file,width) if GC.respond_to?(:stat) end end diff --git a/lib/kadeploy3/server/kaconsole.rb b/lib/kadeploy3/server/kaconsole.rb index 5630ce143abc7f3f0b3453f676537a1805d16dca..c9b05fd5e445be2f220bdddefe6a88676c50141b 100644 --- a/lib/kadeploy3/server/kaconsole.rb +++ b/lib/kadeploy3/server/kaconsole.rb @@ -266,7 +266,10 @@ module Kaconsole unless ret # client disconnection Thread.current[:kill].synchronize do # provide conflict with DELETE if Thread.current[:pid] - Execute.kill_recursive(pid) + begin + Execute.kill_recursive(pid) + rescue Errno::ESRCH + end PTY.check(pid) Thread.current[:pid] = nil end @@ -307,7 +310,10 @@ module Kaconsole client[:kill].synchronize do if client[:pid] - Execute.kill_recursive(client[:pid]) + begin + Execute.kill_recursive(client[:pid]) + rescue Errno::ESRCH + end sleep 2 # wait for the thread to clean itself if client[:pid] PTY.check(client[:pid]) diff --git a/lib/kadeploy3/server/macrostep.rb b/lib/kadeploy3/server/macrostep.rb index fc8abda11dbc850dba6f0671e178af831b58e8b4..ee958e15ec7e93af04b0972f4cb91534e8ab3a09 100644 --- a/lib/kadeploy3/server/macrostep.rb +++ b/lib/kadeploy3/server/macrostep.rb @@ -122,9 +122,10 @@ module Macrostep end def delete_task(taskname) + to_delete = [] delete = lambda do |arr,index| if arr[index][0] == taskname - arr.delete_at(index) + to_delete << [arr,index] debug(5, " * Bypassing the step #{macroname}-#{taskname.to_s}",nsid) end end @@ -134,11 +135,21 @@ module Macrostep tasks[i].each do |j| delete.call(tasks[i],j) end - tasks.delete_at(i) if tasks[i].empty? else delete.call(tasks,i) end end + to_delete.each{|tmp| tmp[0].delete_at(tmp[1])} + to_delete.clear + + # clean empty tasks + tasks.each_index do |i| + to_delete << [tasks,i] if tasks[i].empty? + end + to_delete.each{|tmp| tmp[0].delete_at(tmp[1])} + to_delete.clear + + to_delete = nil end @@ -232,7 +243,7 @@ module Macrostep end def load_tasks - @tasks = steps() + @tasks = steps().dup cexec = context[:execution] # Deploy on block device diff --git a/lib/kadeploy3/server/microsteps.rb b/lib/kadeploy3/server/microsteps.rb index 074e8b63a5630f79fa07d0c41b30a208d578c3de..d9c6ea24e1445cda59b8d7489203beb2a86c707c 100644 --- a/lib/kadeploy3/server/microsteps.rb +++ b/lib/kadeploy3/server/microsteps.rb @@ -18,6 +18,7 @@ class Microstep < Automata::QueueTask @waitreboot_threads = ThreadGroup.new @timestart = Time.now.to_i @done = false + @lock = Mutex.new end def debug(level,msg,info=true,opts={}) @@ -95,17 +96,31 @@ class Microstep < Automata::QueueTask end def kill(dofree=true) - # Be carefull to kill @runthread before killing @current_operation, in order to avoid the res condition: @runthread create the Operation object but do not set @current_operation because it was killed - unless @runthread.nil? - @runthread.kill if @runthread.alive? - @runthread.join - end @waitreboot_threads.list.each do |thr| thr.kill if thr.alive? - thr.join end - @current_operation.kill unless @current_operation.nil? - @done = true + @lock.synchronize do + @current_operation.kill unless @current_operation.nil? + + unless @runthread.nil? # Waits for @runthread to finish + timestart = Time.now + while ((Time.now - timestart) < 4) and @runthread.alive? do + sleep 0.5 + end + + if @runthread.alive? + @runthread.kill + else + begin + @runthread.join + rescue SignalException + end + end + end + + @done = true + end + free() if dofree end @@ -113,9 +128,7 @@ class Microstep < Automata::QueueTask super() @output = nil @debugger = nil - @runthread = nil @current_operation.free if @current_operation - @current_operation = nil @waitreboot_threads = nil @timestart = nil @done = nil @@ -219,21 +232,25 @@ class Microstep < Automata::QueueTask def command(cmd,opts={},&block) raise '@current_operation should not be set' if @current_operation res = nil - @current_operation = Execute[cmd] + @lock.synchronize{ @current_operation = Execute[cmd] } @current_operation.run(opts) res = @current_operation.wait(opts) yield(*res) if block_given? - @current_operation.free - @current_operation = nil + @lock.synchronize do + @current_operation.free + @current_operation = nil + end (res[0].exitstatus == 0) end def parallel_op(obj) raise '@current_operation should not be set' if @current_operation - @current_operation = obj + @lock.synchronize{ @current_operation = obj } yield(obj) - @current_operation.free - @current_operation = nil + @lock.synchronize do + @current_operation.free + @current_operation = nil + end end # Wrap a parallel command @@ -1187,13 +1204,19 @@ class Microstep < Automata::QueueTask expected_clients = @nodes.length if not Bittorrent::wait_end_of_download(context[:common].bt_download_timeout, torrent, context[:common].bt_tracker_ip, tracker_port, expected_clients) then failed_microstep("A timeout for the bittorrent download has been reached") - Execute.kill_recursive(seed_pid) + begin + Execute.kill_recursive(seed_pid) + rescue Errno::ESRCH + end return false end - debug(3, "Shutdown the seed for #{torrent}") - Execute.kill_recursive(seed_pid) - debug(3, "Shutdown the tracker for #{torrent}") - Execute.kill_recursive(tracker_pid) + begin + debug(3, "Shutdown the seed for #{torrent}") + Execute.kill_recursive(seed_pid) + debug(3, "Shutdown the tracker for #{torrent}") + Execute.kill_recursive(tracker_pid) + rescue Errno::ESRCH + end command("rm -f #{btdownload_state}") if not parallel_exec(decompress) then diff --git a/lib/kadeploy3/server/netboot.rb b/lib/kadeploy3/server/netboot.rb index 0028b6398f9d04575ba86179548226cd85856557..08a2a8ec51d1e44251f3c6ae11a2bfeaf566e2f2 100644 --- a/lib/kadeploy3/server/netboot.rb +++ b/lib/kadeploy3/server/netboot.rb @@ -74,14 +74,13 @@ module NetBoot profile, meth = send("boot_#{kind.to_s}".to_sym,*args) - profile = "#{headers[kind]}\n#{labelize(kind.to_s,profile,args)}\n" \ - unless kind == :custom + profile = labelize(headers[kind],kind.to_s,profile,args) unless kind == :custom write_profile(nodes,profile,meth) end protected - def labelize(kind,profile,args) + def labelize(header,kind,profile,args) raise 'Should be reimplemented' end @@ -175,10 +174,11 @@ module NetBoot end end - def labelize(kind,profile,args=[]) + def labelize(header,kind,profile,args=[]) + "#{header}\n"\ "DEFAULT #{kind}\n"\ "LABEL #{kind}\n"\ - + profile.collect{|line| "\t#{line}"}.join("\n") + "#{profile.collect{|line| "\t#{line}"}.join("\n")}\n" end def boot_chain(pxebin) @@ -268,8 +268,10 @@ module NetBoot end end - def labelize(kind,profile,args=[]) - "#!ipxe\n#{profile.join("\n")}" + def labelize(header,kind,profile,args=[]) + "#!ipxe\n"\ + "#{header}\n"\ + "#{profile.join("\n")}\n" end def boot_chain(pxebin) @@ -322,11 +324,14 @@ module NetBoot end end - def labelize(kind,profile,args=[]) + def labelize(header,kind,profile,args=[]) + header += "\ntimeout=0\n" unless header.include?("timeout") + + "#{header}\n"\ "default=0\n"\ "menuentry #{kind} {\n"\ "#{profile.collect{|line| "\t#{line}"}.join("\n")}\n"\ - "}" + "}\n" end def boot_chain(pxebin) diff --git a/lib/kadeploy3/server/nodes.rb b/lib/kadeploy3/server/nodes.rb index 9401d23954a13ef552e097258b1a26beb1652e91..a516a3206b0720fddb24adf9363f277566f97936 100644 --- a/lib/kadeploy3/server/nodes.rb +++ b/lib/kadeploy3/server/nodes.rb @@ -10,7 +10,7 @@ module Nodes def self.sort_list(nodes) nodes.sort_by! do |h| h.to_s.split('.').reverse.collect do |v| - v.scan(/\d+|[a-zA-Z]+/).map!{|n| Integer(n) rescue n} + v.scan(/\d+|[a-zA-Z]+/).map!{|n| n.to_i(36)} end.flatten end end diff --git a/lib/kadeploy3/server/parallel_runner.rb b/lib/kadeploy3/server/parallel_runner.rb index bb99de074d082047eecdf6c89da7d2846ea8caf0..24f90038ea922941e5e1268a75143373087c2c88 100644 --- a/lib/kadeploy3/server/parallel_runner.rb +++ b/lib/kadeploy3/server/parallel_runner.rb @@ -18,14 +18,24 @@ module Kadeploy @output = output @nodesetid = nodesetid - @threads = ThreadGroup.new + @threads = [] + @listlock = Mutex.new + @execlock = Mutex.new + @killed = false end def free + if @execs + @execs.each_value{|ex| ex.free} + @execs.clear + end @execs = nil @output = nil @nodesetid = nil @threads = nil + @listlock = nil + @execlock = nil + @killed = nil end # Add a command related to a node @@ -47,14 +57,26 @@ module Kadeploy # * nothing def run @execs.each_pair do |node,exec| - exec.run - tid = Thread.new do - status,stdout,stderr = exec.wait(:checkstatus => false) - node.last_cmd_stdout = stdout.chomp - node.last_cmd_stderr = stderr.chomp - node.last_cmd_exit_status = status.exitstatus.to_s + @listlock.synchronize do + raise SignalException.new(0) if @killed + + tid = Thread.new do + @execlock.synchronize do + if !@killed + exec.run + else + raise SignalException.new(0) + end + end + + status,stdout,stderr = exec.wait(:checkstatus => false) + node.last_cmd_stdout = stdout.chomp + node.last_cmd_stderr = stderr.chomp + node.last_cmd_exit_status = status.exitstatus.to_s + end + + @threads << tid end - @threads.add(tid) end end @@ -65,21 +87,32 @@ module Kadeploy # Output # * nothing def wait - @threads.list.each do |thr| - thr.join + @listlock.synchronize do + @threads.each do |thr| + thr.join + end end - @threads = ThreadGroup.new end # Kill every running process def kill - @threads.list.each do |thr| - thr.kill if thr.alive? - thr.join + @execlock.synchronize do + @killed = true + @execs.each_value do |exec| + exec.kill + end end - @execs.each_value do |exec| - exec.kill + + # Waiting threads from @threads that will die by themselves + @listlock.synchronize do + @threads.each do |thr| + begin + thr.join + rescue SignalException => se + end + end end + free() end diff --git a/lib/kadeploy3/server/taktuk.rb b/lib/kadeploy3/server/taktuk.rb index fa40397123804e4a21e6e4a426dc5f6165165dd3..95dde140d577ba6ed9d5b6baa6ae304bff7a2321 100644 --- a/lib/kadeploy3/server/taktuk.rb +++ b/lib/kadeploy3/server/taktuk.rb @@ -459,7 +459,6 @@ module TakTuk end def kill!() - @curthread.kill if @curthread.alive? unless @exec.nil? @exec.kill @exec = nil diff --git a/man/kaconsole3.1 b/man/kaconsole3.1 index 75b6ae1b64d13fe8d61d34d9596a2bee417a6fce..6d4edf0bb01a8b65568b61622bb16814be2307b5 100644 --- a/man/kaconsole3.1 +++ b/man/kaconsole3.1 @@ -1,5 +1,5 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.45.1. -.TH KACONSOLE3 "1" "April 2014" "kaconsole3 3.2.0.6" "User Commands" +.TH KACONSOLE3 "1" "May 2014" "kaconsole3 3.2.0.7" "User Commands" .SH NAME kaconsole3 \- allows to get a console on the deploying nodes .SH SYNOPSIS diff --git a/man/kadeploy3.1 b/man/kadeploy3.1 index c7ae745b018a4a52a687e7166de40bd3a12c112a..29580be83ae1db7776e4ab45009a0b89ec3b58f7 100644 --- a/man/kadeploy3.1 +++ b/man/kadeploy3.1 @@ -1,5 +1,5 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.45.1. -.TH KADEPLOY3 "1" "April 2014" "kadeploy3 3.2.0.6" "User Commands" +.TH KADEPLOY3 "1" "May 2014" "kadeploy3 3.2.0.7" "User Commands" .SH NAME kadeploy3 \- allows to perform efficient deployments on cluster nodes .SH SYNOPSIS diff --git a/man/kadeploy3d.8 b/man/kadeploy3d.8 index 28bf3949248f628286a9ce0340c6c179435d1b36..820f51c84837d22388e923fd66904a54c5b29c57 100644 --- a/man/kadeploy3d.8 +++ b/man/kadeploy3d.8 @@ -1,5 +1,5 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.45.1. -.TH KADEPLOY3D "8" "April 2014" "kadeploy3d 3.2.0.6" "System Administration Utilities" +.TH KADEPLOY3D "8" "May 2014" "kadeploy3d 3.2.0.7" "System Administration Utilities" .SH NAME kadeploy3d \- the launcher of Kadeploy server .SH SYNOPSIS diff --git a/man/kaenv3.1 b/man/kaenv3.1 index 6ae388df08eee8df891d75643a6106e436ed1b48..7e3c727e7e8d5f0912f8ccbec5d970dec7ec3ee1 100644 --- a/man/kaenv3.1 +++ b/man/kaenv3.1 @@ -1,5 +1,5 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.45.1. -.TH KAENV3 "1" "April 2014" "kaenv3 3.2.0.6" "User Commands" +.TH KAENV3 "1" "May 2014" "kaenv3 3.2.0.7" "User Commands" .SH NAME kaenv3 \- allows to manage the Kadeploy environments .SH SYNOPSIS diff --git a/man/kanodes3.1 b/man/kanodes3.1 index 757de11cb2a62da5d6f96a8af33ddc535bd3abe3..84d7182a4f9f18d0fd8e4e4efb48ecd401726f54 100644 --- a/man/kanodes3.1 +++ b/man/kanodes3.1 @@ -1,5 +1,5 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.45.1. -.TH KANODES3 "1" "April 2014" "kanodes3 3.2.0.6" "User Commands" +.TH KANODES3 "1" "May 2014" "kanodes3 3.2.0.7" "User Commands" .SH NAME kanodes3 \- allows to get information on the current deployments .SH SYNOPSIS diff --git a/man/kapower3.1 b/man/kapower3.1 index 6fc222d1fff608fb605f5cc491217dd6a8999398..931cdb2671ba070ae45a5adab990b14b3ceae195 100644 --- a/man/kapower3.1 +++ b/man/kapower3.1 @@ -1,5 +1,5 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.45.1. -.TH KAPOWER3 "1" "April 2014" "kapower3 3.2.0.6" "User Commands" +.TH KAPOWER3 "1" "May 2014" "kapower3 3.2.0.7" "User Commands" .SH NAME kapower3 \- allows to perform several operations to control the power status of nodes .SH SYNOPSIS diff --git a/man/kareboot3.1 b/man/kareboot3.1 index 9961ce64dfcf8735fc311e0ce0212af7bdf7331c..78e575855ba7b9bd70f2cd0913412e6007abc992 100644 --- a/man/kareboot3.1 +++ b/man/kareboot3.1 @@ -1,5 +1,5 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.45.1. -.TH KAREBOOT3 "1" "April 2014" "kareboot3 3.2.0.6" "User Commands" +.TH KAREBOOT3 "1" "May 2014" "kareboot3 3.2.0.7" "User Commands" .SH NAME kareboot3 \- allows to perform several reboot operations on the nodes involved in a deployment .SH SYNOPSIS diff --git a/man/karights3.8 b/man/karights3.8 index 72421a5aeaf0d7ac85403351f4b7da5d7088177c..602eaa6da1f6eee0fb1fce000f16cca7431aceec 100644 --- a/man/karights3.8 +++ b/man/karights3.8 @@ -1,5 +1,5 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.45.1. -.TH KARIGHTS3 "8" "April 2014" "karights3 3.2.0.6" "System Administration Utilities" +.TH KARIGHTS3 "8" "May 2014" "karights3 3.2.0.7" "System Administration Utilities" .SH NAME karights3 \- allows to set the deployment rights to users .SH SYNOPSIS diff --git a/man/kastat3.1 b/man/kastat3.1 index b1464364156a18faf344cea3bcc93782d1b1aa74..2f6c5fb62e7ae5accb4c960d02f679fc8de5d885 100644 --- a/man/kastat3.1 +++ b/man/kastat3.1 @@ -1,5 +1,5 @@ .\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.45.1. -.TH KASTAT3 "1" "April 2014" "kastat3 3.2.0.6" "User Commands" +.TH KASTAT3 "1" "May 2014" "kastat3 3.2.0.7" "User Commands" .SH NAME kastat3 \- allows to get statistics on the deployments .SH SYNOPSIS diff --git a/release_version b/release_version index 1e8b314962144c26d5e0e50fd29d2ca327864913..7f8f011eb73d6043d2e6db9d2c101195ae2801f2 100644 --- a/release_version +++ b/release_version @@ -1 +1 @@ -6 +7