Initial import of https://github.com/docker/cloud-docs
|
|
@ -0,0 +1,7 @@
|
|||
wrappedNode(label: 'docker') {
|
||||
deleteDir()
|
||||
stage "checkout"
|
||||
checkout scm
|
||||
|
||||
documentationChecker("docs")
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
# Documentation for Docker Cloud
|
||||
|
||||
To build the documentation locally.
|
||||
|
||||
1. Fork this repo.
|
||||
|
||||
2. Change to the `docs` directory.
|
||||
|
||||
3. Type `make docs`.
|
||||
|
||||
|
||||
## API Documentation Pull Requests
|
||||
|
||||
The API documentation for the Docker Cloud project is here
|
||||
|
||||
https://github.com/docker/cloud-docs
|
||||
|
||||
An extra step is needed when making PR's that modify the API - namely to add the generated HTML output to the PR by doing the following:
|
||||
|
||||
1. Make changes to the API's Markdown source.
|
||||
|
||||
2. Build the HTML for the API in your local branch.
|
||||
|
||||
a. Change to the `cloud-api-docs` directory
|
||||
|
||||
cd cloud-api-docs
|
||||
|
||||
b. Generate the HTML
|
||||
|
||||
make release
|
||||
|
||||
3. Add the Markdown together with the HTML to your pull request:
|
||||
|
||||
$ git add apidocs/*
|
||||
|
||||
$ git add docs
|
||||
|
||||
4. Push your changes to orgin.
|
||||
|
||||
5. Create a Pull request as you normally wouled.
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
+++
|
||||
type = "cloud-api-docs"
|
||||
title = "API reference"
|
||||
description = "API reference"
|
||||
keywords = ["Docker, cloud, API"]
|
||||
weight = 100
|
||||
[menu.main]
|
||||
parent="docker-cloud"
|
||||
identifier = "docker-cloudapi"
|
||||
+++
|
||||
|
||||
# Docker Cloud APIs
|
||||
|
||||
Please see the Overview page.
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
||||
<svg xmlns="http://www.w3.org/2000/svg">
|
||||
<metadata>Generated by IcoMoon</metadata>
|
||||
<defs>
|
||||
<font id="slate" horiz-adv-x="1024">
|
||||
<font-face units-per-em="1024" ascent="960" descent="-64" />
|
||||
<missing-glyph horiz-adv-x="1024" />
|
||||
<glyph unicode=" " d="" horiz-adv-x="512" />
|
||||
<glyph unicode="" d="M438.857 877.714q119.429 0 220.286-58.857t159.714-159.714 58.857-220.286-58.857-220.286-159.714-159.714-220.286-58.857-220.286 58.857-159.714 159.714-58.857 220.286 58.857 220.286 159.714 159.714 220.286 58.857zM512 165.143v108.571q0 8-5.143 13.429t-12.571 5.429h-109.714q-7.429 0-13.143-5.714t-5.714-13.143v-108.571q0-7.429 5.714-13.143t13.143-5.714h109.714q7.429 0 12.571 5.429t5.143 13.429zM510.857 361.714l10.286 354.857q0 6.857-5.714 10.286-5.714 4.571-13.714 4.571h-125.714q-8 0-13.714-4.571-5.714-3.429-5.714-10.286l9.714-354.857q0-5.714 5.714-10t13.714-4.286h105.714q8 0 13.429 4.286t6 10z" />
|
||||
<glyph unicode="" d="M585.143 164.571v91.429q0 8-5.143 13.143t-13.143 5.143h-54.857v292.571q0 8-5.143 13.143t-13.143 5.143h-182.857q-8 0-13.143-5.143t-5.143-13.143v-91.429q0-8 5.143-13.143t13.143-5.143h54.857v-182.857h-54.857q-8 0-13.143-5.143t-5.143-13.143v-91.429q0-8 5.143-13.143t13.143-5.143h256q8 0 13.143 5.143t5.143 13.143zM512 676.571v91.429q0 8-5.143 13.143t-13.143 5.143h-109.714q-8 0-13.143-5.143t-5.143-13.143v-91.429q0-8 5.143-13.143t13.143-5.143h109.714q8 0 13.143 5.143t5.143 13.143zM877.714 438.857q0-119.429-58.857-220.286t-159.714-159.714-220.286-58.857-220.286 58.857-159.714 159.714-58.857 220.286 58.857 220.286 159.714 159.714 220.286 58.857 220.286-58.857 159.714-159.714 58.857-220.286z" />
|
||||
<glyph unicode="" d="M733.714 531.428q0 16-10.286 26.286l-52 51.429q-10.857 10.857-25.714 10.857t-25.714-10.857l-233.143-232.571-129.143 129.143q-10.857 10.857-25.714 10.857t-25.714-10.857l-52-51.429q-10.286-10.286-10.286-26.286 0-15.429 10.286-25.714l206.857-206.857q10.857-10.857 25.714-10.857 15.429 0 26.286 10.857l310.286 310.286q10.286 10.286 10.286 25.714zM877.714 438.857q0-119.429-58.857-220.286t-159.714-159.714-220.286-58.857-220.286 58.857-159.714 159.714-58.857 220.286 58.857 220.286 159.714 159.714 220.286 58.857 220.286-58.857 159.714-159.714 58.857-220.286z" />
|
||||
<glyph unicode="" d="M658.286 475.428q0 105.714-75.143 180.857t-180.857 75.143-180.857-75.143-75.143-180.857 75.143-180.857 180.857-75.143 180.857 75.143 75.143 180.857zM950.857 0q0-29.714-21.714-51.429t-51.429-21.714q-30.857 0-51.429 21.714l-196 195.429q-102.286-70.857-228-70.857-81.714 0-156.286 31.714t-128.571 85.714-85.714 128.571-31.714 156.286 31.714 156.286 85.714 128.571 128.571 85.714 156.286 31.714 156.286-31.714 128.571-85.714 85.714-128.571 31.714-156.286q0-125.714-70.857-228l196-196q21.143-21.143 21.143-51.429z" horiz-adv-x="951" />
|
||||
</font></defs></svg>
|
||||
|
After Width: | Height: | Size: 2.9 KiB |
|
After Width: | Height: | Size: 4.3 KiB |
|
After Width: | Height: | Size: 96 B |
|
|
@ -0,0 +1,517 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||
<title>API Documentation</title>
|
||||
|
||||
<link href="../stylesheets/screen.css" rel="stylesheet" type="text/css" media="screen" />
|
||||
<link href="../stylesheets/print.css" rel="stylesheet" type="text/css" media="print" />
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
|
||||
<script src="../javascripts/all_nosearch.js" type="text/javascript"></script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="includes includes_action">
|
||||
<a href="#" id="nav-button">
|
||||
<span>
|
||||
NAV
|
||||
<img src="../images/navbar.png" />
|
||||
</span>
|
||||
</a>
|
||||
<div class="tocify-wrapper">
|
||||
<img src="../images/logo.png" />
|
||||
<div id="toc">
|
||||
</div>
|
||||
</div>
|
||||
<div class="page-wrapper">
|
||||
<div class="dark-box"></div>
|
||||
<div class="content">
|
||||
<h1 id="actions">Actions</h1>
|
||||
|
||||
<h2 id="action">Action</h2>
|
||||
|
||||
<blockquote>
|
||||
<p>Example</p>
|
||||
</blockquote>
|
||||
<pre class="highlight json"><code><span class="p">{</span><span class="w">
|
||||
</span><span class="nt">"action"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Cluster Create"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"end_date"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Wed, 17 Sep 2014 08:26:22 +0000"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"ip"</span><span class="p">:</span><span class="w"> </span><span class="s2">"56.78.90.12"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"is_user_action"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"can_be_canceled"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"location"</span><span class="p">:</span><span class="w"> </span><span class="s2">"New York, USA"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"method"</span><span class="p">:</span><span class="w"> </span><span class="s2">"POST"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"object"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/api/infra/v1/cluster/eea638f4-b77a-4183-b241-22dbd7866f22/"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"path"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/api/infra/v1/cluster/"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"resource_uri"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/api/audit/v1/action/6246c558-976c-4df6-ba60-eb1a344a17af/"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"start_date"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Wed, 17 Sep 2014 08:26:22 +0000"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"state"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Success"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"user_agent"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.78.2 (KHTML, like Gecko) Version/7.0.6 Safari/537.78.2"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"uuid"</span><span class="p">:</span><span class="w"> </span><span class="s2">"6246c558-976c-4df6-ba60-eb1a344a17af"</span><span class="w">
|
||||
</span><span class="p">}</span><span class="w">
|
||||
</span></code></pre>
|
||||
|
||||
<p>An action represents an API call by a user. Details of the API call such as timestamp, origin IP address, and user agent are logged in the action object.</p>
|
||||
|
||||
<p>Simple API calls that do not require asynchronous execution will return immediately with the appropiate HTTP error code and an action object will be created either in <code class="prettyprint">Success</code> or <code class="prettyprint">Failed</code> states. API calls that do require asynchronous execution will return HTTP code <code class="prettyprint">202 Accepted</code> immediately and create an action object in <code class="prettyprint">In progress</code> state, which will change to <code class="prettyprint">Success</code> or <code class="prettyprint">Failed</code> state depending on the outcome of the operation being performed. In both cases the response will include a <code class="prettyprint">X-DockerCloud-Action-URI</code> header with the resource URI of the created action.</p>
|
||||
|
||||
<h3 id="attributes">Attributes</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th style="text-align: left">Attribute</th>
|
||||
<th style="text-align: left">Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td style="text-align: left">resource_uri</td>
|
||||
<td style="text-align: left">A unique API endpoint that represents the action</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left">uuid</td>
|
||||
<td style="text-align: left">A unique identifier for the action generated automatically on creation</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left">object</td>
|
||||
<td style="text-align: left">The API object (resource URI) to which the action applies to</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left">action</td>
|
||||
<td style="text-align: left">Name of the operation performed/being performed</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left">method</td>
|
||||
<td style="text-align: left">HTTP method used to access the API</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left">path</td>
|
||||
<td style="text-align: left">HTTP path of the API accessed</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left">user_agent</td>
|
||||
<td style="text-align: left">The user agent provided by the client when accessing the API endpoint</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left">start_date</td>
|
||||
<td style="text-align: left">Date and time when the API call was performed and the operation started processing</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left">end_date</td>
|
||||
<td style="text-align: left">Date and time when the API call finished processing</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left">state</td>
|
||||
<td style="text-align: left">State of the operation (see table below)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left">ip</td>
|
||||
<td style="text-align: left">IP address of the user that performed the API call</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left">location</td>
|
||||
<td style="text-align: left">Geographic location of the IP address of the user that performed the API call</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left">is_user_action</td>
|
||||
<td style="text-align: left">If the action has been triggered by the user</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left">can_be_canceled</td>
|
||||
<td style="text-align: left">If the action can be canceled by the user in the middle of its execution</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left">can_be_retried</td>
|
||||
<td style="text-align: left">If the action can be retried by the user</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
<h3 id="action-states">Action states</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th style="text-align: left">State</th>
|
||||
<th style="text-align: left">Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td style="text-align: left">Pending</td>
|
||||
<td style="text-align: left">The action needed asynchronous execution and it is waiting for an in progress action</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left">In progress</td>
|
||||
<td style="text-align: left">The action needed asynchronous execution and is being performed</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left">Canceling</td>
|
||||
<td style="text-align: left">The action is being canceled by user request</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left">Canceled</td>
|
||||
<td style="text-align: left">The action has been canceled</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left">Success</td>
|
||||
<td style="text-align: left">The action was executed successfully</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left">Failed</td>
|
||||
<td style="text-align: left">There was an issue when the action was being performed. Check the logs for more information.</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
<h2 id="list-all-actions">List all actions</h2>
|
||||
<pre class="highlight python"><code><span class="kn">import</span> <span class="nn">dockercloud</span>
|
||||
|
||||
<span class="n">actions</span> <span class="o">=</span> <span class="n">dockercloud</span><span class="o">.</span><span class="n">Action</span><span class="o">.</span><span class="nb">list</span><span class="p">()</span>
|
||||
</code></pre>
|
||||
<pre class="highlight go"><code><span class="k">import</span><span class="x"> </span><span class="s">"github.com/docker/go-dockercloud/dockercloud"</span><span class="x">
|
||||
|
||||
</span><span class="n">actionList</span><span class="p">,</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">:=</span><span class="x"> </span><span class="n">dockercloud</span><span class="o">.</span><span class="n">ListActions</span><span class="p">()</span><span class="x">
|
||||
|
||||
</span><span class="k">if</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">!=</span><span class="x"> </span><span class="no">nil</span><span class="x"> </span><span class="p">{</span><span class="x">
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">err</span><span class="p">)</span><span class="x">
|
||||
</span><span class="p">}</span><span class="x">
|
||||
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">actionList</span><span class="p">)</span><span class="x">
|
||||
</span></code></pre>
|
||||
<pre class="highlight http"><code><span class="nf">GET</span> <span class="nn">/api/audit/v1/action/</span> <span class="k">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
||||
<span class="na">Host</span><span class="p">:</span> <span class="s">cloud.docker.com</span>
|
||||
<span class="na">Authorization</span><span class="p">:</span> <span class="s">Basic dXNlcm5hbWU6YXBpa2V5</span>
|
||||
<span class="na">Accept</span><span class="p">:</span> <span class="s">application/json</span>
|
||||
</code></pre>
|
||||
<pre class="highlight shell"><code>docker-cloud action ls
|
||||
</code></pre>
|
||||
|
||||
<p>Lists all actions in chronological order. Returns a list of <code class="prettyprint">Action</code> objects.</p>
|
||||
|
||||
<h3 id="endpoint-type">Endpoint Type</h3>
|
||||
|
||||
<p>Available in Docker Cloud’s <strong>REST API</strong></p>
|
||||
|
||||
<h3 id="http-request">HTTP Request</h3>
|
||||
|
||||
<p><code class="prettyprint">GET /api/audit/v1/action/</code></p>
|
||||
|
||||
<h3 id="query-parameters">Query Parameters</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th style="text-align: left">Parameter</th>
|
||||
<th style="text-align: left">Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td style="text-align: left">uuid</td>
|
||||
<td style="text-align: left">Filter by UUID.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left">state</td>
|
||||
<td style="text-align: left">Filter by state. Possible values: <code class="prettyprint">In progress</code>, <code class="prettyprint">Success</code>, <code class="prettyprint">Failed</code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left">start_date</td>
|
||||
<td style="text-align: left">Filter by start date. Valid filtering values are <code class="prettyprint">start_date__gte</code> (after or on the date supplied) and <code class="prettyprint">start_date__lte</code> (before or on the date supplied)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left">end_date</td>
|
||||
<td style="text-align: left">Filter by end date. Valid filtering values are <code class="prettyprint">end_date__gte</code> (after or on the date supplied) and <code class="prettyprint">end_date__lte</code> (before or on the date supplied)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left">object</td>
|
||||
<td style="text-align: left">Filter by resource URI of the related object. This filter can only be combined with ‘include_related’ filter</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left">include_related</td>
|
||||
<td style="text-align: left">There is a parent-child relationship between Docker Cloud objects, described in table <code class="prettyprint">Relationships between Docker Cloud objects</code>. If set to 'true’, will include the actions of the related objects to the object specified in “object” filter parameter. Possible values: 'true’ or 'false’</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
<h2 id="relationships-between-docker-cloud-objects">Relationships between Docker Cloud objects</h2>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th style="text-align: left">Object</th>
|
||||
<th style="text-align: left">Relationships</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td style="text-align: left">Container</td>
|
||||
<td style="text-align: left">Container, service, stack (if any)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left">Service</td>
|
||||
<td style="text-align: left">All containers in the service, service, stack (if any)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left">Stack</td>
|
||||
<td style="text-align: left">All services in the stack, all containers in every service in the stack, stack</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left">Node</td>
|
||||
<td style="text-align: left">Node, node cluster (if any)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left">Node cluster</td>
|
||||
<td style="text-align: left">All nodes in the cluster, node cluster</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
<h2 id="get-an-action-by-uuid">Get an action by UUID</h2>
|
||||
<pre class="highlight python"><code><span class="kn">import</span> <span class="nn">dockercloud</span>
|
||||
|
||||
<span class="n">action</span> <span class="o">=</span> <span class="n">dockercloud</span><span class="o">.</span><span class="n">Action</span><span class="o">.</span><span class="n">fetch</span><span class="p">(</span><span class="s">"7eaf7fff-882c-4f3d-9a8f-a22317ac00ce"</span><span class="p">)</span>
|
||||
</code></pre>
|
||||
<pre class="highlight go"><code><span class="k">import</span><span class="x"> </span><span class="s">"github.com/docker/go-dockercloud/dockercloud"</span><span class="x">
|
||||
|
||||
</span><span class="n">action</span><span class="p">,</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">:=</span><span class="x"> </span><span class="n">dockercloud</span><span class="o">.</span><span class="n">GetAction</span><span class="p">(</span><span class="s">"7eaf7fff-882c-4f3d-9a8f-a22317ac00ce"</span><span class="p">)</span><span class="x">
|
||||
|
||||
</span><span class="k">if</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">!=</span><span class="x"> </span><span class="no">nil</span><span class="x"> </span><span class="p">{</span><span class="x">
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">err</span><span class="p">)</span><span class="x">
|
||||
</span><span class="p">}</span><span class="x">
|
||||
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">action</span><span class="p">)</span><span class="x">
|
||||
</span></code></pre>
|
||||
<pre class="highlight http"><code><span class="nf">GET</span> <span class="nn">/api/audit/v1/action/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/</span> <span class="k">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
||||
<span class="na">Host</span><span class="p">:</span> <span class="s">cloud.docker.com</span>
|
||||
<span class="na">Authorization</span><span class="p">:</span> <span class="s">Basic dXNlcm5hbWU6YXBpa2V5</span>
|
||||
<span class="na">Accept</span><span class="p">:</span> <span class="s">application/json</span>
|
||||
</code></pre>
|
||||
<pre class="highlight shell"><code>docker-cloud action inspect 7eaf7fff
|
||||
</code></pre>
|
||||
|
||||
<p>Get all the details of an specific action</p>
|
||||
|
||||
<h3 id="endpoint-type">Endpoint Type</h3>
|
||||
|
||||
<p>Available in Docker Cloud’s <strong>REST API</strong></p>
|
||||
|
||||
<h3 id="http-request">HTTP Request</h3>
|
||||
|
||||
<p><code class="prettyprint">GET /api/audit/v1/action/(uuid)/</code></p>
|
||||
|
||||
<h3 id="path-parameters">Path Parameters</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th style="text-align: left">Parameter</th>
|
||||
<th style="text-align: left">Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td style="text-align: left">uuid</td>
|
||||
<td style="text-align: left">The UUID of the action to retrieve</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
<h2 id="get-the-logs-of-an-action">Get the logs of an action</h2>
|
||||
|
||||
<blockquote>
|
||||
<p>Example log line</p>
|
||||
</blockquote>
|
||||
<pre class="highlight json"><code><span class="p">{</span><span class="w">
|
||||
</span><span class="nt">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"log"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"log"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Log line from the action"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"timestamp"</span><span class="p">:</span><span class="w"> </span><span class="mi">1433779324</span><span class="w">
|
||||
</span><span class="p">}</span><span class="w">
|
||||
</span></code></pre>
|
||||
<pre class="highlight python"><code><span class="kn">import</span> <span class="nn">dockercloud</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">log_handler</span><span class="p">(</span><span class="n">message</span><span class="p">):</span>
|
||||
<span class="k">print</span> <span class="n">message</span>
|
||||
|
||||
<span class="n">action</span> <span class="o">=</span> <span class="n">dockercloud</span><span class="o">.</span><span class="n">Action</span><span class="o">.</span><span class="n">fetch</span><span class="p">(</span><span class="s">"7eaf7fff-882c-4f3d-9a8f-a22317ac00ce"</span><span class="p">)</span>
|
||||
<span class="n">action</span><span class="o">.</span><span class="n">logs</span><span class="p">(</span><span class="n">tail</span><span class="o">=</span><span class="mi">300</span><span class="p">,</span> <span class="n">follow</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span> <span class="n">log_handler</span><span class="o">=</span><span class="n">log_handler</span><span class="p">)</span>
|
||||
</code></pre>
|
||||
<pre class="highlight go"><code><span class="k">import</span><span class="x"> </span><span class="s">"github.com/docker/go-dockercloud/dockercloud"</span><span class="x">
|
||||
|
||||
</span><span class="n">c</span><span class="x"> </span><span class="o">:=</span><span class="x"> </span><span class="nb">make</span><span class="p">(</span><span class="k">chan</span><span class="x"> </span><span class="n">dockercloud</span><span class="o">.</span><span class="n">Logs</span><span class="p">)</span><span class="x">
|
||||
</span><span class="n">action</span><span class="p">,</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">:=</span><span class="x"> </span><span class="n">dockercloud</span><span class="o">.</span><span class="n">GetAction</span><span class="p">(</span><span class="s">"7eaf7fff-882c-4f3d-9a8f-a22317ac00ce"</span><span class="p">)</span><span class="x">
|
||||
|
||||
</span><span class="k">if</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">!=</span><span class="x"> </span><span class="no">nil</span><span class="x"> </span><span class="p">{</span><span class="x">
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">err</span><span class="p">)</span><span class="x">
|
||||
</span><span class="p">}</span><span class="x">
|
||||
|
||||
</span><span class="k">go</span><span class="x"> </span><span class="n">action</span><span class="o">.</span><span class="n">GetLogs</span><span class="p">(</span><span class="n">c</span><span class="p">)</span><span class="x">
|
||||
|
||||
</span><span class="k">for</span><span class="x"> </span><span class="p">{</span><span class="x">
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="o"><-</span><span class="n">c</span><span class="p">)</span><span class="x">
|
||||
</span><span class="p">}</span><span class="x">
|
||||
</span></code></pre>
|
||||
<pre class="highlight http"><code><span class="nf">GET</span> <span class="nn">/api/audit/v1/action/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/logs/</span> <span class="k">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
||||
<span class="na">Host</span><span class="p">:</span> <span class="s">ws.cloud.docker.com</span>
|
||||
<span class="na">Authorization</span><span class="p">:</span> <span class="s">Basic dXNlcm5hbWU6YXBpa2V5</span>
|
||||
<span class="na">Connection</span><span class="p">:</span> <span class="s">Upgrade</span>
|
||||
<span class="na">Upgrade</span><span class="p">:</span> <span class="s">websocket</span>
|
||||
</code></pre>
|
||||
<pre class="highlight shell"><code>docker-cloud action logs 7eaf7fff-882c-4f3d-9a8f-a22317ac00ce
|
||||
</code></pre>
|
||||
|
||||
<p>Get the logs of the specified action.</p>
|
||||
|
||||
<h3 id="endpoint-type">Endpoint Type</h3>
|
||||
|
||||
<p>Available in Docker Cloud’s <strong>STREAM API</strong></p>
|
||||
|
||||
<h3 id="http-request">HTTP Request</h3>
|
||||
|
||||
<p><code class="prettyprint">GET /api/audit/v1/action/(uuid)/logs/</code></p>
|
||||
|
||||
<h3 id="path-parameters">Path Parameters</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th style="text-align: left">Parameter</th>
|
||||
<th style="text-align: left">Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td style="text-align: left">uuid</td>
|
||||
<td style="text-align: left">The UUID of the action to retrieve logs</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
<h3 id="query-parameters">Query Parameters</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th style="text-align: left">Parameter</th>
|
||||
<th style="text-align: left">Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td style="text-align: left">tail</td>
|
||||
<td style="text-align: left">Number of lines to show from the end of the logs (default: <code class="prettyprint">300</code>)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left">follow</td>
|
||||
<td style="text-align: left">Whether to stream logs or close the connection immediately (default: true)</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
<h2 id="cancel-an-action">Cancel an action</h2>
|
||||
<pre class="highlight http"><code><span class="nf">POST</span> <span class="nn">/api/audit/v1/action/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/cancel/</span> <span class="k">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
||||
<span class="na">Host</span><span class="p">:</span> <span class="s">cloud.docker.com</span>
|
||||
<span class="na">Authorization</span><span class="p">:</span> <span class="s">Basic dXNlcm5hbWU6YXBpa2V5</span>
|
||||
<span class="na">Accept</span><span class="p">:</span> <span class="s">application/json</span>
|
||||
</code></pre>
|
||||
<pre class="highlight go"><code><span class="k">import</span><span class="x"> </span><span class="s">"github.com/docker/go-dockercloud/dockercloud"</span><span class="x">
|
||||
|
||||
</span><span class="n">action</span><span class="p">,</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">:=</span><span class="x"> </span><span class="n">dockercloud</span><span class="o">.</span><span class="n">GetAction</span><span class="p">(</span><span class="s">"7eaf7fff-882c-4f3d-9a8f-a22317ac00ce"</span><span class="p">)</span><span class="x">
|
||||
|
||||
</span><span class="k">if</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">!=</span><span class="x"> </span><span class="no">nil</span><span class="x"> </span><span class="p">{</span><span class="x">
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">err</span><span class="p">)</span><span class="x">
|
||||
</span><span class="p">}</span><span class="x">
|
||||
|
||||
</span><span class="n">action</span><span class="p">,</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">=</span><span class="x"> </span><span class="n">action</span><span class="o">.</span><span class="n">Cancel</span><span class="p">()</span><span class="x">
|
||||
|
||||
</span><span class="k">if</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">!=</span><span class="x"> </span><span class="no">nil</span><span class="x"> </span><span class="p">{</span><span class="x">
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">err</span><span class="p">)</span><span class="x">
|
||||
</span><span class="p">}</span><span class="x">
|
||||
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">action</span><span class="p">)</span><span class="x">
|
||||
</span></code></pre>
|
||||
|
||||
<p>Cancels an action in Pending or In progress state.</p>
|
||||
|
||||
<h3 id="endpoint-type">Endpoint Type</h3>
|
||||
|
||||
<p>Available in Docker Cloud’s <strong>REST API</strong></p>
|
||||
|
||||
<h3 id="http-request">HTTP Request</h3>
|
||||
|
||||
<p><code class="prettyprint">POST /api/audit/v1/action/(uuid)/cancel/</code></p>
|
||||
|
||||
<h3 id="path-parameters">Path Parameters</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th style="text-align: left">Parameter</th>
|
||||
<th style="text-align: left">Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td style="text-align: left">uuid</td>
|
||||
<td style="text-align: left">The UUID of the action to cancel</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
<h2 id="retry-an-action">Retry an action</h2>
|
||||
<pre class="highlight python"><code><span class="kn">import</span> <span class="nn">dockercloud</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">log_handler</span><span class="p">(</span><span class="n">message</span><span class="p">):</span>
|
||||
<span class="k">print</span> <span class="n">message</span>
|
||||
|
||||
<span class="n">action</span> <span class="o">=</span> <span class="n">dockercloud</span><span class="o">.</span><span class="n">Action</span><span class="o">.</span><span class="n">fetch</span><span class="p">(</span><span class="s">"7eaf7fff-882c-4f3d-9a8f-a22317ac00ce"</span><span class="p">)</span>
|
||||
<span class="n">action</span><span class="o">.</span><span class="n">logs</span><span class="p">(</span><span class="n">tail</span><span class="o">=</span><span class="mi">300</span><span class="p">,</span> <span class="n">follow</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span> <span class="n">log_handler</span><span class="o">=</span><span class="n">log_handler</span><span class="p">)</span>
|
||||
</code></pre>
|
||||
<pre class="highlight http"><code><span class="nf">POST</span> <span class="nn">/api/audit/v1/action/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/retry/</span> <span class="k">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
||||
<span class="na">Host</span><span class="p">:</span> <span class="s">cloud.docker.com</span>
|
||||
<span class="na">Authorization</span><span class="p">:</span> <span class="s">Basic dXNlcm5hbWU6YXBpa2V5</span>
|
||||
<span class="na">Accept</span><span class="p">:</span> <span class="s">application/json</span>
|
||||
</code></pre>
|
||||
<pre class="highlight go"><code><span class="k">import</span><span class="x"> </span><span class="s">"github.com/docker/go-dockercloud/dockercloud"</span><span class="x">
|
||||
|
||||
</span><span class="n">action</span><span class="p">,</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">:=</span><span class="x"> </span><span class="n">dockercloud</span><span class="o">.</span><span class="n">GetAction</span><span class="p">(</span><span class="s">"7eaf7fff-882c-4f3d-9a8f-a22317ac00ce"</span><span class="p">)</span><span class="x">
|
||||
|
||||
</span><span class="k">if</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">!=</span><span class="x"> </span><span class="no">nil</span><span class="x"> </span><span class="p">{</span><span class="x">
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">err</span><span class="p">)</span><span class="x">
|
||||
</span><span class="p">}</span><span class="x">
|
||||
|
||||
</span><span class="n">action</span><span class="p">,</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">=</span><span class="x"> </span><span class="n">action</span><span class="o">.</span><span class="n">Retry</span><span class="p">()</span><span class="x">
|
||||
|
||||
</span><span class="k">if</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">!=</span><span class="x"> </span><span class="no">nil</span><span class="x"> </span><span class="p">{</span><span class="x">
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">err</span><span class="p">)</span><span class="x">
|
||||
</span><span class="p">}</span><span class="x">
|
||||
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">action</span><span class="p">)</span><span class="x">
|
||||
</span></code></pre>
|
||||
<pre class="highlight shell"><code>docker-cloud action logs 7eaf7fff-882c-4f3d-9a8f-a22317ac00ce
|
||||
</code></pre>
|
||||
|
||||
<p>Retries an action in Success, Failed or Canceled state.</p>
|
||||
|
||||
<h3 id="endpoint-type">Endpoint Type</h3>
|
||||
|
||||
<p>Available in Docker Cloud’s <strong>REST API</strong></p>
|
||||
|
||||
<h3 id="http-request">HTTP Request</h3>
|
||||
|
||||
<p><code class="prettyprint">POST /api/audit/v1/action/(uuid)/retry/</code></p>
|
||||
|
||||
<h3 id="path-parameters">Path Parameters</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th style="text-align: left">Parameter</th>
|
||||
<th style="text-align: left">Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td style="text-align: left">uuid</td>
|
||||
<td style="text-align: left">The UUID of the action to retry</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
</div>
|
||||
<div class="dark-box">
|
||||
</div>
|
||||
</div>
|
||||
<div class="google-analytics">
|
||||
<!-- Google Tag Manager -->
|
||||
<noscript>
|
||||
<iframe src="//www.googletagmanager.com/ns.html?id=GTM-WLGFZV"
|
||||
height="0" width="0" style="display:none;visibility:hidden"></iframe>
|
||||
</noscript>
|
||||
<script>
|
||||
(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
|
||||
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
|
||||
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
|
||||
'//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
|
||||
})(window,document,'script','dataLayer','GTM-WLGFZV');
|
||||
</script>
|
||||
<!-- End Google Tag Manager -->
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,196 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||
<title>API Documentation</title>
|
||||
|
||||
<link href="../stylesheets/screen.css" rel="stylesheet" type="text/css" media="screen" />
|
||||
<link href="../stylesheets/print.css" rel="stylesheet" type="text/css" media="print" />
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
|
||||
<script src="../javascripts/all_nosearch.js" type="text/javascript"></script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="includes includes_availabilityzone">
|
||||
<a href="#" id="nav-button">
|
||||
<span>
|
||||
NAV
|
||||
<img src="../images/navbar.png" />
|
||||
</span>
|
||||
</a>
|
||||
<div class="tocify-wrapper">
|
||||
<img src="../images/logo.png" />
|
||||
<div id="toc">
|
||||
</div>
|
||||
</div>
|
||||
<div class="page-wrapper">
|
||||
<div class="dark-box"></div>
|
||||
<div class="content">
|
||||
<h1 id="availability-zones">Availability Zones</h1>
|
||||
|
||||
<h2 id="availability-zone">Availability Zone</h2>
|
||||
|
||||
<blockquote>
|
||||
<p>Example</p>
|
||||
</blockquote>
|
||||
<pre class="highlight json"><code><span class="p">{</span><span class="w">
|
||||
</span><span class="nt">"available"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"ap-northeast-1a"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"region"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/api/infra/v1/region/az/ap-northeast-1/"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"resource_uri"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/api/infra/v1/az/aws/ap-northeast-1/ap-northeast-1a/"</span><span class="w">
|
||||
</span><span class="p">}</span><span class="w">
|
||||
</span></code></pre>
|
||||
|
||||
<p>An Availability Zone is an isolated location inside a region. Providers that support availability zones: AWS</p>
|
||||
|
||||
<h3 id="attributes">Attributes</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>Attribute</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td>available</td>
|
||||
<td>Whether the availability zone is currently available for new node deployments</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>name</td>
|
||||
<td>An identifier for the availability zone</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>region</td>
|
||||
<td>The resource URI of the region where the availability zone is allocated</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>resource_uri</td>
|
||||
<td>A unique API endpoint that represents the zone</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
<h2 id="list-all-availability-zones">List all availability zones</h2>
|
||||
<pre class="highlight python"><code><span class="kn">import</span> <span class="nn">dockercloud</span>
|
||||
|
||||
<span class="n">az</span> <span class="o">=</span> <span class="n">dockercloud</span><span class="o">.</span><span class="n">AZ</span><span class="o">.</span><span class="nb">list</span><span class="p">()</span>
|
||||
</code></pre>
|
||||
<pre class="highlight http"><code><span class="nf">GET</span> <span class="nn">/api/infra/v1/az/</span> <span class="k">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
||||
<span class="na">Host</span><span class="p">:</span> <span class="s">cloud.docker.com</span>
|
||||
<span class="na">Authorization</span><span class="p">:</span> <span class="s">Basic dXNlcm5hbWU6YXBpa2V5</span>
|
||||
<span class="na">Accept</span><span class="p">:</span> <span class="s">application/json</span>
|
||||
</code></pre>
|
||||
<pre class="highlight go"><code><span class="k">import</span><span class="x"> </span><span class="s">"github.com/docker/go-dockercloud/dockercloud"</span><span class="x">
|
||||
|
||||
</span><span class="n">az</span><span class="p">,</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">:=</span><span class="x"> </span><span class="n">dockercloud</span><span class="o">.</span><span class="n">ListAZ</span><span class="p">()</span><span class="x">
|
||||
</span><span class="k">if</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">!=</span><span class="x"> </span><span class="no">nil</span><span class="x"> </span><span class="p">{</span><span class="x">
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">err</span><span class="p">)</span><span class="x">
|
||||
</span><span class="p">}</span><span class="x">
|
||||
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">az</span><span class="p">)</span><span class="x">
|
||||
</span></code></pre>
|
||||
<pre class="highlight shell"><code>docker-cloud nodecluster az
|
||||
</code></pre>
|
||||
|
||||
<p>Lists all availability zones from all regions of all supported cloud providers. Returns a list of <code class="prettyprint">Availability Zone</code> objects.</p>
|
||||
|
||||
<h3 id="endpoint-type">Endpoint Type</h3>
|
||||
|
||||
<p>Available in Docker Cloud’s <strong>REST API</strong></p>
|
||||
|
||||
<h3 id="http-request">HTTP Request</h3>
|
||||
|
||||
<p><code class="prettyprint">GET /api/infra/v1/az/</code></p>
|
||||
|
||||
<h3 id="query-parameters">Query Parameters</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>Parameter</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td>name</td>
|
||||
<td>Filter by availability zone name</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>region</td>
|
||||
<td>Filter by resource URI of the target region</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
<h2 id="get-an-individual-availability-zone">Get an individual availability zone</h2>
|
||||
<pre class="highlight python"><code><span class="kn">import</span> <span class="nn">dockercloud</span>
|
||||
|
||||
<span class="n">az</span> <span class="o">=</span> <span class="n">dockercloud</span><span class="o">.</span><span class="n">AZ</span><span class="o">.</span><span class="n">fetch</span><span class="p">(</span><span class="s">"aws/sa-east-1/sa-east-1a"</span><span class="p">)</span>
|
||||
</code></pre>
|
||||
<pre class="highlight go"><code><span class="k">import</span><span class="x"> </span><span class="s">"github.com/docker/go-dockercloud/dockercloud"</span><span class="x">
|
||||
|
||||
</span><span class="n">az</span><span class="p">,</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">:=</span><span class="x"> </span><span class="n">dockercloud</span><span class="o">.</span><span class="n">GetAZ</span><span class="p">(</span><span class="s">"aws/sa-east-1/sa-east-1a"</span><span class="p">)</span><span class="x">
|
||||
</span><span class="k">if</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">!=</span><span class="x"> </span><span class="no">nil</span><span class="x"> </span><span class="p">{</span><span class="x">
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">err</span><span class="p">)</span><span class="x">
|
||||
</span><span class="p">}</span><span class="x">
|
||||
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">az</span><span class="p">)</span><span class="x">
|
||||
</span></code></pre>
|
||||
<pre class="highlight http"><code><span class="nf">GET</span> <span class="nn">/api/infra/v1/az/aws/sa-east-1/sa-east-1a/</span> <span class="k">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
||||
<span class="na">Host</span><span class="p">:</span> <span class="s">cloud.docker.com</span>
|
||||
<span class="na">Authorization</span><span class="p">:</span> <span class="s">Basic dXNlcm5hbWU6YXBpa2V5</span>
|
||||
<span class="na">Accept</span><span class="p">:</span> <span class="s">application/json</span>
|
||||
</code></pre>
|
||||
|
||||
<p>Get all the details of a specific availability zone</p>
|
||||
|
||||
<h3 id="endpoint-type">Endpoint Type</h3>
|
||||
|
||||
<p>Available in Docker Cloud’s <strong>REST API</strong></p>
|
||||
|
||||
<h3 id="http-request">HTTP Request</h3>
|
||||
|
||||
<p><code class="prettyprint">GET /api/infra/v1/az/(provider.name)/(region.name)/(name)/</code></p>
|
||||
|
||||
<h3 id="path-parameters">Path Parameters</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>Parameter</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td>name</td>
|
||||
<td>The name of the availability zone to retrieve</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>provider</td>
|
||||
<td>The name of the provider</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>region</td>
|
||||
<td>The name of the region</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
</div>
|
||||
<div class="dark-box">
|
||||
</div>
|
||||
</div>
|
||||
<div class="google-analytics">
|
||||
<!-- Google Tag Manager -->
|
||||
<noscript>
|
||||
<iframe src="//www.googletagmanager.com/ns.html?id=GTM-WLGFZV"
|
||||
height="0" width="0" style="display:none;visibility:hidden"></iframe>
|
||||
</noscript>
|
||||
<script>
|
||||
(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
|
||||
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
|
||||
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
|
||||
'//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
|
||||
})(window,document,'script','dataLayer','GTM-WLGFZV');
|
||||
</script>
|
||||
<!-- End Google Tag Manager -->
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,237 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||
<title>API Documentation</title>
|
||||
|
||||
<link href="../stylesheets/screen.css" rel="stylesheet" type="text/css" media="screen" />
|
||||
<link href="../stylesheets/print.css" rel="stylesheet" type="text/css" media="print" />
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
|
||||
<script src="../javascripts/all_nosearch.js" type="text/javascript"></script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="includes includes_dockercloud-events">
|
||||
<a href="#" id="nav-button">
|
||||
<span>
|
||||
NAV
|
||||
<img src="../images/navbar.png" />
|
||||
</span>
|
||||
</a>
|
||||
<div class="tocify-wrapper">
|
||||
<img src="../images/logo.png" />
|
||||
<div id="toc">
|
||||
</div>
|
||||
</div>
|
||||
<div class="page-wrapper">
|
||||
<div class="dark-box"></div>
|
||||
<div class="content">
|
||||
<h1 id="docker-cloud-events">Docker Cloud Events</h1>
|
||||
|
||||
<h2 id="docker-cloud-event">Docker Cloud Event</h2>
|
||||
|
||||
<blockquote>
|
||||
<p>Example</p>
|
||||
</blockquote>
|
||||
<pre class="highlight json"><code><span class="p">{</span><span class="w">
|
||||
</span><span class="nt">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"action"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"action"</span><span class="p">:</span><span class="w"> </span><span class="s2">"update"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"parents"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
|
||||
</span><span class="s2">"/api/app/v1/container/0b0e3538-88df-4f07-9aed-3a3cc4175076/"</span><span class="w">
|
||||
</span><span class="p">],</span><span class="w">
|
||||
</span><span class="nt">"resource_uri"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/api/app/v1/action/49f0efe8-a704-4a10-b02f-f96344fabadd/"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"state"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Success"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"uuid"</span><span class="p">:</span><span class="w"> </span><span class="s2">"093ba3bb-08dd-48f0-8f12-4d3b85ef85b3"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"datetime"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2016-02-01T16:47:28Z"</span><span class="w">
|
||||
</span><span class="p">}</span><span class="w">
|
||||
</span></code></pre>
|
||||
|
||||
<p>Docker Cloud events are generated every time any of the following objects is created or changes state:</p>
|
||||
|
||||
<ul>
|
||||
<li>Stack</li>
|
||||
<li>Service</li>
|
||||
<li>Container</li>
|
||||
<li>Node Cluster</li>
|
||||
<li>Node</li>
|
||||
<li>Action</li>
|
||||
</ul>
|
||||
|
||||
<h3 id="attributes">Attributes</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th style="text-align: left">Attribute</th>
|
||||
<th style="text-align: left">Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td style="text-align: left">type</td>
|
||||
<td style="text-align: left">Type of object that was created or updated. For possible values, check the <a href="#event-types">events types</a> table below.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left">action</td>
|
||||
<td style="text-align: left">Type of action that was executed on the object. Posible values: <code class="prettyprint">create</code>, <code class="prettyprint">update</code> or <code class="prettyprint">delete</code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left">parents</td>
|
||||
<td style="text-align: left">List of resource URIs (REST API) of the parents of the object, according to the “Parent-child hierarchy” table below</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left">resource_uri</td>
|
||||
<td style="text-align: left">Resource URI (REST API) of the object that was created or updated. You can do a <code class="prettyprint">GET</code> operation on this URL to fetch its details</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left">state</td>
|
||||
<td style="text-align: left">The current state of the object</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left">uuid</td>
|
||||
<td style="text-align: left">Unique identifier for the event</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left">datetime</td>
|
||||
<td style="text-align: left">Date and time of the event in ISO 8601 format</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
<h3 id="event-types">Event types</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th style="text-align: left">Type</th>
|
||||
<th style="text-align: left">Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td style="text-align: left">stack</td>
|
||||
<td style="text-align: left">Whenever a <code class="prettyprint">Stack</code> is created or updated</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left">service</td>
|
||||
<td style="text-align: left">Whenever a <code class="prettyprint">Service</code> is created or updated</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left">container</td>
|
||||
<td style="text-align: left">Whenever a <code class="prettyprint">Container</code> is created or updated</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left">nodecluster</td>
|
||||
<td style="text-align: left">Whenever a <code class="prettyprint">Node Cluster</code> is created or updated</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left">node</td>
|
||||
<td style="text-align: left">Whenever a <code class="prettyprint">Node</code> is created or updated</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left">action</td>
|
||||
<td style="text-align: left">Whenever a <code class="prettyprint">Action</code> is created or updated</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left">error</td>
|
||||
<td style="text-align: left">Sent when an error occurs on the websocket connection or as part of the authentication process</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
<h3 id="parent-child-hierarchy">Parent-child hierarchy</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th style="text-align: left">Object type</th>
|
||||
<th style="text-align: left">Parent types</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td style="text-align: left">Stack</td>
|
||||
<td style="text-align: left">(None)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left">Service</td>
|
||||
<td style="text-align: left">Stack</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left">Container</td>
|
||||
<td style="text-align: left">Service, Stack, Node, Node Cluster</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left">Node Cluster</td>
|
||||
<td style="text-align: left">(None)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left">Node</td>
|
||||
<td style="text-align: left">Node Cluster</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td style="text-align: left">Action</td>
|
||||
<td style="text-align: left">(object to which the action applies to)</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
<h2 id="listen-to-new-docker-cloud-events">Listen to new Docker Cloud Events</h2>
|
||||
<pre class="highlight python"><code><span class="kn">import</span> <span class="nn">dockercloud</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">process_event</span><span class="p">(</span><span class="n">event</span><span class="p">):</span>
|
||||
<span class="k">print</span> <span class="n">event</span>
|
||||
|
||||
<span class="n">events</span> <span class="o">=</span> <span class="n">dockercloud</span><span class="o">.</span><span class="n">Events</span><span class="p">()</span>
|
||||
<span class="n">events</span><span class="o">.</span><span class="n">on_message</span><span class="p">(</span><span class="n">process_event</span><span class="p">)</span>
|
||||
<span class="n">events</span><span class="o">.</span><span class="n">run_forever</span><span class="p">()</span>
|
||||
</code></pre>
|
||||
<pre class="highlight go"><code><span class="k">import</span><span class="x"> </span><span class="s">"github.com/docker/go-dockercloud/dockercloud"</span><span class="x">
|
||||
|
||||
</span><span class="n">c</span><span class="x"> </span><span class="o">:=</span><span class="x"> </span><span class="nb">make</span><span class="p">(</span><span class="k">chan</span><span class="x"> </span><span class="n">dockercloud</span><span class="o">.</span><span class="n">Event</span><span class="p">)</span><span class="x">
|
||||
</span><span class="n">e</span><span class="x"> </span><span class="o">:=</span><span class="x"> </span><span class="nb">make</span><span class="p">(</span><span class="k">chan</span><span class="x"> </span><span class="kt">error</span><span class="p">)</span><span class="x">
|
||||
|
||||
</span><span class="k">go</span><span class="x"> </span><span class="n">dockercloud</span><span class="o">.</span><span class="n">Events</span><span class="p">(</span><span class="n">c</span><span class="p">,</span><span class="x"> </span><span class="n">e</span><span class="p">)</span><span class="x">
|
||||
|
||||
</span><span class="k">for</span><span class="x"> </span><span class="p">{</span><span class="x">
|
||||
</span><span class="k">select</span><span class="x"> </span><span class="p">{</span><span class="x">
|
||||
</span><span class="k">case</span><span class="x"> </span><span class="n">event</span><span class="x"> </span><span class="o">:=</span><span class="x"> </span><span class="o"><-</span><span class="n">c</span><span class="o">:</span><span class="x">
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">event</span><span class="p">)</span><span class="x">
|
||||
</span><span class="k">case</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">:=</span><span class="x"> </span><span class="o"><-</span><span class="n">e</span><span class="o">:</span><span class="x">
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">err</span><span class="p">)</span><span class="x">
|
||||
</span><span class="p">}</span><span class="x">
|
||||
</span><span class="p">}</span><span class="x">
|
||||
</span></code></pre>
|
||||
<pre class="highlight http"><code><span class="nf">GET</span> <span class="nn">/api/audit/v1/events/</span> <span class="k">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
||||
<span class="na">Host</span><span class="p">:</span> <span class="s">ws.cloud.docker.com</span>
|
||||
<span class="na">Authorization</span><span class="p">:</span> <span class="s">Basic dXNlcm5hbWU6YXBpa2V5</span>
|
||||
<span class="na">Connection</span><span class="p">:</span> <span class="s">Upgrade</span>
|
||||
<span class="na">Upgrade</span><span class="p">:</span> <span class="s">websocket</span>
|
||||
</code></pre>
|
||||
<pre class="highlight shell"><code>docker-cloud event
|
||||
</code></pre>
|
||||
|
||||
<p>Listens for new Docker Cloud Events</p>
|
||||
|
||||
<h3 id="endpoint-type">Endpoint Type</h3>
|
||||
|
||||
<p>Available in Docker Cloud’s <strong>STREAM API</strong></p>
|
||||
|
||||
<h3 id="http-request">HTTP Request</h3>
|
||||
|
||||
<p><code class="prettyprint">GET /api/audit/v1/events/</code></p>
|
||||
|
||||
</div>
|
||||
<div class="dark-box">
|
||||
</div>
|
||||
</div>
|
||||
<div class="google-analytics">
|
||||
<!-- Google Tag Manager -->
|
||||
<noscript>
|
||||
<iframe src="//www.googletagmanager.com/ns.html?id=GTM-WLGFZV"
|
||||
height="0" width="0" style="display:none;visibility:hidden"></iframe>
|
||||
</noscript>
|
||||
<script>
|
||||
(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
|
||||
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
|
||||
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
|
||||
'//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
|
||||
})(window,document,'script','dataLayer','GTM-WLGFZV');
|
||||
</script>
|
||||
<!-- End Google Tag Manager -->
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,560 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||
<title>API Documentation</title>
|
||||
|
||||
<link href="../stylesheets/screen.css" rel="stylesheet" type="text/css" media="screen" />
|
||||
<link href="../stylesheets/print.css" rel="stylesheet" type="text/css" media="print" />
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
|
||||
<script src="../javascripts/all_nosearch.js" type="text/javascript"></script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="includes includes_node">
|
||||
<a href="#" id="nav-button">
|
||||
<span>
|
||||
NAV
|
||||
<img src="../images/navbar.png" />
|
||||
</span>
|
||||
</a>
|
||||
<div class="tocify-wrapper">
|
||||
<img src="../images/logo.png" />
|
||||
<div id="toc">
|
||||
</div>
|
||||
</div>
|
||||
<div class="page-wrapper">
|
||||
<div class="dark-box"></div>
|
||||
<div class="content">
|
||||
<h1 id="nodes">Nodes</h1>
|
||||
|
||||
<h2 id="node">Node</h2>
|
||||
|
||||
<blockquote>
|
||||
<p>Example</p>
|
||||
</blockquote>
|
||||
<pre class="highlight json"><code><span class="p">{</span><span class="w">
|
||||
</span><span class="nt">"availability_zone"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/api/infra/v1/az/testing-provider/testing-region/testing-az/"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"cpu"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"current_num_containers"</span><span class="p">:</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"deployed_datetime"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Tue, 16 Sep 2014 17:01:15 +0000"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"destroyed_datetime"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"disk"</span><span class="p">:</span><span class="w"> </span><span class="mi">60</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"docker_execdriver"</span><span class="p">:</span><span class="w"> </span><span class="s2">"native-0.2"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"docker_graphdriver"</span><span class="p">:</span><span class="w"> </span><span class="s2">"aufs"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"docker_version"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1.5.0"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"external_fqdn"</span><span class="p">:</span><span class="w"> </span><span class="s2">"fc1a5bb9-user.node.dockerapp.io"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"last_seen"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Thu, 25 Sep 2014 13:14:44 +0000"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"memory"</span><span class="p">:</span><span class="w"> </span><span class="mi">1792</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"nickname"</span><span class="p">:</span><span class="w"> </span><span class="s2">"fc1a5bb9-user.node.dockerapp.io"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"node_cluster"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/api/infra/v1/nodecluster/d787a4b7-d525-4061-97a0-f423e8f1d229/"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"node_type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/api/infra/v1/nodetype/testing-provider/testing-type/"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"public_ip"</span><span class="p">:</span><span class="w"> </span><span class="s2">"10.45.2.11"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"region"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/api/infra/v1/region/testing-provider/testing-region/"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"resource_uri"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/api/infra/v1/node/fc1a5bb9-17f5-4819-b667-8c7cd819e949/"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"state"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Deployed"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"tags"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
|
||||
</span><span class="p">{</span><span class="nt">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"tag_one"</span><span class="p">},</span><span class="w">
|
||||
</span><span class="p">{</span><span class="nt">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"tag-two"</span><span class="p">}</span><span class="w">
|
||||
</span><span class="p">],</span><span class="w">
|
||||
</span><span class="nt">"tunnel"</span><span class="p">:</span><span class="w"> </span><span class="s2">"https://tunnel01.cloud.docker.com:12345"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"uuid"</span><span class="p">:</span><span class="w"> </span><span class="s2">"fc1a5bb9-17f5-4819-b667-8c7cd819e949"</span><span class="w">
|
||||
</span><span class="p">}</span><span class="w">
|
||||
</span></code></pre>
|
||||
|
||||
<p>A node is a virtual machine provided by a cloud provider where containers can be deployed.</p>
|
||||
|
||||
<h3 id="attributes">Attributes</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>Attribute</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td>availability_zone</td>
|
||||
<td>The resource URI of the availability zone where the node is deployed, if any</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>uuid</td>
|
||||
<td>A unique identifier for the node generated automatically on creation</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>resource_uri</td>
|
||||
<td>A unique API endpoint that represents the node</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>external_fqdn</td>
|
||||
<td>An automatically generated FQDN for the node. Containers deployed on this node will inherit this FQDN.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>state</td>
|
||||
<td>The state of the node. See the below table for a list of possible states.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>node_cluster</td>
|
||||
<td>The resource URI of the node cluster to which this node belongs to (if applicable)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>node_type</td>
|
||||
<td>The resource URI of the node type used for the node</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>region</td>
|
||||
<td>The resource URI of the region where the node is deployed</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>docker_execdriver</td>
|
||||
<td>Docker’s execution driver used in the node</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>docker_graphdriver</td>
|
||||
<td>Docker’s storage driver used in the node</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>docker_version</td>
|
||||
<td>Docker’s version used in the node</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>cpu</td>
|
||||
<td>Node number of CPUs</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>disk</td>
|
||||
<td>Node storage size in GB</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>memory</td>
|
||||
<td>Node memory in MB</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>current_num_containers</td>
|
||||
<td>The actual number of containers deployed in this node</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>last_seen</td>
|
||||
<td>Date and time of the last time the node was contacted by Docker Cloud</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>public_ip</td>
|
||||
<td>The public IP allocated to the node</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>tunnel</td>
|
||||
<td>If the node does not accept incoming connections to port 2375, the address of the reverse tunnel to access the docker daemon, or <code class="prettyprint">null</code> otherwise</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>deployed_datetime</td>
|
||||
<td>The date and time when this node cluster was deployed</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>destroyed_datetime</td>
|
||||
<td>The date and time when this node cluster was terminated (if applicable)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>tags</td>
|
||||
<td>List of tags to identify the node when deploying services (see <a href="../../docker-cloud/apps/deploy-tags/">Tags</a> for more information)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>nickname</td>
|
||||
<td>A user-friendly name for the node (<code class="prettyprint">external_fqdn</code> by default)</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
<h3 id="node-states">Node states</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>State</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td>Deploying</td>
|
||||
<td>The node is being deployed in the cloud provider. No actions allowed in this state.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Deployed</td>
|
||||
<td>The node is deployed and provisioned and is ready to deploy containers. Possible actions in this state: <code class="prettyprint">terminate</code>, <code class="prettyprint">docker-upgrade</code>.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Unreachable</td>
|
||||
<td>The node is deployed but Docker Cloud cannot connect to the docker daemon. Possible actions in this state: <code class="prettyprint">health-check</code> and <code class="prettyprint">terminate</code>.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Upgrading</td>
|
||||
<td>The node docker daemon is being upgraded. No actions allowed in this state.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Terminating</td>
|
||||
<td>The node is being terminated in the cloud provider. No actions allowed in this state.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Terminated</td>
|
||||
<td>The node has been terminated and is no longer present in the cloud provider. No actions allowed in this state.</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
<h3 id="node-last-metric-attributes">Node Last Metric attributes</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>Attribute</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td>cpu</td>
|
||||
<td>CPU percentage usage</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>memory</td>
|
||||
<td>Memory usage in bytes</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>disk</td>
|
||||
<td>Disk storage usage in bytes</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
<h2 id="list-all-nodes">List all nodes</h2>
|
||||
<pre class="highlight python"><code><span class="kn">import</span> <span class="nn">dockercloud</span>
|
||||
|
||||
<span class="n">nodes</span> <span class="o">=</span> <span class="n">dockercloud</span><span class="o">.</span><span class="n">Node</span><span class="o">.</span><span class="nb">list</span><span class="p">()</span>
|
||||
</code></pre>
|
||||
<pre class="highlight go"><code><span class="k">import</span><span class="x"> </span><span class="s">"github.com/docker/go-dockercloud/dockercloud"</span><span class="x">
|
||||
|
||||
</span><span class="n">nodeList</span><span class="p">,</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">:=</span><span class="x"> </span><span class="n">dockercloud</span><span class="o">.</span><span class="n">ListNodes</span><span class="p">()</span><span class="x">
|
||||
|
||||
</span><span class="k">if</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">!=</span><span class="x"> </span><span class="no">nil</span><span class="x"> </span><span class="p">{</span><span class="x">
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">err</span><span class="p">)</span><span class="x">
|
||||
</span><span class="p">}</span><span class="x">
|
||||
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">nodeList</span><span class="p">)</span><span class="x">
|
||||
</span></code></pre>
|
||||
<pre class="highlight http"><code><span class="nf">GET</span> <span class="nn">/api/infra/v1/node/</span> <span class="k">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
||||
<span class="na">Host</span><span class="p">:</span> <span class="s">cloud.docker.com</span>
|
||||
<span class="na">Authorization</span><span class="p">:</span> <span class="s">Basic dXNlcm5hbWU6YXBpa2V5</span>
|
||||
<span class="na">Accept</span><span class="p">:</span> <span class="s">application/json</span>
|
||||
</code></pre>
|
||||
<pre class="highlight shell"><code>docker-cloud node ls
|
||||
</code></pre>
|
||||
|
||||
<p>Lists all current and recently terminated nodes. Returns a list of <code class="prettyprint">Node</code> objects.</p>
|
||||
|
||||
<h3 id="endpoint-type">Endpoint Type</h3>
|
||||
|
||||
<p>Available in Docker Cloud’s <strong>REST API</strong></p>
|
||||
|
||||
<h3 id="http-request">HTTP Request</h3>
|
||||
|
||||
<p><code class="prettyprint">GET /api/infra/v1/node/</code></p>
|
||||
|
||||
<h3 id="query-parameters">Query Parameters</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>Parameter</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td>uuid</td>
|
||||
<td>Filter by UUID</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>state</td>
|
||||
<td>Filter by state. Possible values: <code class="prettyprint">Deploying</code>, <code class="prettyprint">Deployed</code>, <code class="prettyprint">Unreachable</code>, <code class="prettyprint">Upgrading</code>, <code class="prettyprint">Terminating</code>, <code class="prettyprint">Terminated</code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>node_cluster</td>
|
||||
<td>Filter by resource URI of the target node cluster</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>node_type</td>
|
||||
<td>Filter by resource URI of the target node type</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>region</td>
|
||||
<td>Filter by resource URI of the target region</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>docker_version</td>
|
||||
<td>Filter by Docker engine version running in the nodes</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
<h2 id="get-an-existing-node">Get an existing node</h2>
|
||||
<pre class="highlight python"><code><span class="kn">import</span> <span class="nn">dockercloud</span>
|
||||
|
||||
<span class="n">node</span> <span class="o">=</span> <span class="n">dockercloud</span><span class="o">.</span><span class="n">Node</span><span class="o">.</span><span class="n">fetch</span><span class="p">(</span><span class="s">"7eaf7fff-882c-4f3d-9a8f-a22317ac00ce"</span><span class="p">)</span>
|
||||
</code></pre>
|
||||
<pre class="highlight go"><code><span class="k">import</span><span class="x"> </span><span class="s">"github.com/docker/go-dockercloud/dockercloud"</span><span class="x">
|
||||
|
||||
</span><span class="n">node</span><span class="p">,</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">:=</span><span class="x"> </span><span class="n">dockercloud</span><span class="o">.</span><span class="n">GetNode</span><span class="p">(</span><span class="s">"7eaf7fff-882c-4f3d-9a8f-a22317ac00ce"</span><span class="p">)</span><span class="x">
|
||||
|
||||
</span><span class="k">if</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">!=</span><span class="x"> </span><span class="no">nil</span><span class="x"> </span><span class="p">{</span><span class="x">
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">err</span><span class="p">)</span><span class="x">
|
||||
</span><span class="p">}</span><span class="x">
|
||||
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">node</span><span class="p">)</span><span class="x">
|
||||
</span></code></pre>
|
||||
<pre class="highlight http"><code><span class="nf">GET</span> <span class="nn">/api/infra/v1/node/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/</span> <span class="k">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
||||
<span class="na">Host</span><span class="p">:</span> <span class="s">cloud.docker.com</span>
|
||||
<span class="na">Authorization</span><span class="p">:</span> <span class="s">Basic dXNlcm5hbWU6YXBpa2V5</span>
|
||||
<span class="na">Accept</span><span class="p">:</span> <span class="s">application/json</span>
|
||||
</code></pre>
|
||||
<pre class="highlight shell"><code>docker-cloud node inspect 7eaf7fff
|
||||
</code></pre>
|
||||
|
||||
<p>Get all the details of an specific node</p>
|
||||
|
||||
<h3 id="endpoint-type">Endpoint Type</h3>
|
||||
|
||||
<p>Available in Docker Cloud’s <strong>REST API</strong></p>
|
||||
|
||||
<h3 id="http-request">HTTP Request</h3>
|
||||
|
||||
<p><code class="prettyprint">GET /api/infra/v1/node/(uuid)/</code></p>
|
||||
|
||||
<h3 id="path-parameters">Path Parameters</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>Parameter</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td>uuid</td>
|
||||
<td>The UUID of the node to retrieve</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
<h2 id="update-a-node">Update a node</h2>
|
||||
<pre class="highlight python"><code><span class="kn">import</span> <span class="nn">dockercloud</span>
|
||||
|
||||
<span class="n">node</span> <span class="o">=</span> <span class="n">dockercloud</span><span class="o">.</span><span class="n">Node</span><span class="o">.</span><span class="n">fetch</span><span class="p">(</span><span class="s">"7eaf7fff-882c-4f3d-9a8f-a22317ac00ce"</span><span class="p">)</span>
|
||||
<span class="n">node</span><span class="o">.</span><span class="n">tags</span><span class="o">.</span><span class="n">add</span><span class="p">([</span><span class="s">"tag-1"</span><span class="p">])</span>
|
||||
<span class="n">node</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
|
||||
</code></pre>
|
||||
<pre class="highlight go"><code><span class="k">import</span><span class="x"> </span><span class="s">"github.com/docker/go-dockercloud/dockercloud"</span><span class="x">
|
||||
|
||||
</span><span class="n">node</span><span class="p">,</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">:=</span><span class="x"> </span><span class="n">dockercloud</span><span class="o">.</span><span class="n">GetNode</span><span class="p">(</span><span class="s">"7eaf7fff-882c-4f3d-9a8f-a22317ac00ce"</span><span class="p">)</span><span class="x">
|
||||
|
||||
</span><span class="k">if</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">!=</span><span class="x"> </span><span class="no">nil</span><span class="x"> </span><span class="p">{</span><span class="x">
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">err</span><span class="p">)</span><span class="x">
|
||||
</span><span class="p">}</span><span class="x">
|
||||
|
||||
</span><span class="k">if</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">=</span><span class="x"> </span><span class="n">node</span><span class="o">.</span><span class="n">Update</span><span class="p">(</span><span class="n">dockercloud</span><span class="o">.</span><span class="n">Node</span><span class="p">{</span><span class="n">Tags</span><span class="o">:</span><span class="x"> </span><span class="p">[]</span><span class="kt">string</span><span class="p">{ {</span><span class="n">Name</span><span class="o">:</span><span class="x"> </span><span class="s">"tag-1"</span><span class="p">}}});</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">!=</span><span class="x"> </span><span class="no">nil</span><span class="x"> </span><span class="p">{</span><span class="x">
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">err</span><span class="p">)</span><span class="x">
|
||||
</span><span class="p">}</span><span class="x">
|
||||
</span></code></pre>
|
||||
<pre class="highlight http"><code><span class="nf">PATCH</span> <span class="nn">/api/infra/v1/node/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/</span> <span class="k">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
||||
<span class="na">Host</span><span class="p">:</span> <span class="s">cloud.docker.com</span>
|
||||
<span class="na">Authorization</span><span class="p">:</span> <span class="s">Basic dXNlcm5hbWU6YXBpa2V5</span>
|
||||
<span class="na">Accept</span><span class="p">:</span> <span class="s">application/json</span>
|
||||
|
||||
{"tags": [{"name": "tag-1"}], "nickname": "dev node"}
|
||||
</code></pre>
|
||||
<pre class="highlight shell"><code>docker-cloud tag add -t tag-1 7eaf7fff
|
||||
docker-cloud tag <span class="nb">set</span> -t tag-2 7eaf7fff
|
||||
</code></pre>
|
||||
|
||||
<p>Names the node with a user-friendly name and/or replaces the old tags for the new list provided.</p>
|
||||
|
||||
<h3 id="endpoint-type">Endpoint Type</h3>
|
||||
|
||||
<p>Available in Docker Cloud’s <strong>REST API</strong></p>
|
||||
|
||||
<h3 id="http-request">HTTP Request</h3>
|
||||
|
||||
<p><code class="prettyprint">PATCH /api/infra/v1/node/(uuid)/</code></p>
|
||||
|
||||
<h3 id="path-parameters">Path Parameters</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>Parameter</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td>uuid</td>
|
||||
<td>The UUID of the node to retrieve</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
<h3 id="json-parameters">JSON Parameters</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>Parameter</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td>nickname</td>
|
||||
<td>(optional) A user-friendly name for the node (<code class="prettyprint">external_fqdn</code> by default)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>tags</td>
|
||||
<td>(optional) List of tags the node will have. This operation replaces the user tag list.</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
<h2 id="upgrade-docker-daemon">Upgrade Docker Daemon</h2>
|
||||
<pre class="highlight python"><code><span class="kn">import</span> <span class="nn">dockercloud</span>
|
||||
|
||||
<span class="n">node</span> <span class="o">=</span> <span class="n">dockercloud</span><span class="o">.</span><span class="n">Node</span><span class="o">.</span><span class="n">fetch</span><span class="p">(</span><span class="s">"7eaf7fff-882c-4f3d-9a8f-a22317ac00ce"</span><span class="p">)</span>
|
||||
<span class="n">node</span><span class="o">.</span><span class="n">upgrade_docker</span><span class="p">()</span>
|
||||
</code></pre>
|
||||
<pre class="highlight go"><code><span class="k">import</span><span class="x"> </span><span class="s">"github.com/docker/go-dockercloud/dockercloud"</span><span class="x">
|
||||
|
||||
</span><span class="n">node</span><span class="p">,</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">:=</span><span class="x"> </span><span class="n">dockercloud</span><span class="o">.</span><span class="n">GetNode</span><span class="p">(</span><span class="s">"7eaf7fff-882c-4f3d-9a8f-a22317ac00ce"</span><span class="p">)</span><span class="x">
|
||||
|
||||
</span><span class="k">if</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">!=</span><span class="x"> </span><span class="no">nil</span><span class="x"> </span><span class="p">{</span><span class="x">
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">err</span><span class="p">)</span><span class="x">
|
||||
</span><span class="p">}</span><span class="x">
|
||||
|
||||
</span><span class="k">if</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">=</span><span class="x"> </span><span class="n">node</span><span class="o">.</span><span class="n">Upgrade</span><span class="p">();</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">!=</span><span class="x"> </span><span class="no">nil</span><span class="x"> </span><span class="p">{</span><span class="x">
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">err</span><span class="p">)</span><span class="x">
|
||||
</span><span class="p">}</span><span class="x">
|
||||
</span></code></pre>
|
||||
<pre class="highlight http"><code><span class="nf">POST</span> <span class="nn">/api/infra/v1/node/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/docker-upgrade/</span> <span class="k">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
||||
<span class="na">Host</span><span class="p">:</span> <span class="s">cloud.docker.com</span>
|
||||
<span class="na">Authorization</span><span class="p">:</span> <span class="s">Basic dXNlcm5hbWU6YXBpa2V5</span>
|
||||
<span class="na">Accept</span><span class="p">:</span> <span class="s">application/json</span>
|
||||
</code></pre>
|
||||
<pre class="highlight shell"><code>docker-cloud node upgrade 7eaf7fff
|
||||
</code></pre>
|
||||
|
||||
<p>Upgrades the docker daemon of the node. This will restart your containers on that node. See <a href="../../docker-cloud/infrastructure/docker-upgrade/">Docker upgrade</a> for more information.</p>
|
||||
|
||||
<h3 id="endpoint-type">Endpoint Type</h3>
|
||||
|
||||
<p>Available in Docker Cloud’s <strong>REST API</strong></p>
|
||||
|
||||
<h3 id="http-request">HTTP Request</h3>
|
||||
|
||||
<p><code class="prettyprint">POST /api/infra/v1/node/(uuid)/docker-upgrade/</code></p>
|
||||
|
||||
<h3 id="path-parameters">Path Parameters</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>Parameter</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td>uuid</td>
|
||||
<td>The UUID of the node to upgrade</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
<h2 id="perform-a-health-check-of-a-node">Perform a health check of a node</h2>
|
||||
<pre class="highlight http"><code><span class="nf">POST</span> <span class="nn">/api/infra/v1/node/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/health-check/</span> <span class="k">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
||||
<span class="na">Host</span><span class="p">:</span> <span class="s">cloud.docker.com</span>
|
||||
<span class="na">Authorization</span><span class="p">:</span> <span class="s">Basic dXNlcm5hbWU6YXBpa2V5</span>
|
||||
<span class="na">Accept</span><span class="p">:</span> <span class="s">application/json</span>
|
||||
</code></pre>
|
||||
|
||||
<p>Tests connectivity between Docker Cloud and the node. Updates the node status to <code class="prettyprint">Deployed</code> if the check was successful, or to <code class="prettyprint">Unreachable</code> otherwise.</p>
|
||||
|
||||
<h3 id="endpoint-type">Endpoint Type</h3>
|
||||
|
||||
<p>Available in Docker Cloud’s <strong>REST API</strong></p>
|
||||
|
||||
<h3 id="http-request">HTTP Request</h3>
|
||||
|
||||
<p><code class="prettyprint">POST /api/infra/v1/node/(uuid)/health-check/</code></p>
|
||||
|
||||
<h3 id="path-parameters">Path Parameters</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>Parameter</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td>uuid</td>
|
||||
<td>The UUID of the node to perform the health check to</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
<h2 id="terminate-a-node">Terminate a node</h2>
|
||||
<pre class="highlight python"><code><span class="kn">import</span> <span class="nn">dockercloud</span>
|
||||
|
||||
<span class="n">node</span> <span class="o">=</span> <span class="n">dockercloud</span><span class="o">.</span><span class="n">Node</span><span class="o">.</span><span class="n">fetch</span><span class="p">(</span><span class="s">"7eaf7fff-882c-4f3d-9a8f-a22317ac00ce"</span><span class="p">)</span>
|
||||
<span class="n">node</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span>
|
||||
</code></pre>
|
||||
<pre class="highlight http"><code><span class="nf">DELETE</span> <span class="nn">/api/infra/v1/node/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/</span> <span class="k">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
||||
<span class="na">Host</span><span class="p">:</span> <span class="s">cloud.docker.com</span>
|
||||
<span class="na">Authorization</span><span class="p">:</span> <span class="s">Basic dXNlcm5hbWU6YXBpa2V5</span>
|
||||
<span class="na">Accept</span><span class="p">:</span> <span class="s">application/json</span>
|
||||
</code></pre>
|
||||
<pre class="highlight go"><code><span class="k">import</span><span class="x"> </span><span class="s">"github.com/docker/go-dockercloud/dockercloud"</span><span class="x">
|
||||
|
||||
</span><span class="n">node</span><span class="p">,</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">:=</span><span class="x"> </span><span class="n">dockercloud</span><span class="o">.</span><span class="n">GetNode</span><span class="p">(</span><span class="s">"7eaf7fff-882c-4f3d-9a8f-a22317ac00ce"</span><span class="p">)</span><span class="x">
|
||||
|
||||
</span><span class="k">if</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">!=</span><span class="x"> </span><span class="no">nil</span><span class="x"> </span><span class="p">{</span><span class="x">
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">err</span><span class="p">)</span><span class="x">
|
||||
</span><span class="p">}</span><span class="x">
|
||||
|
||||
</span><span class="k">if</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">=</span><span class="x"> </span><span class="n">node</span><span class="o">.</span><span class="n">Terminate</span><span class="p">();</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">!=</span><span class="x"> </span><span class="no">nil</span><span class="x"> </span><span class="p">{</span><span class="x">
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">err</span><span class="p">)</span><span class="x">
|
||||
</span><span class="p">}</span><span class="x">
|
||||
</span></code></pre>
|
||||
<pre class="highlight shell"><code>docker-cloud node rm 7eaf7fff
|
||||
</code></pre>
|
||||
|
||||
<p>Terminates the specified node.</p>
|
||||
|
||||
<h3 id="endpoint-type">Endpoint Type</h3>
|
||||
|
||||
<p>Available in Docker Cloud’s <strong>REST API</strong></p>
|
||||
|
||||
<h3 id="http-request">HTTP Request</h3>
|
||||
|
||||
<p><code class="prettyprint">DELETE /api/infra/v1/node/(uuid)/</code></p>
|
||||
|
||||
<h3 id="path-parameters">Path Parameters</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>Parameter</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td>uuid</td>
|
||||
<td>The UUID of the node to terminate</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
</div>
|
||||
<div class="dark-box">
|
||||
</div>
|
||||
</div>
|
||||
<div class="google-analytics">
|
||||
<!-- Google Tag Manager -->
|
||||
<noscript>
|
||||
<iframe src="//www.googletagmanager.com/ns.html?id=GTM-WLGFZV"
|
||||
height="0" width="0" style="display:none;visibility:hidden"></iframe>
|
||||
</noscript>
|
||||
<script>
|
||||
(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
|
||||
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
|
||||
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
|
||||
'//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
|
||||
})(window,document,'script','dataLayer','GTM-WLGFZV');
|
||||
</script>
|
||||
<!-- End Google Tag Manager -->
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,589 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||
<title>API Documentation</title>
|
||||
|
||||
<link href="../stylesheets/screen.css" rel="stylesheet" type="text/css" media="screen" />
|
||||
<link href="../stylesheets/print.css" rel="stylesheet" type="text/css" media="print" />
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
|
||||
<script src="../javascripts/all_nosearch.js" type="text/javascript"></script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="includes includes_nodecluster">
|
||||
<a href="#" id="nav-button">
|
||||
<span>
|
||||
NAV
|
||||
<img src="../images/navbar.png" />
|
||||
</span>
|
||||
</a>
|
||||
<div class="tocify-wrapper">
|
||||
<img src="../images/logo.png" />
|
||||
<div id="toc">
|
||||
</div>
|
||||
</div>
|
||||
<div class="page-wrapper">
|
||||
<div class="dark-box"></div>
|
||||
<div class="content">
|
||||
<h1 id="node-clusters">Node Clusters</h1>
|
||||
|
||||
<h2 id="node-cluster">Node Cluster</h2>
|
||||
|
||||
<blockquote>
|
||||
<p>Example</p>
|
||||
</blockquote>
|
||||
<pre class="highlight json"><code><span class="p">{</span><span class="w">
|
||||
</span><span class="nt">"current_num_nodes"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"deployed_datetime"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Tue, 16 Sep 2014 17:01:15 +0000"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"destroyed_datetime"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"disk"</span><span class="p">:</span><span class="w"> </span><span class="mi">60</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"nickname"</span><span class="p">:</span><span class="w"> </span><span class="s2">"my test cluster"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"TestCluster"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"node_type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/api/infra/v1/nodetype/aws/t2.micro/"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"nodes"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
|
||||
</span><span class="s2">"/api/infra/v1/node/75d20367-0948-4f10-8ba4-ffb4d16ed3c6/"</span><span class="w">
|
||||
</span><span class="p">],</span><span class="w">
|
||||
</span><span class="nt">"region"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/api/infra/v1/region/aws/us-east-1/"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"resource_uri"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/api/infra/v1/nodecluster/5516df0b-721e-4470-b350-741ff22e63a0/"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"state"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Deployed"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"tags"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
|
||||
</span><span class="p">{</span><span class="nt">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"tag_one"</span><span class="p">},</span><span class="w">
|
||||
</span><span class="p">{</span><span class="nt">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"tag-two"</span><span class="p">},</span><span class="w">
|
||||
</span><span class="p">{</span><span class="nt">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"tagthree3"</span><span class="p">}</span><span class="w">
|
||||
</span><span class="p">],</span><span class="w">
|
||||
</span><span class="nt">"target_num_nodes"</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"uuid"</span><span class="p">:</span><span class="w"> </span><span class="s2">"5516df0b-721e-4470-b350-741ff22e63a0"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"provider_options"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
|
||||
</span><span class="nt">"vpc"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
|
||||
</span><span class="nt">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"vpc-aa1c70d4"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"subnets"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">"subnet-aaa7d94f"</span><span class="p">,</span><span class="w"> </span><span class="s2">"subnet-aa15fa64"</span><span class="p">],</span><span class="w">
|
||||
</span><span class="nt">"security_groups"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">"sg-aa1c70d4"</span><span class="p">]</span><span class="w">
|
||||
</span><span class="p">},</span><span class="w">
|
||||
</span><span class="nt">"iam"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
|
||||
</span><span class="nt">"instance_profile_name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"my_instance_profile"</span><span class="w">
|
||||
</span><span class="p">}</span><span class="w">
|
||||
</span><span class="p">}</span><span class="w">
|
||||
</span><span class="p">}</span><span class="w">
|
||||
</span></code></pre>
|
||||
|
||||
<p>A node cluster is a group of nodes that share the same provider, region and/or availability zone, and node type. They are on the same private network.</p>
|
||||
|
||||
<h3 id="attributes">Attributes</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>Attribute</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td>uuid</td>
|
||||
<td>A unique identifier for the node cluster generated automatically on creation</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>resource_uri</td>
|
||||
<td>A unique API endpoint that represents the node cluster</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>name</td>
|
||||
<td>A user provided name for the node cluster</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>state</td>
|
||||
<td>The state of the node cluster. See the below table for a list of possible states.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>node_type</td>
|
||||
<td>The resource URI of the node type used for the node cluster</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>disk</td>
|
||||
<td>The size of the disk where images and containers are stored (in GB)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>nodes</td>
|
||||
<td>A list of resource URIs of the <code class="prettyprint">Node</code> objects on the node cluster</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>region</td>
|
||||
<td>The resource URI of the <code class="prettyprint">Region</code> object where the node cluster is deployed</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>target_num_nodes</td>
|
||||
<td>The desired number of nodes for the node cluster</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>current_num_nodes</td>
|
||||
<td>The actual number of nodes in the node cluster. This may differ from <code class="prettyprint">target_num_nodes</code> if the node cluster is being deployed or scaled</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>deployed_datetime</td>
|
||||
<td>The date and time when this node cluster was deployed</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>destroyed_datetime</td>
|
||||
<td>The date and time when this node cluster was terminated (if applicable)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>tags</td>
|
||||
<td>List of tags to identify the node cluster nodes when deploying services (see <a href="../../docker-cloud/apps/deploy-tags/">Tags</a> for more information)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>provider_options</td>
|
||||
<td>Provider-specific extra options for the deployment of the node (see <code class="prettyprint">Provider options</code> table below for more information)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>nickname</td>
|
||||
<td>A user-friendly name for the node cluster (<code class="prettyprint">name</code> by default)</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
<h3 id="node-cluster-states">Node Cluster states</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>State</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td>Init</td>
|
||||
<td>The node cluster has been created and has no deployed containers yet. Possible actions in this state: <code class="prettyprint">deploy</code>, <code class="prettyprint">terminate</code>.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Deploying</td>
|
||||
<td>All nodes in the cluster are either deployed or being deployed. No actions allowed in this state.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Deployed</td>
|
||||
<td>All nodes in the cluster are deployed and provisioned. Possible actions in this state: <code class="prettyprint">terminate</code>.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Partly deployed</td>
|
||||
<td>One or more nodes of the cluster are deployed and running. Possible actions in this state: <code class="prettyprint">terminate</code>.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Scaling</td>
|
||||
<td>The cluster is either deploying new nodes or terminating existing ones responding to a scaling request. No actions allowed in this state.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Terminating</td>
|
||||
<td>All nodes in the cluster are either being terminated or already terminated. No actions allowed in this state.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Terminated</td>
|
||||
<td>The node cluster and all its nodes have been terminated. No actions allowed in this state.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Empty cluster</td>
|
||||
<td>There are no nodes deployed in this cluster. Possible actions in this state: <code class="prettyprint">terminate</code>.</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
<h3 id="provider-options">Provider options</h3>
|
||||
|
||||
<p>You can specify the following options when using the Amazon Web Services provider:</p>
|
||||
|
||||
<ul>
|
||||
<li><code class="prettyprint">vpc</code>: VPC-related options (optional)
|
||||
|
||||
<ul>
|
||||
<li><code class="prettyprint">id</code>: AWS VPC identifier of the target VPC where the nodes of the cluster will be deployed (required)</li>
|
||||
<li><code class="prettyprint">subnets</code>: a list of target subnet indentifiers inside selected VPC. If you specify more than one subnet, Docker Cloud will balance among all of them following a high-availability schema (optional)</li>
|
||||
<li><code class="prettyprint">security_groups</code>: the security group that will be applied to every node of the cluster (optional)</li>
|
||||
</ul></li>
|
||||
<li><code class="prettyprint">iam</code>: IAM-related options (optional)
|
||||
|
||||
<ul>
|
||||
<li><code class="prettyprint">instance_profile_name</code>: name of the instance profile (container for instance an IAM role) to attach to every node of the cluster (required)</li>
|
||||
</ul></li>
|
||||
</ul>
|
||||
|
||||
<h2 id="list-all-node-clusters">List all node clusters</h2>
|
||||
<pre class="highlight python"><code><span class="kn">import</span> <span class="nn">dockercloud</span>
|
||||
|
||||
<span class="n">nodeclusters</span> <span class="o">=</span> <span class="n">dockercloud</span><span class="o">.</span><span class="n">NodeCluster</span><span class="o">.</span><span class="nb">list</span><span class="p">()</span>
|
||||
</code></pre>
|
||||
<pre class="highlight go"><code><span class="k">import</span><span class="x"> </span><span class="s">"github.com/docker/go-dockercloud/dockercloud"</span><span class="x">
|
||||
|
||||
</span><span class="n">nodeclusters</span><span class="p">,</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">:=</span><span class="x"> </span><span class="n">dockercloud</span><span class="o">.</span><span class="n">ListNodeClusters</span><span class="p">()</span><span class="x">
|
||||
|
||||
</span><span class="k">if</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">!=</span><span class="x"> </span><span class="no">nil</span><span class="x"> </span><span class="p">{</span><span class="x">
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">err</span><span class="p">)</span><span class="x">
|
||||
</span><span class="p">}</span><span class="x">
|
||||
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">nodeclusters</span><span class="p">)</span><span class="x">
|
||||
</span></code></pre>
|
||||
<pre class="highlight http"><code><span class="nf">GET</span> <span class="nn">/api/infra/v1/nodecluster/</span> <span class="k">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
||||
<span class="na">Host</span><span class="p">:</span> <span class="s">cloud.docker.com</span>
|
||||
<span class="na">Authorization</span><span class="p">:</span> <span class="s">Basic dXNlcm5hbWU6YXBpa2V5</span>
|
||||
<span class="na">Accept</span><span class="p">:</span> <span class="s">application/json</span>
|
||||
</code></pre>
|
||||
<pre class="highlight shell"><code>docker-cloud nodecluster ls
|
||||
</code></pre>
|
||||
|
||||
<p>Lists all current and recently terminated node clusters. Returns a list of <code class="prettyprint">NodeCluster</code> objects.</p>
|
||||
|
||||
<h3 id="endpoint-type">Endpoint Type</h3>
|
||||
|
||||
<p>Available in Docker Cloud’s <strong>REST API</strong></p>
|
||||
|
||||
<h3 id="http-request">HTTP Request</h3>
|
||||
|
||||
<p><code class="prettyprint">GET /api/infra/v1/nodecluster/</code></p>
|
||||
|
||||
<h3 id="query-parameters">Query Parameters</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>Parameter</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td>uuid</td>
|
||||
<td>Filter by UUID</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>state</td>
|
||||
<td>Filter by state. Possible values: <code class="prettyprint">Init</code>, <code class="prettyprint">Deploying</code>, <code class="prettyprint">Deployed</code>, <code class="prettyprint">Partly deployed</code>, <code class="prettyprint">Scaling</code>, <code class="prettyprint">Terminating</code>, <code class="prettyprint">Terminated</code>, <code class="prettyprint">Empty cluster</code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>name</td>
|
||||
<td>Filter by node cluster name</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>region</td>
|
||||
<td>Filter by resource URI of the target region</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>node_type</td>
|
||||
<td>Filter by resource URI of the target node type</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
<h2 id="create-a-new-node-cluster">Create a new node cluster</h2>
|
||||
<pre class="highlight python"><code><span class="kn">import</span> <span class="nn">dockercloud</span>
|
||||
|
||||
<span class="n">region</span> <span class="o">=</span> <span class="n">dockercloud</span><span class="o">.</span><span class="n">Region</span><span class="o">.</span><span class="n">fetch</span><span class="p">(</span><span class="s">"digitalocean/lon1"</span><span class="p">)</span>
|
||||
<span class="n">node_type</span> <span class="o">=</span> <span class="n">dockercloud</span><span class="o">.</span><span class="n">NodeType</span><span class="o">.</span><span class="n">fetch</span><span class="p">(</span><span class="s">"digitalocean/1gb"</span><span class="p">)</span>
|
||||
<span class="n">nodecluster</span> <span class="o">=</span> <span class="n">dockercloud</span><span class="o">.</span><span class="n">NodeCluster</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="s">"my_cluster"</span><span class="p">,</span> <span class="n">node_type</span><span class="o">=</span><span class="n">node_type</span><span class="p">,</span> <span class="n">region</span><span class="o">=</span><span class="n">region</span><span class="p">,</span> <span class="n">disk</span><span class="o">=</span><span class="mi">60</span><span class="p">)</span>
|
||||
<span class="n">nodecluster</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
|
||||
</code></pre>
|
||||
<pre class="highlight go"><code><span class="k">import</span><span class="x"> </span><span class="s">"github.com/docker/go-dockercloud/dockercloud"</span><span class="x">
|
||||
|
||||
</span><span class="n">nodecluster</span><span class="p">,</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">:=</span><span class="x"> </span><span class="n">dockercloud</span><span class="o">.</span><span class="n">CreateNodeCluster</span><span class="p">(</span><span class="n">dockercloud</span><span class="o">.</span><span class="n">NodeCreateRequest</span><span class="p">{</span><span class="n">Name</span><span class="o">:</span><span class="x"> </span><span class="s">"my_cluster"</span><span class="p">,</span><span class="x"> </span><span class="n">Region</span><span class="o">:</span><span class="x"> </span><span class="s">"/api/infra/v1/region/digitalocean/lon1/"</span><span class="p">,</span><span class="x"> </span><span class="n">NodeType</span><span class="o">:</span><span class="x"> </span><span class="s">"/api/infra/v1/nodetype/digitalocean/1gb/"</span><span class="p">,</span><span class="x"> </span><span class="n">Target_num_nodes</span><span class="o">:</span><span class="x"> </span><span class="m">2</span><span class="p">})</span><span class="x">
|
||||
|
||||
</span><span class="k">if</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">!=</span><span class="x"> </span><span class="no">nil</span><span class="x"> </span><span class="p">{</span><span class="x">
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">err</span><span class="p">)</span><span class="x">
|
||||
</span><span class="p">}</span><span class="x">
|
||||
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">nodecluster</span><span class="p">)</span><span class="x">
|
||||
</span></code></pre>
|
||||
<pre class="highlight http"><code><span class="nf">POST</span> <span class="nn">/api/infra/v1/nodecluster/</span> <span class="k">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
||||
<span class="na">Host</span><span class="p">:</span> <span class="s">cloud.docker.com</span>
|
||||
<span class="na">Authorization</span><span class="p">:</span> <span class="s">Basic dXNlcm5hbWU6YXBpa2V5</span>
|
||||
<span class="na">Accept</span><span class="p">:</span> <span class="s">application/json</span>
|
||||
<span class="na">Content-Type</span><span class="p">:</span> <span class="s">application/json</span>
|
||||
|
||||
<span class="p">{</span><span class="nt">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"my_cluster"</span><span class="p">,</span><span class="w"> </span><span class="nt">"region"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/api/infra/v1/region/digitalocean/lon1/"</span><span class="p">,</span><span class="w"> </span><span class="nt">"node_type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/api/infra/v1/nodetype/digitalocean/1gb/"</span><span class="p">,</span><span class="w"> </span><span class="nt">"disk"</span><span class="p">:</span><span class="w"> </span><span class="mi">60</span><span class="p">}</span><span class="w">
|
||||
</span></code></pre>
|
||||
<pre class="highlight shell"><code>docker-cloud nodecluster create my_cluster digitalocean lon1 1gb
|
||||
</code></pre>
|
||||
|
||||
<p>Creates a new node cluster without deploying it.</p>
|
||||
|
||||
<h3 id="endpoint-type">Endpoint Type</h3>
|
||||
|
||||
<p>Available in Docker Cloud’s <strong>REST API</strong></p>
|
||||
|
||||
<h3 id="http-request">HTTP Request</h3>
|
||||
|
||||
<p><code class="prettyprint">POST /api/infra/v1/nodecluster/</code></p>
|
||||
|
||||
<h3 id="json-parameters">JSON Parameters</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>Parameter</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td>name</td>
|
||||
<td>(required) A user provided name for the node cluster</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>node_type</td>
|
||||
<td>(required) The resource URI of the node type to be used for the node cluster</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>region</td>
|
||||
<td>(required) The resource URI of the region where the node cluster is to be deployed</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>disk</td>
|
||||
<td>(optional) The size of the volume to create where images and containers will be stored, in GB (default: <code class="prettyprint">60</code>). Not available for Digital Ocean. To create Softlayer nodes you must select one of the following sizes (in GBs): 10, 20, 25, 30, 40, 50, 75, 100, 125, 150, 175, 200, 250, 300, 350, 400, 500, 750, 1000, 1500 or 2000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>nickname</td>
|
||||
<td>(optional) A user-friendly name for the node cluster (<code class="prettyprint">name</code> by default)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>target_num_nodes</td>
|
||||
<td>(optional) The desired number of nodes for the node cluster (default: <code class="prettyprint">1</code>)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>tags</td>
|
||||
<td>(optional) List of tags of the node cluster to be used when deploying services see <a href="../../docker-cloud/apps/deploy-tags/">Tags</a> for more information) (default: <code class="prettyprint">[]</code>)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>provider_options</td>
|
||||
<td>Provider-specific extra options for the deployment of the node (see table <code class="prettyprint">Provider options</code> above for more information)</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
<h2 id="get-an-existing-node-cluster">Get an existing node cluster</h2>
|
||||
<pre class="highlight python"><code><span class="kn">import</span> <span class="nn">dockercloud</span>
|
||||
|
||||
<span class="n">service</span> <span class="o">=</span> <span class="n">dockercloud</span><span class="o">.</span><span class="n">NodeCluster</span><span class="o">.</span><span class="n">fetch</span><span class="p">(</span><span class="s">"7eaf7fff-882c-4f3d-9a8f-a22317ac00ce"</span><span class="p">)</span>
|
||||
</code></pre>
|
||||
<pre class="highlight go"><code><span class="k">import</span><span class="x"> </span><span class="s">"github.com/docker/go-dockercloud/dockercloud"</span><span class="x">
|
||||
|
||||
</span><span class="n">nodecluster</span><span class="p">,</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">:=</span><span class="x"> </span><span class="n">dockercloud</span><span class="o">.</span><span class="n">GetNodeCluster</span><span class="p">(</span><span class="s">"7eaf7fff-882c-4f3d-9a8f-a22317ac00ce"</span><span class="p">)</span><span class="x">
|
||||
|
||||
</span><span class="k">if</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">!=</span><span class="x"> </span><span class="no">nil</span><span class="x"> </span><span class="p">{</span><span class="x">
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">err</span><span class="p">)</span><span class="x">
|
||||
</span><span class="p">}</span><span class="x">
|
||||
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">nodecluster</span><span class="p">)</span><span class="x">
|
||||
</span></code></pre>
|
||||
<pre class="highlight http"><code><span class="nf">GET</span> <span class="nn">/api/infra/v1/nodecluster/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/</span> <span class="k">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
||||
<span class="na">Host</span><span class="p">:</span> <span class="s">cloud.docker.com</span>
|
||||
<span class="na">Authorization</span><span class="p">:</span> <span class="s">Basic dXNlcm5hbWU6YXBpa2V5</span>
|
||||
<span class="na">Accept</span><span class="p">:</span> <span class="s">application/json</span>
|
||||
</code></pre>
|
||||
<pre class="highlight shell"><code>docker-cloud nodecluster inspect 7eaf7fff
|
||||
</code></pre>
|
||||
|
||||
<p>Get all the details of an specific node cluster</p>
|
||||
|
||||
<h3 id="endpoint-type">Endpoint Type</h3>
|
||||
|
||||
<p>Available in Docker Cloud’s <strong>REST API</strong></p>
|
||||
|
||||
<h3 id="http-request">HTTP Request</h3>
|
||||
|
||||
<p><code class="prettyprint">GET /api/infra/v1/nodecluster/(uuid)/</code></p>
|
||||
|
||||
<h3 id="path-parameters">Path Parameters</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>Parameter</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td>uuid</td>
|
||||
<td>The UUID of the node cluster to retrieve</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
<h2 id="deploy-a-node-cluster">Deploy a node cluster</h2>
|
||||
<pre class="highlight python"><code><span class="kn">import</span> <span class="nn">dockercloud</span>
|
||||
|
||||
<span class="n">nodecluster</span> <span class="o">=</span> <span class="n">dockercloud</span><span class="o">.</span><span class="n">NodeCluster</span><span class="o">.</span><span class="n">fetch</span><span class="p">(</span><span class="s">"7eaf7fff-882c-4f3d-9a8f-a22317ac00ce"</span><span class="p">)</span>
|
||||
<span class="n">nodecluster</span><span class="o">.</span><span class="n">deploy</span><span class="p">()</span>
|
||||
</code></pre>
|
||||
<pre class="highlight go"><code><span class="k">import</span><span class="x"> </span><span class="s">"github.com/docker/go-dockercloud/dockercloud"</span><span class="x">
|
||||
|
||||
</span><span class="n">nodecluster</span><span class="p">,</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">:=</span><span class="x"> </span><span class="n">dockercloud</span><span class="o">.</span><span class="n">GetNodeCluster</span><span class="p">(</span><span class="s">"7eaf7fff-882c-4f3d-9a8f-a22317ac00ce"</span><span class="p">)</span><span class="x">
|
||||
|
||||
</span><span class="k">if</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">!=</span><span class="x"> </span><span class="no">nil</span><span class="x"> </span><span class="p">{</span><span class="x">
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">err</span><span class="p">)</span><span class="x">
|
||||
</span><span class="p">}</span><span class="x">
|
||||
|
||||
</span><span class="k">if</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">=</span><span class="x"> </span><span class="n">nodecluster</span><span class="o">.</span><span class="n">Deploy</span><span class="p">();</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">!=</span><span class="x"> </span><span class="no">nil</span><span class="x"> </span><span class="p">{</span><span class="x">
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">err</span><span class="p">)</span><span class="x">
|
||||
</span><span class="p">}</span><span class="x">
|
||||
</span></code></pre>
|
||||
<pre class="highlight http"><code><span class="nf">POST</span> <span class="nn">/api/infra/v1/nodecluster/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/deploy/</span> <span class="k">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
||||
<span class="na">Host</span><span class="p">:</span> <span class="s">cloud.docker.com</span>
|
||||
<span class="na">Authorization</span><span class="p">:</span> <span class="s">Basic dXNlcm5hbWU6YXBpa2V5</span>
|
||||
<span class="na">Accept</span><span class="p">:</span> <span class="s">application/json</span>
|
||||
</code></pre>
|
||||
|
||||
<p>Deploys and provisions a recently created node cluster in the specified region and cloud provider.</p>
|
||||
|
||||
<h3 id="endpoint-type">Endpoint Type</h3>
|
||||
|
||||
<p>Available in Docker Cloud’s <strong>REST API</strong></p>
|
||||
|
||||
<h3 id="http-request">HTTP Request</h3>
|
||||
|
||||
<p><code class="prettyprint">POST /api/infra/v1/nodecluster/(uuid)/deploy/</code></p>
|
||||
|
||||
<h3 id="path-parameters">Path Parameters</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>Parameter</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td>uuid</td>
|
||||
<td>The UUID of the node cluster to deploy</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
<h2 id="update-an-existing-node-cluster">Update an existing node cluster</h2>
|
||||
<pre class="highlight python"><code><span class="kn">import</span> <span class="nn">dockercloud</span>
|
||||
|
||||
<span class="n">nodecluster</span> <span class="o">=</span> <span class="n">dockercloud</span><span class="o">.</span><span class="n">NodeCluster</span><span class="o">.</span><span class="n">fetch</span><span class="p">(</span><span class="s">"7eaf7fff-882c-4f3d-9a8f-a22317ac00ce"</span><span class="p">)</span>
|
||||
<span class="n">nodecluster</span><span class="o">.</span><span class="n">target_num_nodes</span> <span class="o">=</span> <span class="mi">3</span>
|
||||
<span class="n">nodecluster</span><span class="o">.</span><span class="n">tags</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="s">"tag-1"</span><span class="p">)</span>
|
||||
<span class="n">nodecluster</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
|
||||
</code></pre>
|
||||
<pre class="highlight go"><code><span class="k">import</span><span class="x"> </span><span class="s">"github.com/docker/go-dockercloud/dockercloud"</span><span class="x">
|
||||
|
||||
</span><span class="n">nodecluster</span><span class="p">,</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">:=</span><span class="x"> </span><span class="n">dockercloud</span><span class="o">.</span><span class="n">GetNodeCluster</span><span class="p">(</span><span class="s">"7eaf7fff-882c-4f3d-9a8f-a22317ac00ce"</span><span class="p">)</span><span class="x">
|
||||
|
||||
</span><span class="k">if</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">!=</span><span class="x"> </span><span class="no">nil</span><span class="x"> </span><span class="p">{</span><span class="x">
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">err</span><span class="p">)</span><span class="x">
|
||||
</span><span class="p">}</span><span class="x">
|
||||
|
||||
</span><span class="k">if</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">=</span><span class="x"> </span><span class="n">nodecluster</span><span class="o">.</span><span class="n">Update</span><span class="p">(</span><span class="n">dockercloud</span><span class="o">.</span><span class="n">NodeCreateRequest</span><span class="p">{</span><span class="n">Target_num_nodes</span><span class="o">:</span><span class="x"> </span><span class="m">4</span><span class="p">});</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">!=</span><span class="x"> </span><span class="no">nil</span><span class="x"> </span><span class="p">{</span><span class="x">
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">err</span><span class="p">)</span><span class="x">
|
||||
</span><span class="p">}</span><span class="x">
|
||||
</span></code></pre>
|
||||
<pre class="highlight http"><code><span class="nf">PATCH</span> <span class="nn">/api/infra/v1/nodecluster/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/</span> <span class="k">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
||||
<span class="na">Host</span><span class="p">:</span> <span class="s">cloud.docker.com</span>
|
||||
<span class="na">Authorization</span><span class="p">:</span> <span class="s">Basic dXNlcm5hbWU6YXBpa2V5</span>
|
||||
<span class="na">Accept</span><span class="p">:</span> <span class="s">application/json</span>
|
||||
<span class="na">Content-Type</span><span class="p">:</span> <span class="s">application/json</span>
|
||||
|
||||
<span class="p">{</span><span class="nt">"target_num_nodes"</span><span class="p">:</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w"> </span><span class="nt">"tags"</span><span class="p">:</span><span class="w"> </span><span class="p">[{</span><span class="nt">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"tag-1"</span><span class="p">}]}</span><span class="w">
|
||||
</span></code></pre>
|
||||
<pre class="highlight shell"><code>docker-cloud nodecluster scale 7eaf7fff 3
|
||||
docker-cloud tag add -t tag-1 7eaf7fff
|
||||
docker-cloud tag <span class="nb">set</span> -t tag-2 7eaf7fff
|
||||
</code></pre>
|
||||
|
||||
<p>Updates the node cluster details and applies the changes automatically.</p>
|
||||
|
||||
<h3 id="endpoint-type">Endpoint Type</h3>
|
||||
|
||||
<p>Available in Docker Cloud’s <strong>REST API</strong></p>
|
||||
|
||||
<h3 id="http-request">HTTP Request</h3>
|
||||
|
||||
<p><code class="prettyprint">PATCH /api/infra/v1/nodecluster/(uuid)/</code></p>
|
||||
|
||||
<h3 id="path-parameters">Path Parameters</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>Parameter</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td>uuid</td>
|
||||
<td>The UUID of the node cluster to update</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
<h3 id="json-parameters">JSON Parameters</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>Parameter</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td>target_num_nodes</td>
|
||||
<td>(optional) The number of nodes to scale this node cluster to</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>tags</td>
|
||||
<td>(optional) List of tags the node cluster (and nodes within the node cluster) will have. This operation replaces the user tag list.</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
<h2 id="terminate-a-node-cluster">Terminate a node cluster</h2>
|
||||
<pre class="highlight python"><code><span class="kn">import</span> <span class="nn">dockercloud</span>
|
||||
|
||||
<span class="n">nodecluster</span> <span class="o">=</span> <span class="n">dockercloud</span><span class="o">.</span><span class="n">NodeCluster</span><span class="o">.</span><span class="n">fetch</span><span class="p">(</span><span class="s">"7eaf7fff-882c-4f3d-9a8f-a22317ac00ce"</span><span class="p">)</span>
|
||||
<span class="n">nodecluster</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span>
|
||||
</code></pre>
|
||||
<pre class="highlight go"><code><span class="k">import</span><span class="x"> </span><span class="s">"github.com/docker/go-dockercloud/dockercloud"</span><span class="x">
|
||||
|
||||
</span><span class="n">nodecluster</span><span class="p">,</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">:=</span><span class="x"> </span><span class="n">dockercloud</span><span class="o">.</span><span class="n">GetNodeCluster</span><span class="p">(</span><span class="s">"7eaf7fff-882c-4f3d-9a8f-a22317ac00ce"</span><span class="p">)</span><span class="x">
|
||||
|
||||
</span><span class="k">if</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">!=</span><span class="x"> </span><span class="no">nil</span><span class="x"> </span><span class="p">{</span><span class="x">
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">err</span><span class="p">)</span><span class="x">
|
||||
</span><span class="p">}</span><span class="x">
|
||||
|
||||
</span><span class="k">if</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">=</span><span class="x"> </span><span class="n">nodecluster</span><span class="o">.</span><span class="n">Terminate</span><span class="p">();</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">!=</span><span class="x"> </span><span class="no">nil</span><span class="x"> </span><span class="p">{</span><span class="x">
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">err</span><span class="p">)</span><span class="x">
|
||||
</span><span class="p">}</span><span class="x">
|
||||
</span></code></pre>
|
||||
<pre class="highlight http"><code><span class="nf">DELETE</span> <span class="nn">/api/infra/v1/nodecluster/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/</span> <span class="k">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
||||
<span class="na">Host</span><span class="p">:</span> <span class="s">cloud.docker.com</span>
|
||||
<span class="na">Authorization</span><span class="p">:</span> <span class="s">Basic dXNlcm5hbWU6YXBpa2V5</span>
|
||||
<span class="na">Accept</span><span class="p">:</span> <span class="s">application/json</span>
|
||||
</code></pre>
|
||||
<pre class="highlight shell"><code>dockercloud nodecluster rm 7eaf7fff
|
||||
</code></pre>
|
||||
|
||||
<p>Terminates all the nodes in a node cluster and the node cluster itself. This is not reversible.</p>
|
||||
|
||||
<h3 id="endpoint-type">Endpoint Type</h3>
|
||||
|
||||
<p>Available in Docker Cloud’s <strong>REST API</strong></p>
|
||||
|
||||
<h3 id="http-request">HTTP Request</h3>
|
||||
|
||||
<p><code class="prettyprint">DELETE /api/infra/v1/nodecluster/(uuid)/</code></p>
|
||||
|
||||
<h3 id="path-parameters">Path Parameters</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>Parameter</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td>uuid</td>
|
||||
<td>The UUID of the node cluster to terminate</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
</div>
|
||||
<div class="dark-box">
|
||||
</div>
|
||||
</div>
|
||||
<div class="google-analytics">
|
||||
<!-- Google Tag Manager -->
|
||||
<noscript>
|
||||
<iframe src="//www.googletagmanager.com/ns.html?id=GTM-WLGFZV"
|
||||
height="0" width="0" style="display:none;visibility:hidden"></iframe>
|
||||
</noscript>
|
||||
<script>
|
||||
(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
|
||||
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
|
||||
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
|
||||
'//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
|
||||
})(window,document,'script','dataLayer','GTM-WLGFZV');
|
||||
</script>
|
||||
<!-- End Google Tag Manager -->
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,222 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||
<title>API Documentation</title>
|
||||
|
||||
<link href="../stylesheets/screen.css" rel="stylesheet" type="text/css" media="screen" />
|
||||
<link href="../stylesheets/print.css" rel="stylesheet" type="text/css" media="print" />
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
|
||||
<script src="../javascripts/all_nosearch.js" type="text/javascript"></script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="includes includes_nodetype">
|
||||
<a href="#" id="nav-button">
|
||||
<span>
|
||||
NAV
|
||||
<img src="../images/navbar.png" />
|
||||
</span>
|
||||
</a>
|
||||
<div class="tocify-wrapper">
|
||||
<img src="../images/logo.png" />
|
||||
<div id="toc">
|
||||
</div>
|
||||
</div>
|
||||
<div class="page-wrapper">
|
||||
<div class="dark-box"></div>
|
||||
<div class="content">
|
||||
<h1 id="node-types">Node Types</h1>
|
||||
|
||||
<h2 id="node-type">Node Type</h2>
|
||||
|
||||
<blockquote>
|
||||
<p>Example</p>
|
||||
</blockquote>
|
||||
<pre class="highlight json"><code><span class="p">{</span><span class="w">
|
||||
</span><span class="nt">"availability_zones"</span><span class="p">:</span><span class="w"> </span><span class="p">[],</span><span class="w">
|
||||
</span><span class="nt">"available"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"label"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1GB"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1gb"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"provider"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/api/infra/v1/provider/digitalocean/"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"regions"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
|
||||
</span><span class="s2">"/api/infra/v1/region/digitalocean/ams1/"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="s2">"/api/infra/v1/region/digitalocean/sfo1/"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="s2">"/api/infra/v1/region/digitalocean/nyc2/"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="s2">"/api/infra/v1/region/digitalocean/ams2/"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="s2">"/api/infra/v1/region/digitalocean/sgp1/"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="s2">"/api/infra/v1/region/digitalocean/lon1/"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="s2">"/api/infra/v1/region/digitalocean/nyc3/"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="s2">"/api/infra/v1/region/digitalocean/nyc1/"</span><span class="w">
|
||||
</span><span class="p">],</span><span class="w">
|
||||
</span><span class="nt">"resource_uri"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/api/infra/v1/nodetype/digitalocean/1gb/"</span><span class="w">
|
||||
</span><span class="p">}</span><span class="w">
|
||||
</span></code></pre>
|
||||
|
||||
<p>A node type is a representation of an instance size supported by a certain cloud provider in a certain region and/or availability zone.</p>
|
||||
|
||||
<h3 id="attributes">Attributes</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>Attribute</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td>resource_uri</td>
|
||||
<td>A unique API endpoint that represents the node type</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>name</td>
|
||||
<td>An identifier for the node type</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>label</td>
|
||||
<td>A user-friendly name for the node type</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>regions</td>
|
||||
<td>A list of resource URIs of the regions to which this node type can be deployed to</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>availability_zones</td>
|
||||
<td>A list of resource URIs of the availability zones to which this node type can be deployed to</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>provider</td>
|
||||
<td>The resource URI of the provider of the node type</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>available</td>
|
||||
<td>Whether the node type is currently available for new node deployments</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
<h2 id="list-all-node-types">List all node types</h2>
|
||||
<pre class="highlight python"><code><span class="kn">import</span> <span class="nn">dockercloud</span>
|
||||
|
||||
<span class="n">nodetypes</span> <span class="o">=</span> <span class="n">dockercloud</span><span class="o">.</span><span class="n">NodeType</span><span class="o">.</span><span class="nb">list</span><span class="p">()</span>
|
||||
</code></pre>
|
||||
<pre class="highlight go"><code><span class="k">import</span><span class="x"> </span><span class="s">"github.com/docker/go-dockercloud/dockercloud"</span><span class="x">
|
||||
|
||||
</span><span class="n">nodetypeList</span><span class="p">,</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">:=</span><span class="x"> </span><span class="n">dockercloud</span><span class="o">.</span><span class="n">ListNodeTypes</span><span class="p">()</span><span class="x">
|
||||
|
||||
</span><span class="k">if</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">!=</span><span class="x"> </span><span class="no">nil</span><span class="x"> </span><span class="p">{</span><span class="x">
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">err</span><span class="p">)</span><span class="x">
|
||||
</span><span class="p">}</span><span class="x">
|
||||
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">nodetypeList</span><span class="p">)</span><span class="x">
|
||||
</span></code></pre>
|
||||
<pre class="highlight http"><code><span class="nf">GET</span> <span class="nn">/api/infra/v1/nodetype/</span> <span class="k">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
||||
<span class="na">Host</span><span class="p">:</span> <span class="s">cloud.docker.com</span>
|
||||
<span class="na">Authorization</span><span class="p">:</span> <span class="s">Basic dXNlcm5hbWU6YXBpa2V5</span>
|
||||
<span class="na">Accept</span><span class="p">:</span> <span class="s">application/json</span>
|
||||
</code></pre>
|
||||
<pre class="highlight shell"><code>docker-cloud nodecluster nodetype
|
||||
</code></pre>
|
||||
|
||||
<p>Lists all node types of all supported cloud providers. Returns a list of <code class="prettyprint">NodeType</code> objects.</p>
|
||||
|
||||
<h3 id="endpoint-type">Endpoint Type</h3>
|
||||
|
||||
<p>Available in Docker Cloud’s <strong>REST API</strong></p>
|
||||
|
||||
<h3 id="http-request">HTTP Request</h3>
|
||||
|
||||
<p><code class="prettyprint">GET /api/infra/v1/nodetype/</code></p>
|
||||
|
||||
<h3 id="query-parameters">Query Parameters</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>Parameter</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td>name</td>
|
||||
<td>Filter by node type name</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>regions</td>
|
||||
<td>Filter by resource URI of the target regions</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>availability_zones</td>
|
||||
<td>Filter by resource URI of the target availability zones</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
<h2 id="get-an-individual-node-type">Get an individual node type</h2>
|
||||
<pre class="highlight python"><code><span class="kn">import</span> <span class="nn">dockercloud</span>
|
||||
|
||||
<span class="n">nodetype</span> <span class="o">=</span> <span class="n">dockercloud</span><span class="o">.</span><span class="n">NodeType</span><span class="o">.</span><span class="n">fetch</span><span class="p">(</span><span class="s">"digitalocean/1gb"</span><span class="p">)</span>
|
||||
</code></pre>
|
||||
<pre class="highlight go"><code><span class="k">import</span><span class="x"> </span><span class="s">"github.com/docker/go-dockercloud/dockercloud"</span><span class="x">
|
||||
|
||||
</span><span class="n">nodetype</span><span class="p">,</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">:=</span><span class="x"> </span><span class="n">dockercloud</span><span class="o">.</span><span class="n">GetNodeType</span><span class="p">(</span><span class="s">"digitalocean"</span><span class="p">,</span><span class="s">"1gb"</span><span class="p">)</span><span class="x">
|
||||
|
||||
</span><span class="k">if</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">!=</span><span class="x"> </span><span class="no">nil</span><span class="x"> </span><span class="p">{</span><span class="x">
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">err</span><span class="p">)</span><span class="x">
|
||||
</span><span class="p">}</span><span class="x">
|
||||
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">nodetype</span><span class="p">)</span><span class="x">
|
||||
</span></code></pre>
|
||||
<pre class="highlight http"><code><span class="nf">GET</span> <span class="nn">/api/infra/v1/nodetype/digitalocean/1gb/</span> <span class="k">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
||||
<span class="na">Host</span><span class="p">:</span> <span class="s">cloud.docker.com</span>
|
||||
<span class="na">Authorization</span><span class="p">:</span> <span class="s">Basic dXNlcm5hbWU6YXBpa2V5</span>
|
||||
<span class="na">Accept</span><span class="p">:</span> <span class="s">application/json</span>
|
||||
</code></pre>
|
||||
|
||||
<p>Get all the details of a specific node type</p>
|
||||
|
||||
<h3 id="endpoint-type">Endpoint Type</h3>
|
||||
|
||||
<p>Available in Docker Cloud’s <strong>REST API</strong></p>
|
||||
|
||||
<h3 id="http-request">HTTP Request</h3>
|
||||
|
||||
<p><code class="prettyprint">GET /api/infra/v1/nodetype/(provider.name)/(name)/</code></p>
|
||||
|
||||
<h3 id="path-parameters">Path Parameters</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>Parameter</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td>name</td>
|
||||
<td>The name of the node type to retrieve</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>provider.name</td>
|
||||
<td>The name of the provider of the node type</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
</div>
|
||||
<div class="dark-box">
|
||||
</div>
|
||||
</div>
|
||||
<div class="google-analytics">
|
||||
<!-- Google Tag Manager -->
|
||||
<noscript>
|
||||
<iframe src="//www.googletagmanager.com/ns.html?id=GTM-WLGFZV"
|
||||
height="0" width="0" style="display:none;visibility:hidden"></iframe>
|
||||
</noscript>
|
||||
<script>
|
||||
(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
|
||||
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
|
||||
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
|
||||
'//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
|
||||
})(window,document,'script','dataLayer','GTM-WLGFZV');
|
||||
</script>
|
||||
<!-- End Google Tag Manager -->
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,201 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||
<title>API Documentation</title>
|
||||
|
||||
<link href="../stylesheets/screen.css" rel="stylesheet" type="text/css" media="screen" />
|
||||
<link href="../stylesheets/print.css" rel="stylesheet" type="text/css" media="print" />
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
|
||||
<script src="../javascripts/all_nosearch.js" type="text/javascript"></script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="includes includes_provider">
|
||||
<a href="#" id="nav-button">
|
||||
<span>
|
||||
NAV
|
||||
<img src="../images/navbar.png" />
|
||||
</span>
|
||||
</a>
|
||||
<div class="tocify-wrapper">
|
||||
<img src="../images/logo.png" />
|
||||
<div id="toc">
|
||||
</div>
|
||||
</div>
|
||||
<div class="page-wrapper">
|
||||
<div class="dark-box"></div>
|
||||
<div class="content">
|
||||
<h1 id="providers">Providers</h1>
|
||||
|
||||
<h2 id="provider">Provider</h2>
|
||||
|
||||
<blockquote>
|
||||
<p>Example</p>
|
||||
</blockquote>
|
||||
<pre class="highlight json"><code><span class="p">{</span><span class="w">
|
||||
</span><span class="nt">"available"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"label"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Digital Ocean"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"digitalocean"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"regions"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
|
||||
</span><span class="s2">"/api/infra/v1/region/digitalocean/ams1/"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="s2">"/api/infra/v1/region/digitalocean/ams2/"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="s2">"/api/infra/v1/region/digitalocean/ams3/"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="s2">"/api/infra/v1/region/digitalocean/lon1/"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="s2">"/api/infra/v1/region/digitalocean/nyc1/"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="s2">"/api/infra/v1/region/digitalocean/nyc2/"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="s2">"/api/infra/v1/region/digitalocean/nyc3/"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="s2">"/api/infra/v1/region/digitalocean/sfo1/"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="s2">"/api/infra/v1/region/digitalocean/sgp1/"</span><span class="w">
|
||||
</span><span class="p">],</span><span class="w">
|
||||
</span><span class="nt">"resource_uri"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/api/infra/v1/provider/digitalocean/"</span><span class="w">
|
||||
</span><span class="p">}</span><span class="w">
|
||||
</span></code></pre>
|
||||
|
||||
<p>A provider is a representation of a cloud provider supported by Docker Cloud. Providers have one or more regions where nodes are deployed.</p>
|
||||
|
||||
<h3 id="attributes">Attributes</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>Attribute</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td>resource_uri</td>
|
||||
<td>A unique API endpoint that represents the provider</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>name</td>
|
||||
<td>A unique identifier for the provider</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>label</td>
|
||||
<td>A user-friendly name for the provider</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>regions</td>
|
||||
<td>A list of resource URIs of the regions available in this provider</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>available</td>
|
||||
<td>Whether the provider is currently available for new node deployments</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
<h2 id="list-all-providers">List all providers</h2>
|
||||
<pre class="highlight python"><code><span class="kn">import</span> <span class="nn">dockercloud</span>
|
||||
|
||||
<span class="n">providers</span> <span class="o">=</span> <span class="n">dockercloud</span><span class="o">.</span><span class="n">Provider</span><span class="o">.</span><span class="nb">list</span><span class="p">()</span>
|
||||
</code></pre>
|
||||
<pre class="highlight http"><code><span class="nf">GET</span> <span class="nn">/api/infra/v1/provider/</span> <span class="k">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
||||
<span class="na">Host</span><span class="p">:</span> <span class="s">cloud.docker.com</span>
|
||||
<span class="na">Authorization</span><span class="p">:</span> <span class="s">Basic dXNlcm5hbWU6YXBpa2V5</span>
|
||||
<span class="na">Accept</span><span class="p">:</span> <span class="s">application/json</span>
|
||||
</code></pre>
|
||||
<pre class="highlight go"><code><span class="k">import</span><span class="x"> </span><span class="s">"github.com/docker/go-dockercloud/dockercloud"</span><span class="x">
|
||||
|
||||
</span><span class="n">providerList</span><span class="p">,</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">:=</span><span class="x"> </span><span class="n">dockercloud</span><span class="o">.</span><span class="n">ListProviders</span><span class="p">()</span><span class="x">
|
||||
|
||||
</span><span class="k">if</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">!=</span><span class="x"> </span><span class="no">nil</span><span class="x"> </span><span class="p">{</span><span class="x">
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">err</span><span class="p">)</span><span class="x">
|
||||
</span><span class="p">}</span><span class="x">
|
||||
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">providerList</span><span class="p">)</span><span class="x">
|
||||
</span></code></pre>
|
||||
<pre class="highlight shell"><code>docker-cloud nodecluster provider
|
||||
</code></pre>
|
||||
|
||||
<p>Lists all supported cloud providers. Returns a list of <code class="prettyprint">Provider</code> objects.</p>
|
||||
|
||||
<h3 id="endpoint-type">Endpoint Type</h3>
|
||||
|
||||
<p>Available in Docker Cloud’s <strong>REST API</strong></p>
|
||||
|
||||
<h3 id="http-request">HTTP Request</h3>
|
||||
|
||||
<p><code class="prettyprint">GET /api/infra/v1/provider/</code></p>
|
||||
|
||||
<h3 id="query-parameters">Query Parameters</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>Parameter</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td>name</td>
|
||||
<td>Filter by provider name</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
<h2 id="get-an-individual-provider">Get an individual provider</h2>
|
||||
<pre class="highlight python"><code><span class="kn">import</span> <span class="nn">dockercloud</span>
|
||||
|
||||
<span class="n">provider</span> <span class="o">=</span> <span class="n">dockercloud</span><span class="o">.</span><span class="n">Provider</span><span class="o">.</span><span class="n">fetch</span><span class="p">(</span><span class="s">"digitalocean"</span><span class="p">)</span>
|
||||
</code></pre>
|
||||
<pre class="highlight go"><code><span class="k">import</span><span class="x"> </span><span class="s">"github.com/docker/go-dockercloud/dockercloud"</span><span class="x">
|
||||
|
||||
</span><span class="n">provider</span><span class="p">,</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">:=</span><span class="x"> </span><span class="n">dockercloud</span><span class="o">.</span><span class="n">GetProvider</span><span class="p">(</span><span class="s">"digitalocean"</span><span class="p">)</span><span class="x">
|
||||
|
||||
</span><span class="k">if</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">!=</span><span class="x"> </span><span class="no">nil</span><span class="x"> </span><span class="p">{</span><span class="x">
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">err</span><span class="p">)</span><span class="x">
|
||||
</span><span class="p">}</span><span class="x">
|
||||
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">provider</span><span class="p">)</span><span class="x">
|
||||
</span></code></pre>
|
||||
<pre class="highlight http"><code><span class="nf">GET</span> <span class="nn">/api/infra/v1/provider/digitalocean/</span> <span class="k">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
||||
<span class="na">Host</span><span class="p">:</span> <span class="s">cloud.docker.com</span>
|
||||
<span class="na">Authorization</span><span class="p">:</span> <span class="s">Basic dXNlcm5hbWU6YXBpa2V5</span>
|
||||
<span class="na">Accept</span><span class="p">:</span> <span class="s">application/json</span>
|
||||
</code></pre>
|
||||
|
||||
<p>Get all the details of a specific provider</p>
|
||||
|
||||
<h3 id="endpoint-type">Endpoint Type</h3>
|
||||
|
||||
<p>Available in Docker Cloud’s <strong>REST API</strong></p>
|
||||
|
||||
<h3 id="http-request">HTTP Request</h3>
|
||||
|
||||
<p><code class="prettyprint">GET /api/infra/v1/provider/(name)/</code></p>
|
||||
|
||||
<h3 id="path-parameters">Path Parameters</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>Parameter</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td>name</td>
|
||||
<td>The name of the provider to retrieve</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
</div>
|
||||
<div class="dark-box">
|
||||
</div>
|
||||
</div>
|
||||
<div class="google-analytics">
|
||||
<!-- Google Tag Manager -->
|
||||
<noscript>
|
||||
<iframe src="//www.googletagmanager.com/ns.html?id=GTM-WLGFZV"
|
||||
height="0" width="0" style="display:none;visibility:hidden"></iframe>
|
||||
</noscript>
|
||||
<script>
|
||||
(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
|
||||
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
|
||||
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
|
||||
'//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
|
||||
})(window,document,'script','dataLayer','GTM-WLGFZV');
|
||||
</script>
|
||||
<!-- End Google Tag Manager -->
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,218 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||
<title>API Documentation</title>
|
||||
|
||||
<link href="../stylesheets/screen.css" rel="stylesheet" type="text/css" media="screen" />
|
||||
<link href="../stylesheets/print.css" rel="stylesheet" type="text/css" media="print" />
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
|
||||
<script src="../javascripts/all_nosearch.js" type="text/javascript"></script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="includes includes_region">
|
||||
<a href="#" id="nav-button">
|
||||
<span>
|
||||
NAV
|
||||
<img src="../images/navbar.png" />
|
||||
</span>
|
||||
</a>
|
||||
<div class="tocify-wrapper">
|
||||
<img src="../images/logo.png" />
|
||||
<div id="toc">
|
||||
</div>
|
||||
</div>
|
||||
<div class="page-wrapper">
|
||||
<div class="dark-box"></div>
|
||||
<div class="content">
|
||||
<h1 id="regions">Regions</h1>
|
||||
|
||||
<h2 id="region">Region</h2>
|
||||
|
||||
<blockquote>
|
||||
<p>Example</p>
|
||||
</blockquote>
|
||||
<pre class="highlight json"><code><span class="p">{</span><span class="w">
|
||||
</span><span class="nt">"availability_zones"</span><span class="p">:</span><span class="w"> </span><span class="p">[],</span><span class="w">
|
||||
</span><span class="nt">"available"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"label"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Amsterdam 2"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"ams2"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"node_types"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
|
||||
</span><span class="s2">"/api/infra/v1/nodetype/digitalocean/1gb/"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="s2">"/api/infra/v1/nodetype/digitalocean/2gb/"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="s2">"/api/infra/v1/nodetype/digitalocean/4gb/"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="s2">"/api/infra/v1/nodetype/digitalocean/8gb/"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="s2">"/api/infra/v1/nodetype/digitalocean/16gb/"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="s2">"/api/infra/v1/nodetype/digitalocean/32gb/"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="s2">"/api/infra/v1/nodetype/digitalocean/48gb/"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="s2">"/api/infra/v1/nodetype/digitalocean/64gb/"</span><span class="w">
|
||||
</span><span class="p">],</span><span class="w">
|
||||
</span><span class="nt">"provider"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/api/infra/v1/provider/digitalocean/"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"resource_uri"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/api/infra/v1/region/digitalocean/ams2/"</span><span class="w">
|
||||
</span><span class="p">}</span><span class="w">
|
||||
</span></code></pre>
|
||||
|
||||
<p>A region is a representation of an entire or a subset of a data center of a cloud provider. It can contain availability zones (depending on the provider) and one or more node types.</p>
|
||||
|
||||
<h3 id="attributes">Attributes</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>Attribute</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td>resource_uri</td>
|
||||
<td>A unique API endpoint that represents the region</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>name</td>
|
||||
<td>An identifier for the region</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>label</td>
|
||||
<td>A user-friendly name for the region</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>node_types</td>
|
||||
<td>A list of resource URIs of the node types available in the region</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>availability_zones</td>
|
||||
<td>A list of resource URIs of the availability zones available in the region</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>provider</td>
|
||||
<td>The resource URI of the provider of the region</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>available</td>
|
||||
<td>Whether the region is currently available for new node deployments</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
<h2 id="list-all-regions">List all regions</h2>
|
||||
<pre class="highlight python"><code><span class="kn">import</span> <span class="nn">dockercloud</span>
|
||||
|
||||
<span class="n">regions</span> <span class="o">=</span> <span class="n">dockercloud</span><span class="o">.</span><span class="n">Region</span><span class="o">.</span><span class="nb">list</span><span class="p">()</span>
|
||||
</code></pre>
|
||||
<pre class="highlight http"><code><span class="nf">GET</span> <span class="nn">/api/infra/v1/region/</span> <span class="k">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
||||
<span class="na">Host</span><span class="p">:</span> <span class="s">cloud.docker.com</span>
|
||||
<span class="na">Authorization</span><span class="p">:</span> <span class="s">Basic dXNlcm5hbWU6YXBpa2V5</span>
|
||||
<span class="na">Accept</span><span class="p">:</span> <span class="s">application/json</span>
|
||||
</code></pre>
|
||||
<pre class="highlight go"><code><span class="k">import</span><span class="x"> </span><span class="s">"github.com/docker/go-dockercloud/dockercloud"</span><span class="x">
|
||||
|
||||
</span><span class="n">regionList</span><span class="p">,</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">:=</span><span class="x"> </span><span class="n">dockercloud</span><span class="o">.</span><span class="n">ListRegions</span><span class="p">()</span><span class="x">
|
||||
|
||||
</span><span class="k">if</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">!=</span><span class="x"> </span><span class="no">nil</span><span class="x"> </span><span class="p">{</span><span class="x">
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">err</span><span class="p">)</span><span class="x">
|
||||
</span><span class="p">}</span><span class="x">
|
||||
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">regionList</span><span class="p">)</span><span class="x">
|
||||
</span></code></pre>
|
||||
<pre class="highlight shell"><code>docker-cloud nodecluster region
|
||||
</code></pre>
|
||||
|
||||
<p>Lists all regions of all supported cloud providers. Returns a list of <code class="prettyprint">Region</code> objects.</p>
|
||||
|
||||
<h3 id="endpoint-type">Endpoint Type</h3>
|
||||
|
||||
<p>Available in Docker Cloud’s <strong>REST API</strong></p>
|
||||
|
||||
<h3 id="http-request">HTTP Request</h3>
|
||||
|
||||
<p><code class="prettyprint">GET /api/infra/v1/region/</code></p>
|
||||
|
||||
<h3 id="query-parameters">Query Parameters</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>Parameter</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td>name</td>
|
||||
<td>Filter by region name</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>provider</td>
|
||||
<td>Filter by resource URI of the target provider</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
<h2 id="get-an-individual-region">Get an individual region</h2>
|
||||
<pre class="highlight python"><code><span class="kn">import</span> <span class="nn">dockercloud</span>
|
||||
|
||||
<span class="n">region</span> <span class="o">=</span> <span class="n">dockercloud</span><span class="o">.</span><span class="n">Region</span><span class="o">.</span><span class="n">fetch</span><span class="p">(</span><span class="s">"digitalocean/lon1"</span><span class="p">)</span>
|
||||
</code></pre>
|
||||
<pre class="highlight go"><code><span class="k">import</span><span class="x"> </span><span class="s">"github.com/docker/go-dockercloud/dockercloud"</span><span class="x">
|
||||
|
||||
</span><span class="n">region</span><span class="p">,</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">:=</span><span class="x"> </span><span class="n">dockercloud</span><span class="o">.</span><span class="n">GetRegion</span><span class="p">(</span><span class="s">"digitalocean"</span><span class="p">,</span><span class="s">"lon1"</span><span class="p">)</span><span class="x">
|
||||
|
||||
</span><span class="k">if</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">!=</span><span class="x"> </span><span class="no">nil</span><span class="x"> </span><span class="p">{</span><span class="x">
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">err</span><span class="p">)</span><span class="x">
|
||||
</span><span class="p">}</span><span class="x">
|
||||
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">region</span><span class="p">)</span><span class="x">
|
||||
</span></code></pre>
|
||||
<pre class="highlight http"><code><span class="nf">GET</span> <span class="nn">/api/infra/v1/region/digitalocean/lon1/</span> <span class="k">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
||||
<span class="na">Host</span><span class="p">:</span> <span class="s">cloud.docker.com</span>
|
||||
<span class="na">Authorization</span><span class="p">:</span> <span class="s">Basic dXNlcm5hbWU6YXBpa2V5</span>
|
||||
<span class="na">Accept</span><span class="p">:</span> <span class="s">application/json</span>
|
||||
</code></pre>
|
||||
|
||||
<p>Get all the details of a specific region</p>
|
||||
|
||||
<h3 id="endpoint-type">Endpoint Type</h3>
|
||||
|
||||
<p>Available in Docker Cloud’s <strong>REST API</strong></p>
|
||||
|
||||
<h3 id="http-request">HTTP Request</h3>
|
||||
|
||||
<p><code class="prettyprint">GET /api/infra/v1/region/(provider.name)/(name)/</code></p>
|
||||
|
||||
<h3 id="path-parameters">Path Parameters</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>Parameter</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td>name</td>
|
||||
<td>The name of the region to retrieve</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>provider.name</td>
|
||||
<td>The name of the provider of the region</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
</div>
|
||||
<div class="dark-box">
|
||||
</div>
|
||||
</div>
|
||||
<div class="google-analytics">
|
||||
<!-- Google Tag Manager -->
|
||||
<noscript>
|
||||
<iframe src="//www.googletagmanager.com/ns.html?id=GTM-WLGFZV"
|
||||
height="0" width="0" style="display:none;visibility:hidden"></iframe>
|
||||
</noscript>
|
||||
<script>
|
||||
(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
|
||||
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
|
||||
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
|
||||
'//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
|
||||
})(window,document,'script','dataLayer','GTM-WLGFZV');
|
||||
</script>
|
||||
<!-- End Google Tag Manager -->
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,178 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||
<title>API Documentation</title>
|
||||
|
||||
<link href="../stylesheets/screen.css" rel="stylesheet" type="text/css" media="screen" />
|
||||
<link href="../stylesheets/print.css" rel="stylesheet" type="text/css" media="print" />
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
|
||||
<script src="../javascripts/all_nosearch.js" type="text/javascript"></script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="includes includes_registry">
|
||||
<a href="#" id="nav-button">
|
||||
<span>
|
||||
NAV
|
||||
<img src="../images/navbar.png" />
|
||||
</span>
|
||||
</a>
|
||||
<div class="tocify-wrapper">
|
||||
<img src="../images/logo.png" />
|
||||
<div id="toc">
|
||||
</div>
|
||||
</div>
|
||||
<div class="page-wrapper">
|
||||
<div class="dark-box"></div>
|
||||
<div class="content">
|
||||
<h1 id="registries">Registries</h1>
|
||||
|
||||
<h2 id="registry">Registry</h2>
|
||||
|
||||
<blockquote>
|
||||
<p>Example</p>
|
||||
</blockquote>
|
||||
<pre class="highlight json"><code><span class="p">{</span><span class="w">
|
||||
</span><span class="nt">"host"</span><span class="p">:</span><span class="w"> </span><span class="s2">"registry-1.docker.io"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"is_docker_registry"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"is_ssl"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Docker Hub"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"port"</span><span class="p">:</span><span class="w"> </span><span class="mi">443</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"resource_uri"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/api/repo/v1/registry/registry-1.docker.io/"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="err">}</span><span class="w">
|
||||
</span></code></pre>
|
||||
|
||||
<p>Represents a registry where repositories are hosted.</p>
|
||||
|
||||
<h3 id="attributes">Attributes</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>Attribute</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td>resource_uri</td>
|
||||
<td>A unique API endpoint that represents the registry</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>name</td>
|
||||
<td>Human-readable name of the registry</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>host</td>
|
||||
<td>FQDN of the registry, i.e. <code class="prettyprint">registry-1.docker.io</code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>is_docker_registry</td>
|
||||
<td>Whether this registry is run by Docker</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>is_ssl</td>
|
||||
<td>Whether this registry has SSL activated or not</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>port</td>
|
||||
<td>The port number where the registry is listening to</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
<h2 id="list-all-registries">List all registries</h2>
|
||||
<pre class="highlight http"><code><span class="nf">GET</span> <span class="nn">/api/repo/v1/registry/</span> <span class="k">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
||||
<span class="na">Host</span><span class="p">:</span> <span class="s">cloud.docker.com</span>
|
||||
<span class="na">Authorization</span><span class="p">:</span> <span class="s">Basic dXNlcm5hbWU6YXBpa2V5</span>
|
||||
<span class="na">Accept</span><span class="p">:</span> <span class="s">application/json</span>
|
||||
</code></pre>
|
||||
|
||||
<p>Lists all current registries. Returns a list of <code class="prettyprint">Registry</code> objects.</p>
|
||||
|
||||
<h3 id="endpoint-type">Endpoint Type</h3>
|
||||
|
||||
<p>Available in Docker Cloud’s <strong>REST API</strong></p>
|
||||
|
||||
<h3 id="http-request">HTTP Request</h3>
|
||||
|
||||
<p><code class="prettyprint">GET /api/repo/v1/registry/</code></p>
|
||||
|
||||
<h3 id="query-parameters">Query Parameters</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>Parameter</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td>uuid</td>
|
||||
<td>Filter by UUID</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>name</td>
|
||||
<td>Filter by registry name</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>host</td>
|
||||
<td>Filter by registry host</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>is_docker_registry</td>
|
||||
<td>Filter by whether the registry is run by Docker or not. Possible values: ‘true’ or 'false’</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
<h2 id="get-an-existing-registry">Get an existing registry</h2>
|
||||
<pre class="highlight http"><code><span class="nf">GET</span> <span class="nn">/api/repo/v1/registry/registry-1.docker.io/</span> <span class="k">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
||||
<span class="na">Host</span><span class="p">:</span> <span class="s">cloud.docker.com</span>
|
||||
<span class="na">Authorization</span><span class="p">:</span> <span class="s">Basic dXNlcm5hbWU6YXBpa2V5</span>
|
||||
<span class="na">Accept</span><span class="p">:</span> <span class="s">application/json</span>
|
||||
</code></pre>
|
||||
|
||||
<p>Gets all the details of an specific registry</p>
|
||||
|
||||
<h3 id="endpoint-type">Endpoint Type</h3>
|
||||
|
||||
<p>Available in Docker Cloud’s <strong>REST API</strong></p>
|
||||
|
||||
<h3 id="http-request">HTTP Request</h3>
|
||||
|
||||
<p><code class="prettyprint">GET /api/v1/registry/(host)/</code></p>
|
||||
|
||||
<h3 id="path-parameters">Path Parameters</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>Parameter</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td>host</td>
|
||||
<td>The host of the registry to retrieve</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
</div>
|
||||
<div class="dark-box">
|
||||
</div>
|
||||
</div>
|
||||
<div class="google-analytics">
|
||||
<!-- Google Tag Manager -->
|
||||
<noscript>
|
||||
<iframe src="//www.googletagmanager.com/ns.html?id=GTM-WLGFZV"
|
||||
height="0" width="0" style="display:none;visibility:hidden"></iframe>
|
||||
</noscript>
|
||||
<script>
|
||||
(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
|
||||
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
|
||||
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
|
||||
'//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
|
||||
})(window,document,'script','dataLayer','GTM-WLGFZV');
|
||||
</script>
|
||||
<!-- End Google Tag Manager -->
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,358 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||
<title>API Documentation</title>
|
||||
|
||||
<link href="../stylesheets/screen.css" rel="stylesheet" type="text/css" media="screen" />
|
||||
<link href="../stylesheets/print.css" rel="stylesheet" type="text/css" media="print" />
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
|
||||
<script src="../javascripts/all_nosearch.js" type="text/javascript"></script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="includes includes_repository">
|
||||
<a href="#" id="nav-button">
|
||||
<span>
|
||||
NAV
|
||||
<img src="../images/navbar.png" />
|
||||
</span>
|
||||
</a>
|
||||
<div class="tocify-wrapper">
|
||||
<img src="../images/logo.png" />
|
||||
<div id="toc">
|
||||
</div>
|
||||
</div>
|
||||
<div class="page-wrapper">
|
||||
<div class="dark-box"></div>
|
||||
<div class="content">
|
||||
<h1 id="external-repositories">External Repositories</h1>
|
||||
|
||||
<h2 id="external-repository">External Repository</h2>
|
||||
|
||||
<blockquote>
|
||||
<p>Example</p>
|
||||
</blockquote>
|
||||
<pre class="highlight json"><code><span class="p">{</span><span class="w">
|
||||
</span><span class="nt">"in_use"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"quay.io/tutum/ubuntu"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"registry"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/api/repo/v1/registry/quay.io/"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"resource_uri"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/api/repo/v1/repository/quay.io/tutum/ubuntu/"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="err">}</span><span class="w">
|
||||
</span></code></pre>
|
||||
|
||||
<p>The <code class="prettyprint">repository</code> endpoint is used to add and remove existing repositories on third party registries to be used in deployments and builds.</p>
|
||||
|
||||
<h3 id="attributes">Attributes</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>Attribute</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td>resource_uri</td>
|
||||
<td>A unique API endpoint that represents the repository</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>name</td>
|
||||
<td>Name of the repository, i.e. <code class="prettyprint">quay.io/tutum/ubuntu</code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>in_use</td>
|
||||
<td>If the image is being used by any of your services</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>registry</td>
|
||||
<td>Resource URI of the registry where this image is hosted</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
<h2 id="list-all-external-repositories">List all external repositories</h2>
|
||||
<pre class="highlight python"><code><span class="kn">import</span> <span class="nn">dockercloud</span>
|
||||
|
||||
<span class="n">repositories</span> <span class="o">=</span> <span class="n">dockercloud</span><span class="o">.</span><span class="n">Repository</span><span class="o">.</span><span class="nb">list</span><span class="p">()</span>
|
||||
</code></pre>
|
||||
<pre class="highlight http"><code><span class="nf">GET</span> <span class="nn">/api/repo/v1/repository/</span> <span class="k">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
||||
<span class="na">Host</span><span class="p">:</span> <span class="s">cloud.docker.com</span>
|
||||
<span class="na">Authorization</span><span class="p">:</span> <span class="s">Basic dXNlcm5hbWU6YXBpa2V5</span>
|
||||
<span class="na">Accept</span><span class="p">:</span> <span class="s">application/json</span>
|
||||
</code></pre>
|
||||
<pre class="highlight go"><code><span class="k">import</span><span class="x"> </span><span class="s">"github.com/docker/go-dockercloud/dockercloud"</span><span class="x">
|
||||
|
||||
</span><span class="n">repositoriesList</span><span class="p">,</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">:=</span><span class="x"> </span><span class="n">dockercloud</span><span class="o">.</span><span class="n">ListRepositories</span><span class="p">()</span><span class="x">
|
||||
|
||||
</span><span class="k">if</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">!=</span><span class="x"> </span><span class="no">nil</span><span class="x"> </span><span class="p">{</span><span class="x">
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">err</span><span class="p">)</span><span class="x">
|
||||
</span><span class="p">}</span><span class="x">
|
||||
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Pringln</span><span class="p">(</span><span class="n">repositoriesList</span><span class="p">)</span><span class="x">
|
||||
</span></code></pre>
|
||||
<pre class="highlight shell"><code>docker-cloud repository ls
|
||||
</code></pre>
|
||||
|
||||
<p>Lists all added repositories from third party registries. Returns a list of <code class="prettyprint">Repository</code> objects.</p>
|
||||
|
||||
<h3 id="endpoint-type">Endpoint Type</h3>
|
||||
|
||||
<p>Available in Docker Cloud’s <strong>REST API</strong></p>
|
||||
|
||||
<h3 id="http-request">HTTP Request</h3>
|
||||
|
||||
<p><code class="prettyprint">GET /api/repo/v1/repository/</code></p>
|
||||
|
||||
<h3 id="query-parameters">Query Parameters</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>Parameter</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td>name</td>
|
||||
<td>Filter by image name</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>registry</td>
|
||||
<td>Filter by resource URI of the target repository registry</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
<h2 id="add-a-new-external-repository">Add a new external repository</h2>
|
||||
<pre class="highlight python"><code><span class="kn">import</span> <span class="nn">dockercloud</span>
|
||||
|
||||
<span class="n">repository</span> <span class="o">=</span> <span class="n">dockercloud</span><span class="o">.</span><span class="n">Repository</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="s">"registry.local/user1/image1"</span><span class="p">,</span> <span class="n">username</span><span class="o">=</span><span class="n">username</span><span class="p">,</span> <span class="n">password</span><span class="o">=</span><span class="n">password</span><span class="p">)</span>
|
||||
<span class="n">repository</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
|
||||
</code></pre>
|
||||
<pre class="highlight http"><code><span class="nf">POST</span> <span class="nn">/api/repo/v1/repository/</span> <span class="k">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
||||
<span class="na">Host</span><span class="p">:</span> <span class="s">cloud.docker.com</span>
|
||||
<span class="na">Authorization</span><span class="p">:</span> <span class="s">Basic dXNlcm5hbWU6YXBpa2V5</span>
|
||||
<span class="na">Accept</span><span class="p">:</span> <span class="s">application/json</span>
|
||||
<span class="na">Content-Type</span><span class="p">:</span> <span class="s">application/json</span>
|
||||
|
||||
<span class="p">{</span><span class="nt">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"registry.local/user1/image1"</span><span class="p">,</span><span class="w"> </span><span class="nt">"username"</span><span class="p">:</span><span class="w"> </span><span class="s2">"username"</span><span class="p">,</span><span class="w"> </span><span class="nt">"password"</span><span class="p">:</span><span class="w"> </span><span class="s2">"password"</span><span class="p">}</span><span class="w">
|
||||
</span></code></pre>
|
||||
<pre class="highlight go"><code><span class="k">import</span><span class="x"> </span><span class="s">"github.com/docker/go-dockercloud/dockercloud"</span><span class="x">
|
||||
|
||||
</span><span class="n">image</span><span class="p">,</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">:=</span><span class="x"> </span><span class="n">dockercloud</span><span class="o">.</span><span class="n">CreateImage</span><span class="p">(</span><span class="n">dockercloud</span><span class="o">.</span><span class="n">ImageCreateRequest</span><span class="p">{</span><span class="x">
|
||||
</span><span class="n">Name</span><span class="o">:</span><span class="x"> </span><span class="s">"registry.local/user1/image1"</span><span class="p">,</span><span class="x">
|
||||
</span><span class="n">Username</span><span class="o">:</span><span class="x"> </span><span class="s">"username"</span><span class="p">,</span><span class="x">
|
||||
</span><span class="n">Password</span><span class="o">:</span><span class="x"> </span><span class="s">"password"</span><span class="x">
|
||||
</span><span class="p">})</span><span class="x">
|
||||
</span></code></pre>
|
||||
<pre class="highlight shell"><code>docker-cloud repository register -u username -p password registry.local/user1/image1
|
||||
</code></pre>
|
||||
|
||||
<p>Adds an existing repository on a third party registry.</p>
|
||||
|
||||
<h3 id="endpoint-type">Endpoint Type</h3>
|
||||
|
||||
<p>Available in Docker Cloud’s <strong>REST API</strong></p>
|
||||
|
||||
<h3 id="http-request">HTTP Request</h3>
|
||||
|
||||
<p><code class="prettyprint">POST /api/repo/v1/repository/</code></p>
|
||||
|
||||
<h3 id="json-parameters">JSON Parameters</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>Parameter</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td>name</td>
|
||||
<td>Name of the repository, i.e. ‘quay.io/tutum/hello-world’</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>username</td>
|
||||
<td>Username to authenticate with the third party registry</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>password</td>
|
||||
<td>Password to authenticate with the third party registry</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
<h2 id="get-an-external-repository-details">Get an external repository details</h2>
|
||||
<pre class="highlight python"><code><span class="kn">import</span> <span class="nn">dockercloud</span>
|
||||
|
||||
<span class="n">repository</span> <span class="o">=</span> <span class="n">dockercloud</span><span class="o">.</span><span class="n">Repository</span><span class="o">.</span><span class="n">fetch</span><span class="p">(</span><span class="s">"registry.local/user1/image1"</span><span class="p">)</span>
|
||||
</code></pre>
|
||||
<pre class="highlight http"><code><span class="nf">GET</span> <span class="nn">/api/repo/v1/repository/registry.local/user1/image1/</span> <span class="k">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
||||
<span class="na">Host</span><span class="p">:</span> <span class="s">cloud.docker.com</span>
|
||||
<span class="na">Authorization</span><span class="p">:</span> <span class="s">Basic dXNlcm5hbWU6YXBpa2V5</span>
|
||||
<span class="na">Accept</span><span class="p">:</span> <span class="s">application/json</span>
|
||||
</code></pre>
|
||||
<pre class="highlight go"><code><span class="k">import</span><span class="x"> </span><span class="s">"github.com/docker/go-dockercloud/dockercloud"</span><span class="x">
|
||||
|
||||
</span><span class="n">repository</span><span class="p">,</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">=</span><span class="x"> </span><span class="n">dockercloud</span><span class="o">.</span><span class="n">GetRepository</span><span class="p">(</span><span class="s">"registry.local/user1/image1"</span><span class="p">)</span><span class="x">
|
||||
|
||||
</span><span class="k">if</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">!=</span><span class="x"> </span><span class="no">nil</span><span class="x"> </span><span class="p">{</span><span class="x">
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">err</span><span class="p">)</span><span class="x">
|
||||
</span><span class="p">}</span><span class="x">
|
||||
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">repository</span><span class="p">)</span><span class="x">
|
||||
</span></code></pre>
|
||||
<pre class="highlight shell"><code>docker-cloud repository inspect registry.local/user1/image1
|
||||
</code></pre>
|
||||
|
||||
<p>Gets all the details of an specific repository</p>
|
||||
|
||||
<h3 id="endpoint-type">Endpoint Type</h3>
|
||||
|
||||
<p>Available in Docker Cloud’s <strong>REST API</strong></p>
|
||||
|
||||
<h3 id="http-request">HTTP Request</h3>
|
||||
|
||||
<p><code class="prettyprint">GET /api/repo/v1/repository/(name)/</code></p>
|
||||
|
||||
<h3 id="path-parameters">Path Parameters</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>Parameter</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td>name</td>
|
||||
<td>The name of the repository to retrieve</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
<h2 id="update-credentials-of-an-external-repository">Update credentials of an external repository</h2>
|
||||
<pre class="highlight python"><code><span class="kn">import</span> <span class="nn">dockercloud</span>
|
||||
|
||||
<span class="n">repository</span> <span class="o">=</span> <span class="n">dockercloud</span><span class="o">.</span><span class="n">Repository</span><span class="o">.</span><span class="n">fetch</span><span class="p">(</span><span class="s">"registry.local/user1/image1"</span><span class="p">)</span>
|
||||
<span class="n">repository</span><span class="o">.</span><span class="n">username</span> <span class="o">=</span> <span class="s">"new username"</span>
|
||||
<span class="n">repository</span><span class="o">.</span><span class="n">password</span> <span class="o">=</span> <span class="s">"new password"</span>
|
||||
<span class="n">repository</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
|
||||
</code></pre>
|
||||
<pre class="highlight http"><code><span class="nf">PATCH</span> <span class="nn">/api/repo/v1/repository/registry.local/user1/image1/</span> <span class="k">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
||||
<span class="na">Host</span><span class="p">:</span> <span class="s">cloud.docker.com</span>
|
||||
<span class="na">Authorization</span><span class="p">:</span> <span class="s">Basic dXNlcm5hbWU6YXBpa2V5</span>
|
||||
<span class="na">Accept</span><span class="p">:</span> <span class="s">application/json</span>
|
||||
<span class="na">Content-Type</span><span class="p">:</span> <span class="s">application/json</span>
|
||||
|
||||
<span class="p">{</span><span class="nt">"username"</span><span class="p">:</span><span class="w"> </span><span class="s2">"username"</span><span class="p">,</span><span class="w"> </span><span class="nt">"password"</span><span class="p">:</span><span class="w"> </span><span class="s2">"password"</span><span class="p">}</span><span class="w">
|
||||
</span></code></pre>
|
||||
<pre class="highlight shell"><code>docker-cloud repository update -n <span class="s2">"new username"</span> -p <span class="s2">"new password"</span> registry.local/user1/image1
|
||||
</code></pre>
|
||||
|
||||
<p>Updates the external repository credentials.</p>
|
||||
|
||||
<h3 id="endpoint-type">Endpoint Type</h3>
|
||||
|
||||
<p>Available in Docker Cloud’s <strong>REST API</strong></p>
|
||||
|
||||
<h3 id="http-request">HTTP Request</h3>
|
||||
|
||||
<p><code class="prettyprint">PATCH /api/repo/v1/repository/(name)/</code></p>
|
||||
|
||||
<h3 id="path-parameters">Path Parameters</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>Parameter</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td>name</td>
|
||||
<td>The name of the repository to update</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
<h3 id="json-parameters">JSON Parameters</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>Parameter</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td>username</td>
|
||||
<td>Username to authenticate with the private registry</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>password</td>
|
||||
<td>Password to authenticate with the private registry</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
<h2 id="remove-an-external-repository">Remove an external repository</h2>
|
||||
<pre class="highlight python"><code><span class="kn">import</span> <span class="nn">dockercloud</span>
|
||||
|
||||
<span class="n">repository</span> <span class="o">=</span> <span class="n">dockercloud</span><span class="o">.</span><span class="n">Repository</span><span class="o">.</span><span class="n">fetch</span><span class="p">(</span><span class="s">"registry.local/user1/image1"</span><span class="p">)</span>
|
||||
<span class="n">repository</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span>
|
||||
</code></pre>
|
||||
<pre class="highlight http"><code><span class="nf">DELETE</span> <span class="nn">/api/repo/v1/repository/registry.local/user1/image1/</span> <span class="k">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
||||
<span class="na">Host</span><span class="p">:</span> <span class="s">cloud.docker.com</span>
|
||||
<span class="na">Authorization</span><span class="p">:</span> <span class="s">Basic dXNlcm5hbWU6YXBpa2V5</span>
|
||||
<span class="na">Accept</span><span class="p">:</span> <span class="s">application/json</span>
|
||||
</code></pre>
|
||||
<pre class="highlight go"><code><span class="k">import</span><span class="x"> </span><span class="s">"github.com/docker/go-dockercloud/dockercloud"</span><span class="x">
|
||||
|
||||
</span><span class="n">repository</span><span class="p">,</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">=</span><span class="x"> </span><span class="n">dockercloud</span><span class="o">.</span><span class="n">GetRepository</span><span class="p">(</span><span class="s">"registry.local/user1/image1"</span><span class="p">)</span><span class="x">
|
||||
|
||||
</span><span class="k">if</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">!=</span><span class="x"> </span><span class="no">nil</span><span class="x"> </span><span class="p">{</span><span class="x">
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">err</span><span class="p">)</span><span class="x">
|
||||
</span><span class="p">}</span><span class="x">
|
||||
|
||||
</span><span class="n">repository</span><span class="o">.</span><span class="n">Remove</span><span class="p">()</span><span class="x">
|
||||
</span></code></pre>
|
||||
<pre class="highlight shell"><code>docker-cloud repository rm registry.local/user1/image1
|
||||
</code></pre>
|
||||
|
||||
<p>Removes the external repository from Docker Cloud. It won’t remove the repository from the third party registry where it’s stored.</p>
|
||||
|
||||
<h3 id="endpoint-type">Endpoint Type</h3>
|
||||
|
||||
<p>Available in Docker Cloud’s <strong>REST API</strong></p>
|
||||
|
||||
<h3 id="http-request">HTTP Request</h3>
|
||||
|
||||
<p><code class="prettyprint">DELETE /api/repo/v1/repository/registry.local/user1/image1/</code></p>
|
||||
|
||||
<h3 id="path-parameters">Path Parameters</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>Parameter</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td>name</td>
|
||||
<td>The name of the external repository to remove</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
</div>
|
||||
<div class="dark-box">
|
||||
</div>
|
||||
</div>
|
||||
<div class="google-analytics">
|
||||
<!-- Google Tag Manager -->
|
||||
<noscript>
|
||||
<iframe src="//www.googletagmanager.com/ns.html?id=GTM-WLGFZV"
|
||||
height="0" width="0" style="display:none;visibility:hidden"></iframe>
|
||||
</noscript>
|
||||
<script>
|
||||
(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
|
||||
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
|
||||
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
|
||||
'//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
|
||||
})(window,document,'script','dataLayer','GTM-WLGFZV');
|
||||
</script>
|
||||
<!-- End Google Tag Manager -->
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,695 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||
<title>API Documentation</title>
|
||||
|
||||
<link href="../stylesheets/screen.css" rel="stylesheet" type="text/css" media="screen" />
|
||||
<link href="../stylesheets/print.css" rel="stylesheet" type="text/css" media="print" />
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
|
||||
<script src="../javascripts/all_nosearch.js" type="text/javascript"></script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="includes includes_stack">
|
||||
<a href="#" id="nav-button">
|
||||
<span>
|
||||
NAV
|
||||
<img src="../images/navbar.png" />
|
||||
</span>
|
||||
</a>
|
||||
<div class="tocify-wrapper">
|
||||
<img src="../images/logo.png" />
|
||||
<div id="toc">
|
||||
</div>
|
||||
</div>
|
||||
<div class="page-wrapper">
|
||||
<div class="dark-box"></div>
|
||||
<div class="content">
|
||||
<h1 id="stacks">Stacks</h1>
|
||||
|
||||
<h2 id="stack">Stack</h2>
|
||||
|
||||
<blockquote>
|
||||
<p>Example</p>
|
||||
</blockquote>
|
||||
<pre class="highlight json"><code><span class="p">{</span><span class="w">
|
||||
</span><span class="nt">"deployed_datetime"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Mon, 13 Oct 2014 11:01:43 +0000"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"destroyed_datetime"</span><span class="p">:</span><span class="w"> </span><span class="kc">null</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"nickname"</span><span class="p">:</span><span class="w"> </span><span class="s2">"deployment stack"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"dockercloud-app"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"resource_uri"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/api/app/v1/stack/7fe7ec85-58be-4904-81da-de2219098d7c/"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"services"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
|
||||
</span><span class="s2">"/api/app/v1/service/09cbcf8d-a727-40d9-b420-c8e18b7fa55b/"</span><span class="w">
|
||||
</span><span class="p">],</span><span class="w">
|
||||
</span><span class="nt">"state"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Running"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"synchronized"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"uuid"</span><span class="p">:</span><span class="w"> </span><span class="s2">"09cbcf8d-a727-40d9-b420-c8e18b7fa55b"</span><span class="w">
|
||||
</span><span class="p">}</span><span class="w">
|
||||
</span></code></pre>
|
||||
|
||||
<p>A stack is a logical grouping of closely related services, that may be linked with one another.</p>
|
||||
|
||||
<h3 id="attributes">Attributes</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>Attribute</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td>uuid</td>
|
||||
<td>A unique identifier for the stack generated automatically on creation</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>resource_uri</td>
|
||||
<td>A unique API endpoint that represents the stack</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>name</td>
|
||||
<td>A user provided name for the stack.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>state</td>
|
||||
<td>The state of the stack (see table <code class="prettyprint">Stack states</code> below)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>synchronized</td>
|
||||
<td>Flag indicating if the current stack definition is synchronized with their services.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>services</td>
|
||||
<td>List of service resource URIs belonging to the stack</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>deployed_datetime</td>
|
||||
<td>The date and time of the last deployment of the stack (if applicable, <code class="prettyprint">null</code> otherwise)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>destroyed_datetime</td>
|
||||
<td>The date and time of the <code class="prettyprint">terminate</code> operation on the stack (if applicable, <code class="prettyprint">null</code> otherwise)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>nickname</td>
|
||||
<td>A user-friendly name for the stack (<code class="prettyprint">name</code> by default)</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
<h3 id="stack-states">Stack states</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>State</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td>Not Running</td>
|
||||
<td>The stack has been created and has no deployed services yet. Possible actions in this state: <code class="prettyprint">start</code>, <code class="prettyprint">terminate</code>.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Starting</td>
|
||||
<td>All services for the stack are either starting or already running. No actions allowed in this state.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Running</td>
|
||||
<td>All services for the service are deployed and running. Possible actions in this state: <code class="prettyprint">redeploy</code>, <code class="prettyprint">terminate</code>.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Partly running</td>
|
||||
<td>One or more services of the stack are deployed and running. Possible actions in this state: <code class="prettyprint">redeploy</code>, <code class="prettyprint">terminate</code>.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Stopping</td>
|
||||
<td>All services for the stack are either stopping or already stopped. No actions allowed in this state.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Stopped</td>
|
||||
<td>All services for the service are stopped. Possible actions in this state: <code class="prettyprint">start</code>, <code class="prettyprint">redeploy</code>, <code class="prettyprint">terminate</code>.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Redeploying</td>
|
||||
<td>The stack is redeploying all its services with the updated configuration. No actions allowed in this state.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Terminating</td>
|
||||
<td>All services for the stack are either being terminated or already terminated. No actions allowed in this state.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Terminated</td>
|
||||
<td>The stack and all its services have been terminated. No actions allowed in this state.</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
<h2 id="list-all-stacks">List all stacks</h2>
|
||||
<pre class="highlight python"><code><span class="kn">import</span> <span class="nn">dockercloud</span>
|
||||
|
||||
<span class="n">stacks</span> <span class="o">=</span> <span class="n">dockercloud</span><span class="o">.</span><span class="n">Stack</span><span class="o">.</span><span class="nb">list</span><span class="p">()</span>
|
||||
</code></pre>
|
||||
<pre class="highlight go"><code><span class="k">import</span><span class="x"> </span><span class="s">"github.com/docker/go-dockercloud/dockercloud"</span><span class="x">
|
||||
|
||||
</span><span class="n">stackList</span><span class="p">,</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">:=</span><span class="x"> </span><span class="n">dockercloud</span><span class="o">.</span><span class="n">ListStacks</span><span class="p">()</span><span class="x">
|
||||
|
||||
</span><span class="k">if</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">!=</span><span class="x"> </span><span class="no">nil</span><span class="x"> </span><span class="p">{</span><span class="x">
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">err</span><span class="p">)</span><span class="x">
|
||||
</span><span class="p">}</span><span class="x">
|
||||
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">stackList</span><span class="p">)</span><span class="x">
|
||||
</span></code></pre>
|
||||
<pre class="highlight http"><code><span class="nf">GET</span> <span class="nn">/api/app/v1/stack/</span> <span class="k">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
||||
<span class="na">Host</span><span class="p">:</span> <span class="s">cloud.docker.com</span>
|
||||
<span class="na">Authorization</span><span class="p">:</span> <span class="s">Basic dXNlcm5hbWU6YXBpa2V5</span>
|
||||
<span class="na">Accept</span><span class="p">:</span> <span class="s">application/json</span>
|
||||
</code></pre>
|
||||
<pre class="highlight shell"><code>docker-cloud stack ls
|
||||
</code></pre>
|
||||
|
||||
<p>Lists all current and recently terminated stacks. Returns a list of <code class="prettyprint">Stack</code> objects.</p>
|
||||
|
||||
<h3 id="endpoint-type">Endpoint Type</h3>
|
||||
|
||||
<p>Available in Docker Cloud’s <strong>REST API</strong></p>
|
||||
|
||||
<h3 id="http-request">HTTP Request</h3>
|
||||
|
||||
<p><code class="prettyprint">GET /api/app/v1/stack/</code></p>
|
||||
|
||||
<h3 id="query-parameters">Query Parameters</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>Parameter</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td>uuid</td>
|
||||
<td>Filter by UUID</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>name</td>
|
||||
<td>Filter by stack name</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
<h2 id="create-a-new-stack">Create a new stack</h2>
|
||||
<pre class="highlight python"><code><span class="kn">import</span> <span class="nn">dockercloud</span>
|
||||
|
||||
<span class="n">stack</span> <span class="o">=</span> <span class="n">dockercloud</span><span class="o">.</span><span class="n">Stack</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="s">"my-new-stack"</span><span class="p">,</span> <span class="n">services</span><span class="o">=</span><span class="p">[{</span><span class="s">"name"</span><span class="p">:</span> <span class="s">"hello-word"</span><span class="p">,</span> <span class="s">"image"</span><span class="p">:</span> <span class="s">"tutum/hello-world"</span><span class="p">,</span> <span class="s">"target_num_containers"</span><span class="p">:</span> <span class="mi">2</span><span class="p">}])</span>
|
||||
<span class="n">stack</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
|
||||
</code></pre>
|
||||
<pre class="highlight go"><code><span class="k">import</span><span class="x"> </span><span class="s">"github.com/docker/go-dockercloud/dockercloud"</span><span class="x">
|
||||
|
||||
</span><span class="n">stack</span><span class="p">,</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">:=</span><span class="x"> </span><span class="n">dockercloud</span><span class="o">.</span><span class="n">CreateStack</span><span class="p">(</span><span class="n">dockercloud</span><span class="o">.</span><span class="n">StackCreateRequest</span><span class="p">{</span><span class="n">Name</span><span class="o">:</span><span class="x"> </span><span class="s">"my-new-stack"</span><span class="p">,</span><span class="x"> </span><span class="n">Services</span><span class="o">:</span><span class="x"> </span><span class="p">[]</span><span class="n">dockercloud</span><span class="o">.</span><span class="n">ServiceCreateRequest</span><span class="p">{ {</span><span class="n">Image</span><span class="o">:</span><span class="x"> </span><span class="s">"tutum/hello-world"</span><span class="p">,</span><span class="x"> </span><span class="n">Name</span><span class="o">:</span><span class="x"> </span><span class="s">"test"</span><span class="p">,</span><span class="x"> </span><span class="n">Target_num_containers</span><span class="o">:</span><span class="x"> </span><span class="m">2</span><span class="p">}}})</span><span class="x">
|
||||
|
||||
</span><span class="k">if</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">!=</span><span class="x"> </span><span class="no">nil</span><span class="x"> </span><span class="p">{</span><span class="x">
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">err</span><span class="p">)</span><span class="x">
|
||||
</span><span class="p">}</span><span class="x">
|
||||
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">stack</span><span class="p">)</span><span class="x">
|
||||
</span></code></pre>
|
||||
<pre class="highlight http"><code><span class="nf">POST</span> <span class="nn">/api/app/v1/stack/</span> <span class="k">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
||||
<span class="na">Host</span><span class="p">:</span> <span class="s">cloud.docker.com</span>
|
||||
<span class="na">Authorization</span><span class="p">:</span> <span class="s">Basic dXNlcm5hbWU6YXBpa2V5</span>
|
||||
<span class="na">Accept</span><span class="p">:</span> <span class="s">application/json</span>
|
||||
<span class="na">Content-Type</span><span class="p">:</span> <span class="s">application/json</span>
|
||||
|
||||
<span class="p">{</span><span class="w">
|
||||
</span><span class="nt">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"my-new-stack"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"services"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
|
||||
</span><span class="p">{</span><span class="w">
|
||||
</span><span class="nt">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"hello-word"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"image"</span><span class="p">:</span><span class="w"> </span><span class="s2">"tutum/hello-world"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"target_num_containers"</span><span class="p">:</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"linked_to_service"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
|
||||
</span><span class="p">{</span><span class="w">
|
||||
</span><span class="nt">"to_service"</span><span class="p">:</span><span class="w"> </span><span class="s2">"database"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"DB"</span><span class="w">
|
||||
</span><span class="p">}</span><span class="w">
|
||||
</span><span class="p">]</span><span class="w">
|
||||
</span><span class="p">},</span><span class="w">
|
||||
</span><span class="p">{</span><span class="w">
|
||||
</span><span class="nt">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"database"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"image"</span><span class="p">:</span><span class="w"> </span><span class="s2">"tutum/mysql"</span><span class="w">
|
||||
</span><span class="p">}</span><span class="w">
|
||||
</span><span class="p">]</span><span class="w">
|
||||
</span><span class="p">}</span><span class="w">
|
||||
</span></code></pre>
|
||||
<pre class="highlight shell"><code>docker-cloud stack create --name hello-world -f docker-compose.yml
|
||||
</code></pre>
|
||||
|
||||
<p>Creates a new stack without starting it. Note that the JSON syntax is abstracted by both, the Docker Cloud CLI and our UI, in order to use <a href="../../docker-cloud/apps/stack-yaml-reference/">Stack YAML files</a>.</p>
|
||||
|
||||
<h3 id="endpoint-type">Endpoint Type</h3>
|
||||
|
||||
<p>Available in Docker Cloud’s <strong>REST API</strong></p>
|
||||
|
||||
<h3 id="http-request">HTTP Request</h3>
|
||||
|
||||
<p><code class="prettyprint">POST /api/app/v1/stack/</code></p>
|
||||
|
||||
<h3 id="json-parameters">JSON Parameters</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>Parameter</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td>name</td>
|
||||
<td>(required) A human-readable name for the stack, i.e. <code class="prettyprint">my-hello-world-stack</code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>nickname</td>
|
||||
<td>(optional) A user-friendly name for the stack (<code class="prettyprint">name</code> by default)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>services</td>
|
||||
<td>(optional) List of services belonging to the stack. Each service accepts the same parameters as a <a href="#create-a-new-service">Create new service</a> operation (default: <code class="prettyprint">[]</code>) plus the ability to refer “links” and “volumes-from” by the name of another service in the stack (see example).</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
<h2 id="export-an-existing-stack">Export an existing stack</h2>
|
||||
<pre class="highlight python"><code><span class="kn">import</span> <span class="nn">dockercloud</span>
|
||||
|
||||
<span class="n">stack</span> <span class="o">=</span> <span class="n">dockercloud</span><span class="o">.</span><span class="n">Stack</span><span class="o">.</span><span class="n">fetch</span><span class="p">(</span><span class="s">"46aca402-2109-4a70-a378-760cfed43816"</span><span class="p">)</span>
|
||||
<span class="n">stack</span><span class="o">.</span><span class="n">export</span><span class="p">()</span>
|
||||
</code></pre>
|
||||
<pre class="highlight go"><code><span class="k">import</span><span class="x"> </span><span class="s">"github.com/docker/go-dockercloud/dockercloud"</span><span class="x">
|
||||
|
||||
</span><span class="n">stack</span><span class="p">,</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">:=</span><span class="x"> </span><span class="n">dockercloud</span><span class="o">.</span><span class="n">GetStack</span><span class="p">(</span><span class="s">"46aca402-2109-4a70-a378-760cfed43816"</span><span class="p">)</span><span class="x">
|
||||
|
||||
</span><span class="k">if</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">!=</span><span class="x"> </span><span class="no">nil</span><span class="x"> </span><span class="p">{</span><span class="x">
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">err</span><span class="p">)</span><span class="x">
|
||||
</span><span class="p">}</span><span class="x">
|
||||
|
||||
</span><span class="k">if</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">=</span><span class="x"> </span><span class="n">stack</span><span class="o">.</span><span class="n">Export</span><span class="p">();</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">!=</span><span class="x"> </span><span class="no">nil</span><span class="x"> </span><span class="p">{</span><span class="x">
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">err</span><span class="p">)</span><span class="x">
|
||||
</span><span class="p">}</span><span class="x">
|
||||
</span></code></pre>
|
||||
<pre class="highlight http"><code><span class="nf">GET</span> <span class="nn">/api/app/v1/stack/46aca402-2109-4a70-a378-760cfed43816/export/</span> <span class="k">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
||||
<span class="na">Host</span><span class="p">:</span> <span class="s">cloud.docker.com</span>
|
||||
<span class="na">Authorization</span><span class="p">:</span> <span class="s">Basic dXNlcm5hbWU6YXBpa2V5</span>
|
||||
<span class="na">Accept</span><span class="p">:</span> <span class="s">application/json</span>
|
||||
</code></pre>
|
||||
<pre class="highlight shell"><code>docker-cloud stack <span class="nb">export </span>46aca402
|
||||
</code></pre>
|
||||
|
||||
<p>Get a JSON representation of the stack following the <a href="../../docker-cloud/apps/stacks/">Stack YAML representation</a>.</p>
|
||||
|
||||
<h3 id="endpoint-type">Endpoint Type</h3>
|
||||
|
||||
<p>Available in Docker Cloud’s <strong>REST API</strong></p>
|
||||
|
||||
<h3 id="http-request">HTTP Request</h3>
|
||||
|
||||
<p><code class="prettyprint">GET /api/app/v1/stack/(uuid)/export/</code></p>
|
||||
|
||||
<h3 id="path-parameters">Path Parameters</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>Parameter</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td>uuid</td>
|
||||
<td>The UUID of the stack to retrieve</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
<h2 id="get-an-existing-stack">Get an existing stack</h2>
|
||||
<pre class="highlight python"><code><span class="kn">import</span> <span class="nn">dockercloud</span>
|
||||
|
||||
<span class="n">stack</span> <span class="o">=</span> <span class="n">dockercloud</span><span class="o">.</span><span class="n">Stack</span><span class="o">.</span><span class="n">fetch</span><span class="p">(</span><span class="s">"46aca402-2109-4a70-a378-760cfed43816"</span><span class="p">)</span>
|
||||
</code></pre>
|
||||
<pre class="highlight go"><code><span class="k">import</span><span class="x"> </span><span class="s">"github.com/docker/go-dockercloud/dockercloud"</span><span class="x">
|
||||
|
||||
</span><span class="n">stack</span><span class="p">,</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">:=</span><span class="x"> </span><span class="n">dockercloud</span><span class="o">.</span><span class="n">GetStack</span><span class="p">(</span><span class="s">"46aca402-2109-4a70-a378-760cfed43816"</span><span class="p">)</span><span class="x">
|
||||
|
||||
</span><span class="k">if</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">!=</span><span class="x"> </span><span class="no">nil</span><span class="x"> </span><span class="p">{</span><span class="x">
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">err</span><span class="p">)</span><span class="x">
|
||||
</span><span class="p">}</span><span class="x">
|
||||
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">stack</span><span class="p">)</span><span class="x">
|
||||
</span></code></pre>
|
||||
<pre class="highlight http"><code><span class="nf">GET</span> <span class="nn">/api/app/v1/stack/46aca402-2109-4a70-a378-760cfed43816/</span> <span class="k">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
||||
<span class="na">Host</span><span class="p">:</span> <span class="s">cloud.docker.com</span>
|
||||
<span class="na">Authorization</span><span class="p">:</span> <span class="s">Basic dXNlcm5hbWU6YXBpa2V5</span>
|
||||
<span class="na">Accept</span><span class="p">:</span> <span class="s">application/json</span>
|
||||
</code></pre>
|
||||
<pre class="highlight shell"><code>docker-cloud stack inspect 46aca402-2109-4a70-a378-760cfed43816
|
||||
</code></pre>
|
||||
|
||||
<p>Get all the details of an specific stack</p>
|
||||
|
||||
<h3 id="endpoint-type">Endpoint Type</h3>
|
||||
|
||||
<p>Available in Docker Cloud’s <strong>REST API</strong></p>
|
||||
|
||||
<h3 id="http-request">HTTP Request</h3>
|
||||
|
||||
<p><code class="prettyprint">GET /api/app/v1/stack/(uuid)/</code></p>
|
||||
|
||||
<h3 id="path-parameters">Path Parameters</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>Parameter</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td>uuid</td>
|
||||
<td>The UUID of the stack to retrieve</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
<h2 id="update-an-existing-stack">Update an existing stack</h2>
|
||||
<pre class="highlight python"><code><span class="kn">import</span> <span class="nn">dockercloud</span>
|
||||
|
||||
<span class="n">stack</span> <span class="o">=</span> <span class="n">dockercloud</span><span class="o">.</span><span class="n">Stack</span><span class="o">.</span><span class="n">fetch</span><span class="p">(</span><span class="s">"46aca402-2109-4a70-a378-760cfed43816"</span><span class="p">)</span>
|
||||
<span class="n">stack</span><span class="o">.</span><span class="n">services</span> <span class="o">=</span> <span class="p">{</span><span class="s">"services"</span><span class="p">:</span> <span class="p">[{</span><span class="s">"name"</span><span class="p">:</span> <span class="s">"hello-word"</span><span class="p">,</span> <span class="s">"image"</span><span class="p">:</span> <span class="s">"tutum/hello-world"</span><span class="p">,</span> <span class="s">"target_num_containers"</span><span class="p">:</span> <span class="mi">2</span><span class="p">}]}</span>
|
||||
<span class="n">stack</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
|
||||
</code></pre>
|
||||
<pre class="highlight go"><code><span class="k">import</span><span class="x"> </span><span class="s">"github.com/docker/go-dockercloud/dockercloud"</span><span class="x">
|
||||
|
||||
</span><span class="n">stack</span><span class="p">,</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">:=</span><span class="x"> </span><span class="n">dockercloud</span><span class="o">.</span><span class="n">GetStack</span><span class="p">(</span><span class="s">"46aca402-2109-4a70-a378-760cfed43816"</span><span class="p">)</span><span class="x">
|
||||
|
||||
</span><span class="k">if</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">!=</span><span class="x"> </span><span class="no">nil</span><span class="x"> </span><span class="p">{</span><span class="x">
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">err</span><span class="p">)</span><span class="x">
|
||||
</span><span class="p">}</span><span class="x">
|
||||
|
||||
</span><span class="k">if</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">=</span><span class="x"> </span><span class="n">stack</span><span class="o">.</span><span class="n">Update</span><span class="p">(</span><span class="n">dockercloud</span><span class="o">.</span><span class="n">StackCreateRequest</span><span class="p">{</span><span class="n">Services</span><span class="o">:</span><span class="x"> </span><span class="p">[]</span><span class="n">dockercloud</span><span class="o">.</span><span class="n">ServiceCreateRequest</span><span class="p">{ {</span><span class="n">Name</span><span class="o">:</span><span class="x"> </span><span class="s">"hello-world"</span><span class="p">,</span><span class="x"> </span><span class="n">Image</span><span class="o">:</span><span class="x"> </span><span class="s">"tutum/hello-world"</span><span class="p">,</span><span class="x"> </span><span class="n">Target_num_containers</span><span class="o">:</span><span class="x"> </span><span class="m">2</span><span class="p">}}});</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">!=</span><span class="x"> </span><span class="no">nil</span><span class="x"> </span><span class="p">{</span><span class="x">
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">err</span><span class="p">)</span><span class="x">
|
||||
</span><span class="p">}</span><span class="x">
|
||||
</span></code></pre>
|
||||
<pre class="highlight http"><code><span class="nf">PATCH</span> <span class="nn">/api/app/v1/stack/46aca402-2109-4a70-a378-760cfed43816/</span> <span class="k">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
||||
<span class="na">Host</span><span class="p">:</span> <span class="s">cloud.docker.com</span>
|
||||
<span class="na">Authorization</span><span class="p">:</span> <span class="s">Basic dXNlcm5hbWU6YXBpa2V5</span>
|
||||
<span class="na">Accept</span><span class="p">:</span> <span class="s">application/json</span>
|
||||
<span class="na">Content-Type</span><span class="p">:</span> <span class="s">application/json</span>
|
||||
|
||||
<span class="p">{</span><span class="w">
|
||||
</span><span class="nt">"services"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
|
||||
</span><span class="p">{</span><span class="w">
|
||||
</span><span class="nt">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"hello-word"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"image"</span><span class="p">:</span><span class="w"> </span><span class="s2">"tutum/hello-world"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"target_num_containers"</span><span class="p">:</span><span class="w"> </span><span class="mi">3</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"linked_to_service"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
|
||||
</span><span class="p">{</span><span class="w">
|
||||
</span><span class="nt">"to_service"</span><span class="p">:</span><span class="w"> </span><span class="s2">"database"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"DB"</span><span class="w">
|
||||
</span><span class="p">}</span><span class="w">
|
||||
</span><span class="p">]</span><span class="w">
|
||||
</span><span class="p">},</span><span class="w">
|
||||
</span><span class="p">{</span><span class="w">
|
||||
</span><span class="nt">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"database"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"image"</span><span class="p">:</span><span class="w"> </span><span class="s2">"tutum/mysql"</span><span class="w">
|
||||
</span><span class="p">}</span><span class="w">
|
||||
</span><span class="p">]</span><span class="w">
|
||||
</span><span class="p">}</span><span class="w">
|
||||
</span></code></pre>
|
||||
<pre class="highlight shell"><code>docker-cloud stack update -f docker-compose.yml 46aca402
|
||||
</code></pre>
|
||||
|
||||
<p>Updates the details of every service in the stack.</p>
|
||||
|
||||
<h3 id="endpoint-type">Endpoint Type</h3>
|
||||
|
||||
<p>Available in Docker Cloud’s <strong>REST API</strong></p>
|
||||
|
||||
<h3 id="http-request">HTTP Request</h3>
|
||||
|
||||
<p><code class="prettyprint">PATCH /api/app/v1/stack/(uuid)/</code></p>
|
||||
|
||||
<h3 id="path-parameters">Path Parameters</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>Parameter</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td>uuid</td>
|
||||
<td>The UUID of the stack to update</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
<h3 id="json-parameters">JSON Parameters</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>Parameter</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td>services</td>
|
||||
<td>(optional) List of services belonging to the stack. Each service accepts the same parameters as a <a href="#update-an-existing-service">Update an existing service</a> operation (default: <code class="prettyprint">[]</code>) plus the ability to refer “links” and “volumes-from” by the name of another service in the stack (see example).</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
<h2 id="stop-a-stack">Stop a stack</h2>
|
||||
<pre class="highlight python"><code><span class="kn">import</span> <span class="nn">dockercloud</span>
|
||||
|
||||
<span class="n">stack</span> <span class="o">=</span> <span class="n">dockercloud</span><span class="o">.</span><span class="n">Stack</span><span class="o">.</span><span class="n">fetch</span><span class="p">(</span><span class="s">"46aca402-2109-4a70-a378-760cfed43816"</span><span class="p">)</span>
|
||||
<span class="n">stack</span><span class="o">.</span><span class="n">stop</span><span class="p">()</span>
|
||||
</code></pre>
|
||||
<pre class="highlight go"><code><span class="k">import</span><span class="x"> </span><span class="s">"github.com/docker/go-dockercloud/dockercloud"</span><span class="x">
|
||||
|
||||
</span><span class="n">stack</span><span class="p">,</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">:=</span><span class="x"> </span><span class="n">dockercloud</span><span class="o">.</span><span class="n">GetStack</span><span class="p">(</span><span class="s">"46aca402-2109-4a70-a378-760cfed43816"</span><span class="p">)</span><span class="x">
|
||||
|
||||
</span><span class="k">if</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">!=</span><span class="x"> </span><span class="no">nil</span><span class="x"> </span><span class="p">{</span><span class="x">
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">err</span><span class="p">)</span><span class="x">
|
||||
</span><span class="p">}</span><span class="x">
|
||||
|
||||
</span><span class="k">if</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">=</span><span class="x"> </span><span class="n">stack</span><span class="o">.</span><span class="n">Stop</span><span class="p">();</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">!=</span><span class="x"> </span><span class="no">nil</span><span class="x"> </span><span class="p">{</span><span class="x">
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">err</span><span class="p">)</span><span class="x">
|
||||
</span><span class="p">}</span><span class="x">
|
||||
</span></code></pre>
|
||||
<pre class="highlight http"><code><span class="nf">POST</span> <span class="nn">/api/app/v1/stack/46aca402-2109-4a70-a378-760cfed43816/stop/</span> <span class="k">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
||||
<span class="na">Host</span><span class="p">:</span> <span class="s">cloud.docker.com</span>
|
||||
<span class="na">Authorization</span><span class="p">:</span> <span class="s">Basic dXNlcm5hbWU6YXBpa2V5</span>
|
||||
<span class="na">Accept</span><span class="p">:</span> <span class="s">application/json</span>
|
||||
</code></pre>
|
||||
<pre class="highlight shell"><code>docker-cloud stack stop 46aca402-2109-4a70-a378-760cfed43816
|
||||
</code></pre>
|
||||
|
||||
<p>Stops the services in the stack.</p>
|
||||
|
||||
<h3 id="endpoint-type">Endpoint Type</h3>
|
||||
|
||||
<p>Available in Docker Cloud’s <strong>REST API</strong></p>
|
||||
|
||||
<h3 id="http-request">HTTP Request</h3>
|
||||
|
||||
<p><code class="prettyprint">POST /api/app/v1/stack/(uuid)/stop/</code></p>
|
||||
|
||||
<h3 id="path-parameters">Path Parameters</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>Parameter</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td>uuid</td>
|
||||
<td>The UUID of the stack to stop</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
<h2 id="start-a-stack">Start a stack</h2>
|
||||
<pre class="highlight python"><code><span class="kn">import</span> <span class="nn">dockercloud</span>
|
||||
|
||||
<span class="n">stack</span> <span class="o">=</span> <span class="n">dockercloud</span><span class="o">.</span><span class="n">Stack</span><span class="o">.</span><span class="n">fetch</span><span class="p">()</span>
|
||||
<span class="n">stack</span><span class="o">.</span><span class="n">start</span><span class="p">()</span>
|
||||
</code></pre>
|
||||
<pre class="highlight go"><code><span class="k">import</span><span class="x"> </span><span class="s">"github.com/docker/go-dockercloud/dockercloud"</span><span class="x">
|
||||
|
||||
</span><span class="n">stack</span><span class="p">,</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">:=</span><span class="x"> </span><span class="n">dockercloud</span><span class="o">.</span><span class="n">GetStack</span><span class="p">(</span><span class="s">"46aca402-2109-4a70-a378-760cfed43816"</span><span class="p">)</span><span class="x">
|
||||
|
||||
</span><span class="k">if</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">!=</span><span class="x"> </span><span class="no">nil</span><span class="x"> </span><span class="p">{</span><span class="x">
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">err</span><span class="p">)</span><span class="x">
|
||||
</span><span class="p">}</span><span class="x">
|
||||
|
||||
</span><span class="k">if</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">=</span><span class="x"> </span><span class="n">stack</span><span class="o">.</span><span class="n">Start</span><span class="p">();</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">!=</span><span class="x"> </span><span class="no">nil</span><span class="x"> </span><span class="p">{</span><span class="x">
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">err</span><span class="p">)</span><span class="x">
|
||||
</span><span class="p">}</span><span class="x">
|
||||
</span></code></pre>
|
||||
<pre class="highlight http"><code><span class="nf">POST</span> <span class="nn">/api/app/v1/stack/46aca402-2109-4a70-a378-760cfed43816/start/</span> <span class="k">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
||||
<span class="na">Host</span><span class="p">:</span> <span class="s">cloud.docker.com</span>
|
||||
<span class="na">Authorization</span><span class="p">:</span> <span class="s">Basic dXNlcm5hbWU6YXBpa2V5</span>
|
||||
<span class="na">Accept</span><span class="p">:</span> <span class="s">application/json</span>
|
||||
</code></pre>
|
||||
<pre class="highlight shell"><code>docker-cloud stack start 46aca402
|
||||
</code></pre>
|
||||
|
||||
<p>Starts the services in the stack.</p>
|
||||
|
||||
<h3 id="endpoint-type">Endpoint Type</h3>
|
||||
|
||||
<p>Available in Docker Cloud’s <strong>REST API</strong></p>
|
||||
|
||||
<h3 id="http-request">HTTP Request</h3>
|
||||
|
||||
<p><code class="prettyprint">POST /api/app/v1/stack/(uuid)/start/</code></p>
|
||||
|
||||
<h3 id="path-parameters">Path Parameters</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>Parameter</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td>uuid</td>
|
||||
<td>The UUID of the stack to start</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
<h2 id="redeploy-a-stack">Redeploy a stack</h2>
|
||||
<pre class="highlight python"><code><span class="kn">import</span> <span class="nn">dockercloud</span>
|
||||
|
||||
<span class="n">stack</span> <span class="o">=</span> <span class="n">dockercloud</span><span class="o">.</span><span class="n">Stack</span><span class="o">.</span><span class="n">fetch</span><span class="p">(</span><span class="s">"46aca402-2109-4a70-a378-760cfed43816"</span><span class="p">)</span>
|
||||
<span class="n">stack</span><span class="o">.</span><span class="n">redeploy</span><span class="p">()</span>
|
||||
</code></pre>
|
||||
<pre class="highlight go"><code><span class="k">import</span><span class="x"> </span><span class="s">"github.com/docker/go-dockercloud/dockercloud"</span><span class="x">
|
||||
|
||||
</span><span class="n">stack</span><span class="p">,</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">:=</span><span class="x"> </span><span class="n">dockercloud</span><span class="o">.</span><span class="n">GetStack</span><span class="p">(</span><span class="s">"46aca402-2109-4a70-a378-760cfed43816"</span><span class="p">)</span><span class="x">
|
||||
|
||||
</span><span class="k">if</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">!=</span><span class="x"> </span><span class="no">nil</span><span class="x"> </span><span class="p">{</span><span class="x">
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">err</span><span class="p">)</span><span class="x">
|
||||
</span><span class="p">}</span><span class="x">
|
||||
|
||||
</span><span class="c">//Redeploy(dockercloud.ReuseVolumesOption{Reuse: true}) to reuse the existing volumes</span><span class="x">
|
||||
</span><span class="c">//Redeploy(dockercloud.ReuseVolumesOption{Reuse: false}) to not reuse the existing volumes</span><span class="x">
|
||||
</span><span class="k">if</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">=</span><span class="x"> </span><span class="n">stack</span><span class="o">.</span><span class="n">Redeploy</span><span class="p">(</span><span class="n">dockercloud</span><span class="o">.</span><span class="n">ReuseVolumesOption</span><span class="p">{</span><span class="n">Reuse</span><span class="o">:</span><span class="x"> </span><span class="no">false</span><span class="p">});</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">!=</span><span class="x"> </span><span class="no">nil</span><span class="x"> </span><span class="p">{</span><span class="x">
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">err</span><span class="p">)</span><span class="x">
|
||||
</span><span class="p">}</span><span class="x">
|
||||
</span></code></pre>
|
||||
<pre class="highlight http"><code><span class="nf">POST</span> <span class="nn">/api/app/v1/stack/46aca402-2109-4a70-a378-760cfed43816/redeploy/</span> <span class="k">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
||||
<span class="na">Host</span><span class="p">:</span> <span class="s">cloud.docker.com</span>
|
||||
<span class="na">Authorization</span><span class="p">:</span> <span class="s">Basic dXNlcm5hbWU6YXBpa2V5</span>
|
||||
<span class="na">Accept</span><span class="p">:</span> <span class="s">application/json</span>
|
||||
</code></pre>
|
||||
<pre class="highlight shell"><code>docker-cloud stack redeploy 46aca402
|
||||
</code></pre>
|
||||
|
||||
<p>Redeploys all the services in the stack.</p>
|
||||
|
||||
<h3 id="endpoint-type">Endpoint Type</h3>
|
||||
|
||||
<p>Available in Docker Cloud’s <strong>REST API</strong></p>
|
||||
|
||||
<h3 id="http-request">HTTP Request</h3>
|
||||
|
||||
<p><code class="prettyprint">POST /api/app/v1/stack/(uuid)/redeploy/</code></p>
|
||||
|
||||
<h3 id="path-parameters">Path Parameters</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>Parameter</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td>uuid</td>
|
||||
<td>The UUID of the stack to redeploy</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
<h3 id="query-parameters">Query Parameters</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>Parameter</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td>reuse_volumes</td>
|
||||
<td>Wheather to reuse container volumes for this redeploy operation or not (default: <code class="prettyprint">true</code>).</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
<h2 id="terminate-a-stack">Terminate a stack</h2>
|
||||
<pre class="highlight python"><code><span class="kn">import</span> <span class="nn">dockercloud</span>
|
||||
|
||||
<span class="n">stack</span> <span class="o">=</span> <span class="n">dockercloud</span><span class="o">.</span><span class="n">Stack</span><span class="o">.</span><span class="n">fetch</span><span class="p">(</span><span class="s">"46aca402-2109-4a70-a378-760cfed43816"</span><span class="p">)</span>
|
||||
<span class="n">stack</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span>
|
||||
</code></pre>
|
||||
<pre class="highlight go"><code><span class="k">import</span><span class="x"> </span><span class="s">"github.com/docker/go-dockercloud/dockercloud"</span><span class="x">
|
||||
|
||||
</span><span class="n">stack</span><span class="p">,</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">:=</span><span class="x"> </span><span class="n">dockercloud</span><span class="o">.</span><span class="n">GetStack</span><span class="p">(</span><span class="s">"46aca402-2109-4a70-a378-760cfed43816"</span><span class="p">)</span><span class="x">
|
||||
|
||||
</span><span class="k">if</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">!=</span><span class="x"> </span><span class="no">nil</span><span class="x"> </span><span class="p">{</span><span class="x">
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">err</span><span class="p">)</span><span class="x">
|
||||
</span><span class="p">}</span><span class="x">
|
||||
|
||||
</span><span class="k">if</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">=</span><span class="x"> </span><span class="n">stack</span><span class="o">.</span><span class="n">Terminate</span><span class="p">();</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">!=</span><span class="x"> </span><span class="no">nil</span><span class="x"> </span><span class="p">{</span><span class="x">
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">err</span><span class="p">)</span><span class="x">
|
||||
</span><span class="p">}</span><span class="x">
|
||||
</span></code></pre>
|
||||
<pre class="highlight http"><code><span class="nf">DELETE</span> <span class="nn">/api/app/v1/stack/46aca402-2109-4a70-a378-760cfed43816/</span> <span class="k">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
||||
<span class="na">Host</span><span class="p">:</span> <span class="s">cloud.docker.com</span>
|
||||
<span class="na">Authorization</span><span class="p">:</span> <span class="s">Basic dXNlcm5hbWU6YXBpa2V5</span>
|
||||
<span class="na">Accept</span><span class="p">:</span> <span class="s">application/json</span>
|
||||
</code></pre>
|
||||
<pre class="highlight shell"><code>docker-cloud stack terminate 46aca402
|
||||
</code></pre>
|
||||
|
||||
<p>Terminate all the services in a the stack and the stack itself.</p>
|
||||
|
||||
<h3 id="endpoint-type">Endpoint Type</h3>
|
||||
|
||||
<p>Available in Docker Cloud’s <strong>REST API</strong></p>
|
||||
|
||||
<h3 id="http-request">HTTP Request</h3>
|
||||
|
||||
<p><code class="prettyprint">DELETE /api/app/v1/stack/(uuid)/</code></p>
|
||||
|
||||
<h3 id="path-parameters">Path Parameters</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>Parameter</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td>uuid</td>
|
||||
<td>The UUID of the stack to terminate</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
</div>
|
||||
<div class="dark-box">
|
||||
</div>
|
||||
</div>
|
||||
<div class="google-analytics">
|
||||
<!-- Google Tag Manager -->
|
||||
<noscript>
|
||||
<iframe src="//www.googletagmanager.com/ns.html?id=GTM-WLGFZV"
|
||||
height="0" width="0" style="display:none;visibility:hidden"></iframe>
|
||||
</noscript>
|
||||
<script>
|
||||
(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
|
||||
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
|
||||
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
|
||||
'//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
|
||||
})(window,document,'script','dataLayer','GTM-WLGFZV');
|
||||
</script>
|
||||
<!-- End Google Tag Manager -->
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,121 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||
<title>API Documentation</title>
|
||||
|
||||
<link href="../stylesheets/screen.css" rel="stylesheet" type="text/css" media="screen" />
|
||||
<link href="../stylesheets/print.css" rel="stylesheet" type="text/css" media="print" />
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
|
||||
<script src="../javascripts/all_nosearch.js" type="text/javascript"></script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="includes includes_tag">
|
||||
<a href="#" id="nav-button">
|
||||
<span>
|
||||
NAV
|
||||
<img src="../images/navbar.png" />
|
||||
</span>
|
||||
</a>
|
||||
<div class="tocify-wrapper">
|
||||
<img src="../images/logo.png" />
|
||||
<div id="toc">
|
||||
</div>
|
||||
</div>
|
||||
<div class="page-wrapper">
|
||||
<div class="dark-box"></div>
|
||||
<div class="content">
|
||||
<h1 id="tags">Tags</h1>
|
||||
|
||||
<h2 id="tag">Tag</h2>
|
||||
|
||||
<blockquote>
|
||||
<p>Example</p>
|
||||
</blockquote>
|
||||
<pre class="highlight json"><code><span class="p">{</span><span class="w">
|
||||
</span><span class="nt">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"byon=false"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"origin"</span><span class="p">:</span><span class="w"> </span><span class="s2">"tutum"</span><span class="w">
|
||||
</span><span class="p">}</span><span class="w">
|
||||
</span></code></pre>
|
||||
|
||||
<p>Tags are used to target the deployment of services to a specific set of nodes. <a href="../../docker-cloud/apps/deploy-tags/">Learn more</a></p>
|
||||
|
||||
<h3 id="attributes">Attributes</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>Attribute</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td>name</td>
|
||||
<td>Name of the tag</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>origin</td>
|
||||
<td>Possible values: <code class="prettyprint">user</code>, <code class="prettyprint">tutum</code></td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
<h2 id="list-all-node-tags">List all node tags</h2>
|
||||
<pre class="highlight http"><code><span class="nf">GET</span> <span class="nn">/api/infra/v1/tag/</span> <span class="k">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
||||
<span class="na">Host</span><span class="p">:</span> <span class="s">cloud.docker.com</span>
|
||||
<span class="na">Authorization</span><span class="p">:</span> <span class="s">Basic dXNlcm5hbWU6YXBpa2V5</span>
|
||||
<span class="na">Accept</span><span class="p">:</span> <span class="s">application/json</span>
|
||||
</code></pre>
|
||||
<pre class="highlight plaintext"><code>docker-cloud tag ls 7eaf7fff-882c
|
||||
</code></pre>
|
||||
|
||||
<p>Lists all tags used by all nodes. Returns a list of <code class="prettyprint">Tag</code> objects.</p>
|
||||
|
||||
<h3 id="endpoint-type">Endpoint Type</h3>
|
||||
|
||||
<p>Available in Docker Cloud’s <strong>REST API</strong></p>
|
||||
|
||||
<h3 id="http-request">HTTP Request</h3>
|
||||
|
||||
<p><code class="prettyprint">GET /api/infra/v1/tag/</code></p>
|
||||
|
||||
<h3 id="query-parameters">Query Parameters</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>Parameter</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td>name</td>
|
||||
<td>Filter by name</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>origin</td>
|
||||
<td>Filter by origin. Possible values: <code class="prettyprint">user</code>, <code class="prettyprint">tutum</code></td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
</div>
|
||||
<div class="dark-box">
|
||||
</div>
|
||||
</div>
|
||||
<div class="google-analytics">
|
||||
<!-- Google Tag Manager -->
|
||||
<noscript>
|
||||
<iframe src="//www.googletagmanager.com/ns.html?id=GTM-WLGFZV"
|
||||
height="0" width="0" style="display:none;visibility:hidden"></iframe>
|
||||
</noscript>
|
||||
<script>
|
||||
(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
|
||||
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
|
||||
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
|
||||
'//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
|
||||
})(window,document,'script','dataLayer','GTM-WLGFZV');
|
||||
</script>
|
||||
<!-- End Google Tag Manager -->
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,389 @@
|
|||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||
<title>API Documentation</title>
|
||||
|
||||
<link href="../stylesheets/screen.css" rel="stylesheet" type="text/css" media="screen" />
|
||||
<link href="../stylesheets/print.css" rel="stylesheet" type="text/css" media="print" />
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
|
||||
<script src="../javascripts/all_nosearch.js" type="text/javascript"></script>
|
||||
|
||||
</head>
|
||||
|
||||
<body class="includes includes_triggers">
|
||||
<a href="#" id="nav-button">
|
||||
<span>
|
||||
NAV
|
||||
<img src="../images/navbar.png" />
|
||||
</span>
|
||||
</a>
|
||||
<div class="tocify-wrapper">
|
||||
<img src="../images/logo.png" />
|
||||
<div id="toc">
|
||||
</div>
|
||||
</div>
|
||||
<div class="page-wrapper">
|
||||
<div class="dark-box"></div>
|
||||
<div class="content">
|
||||
<h1 id="triggers">Triggers</h1>
|
||||
|
||||
<h2 id="service-triggers">Service triggers</h2>
|
||||
|
||||
<blockquote>
|
||||
<p>Example</p>
|
||||
</blockquote>
|
||||
<pre class="highlight json"><code><span class="p">{</span><span class="w">
|
||||
</span><span class="nt">"url"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/api/app/v1/service/82d4a246-52d8-468d-903d-9da9ef05ff28/trigger/0224815a-c156-44e4-92d7-997c69354438/call/"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"operation"</span><span class="p">:</span><span class="w"> </span><span class="s2">"REDEPLOY"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"docker_trigger"</span><span class="p">,</span><span class="w">
|
||||
</span><span class="nt">"resource_uri"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/api/app/v1/service/82d4a246-52d8-468d-903d-9da9ef05ff28/trigger/0224815a-c156-44e4-92d7-997c69354438/"</span><span class="w">
|
||||
</span><span class="p">}</span><span class="w">
|
||||
</span></code></pre>
|
||||
|
||||
<p>Triggers are URLs that will start a redeploy of the service whenever a <code class="prettyprint">POST</code> request is sent to them. They require no authorization headers, so they should be treated as access tokens. Triggers can be revoked if they are leaked or no longer used for security purposes. See <a href="../../docker-cloud/apps/triggers/">Triggers</a> for more information.</p>
|
||||
|
||||
<h3 id="attributes">Attributes</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>Attribute</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td>url</td>
|
||||
<td>Address to be used to call the trigger with a <code class="prettyprint">POST</code> request</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>name</td>
|
||||
<td>A user provided name for the trigger</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>operation</td>
|
||||
<td>The operation that the trigger call performs (see table <code class="prettyprint">Operations</code> below)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>resource_uri</td>
|
||||
<td>A unique API endpoint that represents the trigger</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
<h3 id="operations">Operations</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>Operation</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td>REDEPLOY</td>
|
||||
<td>Performs a <code class="prettyprint">redeploy</code> service operation.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>SCALEUP</td>
|
||||
<td>Performs a <code class="prettyprint">scale up</code> service operation.</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
<h2 id="list-all-triggers">List all triggers</h2>
|
||||
<pre class="highlight python"><code><span class="kn">import</span> <span class="nn">dockercloud</span>
|
||||
|
||||
<span class="n">service</span> <span class="o">=</span> <span class="n">dockercloud</span><span class="o">.</span><span class="n">Service</span><span class="o">.</span><span class="n">fetch</span><span class="p">(</span><span class="s">'61a29874-9134-48f9-b460-f37d4bec4826'</span><span class="p">)</span>
|
||||
<span class="n">trigger</span> <span class="o">=</span> <span class="n">dockercloud</span><span class="o">.</span><span class="n">Trigger</span><span class="o">.</span><span class="n">fetch</span><span class="p">(</span><span class="n">service</span><span class="p">)</span>
|
||||
<span class="n">trigger</span><span class="o">.</span><span class="nb">list</span><span class="p">()</span>
|
||||
</code></pre>
|
||||
<pre class="highlight http"><code><span class="nf">GET</span> <span class="nn">/api/app/v1/service/61a29874-9134-48f9-b460-f37d4bec4826/trigger/</span> <span class="k">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
||||
<span class="na">Host</span><span class="p">:</span> <span class="s">cloud.docker.com</span>
|
||||
<span class="na">Authorization</span><span class="p">:</span> <span class="s">Basic dXNlcm5hbWU6YXBpa2V5</span>
|
||||
<span class="na">Accept</span><span class="p">:</span> <span class="s">application/json</span>
|
||||
</code></pre>
|
||||
<pre class="highlight go"><code><span class="k">import</span><span class="x"> </span><span class="s">"github.com/docker/go-dockercloud/dockercloud"</span><span class="x">
|
||||
|
||||
</span><span class="n">service</span><span class="p">,</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">:=</span><span class="x"> </span><span class="n">dockercloud</span><span class="o">.</span><span class="n">GetService</span><span class="p">(</span><span class="s">"61a29874-9134-48f9-b460-f37d4bec4826"</span><span class="p">)</span><span class="x">
|
||||
|
||||
</span><span class="k">if</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">!=</span><span class="x"> </span><span class="no">nil</span><span class="x"> </span><span class="p">{</span><span class="x">
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">err</span><span class="p">)</span><span class="x">
|
||||
</span><span class="p">}</span><span class="x">
|
||||
|
||||
</span><span class="n">trigger</span><span class="p">,</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">:=</span><span class="x"> </span><span class="n">service</span><span class="o">.</span><span class="n">ListTriggers</span><span class="p">()</span><span class="x">
|
||||
|
||||
</span><span class="k">if</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">!=</span><span class="x"> </span><span class="no">nil</span><span class="x"> </span><span class="p">{</span><span class="x">
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">err</span><span class="p">)</span><span class="x">
|
||||
</span><span class="p">}</span><span class="x">
|
||||
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">trigger</span><span class="p">)</span><span class="x">
|
||||
</span></code></pre>
|
||||
<pre class="highlight shell"><code>docker-cloud trigger list 61a29874-9134-48f9-b460-f37d4bec4826
|
||||
</code></pre>
|
||||
|
||||
<p>Lists all current triggers the service has associated to. Returns a list of <code class="prettyprint">Service Trigger</code> objects.</p>
|
||||
|
||||
<h3 id="endpoint-type">Endpoint Type</h3>
|
||||
|
||||
<p>Available in Docker Cloud’s <strong>REST API</strong></p>
|
||||
|
||||
<h3 id="http-request">HTTP Request</h3>
|
||||
|
||||
<p><code class="prettyprint">GET /api/app/v1/service/(uuid)/trigger/</code></p>
|
||||
|
||||
<h3 id="path-parameters">Path Parameters</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>Parameter</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td>uuid</td>
|
||||
<td>The UUID of the service the triggers are associated to</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
<h2 id="create-a-new-trigger">Create a new trigger</h2>
|
||||
<pre class="highlight python"><code><span class="kn">import</span> <span class="nn">dockercloud</span>
|
||||
|
||||
<span class="n">service</span> <span class="o">=</span> <span class="n">dockercloud</span><span class="o">.</span><span class="n">Service</span><span class="o">.</span><span class="n">fetch</span><span class="p">(</span><span class="s">'61a29874-9134-48f9-b460-f37d4bec4826'</span><span class="p">)</span>
|
||||
<span class="n">trigger</span> <span class="o">=</span> <span class="n">dockercloud</span><span class="o">.</span><span class="n">Trigger</span><span class="o">.</span><span class="n">fetch</span><span class="p">(</span><span class="n">service</span><span class="p">)</span>
|
||||
<span class="n">trigger</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="s">"mytrigger_name"</span><span class="p">,</span> <span class="n">operation</span><span class="o">=</span><span class="s">"REDEPLOY"</span><span class="p">)</span>
|
||||
<span class="n">trigger</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
|
||||
</code></pre>
|
||||
<pre class="highlight go"><code><span class="k">import</span><span class="x"> </span><span class="s">"github.com/docker/go-dockercloud/dockercloud"</span><span class="x">
|
||||
|
||||
</span><span class="n">service</span><span class="p">,</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">:=</span><span class="x"> </span><span class="n">dockercloud</span><span class="o">.</span><span class="n">GetService</span><span class="p">(</span><span class="s">"61a29874-9134-48f9-b460-f37d4bec4826"</span><span class="p">)</span><span class="x">
|
||||
|
||||
</span><span class="k">if</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">!=</span><span class="x"> </span><span class="no">nil</span><span class="x"> </span><span class="p">{</span><span class="x">
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">err</span><span class="p">)</span><span class="x">
|
||||
</span><span class="p">}</span><span class="x">
|
||||
|
||||
</span><span class="n">trigger</span><span class="p">,</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">:=</span><span class="x"> </span><span class="n">service</span><span class="o">.</span><span class="n">CreateTrigger</span><span class="p">(</span><span class="n">dockercloud</span><span class="o">.</span><span class="n">TriggerCreateRequest</span><span class="p">{</span><span class="n">Name</span><span class="o">:</span><span class="x"> </span><span class="s">"test-trigger"</span><span class="p">,</span><span class="x"> </span><span class="n">Operation</span><span class="o">:</span><span class="x"> </span><span class="s">"REDEPLOY"</span><span class="p">})</span><span class="x">
|
||||
|
||||
</span><span class="k">if</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">!=</span><span class="x"> </span><span class="no">nil</span><span class="x"> </span><span class="p">{</span><span class="x">
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">err</span><span class="p">)</span><span class="x">
|
||||
</span><span class="p">}</span><span class="x">
|
||||
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">trigger</span><span class="p">)</span><span class="x">
|
||||
</span></code></pre>
|
||||
<pre class="highlight http"><code><span class="nf">POST</span> <span class="nn">/api/app/v1/service/61a29874-9134-48f9-b460-f37d4bec4826/trigger/</span> <span class="k">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
||||
<span class="na">Host</span><span class="p">:</span> <span class="s">cloud.docker.com</span>
|
||||
<span class="na">Authorization</span><span class="p">:</span> <span class="s">Basic dXNlcm5hbWU6YXBpa2V5</span>
|
||||
<span class="na">Accept</span><span class="p">:</span> <span class="s">application/json</span>
|
||||
<span class="na">Content-Type</span><span class="p">:</span> <span class="s">application/json</span>
|
||||
|
||||
<span class="p">{</span><span class="nt">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mytrigger_name"</span><span class="p">,</span><span class="w"> </span><span class="nt">"operation"</span><span class="p">:</span><span class="w"> </span><span class="s2">"REDEPLOY"</span><span class="p">}</span><span class="w">
|
||||
</span></code></pre>
|
||||
<pre class="highlight shell"><code>docker-cloud trigger create --name mytrigger_name --operation REDEPLOY 61a29874-9134-48f9-b460-f37d4bec4826
|
||||
</code></pre>
|
||||
|
||||
<p>Creates a new service trigger.</p>
|
||||
|
||||
<h3 id="endpoint-type">Endpoint Type</h3>
|
||||
|
||||
<p>Available in Docker Cloud’s <strong>REST API</strong></p>
|
||||
|
||||
<h3 id="http-request">HTTP Request</h3>
|
||||
|
||||
<p><code class="prettyprint">POST /api/app/v1/service/(uuid)/trigger/</code></p>
|
||||
|
||||
<h3 id="json-parameters">JSON Parameters</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>Parameter</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td>name</td>
|
||||
<td>(optional) A user provided name for the trigger</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>operation</td>
|
||||
<td>(optional) The operation to be performed by the trigger (default: “REDEPLOY”)</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
<h2 id="get-an-existing-trigger">Get an existing trigger</h2>
|
||||
<pre class="highlight python"><code><span class="kn">import</span> <span class="nn">dockercloud</span>
|
||||
|
||||
<span class="n">service</span> <span class="o">=</span> <span class="n">dockercloud</span><span class="o">.</span><span class="n">Service</span><span class="o">.</span><span class="n">fetch</span><span class="p">(</span><span class="s">'61a29874-9134-48f9-b460-f37d4bec4826'</span><span class="p">)</span>
|
||||
<span class="n">trigger</span> <span class="o">=</span> <span class="n">dockercloud</span><span class="o">.</span><span class="n">Trigger</span><span class="o">.</span><span class="n">fetch</span><span class="p">(</span><span class="n">service</span><span class="p">)</span>
|
||||
</code></pre>
|
||||
<pre class="highlight go"><code><span class="k">import</span><span class="x"> </span><span class="s">"github.com/docker/go-dockercloud/dockercloud"</span><span class="x">
|
||||
|
||||
</span><span class="n">service</span><span class="p">,</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">:=</span><span class="x"> </span><span class="n">dockercloud</span><span class="o">.</span><span class="n">GetService</span><span class="p">(</span><span class="s">"61a29874-9134-48f9-b460-f37d4bec4826"</span><span class="p">)</span><span class="x">
|
||||
|
||||
</span><span class="k">if</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">!=</span><span class="x"> </span><span class="no">nil</span><span class="x"> </span><span class="p">{</span><span class="x">
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">err</span><span class="p">)</span><span class="x">
|
||||
</span><span class="p">}</span><span class="x">
|
||||
|
||||
</span><span class="n">trigger</span><span class="p">,</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">:=</span><span class="x"> </span><span class="n">service</span><span class="o">.</span><span class="n">GetTrigger</span><span class="p">(</span><span class="s">"7eaf7fff-882c-4f3d-9a8f-a22317ac00ce"</span><span class="p">)</span><span class="x">
|
||||
|
||||
</span><span class="k">if</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">!=</span><span class="x"> </span><span class="no">nil</span><span class="x"> </span><span class="p">{</span><span class="x">
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">err</span><span class="p">)</span><span class="x">
|
||||
</span><span class="p">}</span><span class="x">
|
||||
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">trigger</span><span class="p">)</span><span class="x">
|
||||
</span></code></pre>
|
||||
<pre class="highlight http"><code><span class="nf">GET</span> <span class="nn">/api/app/v1/service/61a29874-9134-48f9-b460-f37d4bec4826/trigger/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/</span> <span class="k">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
||||
<span class="na">Host</span><span class="p">:</span> <span class="s">cloud.docker.com</span>
|
||||
<span class="na">Authorization</span><span class="p">:</span> <span class="s">Basic dXNlcm5hbWU6YXBpa2V5</span>
|
||||
<span class="na">Accept</span><span class="p">:</span> <span class="s">application/json</span>
|
||||
</code></pre>
|
||||
|
||||
<p>Get all the details of an specific trigger</p>
|
||||
|
||||
<h3 id="endpoint-type">Endpoint Type</h3>
|
||||
|
||||
<p>Available in Docker Cloud’s <strong>REST API</strong></p>
|
||||
|
||||
<h3 id="http-request">HTTP Request</h3>
|
||||
|
||||
<p><code class="prettyprint">GET /api/app/v1/service/(uuid)/trigger/(trigger_uuid)/</code></p>
|
||||
|
||||
<h3 id="path-parameters">Path Parameters</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>Parameter</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td>uuid</td>
|
||||
<td>The UUID of the service the triggers are associated to</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>trigger_uuid</td>
|
||||
<td>The UUID of the trigger to retrieve</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
<h2 id="delete-a-trigger">Delete a trigger</h2>
|
||||
<pre class="highlight python"><code><span class="kn">import</span> <span class="nn">dockercloud</span>
|
||||
|
||||
<span class="n">service</span> <span class="o">=</span> <span class="n">dockercloud</span><span class="o">.</span><span class="n">Service</span><span class="o">.</span><span class="n">fetch</span><span class="p">(</span><span class="s">'61a29874-9134-48f9-b460-f37d4bec4826'</span><span class="p">)</span>
|
||||
<span class="n">trigger</span> <span class="o">=</span> <span class="n">dockercloud</span><span class="o">.</span><span class="n">Trigger</span><span class="o">.</span><span class="n">fetch</span><span class="p">(</span><span class="n">service</span><span class="p">)</span>
|
||||
<span class="n">trigger</span><span class="o">.</span><span class="n">delete</span><span class="p">(</span><span class="s">"7eaf7fff-882c-4f3d-9a8f-a22317ac00ce"</span><span class="p">)</span>
|
||||
</code></pre>
|
||||
<pre class="highlight go"><code><span class="k">import</span><span class="x"> </span><span class="s">"github.com/docker/go-dockercloud/dockercloud"</span><span class="x">
|
||||
|
||||
</span><span class="n">service</span><span class="p">,</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">:=</span><span class="x"> </span><span class="n">dockercloud</span><span class="o">.</span><span class="n">GetService</span><span class="p">(</span><span class="s">"61a29874-9134-48f9-b460-f37d4bec4826"</span><span class="p">)</span><span class="x">
|
||||
|
||||
</span><span class="k">if</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">!=</span><span class="x"> </span><span class="no">nil</span><span class="x"> </span><span class="p">{</span><span class="x">
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">err</span><span class="p">)</span><span class="x">
|
||||
</span><span class="p">}</span><span class="x">
|
||||
|
||||
</span><span class="n">service</span><span class="o">.</span><span class="n">DeleteTrigger</span><span class="p">(</span><span class="s">"7eaf7fff-882c-4f3d-9a8f-a22317ac00ce"</span><span class="p">)</span><span class="x">
|
||||
</span></code></pre>
|
||||
<pre class="highlight http"><code><span class="nf">DELETE</span> <span class="nn">/api/app/v1/service/61a29874-9134-48f9-b460-f37d4bec4826/trigger/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/</span> <span class="k">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
||||
<span class="na">Host</span><span class="p">:</span> <span class="s">cloud.docker.com</span>
|
||||
<span class="na">Authorization</span><span class="p">:</span> <span class="s">Basic dXNlcm5hbWU6YXBpa2V5</span>
|
||||
<span class="na">Accept</span><span class="p">:</span> <span class="s">application/json</span>
|
||||
</code></pre>
|
||||
<pre class="highlight shell"><code>docker-cloud trigger rm 61a29874-9134-48f9-b460-f37d4bec4826 7eaf7fff-882c-4f3d-9a8f-a22317ac00ce
|
||||
</code></pre>
|
||||
|
||||
<p>Deletes specific trigger. It will be no longer available to be called.</p>
|
||||
|
||||
<h3 id="endpoint-type">Endpoint Type</h3>
|
||||
|
||||
<p>Available in Docker Cloud’s <strong>REST API</strong></p>
|
||||
|
||||
<h3 id="http-request">HTTP Request</h3>
|
||||
|
||||
<p><code class="prettyprint">DELETE /api/app/v1/service/(uuid)/trigger/(trigger_uuid)/</code></p>
|
||||
|
||||
<h3 id="path-parameters">Path Parameters</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>Parameter</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td>uuid</td>
|
||||
<td>The UUID of the associated service</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>trigger_uuid</td>
|
||||
<td>The UUID of the trigger to delete</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
<h2 id="call-a-trigger">Call a trigger</h2>
|
||||
<pre class="highlight python"><code><span class="kn">import</span> <span class="nn">dockercloud</span>
|
||||
|
||||
<span class="n">service</span> <span class="o">=</span> <span class="n">dockercloud</span><span class="o">.</span><span class="n">Service</span><span class="o">.</span><span class="n">fetch</span><span class="p">(</span><span class="s">'61a29874-9134-48f9-b460-f37d4bec4826'</span><span class="p">)</span>
|
||||
<span class="n">trigger</span> <span class="o">=</span> <span class="n">dockercloud</span><span class="o">.</span><span class="n">Trigger</span><span class="o">.</span><span class="n">fetch</span><span class="p">(</span><span class="n">service</span><span class="p">)</span>
|
||||
<span class="n">trigger</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="s">"7eaf7fff-882c-4f3d-9a8f-a22317ac00ce"</span><span class="p">)</span>
|
||||
</code></pre>
|
||||
<pre class="highlight go"><code><span class="k">import</span><span class="x"> </span><span class="s">"github.com/docker/go-dockercloud/dockercloud"</span><span class="x">
|
||||
|
||||
</span><span class="n">service</span><span class="p">,</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">:=</span><span class="x"> </span><span class="n">dockercloud</span><span class="o">.</span><span class="n">GetService</span><span class="p">(</span><span class="s">"61a29874-9134-48f9-b460-f37d4bec4826"</span><span class="p">)</span><span class="x">
|
||||
|
||||
</span><span class="k">if</span><span class="x"> </span><span class="n">err</span><span class="x"> </span><span class="o">!=</span><span class="x"> </span><span class="no">nil</span><span class="x"> </span><span class="p">{</span><span class="x">
|
||||
</span><span class="n">log</span><span class="o">.</span><span class="n">Println</span><span class="p">(</span><span class="n">err</span><span class="p">)</span><span class="x">
|
||||
</span><span class="p">}</span><span class="x">
|
||||
|
||||
</span><span class="n">service</span><span class="o">.</span><span class="n">CallTrigger</span><span class="p">(</span><span class="s">"7eaf7fff-882c-4f3d-9a8f-a22317ac00ce"</span><span class="p">)</span><span class="x">
|
||||
</span></code></pre>
|
||||
<pre class="highlight http"><code><span class="nf">POST</span> <span class="nn">/api/app/v1/service/61a29874-9134-48f9-b460-f37d4bec4826/trigger/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/call/</span> <span class="k">HTTP</span><span class="o">/</span><span class="m">1.1</span>
|
||||
<span class="na">Host</span><span class="p">:</span> <span class="s">cloud.docker.com</span>
|
||||
<span class="na">Accept</span><span class="p">:</span> <span class="s">application/json</span>
|
||||
</code></pre>
|
||||
|
||||
<p>Executes the trigger. For <code class="prettyprint">SCALEUP</code> triggers, the number of containers to scale up can be passed at the end of the trigger call url, for example <code class="prettyprint">/api/app/v1/service/61a29874-9134-48f9-b460-f37d4bec4826/trigger/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/call/3/</code>.</p>
|
||||
|
||||
<h3 id="endpoint-type">Endpoint Type</h3>
|
||||
|
||||
<p>Available in Docker Cloud’s <strong>REST API</strong></p>
|
||||
|
||||
<h3 id="http-request">HTTP Request</h3>
|
||||
|
||||
<p><code class="prettyprint">POST /api/app/v1/service/(uuid)/trigger/(trigger_uuid)/call/</code></p>
|
||||
|
||||
<h3 id="path-parameters">Path Parameters</h3>
|
||||
|
||||
<table><thead>
|
||||
<tr>
|
||||
<th>Parameter</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead><tbody>
|
||||
<tr>
|
||||
<td>uuid</td>
|
||||
<td>The UUID of the associated service</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>trigger_uuid</td>
|
||||
<td>The UUID of the trigger to call</td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
</div>
|
||||
<div class="dark-box">
|
||||
</div>
|
||||
</div>
|
||||
<div class="google-analytics">
|
||||
<!-- Google Tag Manager -->
|
||||
<noscript>
|
||||
<iframe src="//www.googletagmanager.com/ns.html?id=GTM-WLGFZV"
|
||||
height="0" width="0" style="display:none;visibility:hidden"></iframe>
|
||||
</noscript>
|
||||
<script>
|
||||
(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
|
||||
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
|
||||
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
|
||||
'//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
|
||||
})(window,document,'script','dataLayer','GTM-WLGFZV');
|
||||
</script>
|
||||
<!-- End Google Tag Manager -->
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1 @@
|
|||
/*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}.content h1,.content h2,.content h3,.content h4,body{font-family:"Helvetica Neue", Helvetica, Arial, "Microsoft Yahei","微软雅黑", STXihei, "华文细黑", sans-serif;font-size:13px}.content h1,.content h2,.content h3,.content h4{font-weight:bold}.content pre,.content code{font-family:Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, serif;font-size:12px;line-height:1.5}.content pre,.content code{word-break:break-all;word-break:break-word;-webkit-hyphens:auto;-moz-hyphens:auto;-ms-hyphens:auto;hyphens:auto}@font-face{font-family:'slate';src:url("../fonts/slate.eot?-syv14m");src:url("../fonts/slate.eot?#iefix-syv14m") format("embedded-opentype"),url("../fonts/slate.woff2?-syv14m") format("woff2"),url("../fonts/slate.woff?-syv14m") format("woff"),url("../fonts/slate.ttf?-syv14m") format("truetype"),url("../fonts/slate.svg?-syv14m#slate") format("svg");font-weight:normal;font-style:normal}.content aside.warning:before,.content aside.notice:before,.content aside.success:before{font-family:'slate';speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1}.content aside.warning:before{content:"\e600"}.content aside.notice:before{content:"\e602"}.content aside.success:before{content:"\e606"}.tocify,.toc-footer,.lang-selector,.search,#nav-button{display:none}.tocify-wrapper>img{margin:0 auto;display:block}.content{font-size:12px}.content pre,.content code{border:1px solid #999;border-radius:5px;font-size:0.8em}.content pre{padding:1.3em}.content code{padding:0.2em}.content table{border:1px solid #999}.content table tr{border-bottom:1px solid #999}.content table td,.content table th{padding:0.7em}.content p{line-height:1.5}.content a{text-decoration:none;color:#000}.content h1{font-size:2.5em;padding-top:0.5em;padding-bottom:0.5em;margin-top:1em;margin-bottom:21px;border:2px solid #ccc;border-width:2px 0;text-align:center}.content h2{font-size:1.8em;margin-top:2em;border-top:2px solid #ccc;padding-top:0.8em}.content h1+h2,.content h1+div+h2{border-top:none;padding-top:0;margin-top:0}.content h3,.content h4{font-size:0.8em;margin-top:1.5em;margin-bottom:0.8em;text-transform:uppercase}.content h5,.content h6{text-transform:uppercase}.content aside{padding:1em;border:1px solid #ccc;border-radius:5px;margin-top:1.5em;margin-bottom:1.5em;line-height:1.6}.content aside:before{vertical-align:middle;padding-right:0.5em;font-size:14px}
|
||||
|
|
@ -0,0 +1 @@
|
|||
build/
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
.idea
|
||||
.DS_Store
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
FROM ubuntu:trusty
|
||||
|
||||
RUN apt-get update && \
|
||||
DEBIAN_FRONTEND=noninteractive apt-get install -yq ruby ruby-dev build-essential git awscli && \
|
||||
gem install --no-ri --no-rdoc bundler
|
||||
WORKDIR /app
|
||||
ADD Gemfile /app/Gemfile
|
||||
ADD Gemfile.lock /app/Gemfile.lock
|
||||
RUN bundle install
|
||||
ADD . /app
|
||||
|
||||
ENV PATH=$PATH:/app AWS_ACCESS_KEY_ID=**setme** AWS_SECRET_ACCESS_KEY=**setme** BUCKET=**setme**
|
||||
|
||||
EXPOSE 4567
|
||||
CMD ["bundle", "exec", "middleman", "server"]
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
source 'https://rubygems.org'
|
||||
|
||||
# Middleman
|
||||
gem 'middleman', '~>3.3.10'
|
||||
gem 'middleman-gh-pages', '~> 0.0.3'
|
||||
gem 'middleman-syntax', '~> 2.0.0'
|
||||
gem 'middleman-autoprefixer', '~> 2.4.4'
|
||||
gem 'rouge', '~> 1.9.0'
|
||||
gem 'redcarpet', '~> 3.3.2'
|
||||
|
||||
gem 'rake', '~> 10.4.2'
|
||||
gem 'therubyracer', '~> 0.12.1', platforms: :ruby
|
||||
|
|
@ -0,0 +1,140 @@
|
|||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
activesupport (4.1.11)
|
||||
i18n (~> 0.6, >= 0.6.9)
|
||||
json (~> 1.7, >= 1.7.7)
|
||||
minitest (~> 5.1)
|
||||
thread_safe (~> 0.1)
|
||||
tzinfo (~> 1.1)
|
||||
autoprefixer-rails (5.2.0.1)
|
||||
execjs
|
||||
json
|
||||
celluloid (0.16.0)
|
||||
timers (~> 4.0.0)
|
||||
chunky_png (1.3.4)
|
||||
coffee-script (2.4.1)
|
||||
coffee-script-source
|
||||
execjs
|
||||
coffee-script-source (1.9.1.1)
|
||||
compass (1.0.3)
|
||||
chunky_png (~> 1.2)
|
||||
compass-core (~> 1.0.2)
|
||||
compass-import-once (~> 1.0.5)
|
||||
rb-fsevent (>= 0.9.3)
|
||||
rb-inotify (>= 0.9)
|
||||
sass (>= 3.3.13, < 3.5)
|
||||
compass-core (1.0.3)
|
||||
multi_json (~> 1.0)
|
||||
sass (>= 3.3.0, < 3.5)
|
||||
compass-import-once (1.0.5)
|
||||
sass (>= 3.2, < 3.5)
|
||||
erubis (2.7.0)
|
||||
execjs (2.5.2)
|
||||
ffi (1.9.8)
|
||||
haml (4.0.6)
|
||||
tilt
|
||||
hike (1.2.3)
|
||||
hitimes (1.2.2)
|
||||
hooks (0.4.0)
|
||||
uber (~> 0.0.4)
|
||||
i18n (0.7.0)
|
||||
json (1.8.3)
|
||||
kramdown (1.7.0)
|
||||
libv8 (3.16.14.7)
|
||||
listen (2.10.1)
|
||||
celluloid (~> 0.16.0)
|
||||
rb-fsevent (>= 0.9.3)
|
||||
rb-inotify (>= 0.9)
|
||||
middleman (3.3.12)
|
||||
coffee-script (~> 2.2)
|
||||
compass (>= 1.0.0, < 2.0.0)
|
||||
compass-import-once (= 1.0.5)
|
||||
execjs (~> 2.0)
|
||||
haml (>= 4.0.5)
|
||||
kramdown (~> 1.2)
|
||||
middleman-core (= 3.3.12)
|
||||
middleman-sprockets (>= 3.1.2)
|
||||
sass (>= 3.4.0, < 4.0)
|
||||
uglifier (~> 2.5)
|
||||
middleman-autoprefixer (2.4.4)
|
||||
autoprefixer-rails (~> 5.2.0)
|
||||
middleman-core (>= 3.3.3)
|
||||
middleman-core (3.3.12)
|
||||
activesupport (~> 4.1.0)
|
||||
bundler (~> 1.1)
|
||||
erubis
|
||||
hooks (~> 0.3)
|
||||
i18n (~> 0.7.0)
|
||||
listen (>= 2.7.9, < 3.0)
|
||||
padrino-helpers (~> 0.12.3)
|
||||
rack (>= 1.4.5, < 2.0)
|
||||
rack-test (~> 0.6.2)
|
||||
thor (>= 0.15.2, < 2.0)
|
||||
tilt (~> 1.4.1, < 2.0)
|
||||
middleman-gh-pages (0.0.3)
|
||||
rake (> 0.9.3)
|
||||
middleman-sprockets (3.4.2)
|
||||
middleman-core (>= 3.3)
|
||||
sprockets (~> 2.12.1)
|
||||
sprockets-helpers (~> 1.1.0)
|
||||
sprockets-sass (~> 1.3.0)
|
||||
middleman-syntax (2.0.0)
|
||||
middleman-core (~> 3.2)
|
||||
rouge (~> 1.0)
|
||||
minitest (5.7.0)
|
||||
multi_json (1.11.1)
|
||||
padrino-helpers (0.12.5)
|
||||
i18n (~> 0.6, >= 0.6.7)
|
||||
padrino-support (= 0.12.5)
|
||||
tilt (~> 1.4.1)
|
||||
padrino-support (0.12.5)
|
||||
activesupport (>= 3.1)
|
||||
rack (1.6.4)
|
||||
rack-test (0.6.3)
|
||||
rack (>= 1.0)
|
||||
rake (10.4.2)
|
||||
rb-fsevent (0.9.5)
|
||||
rb-inotify (0.9.5)
|
||||
ffi (>= 0.5.0)
|
||||
redcarpet (3.3.2)
|
||||
ref (1.0.5)
|
||||
rouge (1.9.0)
|
||||
sass (3.4.14)
|
||||
sprockets (2.12.3)
|
||||
hike (~> 1.2)
|
||||
multi_json (~> 1.0)
|
||||
rack (~> 1.0)
|
||||
tilt (~> 1.1, != 1.3.0)
|
||||
sprockets-helpers (1.1.0)
|
||||
sprockets (~> 2.0)
|
||||
sprockets-sass (1.3.1)
|
||||
sprockets (~> 2.0)
|
||||
tilt (~> 1.1)
|
||||
therubyracer (0.12.2)
|
||||
libv8 (~> 3.16.14.0)
|
||||
ref
|
||||
thor (0.19.1)
|
||||
thread_safe (0.3.5)
|
||||
tilt (1.4.1)
|
||||
timers (4.0.1)
|
||||
hitimes
|
||||
tzinfo (1.2.2)
|
||||
thread_safe (~> 0.1)
|
||||
uber (0.0.13)
|
||||
uglifier (2.7.1)
|
||||
execjs (>= 0.3.0)
|
||||
json (>= 1.8.0)
|
||||
|
||||
PLATFORMS
|
||||
ruby
|
||||
|
||||
DEPENDENCIES
|
||||
middleman (~> 3.3.10)
|
||||
middleman-autoprefixer (~> 2.4.4)
|
||||
middleman-gh-pages (~> 0.0.3)
|
||||
middleman-syntax (~> 2.0.0)
|
||||
rake (~> 10.4.2)
|
||||
redcarpet (~> 3.3.2)
|
||||
rouge (~> 1.9.0)
|
||||
therubyracer (~> 0.12.1)
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
Copyright 2008-2013 Concur Technologies, Inc.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
not use this file except in compliance with the License. You may obtain
|
||||
a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
License for the specific language governing permissions and limitations
|
||||
under the License.
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
.PHONY: docs build release
|
||||
|
||||
CONTAINER_NAME=api-build
|
||||
export CONTAINER_NAME
|
||||
|
||||
docs: build
|
||||
docker run --rm -it -p 4567:4567 dockercloud/api-docs
|
||||
|
||||
build:
|
||||
git submodule init && git submodule update
|
||||
docker build -t dockercloud/api-docs .
|
||||
|
||||
release: build
|
||||
docker rm -f $(CONTAINER_NAME) || true
|
||||
docker run --name $(CONTAINER_NAME) -it \
|
||||
dockercloud/api-docs middleman build
|
||||
docker cp $(CONTAINER_NAME):/app/build ../apidocs/
|
||||
rm -r ../apidocs/docker-cloud
|
||||
mv ../apidocs/build ../apidocs/docker-cloud
|
||||
cp ../apidocs/docker-cloud/index.html ../apidocs/layouts/single.html
|
||||
# defuse text that looks like a go template
|
||||
grep -rl '{{' ../apidocs/* | xargs sed -i~ "s/{{/{ {/g"
|
||||
rm ../apidocs/docker-cloud/includes/node.html~
|
||||
rm ../apidocs/docker-cloud/includes/stack.html~
|
||||
rm ../apidocs/docker-cloud/index.html~
|
||||
rm ../apidocs/layouts/single.html~
|
||||
docker rm $(CONTAINER_NAME)
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
dockercloud/api-docs
|
||||
====================
|
||||
|
||||
[](https://cloud.docker.com/stack/deploy/)
|
||||
|
||||
If you find a typo or mismatch between the API and this documentation, please send us a pull request!
|
||||
|
||||
|
||||
## Usage
|
||||
|
||||
To run it locally:
|
||||
|
||||
git clone https://github.com/tutumcloud/cloud-api-docs.git
|
||||
make docs
|
||||
|
||||
The documentation will be available in http://localhost:8000/
|
||||
|
||||
|
||||
## Updating the release HTML
|
||||
|
||||
As with the HTML generated by the DTR apidocs, the Docker Cloud documentation
|
||||
needs to be generated and the resulting HTML commited into this repository.
|
||||
|
||||
After merging all PR's, run `make release`. This will place the updated HTML into
|
||||
the `build` directory in your local `cloud-api-docs` repo.
|
||||
|
||||
Create a new Pull Request and get it merged. - now this repository is ready for the
|
||||
release process using `docker/docs.docker.com`.
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
require 'middleman-gh-pages'
|
||||
require 'rake/clean'
|
||||
|
||||
CLOBBER.include('build')
|
||||
|
||||
task :default => [:build]
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
# Markdown
|
||||
set :markdown_engine, :redcarpet
|
||||
set :markdown,
|
||||
fenced_code_blocks: true,
|
||||
smartypants: true,
|
||||
disable_indented_code_blocks: true,
|
||||
prettify: true,
|
||||
tables: true,
|
||||
with_toc_data: true,
|
||||
no_intra_emphasis: true
|
||||
|
||||
# Assets
|
||||
set :css_dir, 'stylesheets'
|
||||
set :js_dir, 'javascripts'
|
||||
set :images_dir, 'images'
|
||||
set :fonts_dir, 'fonts'
|
||||
|
||||
# Activate the syntax highlighter
|
||||
activate :syntax
|
||||
|
||||
activate :autoprefixer do |config|
|
||||
config.browsers = ['last 2 version', 'Firefox ESR']
|
||||
config.cascade = false
|
||||
config.inline = true
|
||||
end
|
||||
|
||||
# Github pages require relative links
|
||||
activate :relative_assets
|
||||
set :relative_links, true
|
||||
|
||||
# Build Configuration
|
||||
configure :build do
|
||||
activate :minify_css
|
||||
activate :minify_javascript
|
||||
# activate :relative_assets
|
||||
# activate :asset_hash
|
||||
# activate :gzip
|
||||
end
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
apidocs:
|
||||
image: tutum/api-docs:latest
|
||||
ports:
|
||||
- "4567:4567"
|
||||
|
|
@ -0,0 +1,148 @@
|
|||
{
|
||||
"IcoMoonType": "selection",
|
||||
"icons": [
|
||||
{
|
||||
"icon": {
|
||||
"paths": [
|
||||
"M438.857 73.143q119.429 0 220.286 58.857t159.714 159.714 58.857 220.286-58.857 220.286-159.714 159.714-220.286 58.857-220.286-58.857-159.714-159.714-58.857-220.286 58.857-220.286 159.714-159.714 220.286-58.857zM512 785.714v-108.571q0-8-5.143-13.429t-12.571-5.429h-109.714q-7.429 0-13.143 5.714t-5.714 13.143v108.571q0 7.429 5.714 13.143t13.143 5.714h109.714q7.429 0 12.571-5.429t5.143-13.429zM510.857 589.143l10.286-354.857q0-6.857-5.714-10.286-5.714-4.571-13.714-4.571h-125.714q-8 0-13.714 4.571-5.714 3.429-5.714 10.286l9.714 354.857q0 5.714 5.714 10t13.714 4.286h105.714q8 0 13.429-4.286t6-10z"
|
||||
],
|
||||
"attrs": [],
|
||||
"isMulticolor": false,
|
||||
"tags": [
|
||||
"exclamation-circle"
|
||||
],
|
||||
"defaultCode": 61546,
|
||||
"grid": 14
|
||||
},
|
||||
"attrs": [],
|
||||
"properties": {
|
||||
"id": 100,
|
||||
"order": 4,
|
||||
"prevSize": 28,
|
||||
"code": 58880,
|
||||
"name": "exclamation-sign",
|
||||
"ligatures": ""
|
||||
},
|
||||
"setIdx": 0,
|
||||
"iconIdx": 0
|
||||
},
|
||||
{
|
||||
"icon": {
|
||||
"paths": [
|
||||
"M585.143 786.286v-91.429q0-8-5.143-13.143t-13.143-5.143h-54.857v-292.571q0-8-5.143-13.143t-13.143-5.143h-182.857q-8 0-13.143 5.143t-5.143 13.143v91.429q0 8 5.143 13.143t13.143 5.143h54.857v182.857h-54.857q-8 0-13.143 5.143t-5.143 13.143v91.429q0 8 5.143 13.143t13.143 5.143h256q8 0 13.143-5.143t5.143-13.143zM512 274.286v-91.429q0-8-5.143-13.143t-13.143-5.143h-109.714q-8 0-13.143 5.143t-5.143 13.143v91.429q0 8 5.143 13.143t13.143 5.143h109.714q8 0 13.143-5.143t5.143-13.143zM877.714 512q0 119.429-58.857 220.286t-159.714 159.714-220.286 58.857-220.286-58.857-159.714-159.714-58.857-220.286 58.857-220.286 159.714-159.714 220.286-58.857 220.286 58.857 159.714 159.714 58.857 220.286z"
|
||||
],
|
||||
"attrs": [],
|
||||
"isMulticolor": false,
|
||||
"tags": [
|
||||
"info-circle"
|
||||
],
|
||||
"defaultCode": 61530,
|
||||
"grid": 14
|
||||
},
|
||||
"attrs": [],
|
||||
"properties": {
|
||||
"id": 85,
|
||||
"order": 3,
|
||||
"name": "info-sign",
|
||||
"prevSize": 28,
|
||||
"code": 58882
|
||||
},
|
||||
"setIdx": 0,
|
||||
"iconIdx": 2
|
||||
},
|
||||
{
|
||||
"icon": {
|
||||
"paths": [
|
||||
"M733.714 419.429q0-16-10.286-26.286l-52-51.429q-10.857-10.857-25.714-10.857t-25.714 10.857l-233.143 232.571-129.143-129.143q-10.857-10.857-25.714-10.857t-25.714 10.857l-52 51.429q-10.286 10.286-10.286 26.286 0 15.429 10.286 25.714l206.857 206.857q10.857 10.857 25.714 10.857 15.429 0 26.286-10.857l310.286-310.286q10.286-10.286 10.286-25.714zM877.714 512q0 119.429-58.857 220.286t-159.714 159.714-220.286 58.857-220.286-58.857-159.714-159.714-58.857-220.286 58.857-220.286 159.714-159.714 220.286-58.857 220.286 58.857 159.714 159.714 58.857 220.286z"
|
||||
],
|
||||
"attrs": [],
|
||||
"isMulticolor": false,
|
||||
"tags": [
|
||||
"check-circle"
|
||||
],
|
||||
"defaultCode": 61528,
|
||||
"grid": 14
|
||||
},
|
||||
"attrs": [],
|
||||
"properties": {
|
||||
"id": 83,
|
||||
"order": 9,
|
||||
"prevSize": 28,
|
||||
"code": 58886,
|
||||
"name": "ok-sign"
|
||||
},
|
||||
"setIdx": 0,
|
||||
"iconIdx": 6
|
||||
},
|
||||
{
|
||||
"icon": {
|
||||
"paths": [
|
||||
"M658.286 475.429q0-105.714-75.143-180.857t-180.857-75.143-180.857 75.143-75.143 180.857 75.143 180.857 180.857 75.143 180.857-75.143 75.143-180.857zM950.857 950.857q0 29.714-21.714 51.429t-51.429 21.714q-30.857 0-51.429-21.714l-196-195.429q-102.286 70.857-228 70.857-81.714 0-156.286-31.714t-128.571-85.714-85.714-128.571-31.714-156.286 31.714-156.286 85.714-128.571 128.571-85.714 156.286-31.714 156.286 31.714 128.571 85.714 85.714 128.571 31.714 156.286q0 125.714-70.857 228l196 196q21.143 21.143 21.143 51.429z"
|
||||
],
|
||||
"width": 951,
|
||||
"attrs": [],
|
||||
"isMulticolor": false,
|
||||
"tags": [
|
||||
"search"
|
||||
],
|
||||
"defaultCode": 61442,
|
||||
"grid": 14
|
||||
},
|
||||
"attrs": [],
|
||||
"properties": {
|
||||
"id": 2,
|
||||
"order": 1,
|
||||
"prevSize": 28,
|
||||
"code": 58887,
|
||||
"name": "icon-search"
|
||||
},
|
||||
"setIdx": 0,
|
||||
"iconIdx": 7
|
||||
}
|
||||
],
|
||||
"height": 1024,
|
||||
"metadata": {
|
||||
"name": "slate",
|
||||
"license": "SIL OFL 1.1"
|
||||
},
|
||||
"preferences": {
|
||||
"showGlyphs": true,
|
||||
"showQuickUse": true,
|
||||
"showQuickUse2": true,
|
||||
"showSVGs": true,
|
||||
"fontPref": {
|
||||
"prefix": "icon-",
|
||||
"metadata": {
|
||||
"fontFamily": "slate",
|
||||
"majorVersion": 1,
|
||||
"minorVersion": 0,
|
||||
"description": "Based on FontAwesome",
|
||||
"license": "SIL OFL 1.1"
|
||||
},
|
||||
"metrics": {
|
||||
"emSize": 1024,
|
||||
"baseline": 6.25,
|
||||
"whitespace": 50
|
||||
},
|
||||
"resetPoint": 58880,
|
||||
"showSelector": false,
|
||||
"selector": "class",
|
||||
"classSelector": ".icon",
|
||||
"showMetrics": false,
|
||||
"showMetadata": true,
|
||||
"showVersion": true,
|
||||
"ie7": false
|
||||
},
|
||||
"imagePref": {
|
||||
"prefix": "icon-",
|
||||
"png": true,
|
||||
"useClassSelector": true,
|
||||
"color": 4473924,
|
||||
"bgColor": 16777215
|
||||
},
|
||||
"historySize": 100,
|
||||
"showCodes": true,
|
||||
"gridSize": 16,
|
||||
"showLiga": false
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
#!/bin/bash
|
||||
middleman build
|
||||
aws s3 sync /app/build s3://${AWS_S3_BUCKET}/apidocs/docker-cloud/ --delete --acl public-read --region us-east-1
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
||||
<svg xmlns="http://www.w3.org/2000/svg">
|
||||
<metadata>Generated by IcoMoon</metadata>
|
||||
<defs>
|
||||
<font id="slate" horiz-adv-x="1024">
|
||||
<font-face units-per-em="1024" ascent="960" descent="-64" />
|
||||
<missing-glyph horiz-adv-x="1024" />
|
||||
<glyph unicode=" " d="" horiz-adv-x="512" />
|
||||
<glyph unicode="" d="M438.857 877.714q119.429 0 220.286-58.857t159.714-159.714 58.857-220.286-58.857-220.286-159.714-159.714-220.286-58.857-220.286 58.857-159.714 159.714-58.857 220.286 58.857 220.286 159.714 159.714 220.286 58.857zM512 165.143v108.571q0 8-5.143 13.429t-12.571 5.429h-109.714q-7.429 0-13.143-5.714t-5.714-13.143v-108.571q0-7.429 5.714-13.143t13.143-5.714h109.714q7.429 0 12.571 5.429t5.143 13.429zM510.857 361.714l10.286 354.857q0 6.857-5.714 10.286-5.714 4.571-13.714 4.571h-125.714q-8 0-13.714-4.571-5.714-3.429-5.714-10.286l9.714-354.857q0-5.714 5.714-10t13.714-4.286h105.714q8 0 13.429 4.286t6 10z" />
|
||||
<glyph unicode="" d="M585.143 164.571v91.429q0 8-5.143 13.143t-13.143 5.143h-54.857v292.571q0 8-5.143 13.143t-13.143 5.143h-182.857q-8 0-13.143-5.143t-5.143-13.143v-91.429q0-8 5.143-13.143t13.143-5.143h54.857v-182.857h-54.857q-8 0-13.143-5.143t-5.143-13.143v-91.429q0-8 5.143-13.143t13.143-5.143h256q8 0 13.143 5.143t5.143 13.143zM512 676.571v91.429q0 8-5.143 13.143t-13.143 5.143h-109.714q-8 0-13.143-5.143t-5.143-13.143v-91.429q0-8 5.143-13.143t13.143-5.143h109.714q8 0 13.143 5.143t5.143 13.143zM877.714 438.857q0-119.429-58.857-220.286t-159.714-159.714-220.286-58.857-220.286 58.857-159.714 159.714-58.857 220.286 58.857 220.286 159.714 159.714 220.286 58.857 220.286-58.857 159.714-159.714 58.857-220.286z" />
|
||||
<glyph unicode="" d="M733.714 531.428q0 16-10.286 26.286l-52 51.429q-10.857 10.857-25.714 10.857t-25.714-10.857l-233.143-232.571-129.143 129.143q-10.857 10.857-25.714 10.857t-25.714-10.857l-52-51.429q-10.286-10.286-10.286-26.286 0-15.429 10.286-25.714l206.857-206.857q10.857-10.857 25.714-10.857 15.429 0 26.286 10.857l310.286 310.286q10.286 10.286 10.286 25.714zM877.714 438.857q0-119.429-58.857-220.286t-159.714-159.714-220.286-58.857-220.286 58.857-159.714 159.714-58.857 220.286 58.857 220.286 159.714 159.714 220.286 58.857 220.286-58.857 159.714-159.714 58.857-220.286z" />
|
||||
<glyph unicode="" d="M658.286 475.428q0 105.714-75.143 180.857t-180.857 75.143-180.857-75.143-75.143-180.857 75.143-180.857 180.857-75.143 180.857 75.143 75.143 180.857zM950.857 0q0-29.714-21.714-51.429t-51.429-21.714q-30.857 0-51.429 21.714l-196 195.429q-102.286-70.857-228-70.857-81.714 0-156.286 31.714t-128.571 85.714-85.714 128.571-31.714 156.286 31.714 156.286 85.714 128.571 128.571 85.714 156.286 31.714 156.286-31.714 128.571-85.714 85.714-128.571 31.714-156.286q0-125.714-70.857-228l196-196q21.143-21.143 21.143-51.429z" horiz-adv-x="951" />
|
||||
</font></defs></svg>
|
||||
|
After Width: | Height: | Size: 2.9 KiB |
|
After Width: | Height: | Size: 4.3 KiB |
|
After Width: | Height: | Size: 96 B |
|
|
@ -0,0 +1,28 @@
|
|||
# Errors
|
||||
|
||||
|
||||
> API response structure
|
||||
|
||||
```json
|
||||
{
|
||||
"error": "Descriptive error message"
|
||||
}
|
||||
```
|
||||
|
||||
The Docker Cloud API uses the following error codes:
|
||||
|
||||
|
||||
Error Code | Meaning
|
||||
---------- | -------
|
||||
400 | Bad Request -- There's a problem in the content of your request. Retrying the same request will fail.
|
||||
401 | Unauthorized -- Your API key is wrong or your account has been deactivated.
|
||||
402 | Payment Required -- You need to provide billing information to perform this request.
|
||||
403 | Forbidden -- Quota limit exceeded. Please contact support to request a quota increase.
|
||||
404 | Not Found -- The requested object cannot be found.
|
||||
405 | Method Not Allowed -- The endpoint requested does not implement the method sent.
|
||||
409 | Conflict -- The object cannot be created or updated because another object exists with the same unique fields
|
||||
415 | Unsupported Media Type -- Make sure you are using `Accept` and `Content-Type` headers as `application/json` and that the data your are `POST`-ing or `PATCH`-ing is in valid JSON format.
|
||||
429 | Too Many Requests -- You are being throttled because of too many requests in a short period of time.
|
||||
500 | Internal Server Error -- There was a server error while processing your request. Try again later, or contact support.
|
||||
503 | Service Unavailable -- We're temporarily offline for maintenance. Please try again later.
|
||||
504 | Gateway Timeout -- Our API servers are at full capacity. Please try again later.
|
||||
|
|
@ -0,0 +1,351 @@
|
|||
# Actions
|
||||
|
||||
## Action
|
||||
|
||||
> Example
|
||||
|
||||
```json
|
||||
{
|
||||
"action": "Cluster Create",
|
||||
"end_date": "Wed, 17 Sep 2014 08:26:22 +0000",
|
||||
"ip": "56.78.90.12",
|
||||
"is_user_action": true,
|
||||
"can_be_canceled": false,
|
||||
"location": "New York, USA",
|
||||
"method": "POST",
|
||||
"object": "/api/infra/v1/cluster/eea638f4-b77a-4183-b241-22dbd7866f22/",
|
||||
"path": "/api/infra/v1/cluster/",
|
||||
"resource_uri": "/api/audit/v1/action/6246c558-976c-4df6-ba60-eb1a344a17af/",
|
||||
"start_date": "Wed, 17 Sep 2014 08:26:22 +0000",
|
||||
"state": "Success",
|
||||
"user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.78.2 (KHTML, like Gecko) Version/7.0.6 Safari/537.78.2",
|
||||
"uuid": "6246c558-976c-4df6-ba60-eb1a344a17af"
|
||||
}
|
||||
```
|
||||
|
||||
An action represents an API call by a user. Details of the API call such as timestamp, origin IP address, and user agent are logged in the action object.
|
||||
|
||||
Simple API calls that do not require asynchronous execution will return immediately with the appropiate HTTP error code and an action object will be created either in `Success` or `Failed` states. API calls that do require asynchronous execution will return HTTP code `202 Accepted` immediately and create an action object in `In progress` state, which will change to `Success` or `Failed` state depending on the outcome of the operation being performed. In both cases the response will include a `X-DockerCloud-Action-URI` header with the resource URI of the created action.
|
||||
|
||||
|
||||
### Attributes
|
||||
|
||||
| Attribute | Description |
|
||||
|:----------------|:-----------------------------------------------------------------------------------|
|
||||
| resource_uri | A unique API endpoint that represents the action |
|
||||
| uuid | A unique identifier for the action generated automatically on creation |
|
||||
| object | The API object (resource URI) to which the action applies to |
|
||||
| action | Name of the operation performed/being performed |
|
||||
| method | HTTP method used to access the API |
|
||||
| path | HTTP path of the API accessed |
|
||||
| user_agent | The user agent provided by the client when accessing the API endpoint |
|
||||
| start_date | Date and time when the API call was performed and the operation started processing |
|
||||
| end_date | Date and time when the API call finished processing |
|
||||
| state | State of the operation (see table below) |
|
||||
| ip | IP address of the user that performed the API call |
|
||||
| location | Geographic location of the IP address of the user that performed the API call |
|
||||
| is_user_action | If the action has been triggered by the user |
|
||||
| can_be_canceled | If the action can be canceled by the user in the middle of its execution |
|
||||
| can_be_retried | If the action can be retried by the user |
|
||||
|
||||
|
||||
### Action states
|
||||
|
||||
| State | Description |
|
||||
|:------------|:---------------------------------------------------------------------------------------------|
|
||||
| Pending | The action needed asynchronous execution and it is waiting for an in progress action |
|
||||
| In progress | The action needed asynchronous execution and is being performed |
|
||||
| Canceling | The action is being canceled by user request |
|
||||
| Canceled | The action has been canceled |
|
||||
| Success | The action was executed successfully |
|
||||
| Failed | There was an issue when the action was being performed. Check the logs for more information. |
|
||||
|
||||
|
||||
## List all actions
|
||||
|
||||
```python
|
||||
import dockercloud
|
||||
|
||||
actions = dockercloud.Action.list()
|
||||
```
|
||||
```go
|
||||
import "github.com/docker/go-dockercloud/dockercloud"
|
||||
|
||||
actionList, err := dockercloud.ListActions()
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
log.Println(actionList)
|
||||
```
|
||||
|
||||
```http
|
||||
GET /api/audit/v1/action/ HTTP/1.1
|
||||
Host: cloud.docker.com
|
||||
Authorization: Basic dXNlcm5hbWU6YXBpa2V5
|
||||
Accept: application/json
|
||||
```
|
||||
|
||||
```shell
|
||||
docker-cloud action ls
|
||||
```
|
||||
|
||||
Lists all actions in chronological order. Returns a list of `Action` objects.
|
||||
|
||||
### Endpoint Type
|
||||
|
||||
Available in Docker Cloud's **REST API**
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`GET /api/audit/v1/action/`
|
||||
|
||||
### Query Parameters
|
||||
|
||||
| Parameter | Description |
|
||||
|:----------------|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| uuid | Filter by UUID. |
|
||||
| state | Filter by state. Possible values: `In progress`, `Success`, `Failed` |
|
||||
| start_date | Filter by start date. Valid filtering values are `start_date__gte` (after or on the date supplied) and `start_date__lte` (before or on the date supplied) |
|
||||
| end_date | Filter by end date. Valid filtering values are `end_date__gte` (after or on the date supplied) and `end_date__lte` (before or on the date supplied) |
|
||||
| object | Filter by resource URI of the related object. This filter can only be combined with 'include_related' filter |
|
||||
| include_related | There is a parent-child relationship between Docker Cloud objects, described in table `Relationships between Docker Cloud objects`. If set to 'true', will include the actions of the related objects to the object specified in "object" filter parameter. Possible values: 'true' or 'false' |
|
||||
|
||||
|
||||
## Relationships between Docker Cloud objects
|
||||
|
||||
| Object | Relationships |
|
||||
|:-------------|:-------------------------------------------------------------------------------|
|
||||
| Container | Container, service, stack (if any) |
|
||||
| Service | All containers in the service, service, stack (if any) |
|
||||
| Stack | All services in the stack, all containers in every service in the stack, stack |
|
||||
| Node | Node, node cluster (if any) |
|
||||
| Node cluster | All nodes in the cluster, node cluster |
|
||||
|
||||
|
||||
## Get an action by UUID
|
||||
|
||||
```python
|
||||
import dockercloud
|
||||
|
||||
action = dockercloud.Action.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
|
||||
```
|
||||
|
||||
```go
|
||||
import "github.com/docker/go-dockercloud/dockercloud"
|
||||
|
||||
action, err := dockercloud.GetAction("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
log.Println(action)
|
||||
```
|
||||
|
||||
```http
|
||||
GET /api/audit/v1/action/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/ HTTP/1.1
|
||||
Host: cloud.docker.com
|
||||
Authorization: Basic dXNlcm5hbWU6YXBpa2V5
|
||||
Accept: application/json
|
||||
```
|
||||
|
||||
```shell
|
||||
docker-cloud action inspect 7eaf7fff
|
||||
```
|
||||
|
||||
|
||||
Get all the details of an specific action
|
||||
|
||||
### Endpoint Type
|
||||
|
||||
Available in Docker Cloud's **REST API**
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`GET /api/audit/v1/action/(uuid)/`
|
||||
|
||||
### Path Parameters
|
||||
|
||||
| Parameter | Description |
|
||||
|:----------|:-----------------------------------|
|
||||
| uuid | The UUID of the action to retrieve |
|
||||
|
||||
|
||||
## Get the logs of an action
|
||||
|
||||
> Example log line
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "log",
|
||||
"log": "Log line from the action",
|
||||
"timestamp": 1433779324
|
||||
}
|
||||
```
|
||||
|
||||
```python
|
||||
import dockercloud
|
||||
|
||||
def log_handler(message):
|
||||
print message
|
||||
|
||||
action = dockercloud.Action.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
|
||||
action.logs(tail=300, follow=True, log_handler=log_handler)
|
||||
```
|
||||
|
||||
```go
|
||||
import "github.com/docker/go-dockercloud/dockercloud"
|
||||
|
||||
c := make(chan dockercloud.Logs)
|
||||
action, err := dockercloud.GetAction("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
go action.GetLogs(c)
|
||||
|
||||
for {
|
||||
log.Println(<-c)
|
||||
}
|
||||
```
|
||||
|
||||
```http
|
||||
GET /api/audit/v1/action/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/logs/ HTTP/1.1
|
||||
Host: ws.cloud.docker.com
|
||||
Authorization: Basic dXNlcm5hbWU6YXBpa2V5
|
||||
Connection: Upgrade
|
||||
Upgrade: websocket
|
||||
```
|
||||
|
||||
```shell
|
||||
docker-cloud action logs 7eaf7fff-882c-4f3d-9a8f-a22317ac00ce
|
||||
```
|
||||
|
||||
|
||||
Get the logs of the specified action.
|
||||
|
||||
|
||||
### Endpoint Type
|
||||
|
||||
Available in Docker Cloud's **STREAM API**
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`GET /api/audit/v1/action/(uuid)/logs/`
|
||||
|
||||
### Path Parameters
|
||||
|
||||
| Parameter | Description |
|
||||
|:----------|:----------------------------------------|
|
||||
| uuid | The UUID of the action to retrieve logs |
|
||||
|
||||
### Query Parameters
|
||||
|
||||
| Parameter | Description |
|
||||
|:----------|:---------------------------------------------------------------------------|
|
||||
| tail | Number of lines to show from the end of the logs (default: `300`) |
|
||||
| follow | Whether to stream logs or close the connection immediately (default: true) |
|
||||
|
||||
## Cancel an action
|
||||
|
||||
```http
|
||||
POST /api/audit/v1/action/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/cancel/ HTTP/1.1
|
||||
Host: cloud.docker.com
|
||||
Authorization: Basic dXNlcm5hbWU6YXBpa2V5
|
||||
Accept: application/json
|
||||
```
|
||||
|
||||
```go
|
||||
import "github.com/docker/go-dockercloud/dockercloud"
|
||||
|
||||
action, err := dockercloud.GetAction("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
action, err = action.Cancel()
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
log.Println(action)
|
||||
```
|
||||
|
||||
Cancels an action in Pending or In progress state.
|
||||
|
||||
### Endpoint Type
|
||||
|
||||
Available in Docker Cloud's **REST API**
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`POST /api/audit/v1/action/(uuid)/cancel/`
|
||||
|
||||
### Path Parameters
|
||||
|
||||
| Parameter | Description |
|
||||
|:----------|:---------------------------------|
|
||||
| uuid | The UUID of the action to cancel |
|
||||
|
||||
|
||||
## Retry an action
|
||||
|
||||
```python
|
||||
import dockercloud
|
||||
|
||||
def log_handler(message):
|
||||
print message
|
||||
|
||||
action = dockercloud.Action.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
|
||||
action.logs(tail=300, follow=True, log_handler=log_handler)
|
||||
```
|
||||
|
||||
```http
|
||||
POST /api/audit/v1/action/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/retry/ HTTP/1.1
|
||||
Host: cloud.docker.com
|
||||
Authorization: Basic dXNlcm5hbWU6YXBpa2V5
|
||||
Accept: application/json
|
||||
```
|
||||
|
||||
```go
|
||||
import "github.com/docker/go-dockercloud/dockercloud"
|
||||
|
||||
action, err := dockercloud.GetAction("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
action, err = action.Retry()
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
log.Println(action)
|
||||
```
|
||||
|
||||
```shell
|
||||
docker-cloud action logs 7eaf7fff-882c-4f3d-9a8f-a22317ac00ce
|
||||
```
|
||||
|
||||
Retries an action in Success, Failed or Canceled state.
|
||||
|
||||
### Endpoint Type
|
||||
|
||||
Available in Docker Cloud's **REST API**
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`POST /api/audit/v1/action/(uuid)/retry/`
|
||||
|
||||
### Path Parameters
|
||||
|
||||
| Parameter | Description |
|
||||
|:----------|:--------------------------------|
|
||||
| uuid | The UUID of the action to retry |
|
||||
|
|
@ -0,0 +1,120 @@
|
|||
# Availability Zones
|
||||
|
||||
## Availability Zone
|
||||
|
||||
> Example
|
||||
|
||||
```json
|
||||
{
|
||||
"available": true,
|
||||
"name": "ap-northeast-1a",
|
||||
"region": "/api/infra/v1/region/az/ap-northeast-1/",
|
||||
"resource_uri": "/api/infra/v1/az/aws/ap-northeast-1/ap-northeast-1a/"
|
||||
}
|
||||
```
|
||||
|
||||
An Availability Zone is an isolated location inside a region. Providers that support availability zones: AWS
|
||||
|
||||
|
||||
### Attributes
|
||||
|
||||
Attribute | Description
|
||||
--------- | -----------
|
||||
available | Whether the availability zone is currently available for new node deployments
|
||||
name | An identifier for the availability zone
|
||||
region | The resource URI of the region where the availability zone is allocated
|
||||
resource_uri | A unique API endpoint that represents the zone
|
||||
|
||||
|
||||
## List all availability zones
|
||||
|
||||
```python
|
||||
import dockercloud
|
||||
|
||||
az = dockercloud.AZ.list()
|
||||
```
|
||||
|
||||
```http
|
||||
GET /api/infra/v1/az/ HTTP/1.1
|
||||
Host: cloud.docker.com
|
||||
Authorization: Basic dXNlcm5hbWU6YXBpa2V5
|
||||
Accept: application/json
|
||||
```
|
||||
|
||||
```go
|
||||
import "github.com/docker/go-dockercloud/dockercloud"
|
||||
|
||||
az, err := dockercloud.ListAZ()
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
log.Println(az)
|
||||
```
|
||||
|
||||
```shell
|
||||
docker-cloud nodecluster az
|
||||
```
|
||||
|
||||
Lists all availability zones from all regions of all supported cloud providers. Returns a list of `Availability Zone` objects.
|
||||
|
||||
### Endpoint Type
|
||||
|
||||
Available in Docker Cloud's **REST API**
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`GET /api/infra/v1/az/`
|
||||
|
||||
### Query Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
name | Filter by availability zone name
|
||||
region | Filter by resource URI of the target region
|
||||
|
||||
|
||||
|
||||
## Get an individual availability zone
|
||||
|
||||
```python
|
||||
import dockercloud
|
||||
|
||||
az = dockercloud.AZ.fetch("aws/sa-east-1/sa-east-1a")
|
||||
```
|
||||
|
||||
```go
|
||||
import "github.com/docker/go-dockercloud/dockercloud"
|
||||
|
||||
az, err := dockercloud.GetAZ("aws/sa-east-1/sa-east-1a")
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
log.Println(az)
|
||||
```
|
||||
|
||||
```http
|
||||
GET /api/infra/v1/az/aws/sa-east-1/sa-east-1a/ HTTP/1.1
|
||||
Host: cloud.docker.com
|
||||
Authorization: Basic dXNlcm5hbWU6YXBpa2V5
|
||||
Accept: application/json
|
||||
```
|
||||
|
||||
Get all the details of a specific availability zone
|
||||
|
||||
### Endpoint Type
|
||||
|
||||
Available in Docker Cloud's **REST API**
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`GET /api/infra/v1/az/(provider.name)/(region.name)/(name)/`
|
||||
|
||||
### Path Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
name | The name of the availability zone to retrieve
|
||||
provider | The name of the provider
|
||||
region | The name of the region
|
||||
|
|
@ -0,0 +1,834 @@
|
|||
# Containers
|
||||
|
||||
## Container
|
||||
|
||||
> Example
|
||||
|
||||
```json
|
||||
{
|
||||
"autodestroy": "OFF",
|
||||
"autorestart": "OFF",
|
||||
"bindings": [
|
||||
{
|
||||
"volume": "/api/infra/v1/volume/1863e34d-6a7d-4945-aefc-8f27a4ab1a9e/",
|
||||
"host_path": null,
|
||||
"container_path": "/data",
|
||||
"rewritable": true
|
||||
},
|
||||
{
|
||||
"volume": null,
|
||||
"host_path": "/etc",
|
||||
"container_path": "/etc",
|
||||
"rewritable": true
|
||||
}
|
||||
],
|
||||
"cap_add": [
|
||||
"ALL"
|
||||
],
|
||||
"cap_drop": [
|
||||
"NET_ADMIN",
|
||||
"SYS_ADMIN"
|
||||
],
|
||||
"container_envvars": [
|
||||
{
|
||||
"key": "DB_1_ENV_DEBIAN_FRONTEND",
|
||||
"value": "noninteractive"
|
||||
},
|
||||
{
|
||||
"key": "DB_1_ENV_MYSQL_PASS",
|
||||
"value": "**Random**"
|
||||
},
|
||||
{
|
||||
"key": "DB_1_ENV_MYSQL_USER",
|
||||
"value": "admin"
|
||||
},
|
||||
{
|
||||
"key": "DB_1_ENV_PATH",
|
||||
"value": "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
|
||||
},
|
||||
{
|
||||
"key": "DB_1_ENV_REPLICATION_MASTER",
|
||||
"value": "**False**"
|
||||
},
|
||||
{
|
||||
"key": "DB_1_ENV_REPLICATION_PASS",
|
||||
"value": "replica"
|
||||
},
|
||||
{
|
||||
"key": "DB_1_ENV_REPLICATION_SLAVE",
|
||||
"value": "**False**"
|
||||
},
|
||||
{
|
||||
"key": "DB_1_ENV_REPLICATION_USER",
|
||||
"value": "replica"
|
||||
},
|
||||
{
|
||||
"key": "DB_1_PORT",
|
||||
"value": "tcp://172.16.0.3:3306"
|
||||
},
|
||||
{
|
||||
"key": "DB_1_PORT_3306_TCP",
|
||||
"value": "tcp://172.16.0.3:3306"
|
||||
},
|
||||
{
|
||||
"key": "DB_1_PORT_3306_TCP_ADDR",
|
||||
"value": "172.16.0.3"
|
||||
},
|
||||
{
|
||||
"key": "DB_1_PORT_3306_TCP_PORT",
|
||||
"value": "3306"
|
||||
},
|
||||
{
|
||||
"key": "DB_1_PORT_3306_TCP_PROTO",
|
||||
"value": "tcp"
|
||||
},
|
||||
{
|
||||
"key": "DB_ENV_DEBIAN_FRONTEND",
|
||||
"value": "noninteractive"
|
||||
},
|
||||
{
|
||||
"key": "DB_ENV_MYSQL_PASS",
|
||||
"value": "**Random**"
|
||||
},
|
||||
{
|
||||
"key": "DB_ENV_MYSQL_USER",
|
||||
"value": "admin"
|
||||
},
|
||||
{
|
||||
"key": "DB_ENV_PATH",
|
||||
"value": "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
|
||||
},
|
||||
{
|
||||
"key": "DB_ENV_REPLICATION_MASTER",
|
||||
"value": "**False**"
|
||||
},
|
||||
{
|
||||
"key": "DB_ENV_REPLICATION_PASS",
|
||||
"value": "replica"
|
||||
},
|
||||
{
|
||||
"key": "DB_ENV_REPLICATION_SLAVE",
|
||||
"value": "**False**"
|
||||
},
|
||||
{
|
||||
"key": "DB_ENV_REPLICATION_USER",
|
||||
"value": "replica"
|
||||
},
|
||||
{
|
||||
"key": "DB_PASS",
|
||||
"value": "szVaPz925B7I"
|
||||
},
|
||||
{
|
||||
"key": "DB_PORT",
|
||||
"value": "tcp://172.16.0.3:3306"
|
||||
},
|
||||
{
|
||||
"key": "DB_PORT_3306_TCP",
|
||||
"value": "tcp://172.16.0.3:3306"
|
||||
},
|
||||
{
|
||||
"key": "DB_PORT_3306_TCP_ADDR",
|
||||
"value": "172.16.0.3"
|
||||
},
|
||||
{
|
||||
"key": "DB_PORT_3306_TCP_PORT",
|
||||
"value": "3306"
|
||||
},
|
||||
{
|
||||
"key": "DB_PORT_3306_TCP_PROTO",
|
||||
"value": "tcp"
|
||||
},
|
||||
{
|
||||
"key": "DB_DOCKERCLOUD_API_URL",
|
||||
"value": "https://cloud.docker.com/api/app/v1/service/c0fed1dc-c528-40c9-aa4c-dc00672ebcbf/"
|
||||
}
|
||||
],
|
||||
"container_ports": [
|
||||
{
|
||||
"endpoint_uri": "http://wordpress-stackable-1.admin.cont.dockerapp.io:49153/",
|
||||
"inner_port": 80,
|
||||
"outer_port": 49153,
|
||||
"port_name": "http",
|
||||
"protocol": "tcp",
|
||||
"published": true,
|
||||
"uri_protocol": "http"
|
||||
}
|
||||
],
|
||||
"cpu_shares": 100,
|
||||
"cpuset": "0,1",
|
||||
"cgroup_parent": "m-executor-abcd",
|
||||
"deployed_datetime": "Thu, 16 Oct 2014 12:04:08 +0000",
|
||||
"destroyed_datetime": null,
|
||||
"devices": [
|
||||
"/dev/ttyUSB0:/dev/ttyUSB0"
|
||||
],
|
||||
"dns": [
|
||||
"8.8.8.8"
|
||||
],
|
||||
"dns_search": [
|
||||
"example.com",
|
||||
"c1dd4e1e-1356-411c-8613-e15146633640.local.dockerapp.io"
|
||||
],
|
||||
"domainname": "domainname",
|
||||
"entrypoint": "",
|
||||
"exit_code": null,
|
||||
"exit_code_msg": null,
|
||||
"extra_hosts": [
|
||||
"onehost:50.31.209.229"
|
||||
],
|
||||
"hostname": "hostname",
|
||||
"image_name": "tutum/wordpress-stackable:latest",
|
||||
"labels": {
|
||||
"com.example.description": "Accounting webapp",
|
||||
"com.example.department": "Finance",
|
||||
"com.example.label-with-empty-value": ""
|
||||
},
|
||||
"linked_to_container": [
|
||||
{
|
||||
"endpoints": {
|
||||
"3306/tcp": "tcp://172.16.0.3:3306"
|
||||
},
|
||||
"from_container": "/api/app/v1/container/c1dd4e1e-1356-411c-8613-e15146633640/",
|
||||
"name": "DB_1",
|
||||
"to_container": "/api/app/v1/container/ba434e1e-1234-411c-8613-e15146633640/"
|
||||
}
|
||||
],
|
||||
"link_variables": {
|
||||
"WORDPRESS_STACKABLE_1_ENV_DB_HOST": "**LinkMe**",
|
||||
"WORDPRESS_STACKABLE_1_ENV_DB_NAME": "wordpress",
|
||||
"WORDPRESS_STACKABLE_1_ENV_DB_PASS": "szVaPz925B7I",
|
||||
"WORDPRESS_STACKABLE_1_ENV_DB_PORT": "**LinkMe**",
|
||||
"WORDPRESS_STACKABLE_1_ENV_DB_USER": "admin",
|
||||
"WORDPRESS_STACKABLE_1_ENV_DEBIAN_FRONTEND": "noninteractive",
|
||||
"WORDPRESS_STACKABLE_1_ENV_HOME": "/",
|
||||
"WORDPRESS_STACKABLE_1_ENV_PATH": "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
|
||||
"WORDPRESS_STACKABLE_1_PORT": "tcp://172.16.0.2:80",
|
||||
"WORDPRESS_STACKABLE_1_PORT_80_TCP": "tcp://172.16.0.2:80",
|
||||
"WORDPRESS_STACKABLE_1_PORT_80_TCP_ADDR": "172.16.0.2",
|
||||
"WORDPRESS_STACKABLE_1_PORT_80_TCP_PORT": "80",
|
||||
"WORDPRESS_STACKABLE_1_PORT_80_TCP_PROTO": "tcp",
|
||||
"WORDPRESS_STACKABLE_ENV_DB_HOST": "**LinkMe**",
|
||||
"WORDPRESS_STACKABLE_ENV_DB_NAME": "wordpress",
|
||||
"WORDPRESS_STACKABLE_ENV_DB_PASS": "szVaPz925B7I",
|
||||
"WORDPRESS_STACKABLE_ENV_DB_PORT": "**LinkMe**",
|
||||
"WORDPRESS_STACKABLE_ENV_DB_USER": "admin",
|
||||
"WORDPRESS_STACKABLE_ENV_DEBIAN_FRONTEND": "noninteractive",
|
||||
"WORDPRESS_STACKABLE_ENV_HOME": "/",
|
||||
"WORDPRESS_STACKABLE_ENV_PATH": "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
|
||||
"WORDPRESS_STACKABLE_PORT": "tcp://172.16.0.2:80",
|
||||
"WORDPRESS_STACKABLE_PORT_80_TCP": "tcp://172.16.0.2:80",
|
||||
"WORDPRESS_STACKABLE_PORT_80_TCP_ADDR": "172.16.0.2",
|
||||
"WORDPRESS_STACKABLE_PORT_80_TCP_PORT": "80",
|
||||
"WORDPRESS_STACKABLE_PORT_80_TCP_PROTO": "tcp"
|
||||
},
|
||||
"mac_address": "02:42:ac:11:65:43",
|
||||
"memory": 1024,
|
||||
"memory_swap": 4096,
|
||||
"name": "wordpress-stackable",
|
||||
"net": "bridge",
|
||||
"node": "/api/infra/v1/node/9691c44e-3155-4ca2-958d-c9571aac0a14/",
|
||||
"pid": "none",
|
||||
"private_ip": "10.7.0.1",
|
||||
"privileged": false,
|
||||
"public_dns": "wordpress-stackable-1.admin.cont.dockerapp.io",
|
||||
"read_only": true,
|
||||
"resource_uri": "/api/app/v1/container/c1dd4e1e-1356-411c-8613-e15146633640/",
|
||||
"roles": ["global"],
|
||||
"run_command": "/run-wordpress.sh",
|
||||
"security_opt": [
|
||||
"label:user:USER",
|
||||
"label:role:ROLE"
|
||||
],
|
||||
"service": "/api/app/v1/service/adeebc1b-1b81-4af0-b8f2-cefffc69d7fb/",
|
||||
"started_datetime": "Thu, 16 Oct 2014 12:04:08 +0000",
|
||||
"state": "Running",
|
||||
"stdin_open": false,
|
||||
"stopped_datetime": null,
|
||||
"synchronized": true,
|
||||
"tty": false,
|
||||
"user": "root",
|
||||
"uuid": "c1dd4e1e-1356-411c-8613-e15146633640",
|
||||
"working_dir": "/app"
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
A container is a representation of a Docker container in a node.
|
||||
|
||||
### Attributes
|
||||
|
||||
Attribute | Description
|
||||
--------- | -----------
|
||||
uuid | A unique identifier for the container generated automatically on creation
|
||||
resource_uri | A unique API endpoint that represents the container
|
||||
image_name | The Docker image name and tag of the container
|
||||
bindings | A list of volume bindings that the container has mounted (see table `Container Binding attributes` below)
|
||||
name | A user provided name for the container (inherited from the service)
|
||||
node | The resource URI of the node where this container is running
|
||||
service | The resource URI of the service which this container is part of
|
||||
public_dns | The external FQDN of the container
|
||||
state | The state of the container (see table `Container states` below)
|
||||
synchronized | Flag indicating if the container is synchronized with the current service definition.
|
||||
exit_code | The numeric exit code of the container (if applicable, `null` otherwise)
|
||||
exit_code_msg | A string representation of the exit code of the container (if applicable, `null` otherwise)
|
||||
deployed_datetime | The date and time of the last deployment of the container (if applicable, `null` otherwise)
|
||||
started_datetime | The date and time of the last `start` operation on the container (if applicable, `null` otherwise)
|
||||
stopped_datetime | The date and time of the last `stop` operation on the container (if applicable, `null` otherwise)
|
||||
destroyed_datetime | The date and time of the `terminate` operation on the container (if applicable, `null` otherwise)
|
||||
container_ports | List of published ports of this container (see table `Container Port attributes` below)
|
||||
container_envvars | List of user-defined environment variables set on the containers of the service, which will override the container environment variables (see table `Container Environment Variable attributes` below)
|
||||
labels | Container metadata in form of dictionary
|
||||
working_dir | Working directory for running binaries within a container
|
||||
user | User used on the container on launch
|
||||
hostname | Hostname used on the container on launch
|
||||
domainname | Domainname used on the container on launch
|
||||
mac_address | Ethernet device's MAC address used on the container on launch
|
||||
cgroup_name | Optional parent cgroup for the container.
|
||||
tty | If the container has the tty enable
|
||||
stdin_open | If the container has stdin opened
|
||||
dns | Container custom DNS servers
|
||||
dns_search | Container custom DNS search domain
|
||||
cap_add | Container added capabilities
|
||||
cap_drop | Container dropped capabilities
|
||||
devices | List of container device mappings
|
||||
extra_hosts | List of container hostname mappings
|
||||
secuirty_opt | Labeling scheme of this container
|
||||
entrypoint | Entrypoint used on the container on launch
|
||||
run_command | Run command used on the container on launch
|
||||
cpu_shares | The relative CPU priority of the container (see [Runtime Constraints on CPU and Memory](../../engine/reference/run/#runtime-constraints-on-cpu-and-memory) for more information)
|
||||
cpuset | CPUs in which execution is allowed
|
||||
memory | The memory limit of the container in MB (see [Runtime Constraints on CPU and Memory](../../engine/reference/run/#runtime-constraints-on-cpu-and-memory) for more information)
|
||||
memory_swap | Total memory limit (memory + swap) of the container in MB
|
||||
autorestart | Whether to restart the container automatically if it stops (see [Crash recovery](../../docker-cloud/apps/autorestart/) for more information)
|
||||
autodestroy | Whether to terminate the container automatically if it stops (see [Autodestroy](../../docker-cloud/apps/auto-destroy/) for more information)
|
||||
roles | List of Docker Cloud roles asigned to this container (see [API roles](../../docker-cloud/apps/api-roles/) for more information))
|
||||
linked_to_container | List of IP addresses of the linked containers (see table `Container Link attributes` below and [Service links](../../docker-cloud/apps/service-links/) for more information)
|
||||
link_variables | List of environment variables that would be exposed in any container that is linked to this one
|
||||
privileged | Whether the container has Docker's `privileged` flag set or not (see [Runtime privilege](../../engine/reference/run/#runtime-privilege-linux-capabilities-and-lxc-configuration) for more information)
|
||||
read_only | Whether the container filesystem is read-only or not
|
||||
private_ip | IP address of the container on the overlay network. This IP will be reachable from any other container.
|
||||
net | Network mode set on the container (see table `Network Modes` below, more information ../../reference/run/#network-settings)
|
||||
pid | PID (Process) Namespace mode for the container (more information ../../reference/run/#pid-settings-pid)
|
||||
|
||||
|
||||
### Container Binding attributes
|
||||
|
||||
Attribute | Description
|
||||
--------- | -----------
|
||||
host_path | The host path of the volume
|
||||
container_path | The container path where the volume is mounted
|
||||
rewritable | `true` is the volume has writable permissions
|
||||
volume | The resource URI of the volume
|
||||
|
||||
|
||||
### Container Port attributes
|
||||
|
||||
Attribute | Description
|
||||
--------- | -----------
|
||||
protocol | The protocol of the port, either `tcp` or `udp`
|
||||
inner_port | The published port number inside the container
|
||||
outer_port | The published port number in the node public network interface
|
||||
port_name | Name of the service associated to this port
|
||||
uri_protocol | The protocol to be used in the endpoint for this port (i.e. `http`)
|
||||
endpoint_uri | The URI of the endpoint for this port
|
||||
published | Whether the port has been published in the host public network interface or not. Non-published ports can only be accessed via links.
|
||||
|
||||
|
||||
### Container Environment Variable attributes
|
||||
|
||||
Attribute | Description
|
||||
--------- | -----------
|
||||
key | The name of the environment variable
|
||||
value | The value of the environment variable
|
||||
|
||||
|
||||
### Container States
|
||||
|
||||
State | Description
|
||||
----- | -----------
|
||||
Starting | The container is being deployed or started (from Stopped). No actions allowed in this state.
|
||||
Running | The container is deployed and running. Possible actions in this state: `stop`, `terminate`.
|
||||
Stopping | The container is being stopped. No actions allowed in this state.
|
||||
Stopped | The container is stopped. Possible actions in this state: `start`, `terminate`.
|
||||
Terminating | The container is being deleted. No actions allowed in this state.
|
||||
Terminated | The container has been deleted. No actions allowed in this state.
|
||||
|
||||
|
||||
### Network Modes
|
||||
|
||||
Strategy | Description
|
||||
-------- | -----------
|
||||
bridge | Creates a new network stack for the container on the docker bridge.
|
||||
host | Uses the host network stack inside the container.
|
||||
|
||||
|
||||
### Container Last Metric attributes
|
||||
|
||||
Attribute | Description
|
||||
--------- | -----------
|
||||
cpu | CPU percentage usage
|
||||
memory | Memory usage in bytes
|
||||
disk | Disk storage usage in bytes
|
||||
|
||||
|
||||
### Container Link attributes
|
||||
|
||||
Attribute | Description
|
||||
--------- | -----------
|
||||
name | The name given to the link
|
||||
from_container | The resource URI of the "client" container
|
||||
to_container | The resource URI of the "server" container being linked
|
||||
endpoints | A dictionary with the endpoints (protocol, IP and port) to be used to reach each of the "server" container exposed ports
|
||||
|
||||
|
||||
## List all containers
|
||||
|
||||
```python
|
||||
import dockercloud
|
||||
|
||||
containers = dockercloud.Container.list()
|
||||
```
|
||||
|
||||
```go
|
||||
import "github.com/docker/go-dockercloud/dockercloud"
|
||||
|
||||
containerList, err := dockercloud.ListContainers()
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
log.Println(containerList)
|
||||
```
|
||||
|
||||
```http
|
||||
GET /api/app/v1/container/ HTTP/1.1
|
||||
Host: cloud.docker.com
|
||||
Authorization: Basic dXNlcm5hbWU6YXBpa2V5
|
||||
Accept: application/json
|
||||
```
|
||||
|
||||
```shell
|
||||
docker-cloud container ps
|
||||
```
|
||||
|
||||
Lists all current and recently terminated containers. Returns a list of `Container` objects.
|
||||
|
||||
### Endpoint Type
|
||||
|
||||
Available in Docker Cloud's **REST API**
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`GET /api/app/v1/container/`
|
||||
|
||||
### Query Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
uuid | Filter by UUID
|
||||
state | Filter by state. Possible values: `Starting`, `Running`, `Stopping`, `Stopped`, `Terminating`, `Terminated`
|
||||
name | Filter by container name
|
||||
service | Filter by resource URI of the target service.
|
||||
node | Filter by resource URI of the target node.
|
||||
|
||||
## Get an existing container
|
||||
|
||||
```python
|
||||
import dockercloud
|
||||
|
||||
container = dockercloud.Container.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
|
||||
```
|
||||
|
||||
```go
|
||||
import "github.com/docker/go-dockercloud/dockercloud"
|
||||
|
||||
container, err := dockerckoud.GetContainer("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
log.Println(container)
|
||||
```
|
||||
|
||||
|
||||
```http
|
||||
GET /api/app/v1/container/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/ HTTP/1.1
|
||||
Host: cloud.docker.com
|
||||
Authorization: Basic dXNlcm5hbWU6YXBpa2V5
|
||||
Accept: application/json
|
||||
```
|
||||
|
||||
```shell
|
||||
docker-cloud container inspect 7eaf7fff
|
||||
```
|
||||
|
||||
Get all the details of an specific container
|
||||
|
||||
### Endpoint Type
|
||||
|
||||
Available in Docker Cloud's **REST API**
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`GET /api/app/v1/container/(uuid)/`
|
||||
|
||||
### Path Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
uuid | The UUID of the container to retrieve
|
||||
|
||||
|
||||
## Get the logs of a container
|
||||
|
||||
> Example log line
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "log",
|
||||
"log": "Log line from the container",
|
||||
"streamType": "stdout",
|
||||
"timestamp": 1433779324
|
||||
}
|
||||
```
|
||||
|
||||
```python
|
||||
import dockercloud
|
||||
|
||||
def log_handler(message):
|
||||
print message
|
||||
|
||||
container = dockercloud.Container.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
|
||||
container.logs(tail=300, follow=True, log_handler=log_handler)
|
||||
```
|
||||
|
||||
```go
|
||||
import "github.com/docker/go-dockercloud/dockercloud"
|
||||
|
||||
container, err := dockercloud.GetContainer("447ecddc-2890-4ea2-849b-99392e0dd7a6")
|
||||
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
c := make(chan dockercloud.Logs)
|
||||
|
||||
go container.Logs(c)
|
||||
for {
|
||||
s := <-c
|
||||
log.Println(s)
|
||||
}
|
||||
```
|
||||
|
||||
```http
|
||||
GET /api/app/v1/container/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/logs/ HTTP/1.1
|
||||
Host: ws.cloud.docker.com
|
||||
Authorization: Basic dXNlcm5hbWU6YXBpa2V5
|
||||
Connection: Upgrade
|
||||
Upgrade: websocket
|
||||
```
|
||||
|
||||
```shell
|
||||
docker-cloud container logs 7eaf7fff
|
||||
```
|
||||
|
||||
Get the logs of the specified container.
|
||||
|
||||
### Endpoint Type
|
||||
|
||||
Available in Docker Cloud's **STREAM API**
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`GET /api/app/v1/container/(uuid)/logs/`
|
||||
|
||||
### Path Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
uuid | The UUID of the container to retrieve logs
|
||||
|
||||
### Query Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
tail | Number of lines to show from the end of the logs (default: `300`)
|
||||
follow | Whether to stream logs or close the connection immediately (default: true)
|
||||
service | Filter by service (resource URI)
|
||||
|
||||
|
||||
## Start a container
|
||||
|
||||
```python
|
||||
import dockercloud
|
||||
|
||||
container = dockercloud.Container.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
|
||||
container.start()
|
||||
```
|
||||
|
||||
```go
|
||||
import "github.com/docker/go-dockercloud/dockercloud"
|
||||
|
||||
container, err := dockercloud.GetContainer("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
if err = container.Start(); err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
```
|
||||
|
||||
```http
|
||||
POST /api/app/v1/container/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/start/ HTTP/1.1
|
||||
Host: cloud.docker.com
|
||||
Authorization: Basic dXNlcm5hbWU6YXBpa2V5
|
||||
Accept: application/json
|
||||
```
|
||||
|
||||
```shell
|
||||
docker-cloud container start 7eaf7fff
|
||||
```
|
||||
|
||||
Starts a stopped container.
|
||||
|
||||
### Endpoint Type
|
||||
|
||||
Available in Docker Cloud's **REST API**
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`POST /api/app/v1/container/(uuid)/start/`
|
||||
|
||||
### Path Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
uuid | The UUID of the container to start
|
||||
|
||||
|
||||
## Stop a container
|
||||
|
||||
```python
|
||||
import dockercloud
|
||||
|
||||
container = dockerlcoud.Container.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
|
||||
container.stop()
|
||||
```
|
||||
|
||||
```go
|
||||
import "github.com/docker/go-dockercloud/dockercloud"
|
||||
|
||||
container, err := dockercloud.GetContainer("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
if err = container.Stop(); err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
```
|
||||
|
||||
```http
|
||||
POST /api/app/v1/container/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/stop/ HTTP/1.1
|
||||
Host: cloud.docker.com
|
||||
Authorization: Basic dXNlcm5hbWU6YXBpa2V5
|
||||
Accept: application/json
|
||||
```
|
||||
|
||||
```shell
|
||||
docker-cloud container stop 7eaf7fff
|
||||
```
|
||||
|
||||
Stops a running container.
|
||||
|
||||
### Endpoint Type
|
||||
|
||||
Available in Docker Cloud's **REST API**
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`POST /api/app/v1/container/(uuid)/stop/`
|
||||
|
||||
### Path Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
uuid | The UUID of the container to stop
|
||||
|
||||
|
||||
|
||||
## Redeploy a container
|
||||
|
||||
```python
|
||||
import dockercloud
|
||||
|
||||
container = dockercloud.Container.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
|
||||
container.redeploy()
|
||||
```
|
||||
|
||||
```go
|
||||
import "github.com/docker/go-dockercloud/dockercloud"
|
||||
|
||||
container, err := dockercloud.GetContainer("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
//Redeploy(dockercloud.ReuseVolumesOption{Reuse: true) to reuse the existing volumes
|
||||
//Redeploy(dockercloud.ReuseVolumesOption{Reuse: false}) to not reuse the existing volumes
|
||||
if err = container.Redeploy(dockercloud.ReuseVolumesOption{Reuse: false}); err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
```
|
||||
|
||||
```http
|
||||
POST /api/app/v1/container/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/start/ HTTP/1.1
|
||||
Host: cloud.docker.com
|
||||
Authorization: Basic dXNlcm5hbWU6YXBpa2V5
|
||||
Accept: application/json
|
||||
```
|
||||
|
||||
```shell
|
||||
docker-cloud container redeploy 7eaf7fff
|
||||
```
|
||||
|
||||
Redeploys a container.
|
||||
|
||||
### Endpoint Type
|
||||
|
||||
Available in Docker Cloud's **REST API**
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`POST /api/app/v1/container/(uuid)/redeploy/`
|
||||
|
||||
### Path Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
uuid | The UUID of the container to redeploy
|
||||
|
||||
### Query Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
reuse_volumes | Wheather to reuse container volumes for this redeploy operation or not (default: `true`).
|
||||
|
||||
|
||||
## Terminate a container
|
||||
|
||||
```python
|
||||
import dockercloud
|
||||
|
||||
container = dockercloud.Container.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
|
||||
container.delete()
|
||||
```
|
||||
|
||||
```go
|
||||
import "github.com/docker/go-dockercloud/dockercloud"
|
||||
|
||||
container, err := dockercloud.GetContainer("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
if err = container.Terminate(); err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
```http
|
||||
DELETE /api/app/v1/container/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/ HTTP/1.1
|
||||
Host: cloud.docker.com
|
||||
Authorization: Basic dXNlcm5hbWU6YXBpa2V5
|
||||
Accept: application/json
|
||||
```
|
||||
|
||||
```shell
|
||||
docker-cloud container terminate 7eaf7fff
|
||||
```
|
||||
|
||||
Terminates the specified container. This is not reversible. All data stored in the container will be permanently deleted.
|
||||
|
||||
### Endpoint Type
|
||||
|
||||
Available in Docker Cloud's **REST API**
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`DELETE /api/app/v1/container/(uuid)/`
|
||||
|
||||
### Path Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
uuid | The UUID of the container to terminate
|
||||
|
||||
|
||||
## Execute command inside a container
|
||||
|
||||
```
|
||||
import dockercloud
|
||||
|
||||
def msg_handler(message):
|
||||
print message
|
||||
|
||||
container = dockercloud.Container.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
|
||||
container.execute("ls", handler=msg_handler)
|
||||
```
|
||||
|
||||
```go
|
||||
import "github.com/docker/go-dockercloud/dockercloud"
|
||||
|
||||
container, err := dockercloud.GetContainer("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
c := make(chan dockercloud.Exec)
|
||||
|
||||
container.Exec("ls", c)
|
||||
|
||||
```
|
||||
|
||||
```http
|
||||
GET /api/app/v1/container/(uuid)/exec/ HTTP/1.1
|
||||
Host: ws.cloud.docker.com
|
||||
Authorization: Basic dXNlcm5hbWU6YXBpa2V5
|
||||
Connection: Upgrade
|
||||
Upgrade: websocket
|
||||
```
|
||||
|
||||
|
||||
```
|
||||
docker-cloud exec 7eaf7fff ls
|
||||
```
|
||||
|
||||
Executes a command inside the specified running container, creating a bi-directional stream for the process' standard input and output. This endpoint can be connected to using a bi-directional Secure Web Socket `wss://ws.cloud.docker.com/api/app/v1/container/(uuid)/exec/`
|
||||
|
||||
### Endpoint Type
|
||||
|
||||
Available in Docker Cloud's **STREAM API**
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`GET /api/app/v1/container/(uuid)/exec/`
|
||||
|
||||
### Path Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
uuid | The UUID of the container where the command will be executed
|
||||
|
||||
### Query Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
command | Command to be executed (default: `sh`)
|
||||
|
|
@ -0,0 +1,120 @@
|
|||
# Docker Cloud Events
|
||||
|
||||
## Docker Cloud Event
|
||||
|
||||
> Example
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "action",
|
||||
"action": "update",
|
||||
"parents": [
|
||||
"/api/app/v1/container/0b0e3538-88df-4f07-9aed-3a3cc4175076/"
|
||||
],
|
||||
"resource_uri": "/api/app/v1/action/49f0efe8-a704-4a10-b02f-f96344fabadd/",
|
||||
"state": "Success",
|
||||
"uuid": "093ba3bb-08dd-48f0-8f12-4d3b85ef85b3",
|
||||
"datetime": "2016-02-01T16:47:28Z"
|
||||
}
|
||||
```
|
||||
|
||||
Docker Cloud events are generated every time any of the following objects is created or changes state:
|
||||
|
||||
* Stack
|
||||
* Service
|
||||
* Container
|
||||
* Node Cluster
|
||||
* Node
|
||||
* Action
|
||||
|
||||
|
||||
### Attributes
|
||||
|
||||
| Attribute | Description |
|
||||
|:-------------|:---------------------------------------------------------------------------------------------------------------------------------|
|
||||
| type | Type of object that was created or updated. For possible values, check the [events types](#event-types) table below. |
|
||||
| action | Type of action that was executed on the object. Posible values: `create`, `update` or `delete` |
|
||||
| parents | List of resource URIs (REST API) of the parents of the object, according to the "Parent-child hierarchy" table below |
|
||||
| resource_uri | Resource URI (REST API) of the object that was created or updated. You can do a `GET` operation on this URL to fetch its details |
|
||||
| state | The current state of the object |
|
||||
| uuid | Unique identifier for the event |
|
||||
| datetime | Date and time of the event in ISO 8601 format |
|
||||
|
||||
|
||||
### Event types
|
||||
|
||||
| Type | Description |
|
||||
|:------------|:-----------------------------------------------------------------------------------------------|
|
||||
| stack | Whenever a `Stack` is created or updated |
|
||||
| service | Whenever a `Service` is created or updated |
|
||||
| container | Whenever a `Container` is created or updated |
|
||||
| nodecluster | Whenever a `Node Cluster` is created or updated |
|
||||
| node | Whenever a `Node` is created or updated |
|
||||
| action | Whenever a `Action` is created or updated |
|
||||
| error | Sent when an error occurs on the websocket connection or as part of the authentication process |
|
||||
|
||||
|
||||
### Parent-child hierarchy
|
||||
|
||||
| Object type | Parent types |
|
||||
|:-------------|:----------------------------------------|
|
||||
| Stack | (None) |
|
||||
| Service | Stack |
|
||||
| Container | Service, Stack, Node, Node Cluster |
|
||||
| Node Cluster | (None) |
|
||||
| Node | Node Cluster |
|
||||
| Action | (object to which the action applies to) |
|
||||
|
||||
|
||||
## Listen to new Docker Cloud Events
|
||||
|
||||
```python
|
||||
import dockercloud
|
||||
|
||||
def process_event(event):
|
||||
print event
|
||||
|
||||
events = dockercloud.Events()
|
||||
events.on_message(process_event)
|
||||
events.run_forever()
|
||||
```
|
||||
|
||||
```go
|
||||
import "github.com/docker/go-dockercloud/dockercloud"
|
||||
|
||||
c := make(chan dockercloud.Event)
|
||||
e := make(chan error)
|
||||
|
||||
go dockercloud.Events(c, e)
|
||||
|
||||
for {
|
||||
select {
|
||||
case event := <-c:
|
||||
log.Println(event)
|
||||
case err := <-e:
|
||||
log.Println(err)
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
```http
|
||||
GET /api/audit/v1/events/ HTTP/1.1
|
||||
Host: ws.cloud.docker.com
|
||||
Authorization: Basic dXNlcm5hbWU6YXBpa2V5
|
||||
Connection: Upgrade
|
||||
Upgrade: websocket
|
||||
```
|
||||
|
||||
```shell
|
||||
docker-cloud event
|
||||
```
|
||||
|
||||
Listens for new Docker Cloud Events
|
||||
|
||||
### Endpoint Type
|
||||
|
||||
Available in Docker Cloud's **STREAM API**
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`GET /api/audit/v1/events/`
|
||||
|
|
@ -0,0 +1,376 @@
|
|||
# Nodes
|
||||
|
||||
## Node
|
||||
|
||||
> Example
|
||||
|
||||
```json
|
||||
{
|
||||
"availability_zone": "/api/infra/v1/az/testing-provider/testing-region/testing-az/",
|
||||
"cpu": 1,
|
||||
"current_num_containers": 4,
|
||||
"deployed_datetime": "Tue, 16 Sep 2014 17:01:15 +0000",
|
||||
"destroyed_datetime": null,
|
||||
"disk": 60,
|
||||
"docker_execdriver": "native-0.2",
|
||||
"docker_graphdriver": "aufs",
|
||||
"docker_version": "1.5.0",
|
||||
"external_fqdn": "fc1a5bb9-user.node.dockerapp.io",
|
||||
"last_seen": "Thu, 25 Sep 2014 13:14:44 +0000",
|
||||
"memory": 1792,
|
||||
"nickname": "fc1a5bb9-user.node.dockerapp.io",
|
||||
"node_cluster": "/api/infra/v1/nodecluster/d787a4b7-d525-4061-97a0-f423e8f1d229/",
|
||||
"node_type": "/api/infra/v1/nodetype/testing-provider/testing-type/",
|
||||
"public_ip": "10.45.2.11",
|
||||
"region": "/api/infra/v1/region/testing-provider/testing-region/",
|
||||
"resource_uri": "/api/infra/v1/node/fc1a5bb9-17f5-4819-b667-8c7cd819e949/",
|
||||
"state": "Deployed",
|
||||
"tags": [
|
||||
{"name": "tag_one"},
|
||||
{"name": "tag-two"}
|
||||
],
|
||||
"tunnel": "https://tunnel01.cloud.docker.com:12345",
|
||||
"uuid": "fc1a5bb9-17f5-4819-b667-8c7cd819e949"
|
||||
}
|
||||
```
|
||||
|
||||
A node is a virtual machine provided by a cloud provider where containers can be deployed.
|
||||
|
||||
### Attributes
|
||||
|
||||
Attribute | Description
|
||||
--------- | -----------
|
||||
availability_zone | The resource URI of the availability zone where the node is deployed, if any
|
||||
uuid | A unique identifier for the node generated automatically on creation
|
||||
resource_uri | A unique API endpoint that represents the node
|
||||
external_fqdn | An automatically generated FQDN for the node. Containers deployed on this node will inherit this FQDN.
|
||||
state | The state of the node. See the below table for a list of possible states.
|
||||
node_cluster | The resource URI of the node cluster to which this node belongs to (if applicable)
|
||||
node_type | The resource URI of the node type used for the node
|
||||
region | The resource URI of the region where the node is deployed
|
||||
docker_execdriver | Docker's execution driver used in the node
|
||||
docker_graphdriver | Docker's storage driver used in the node
|
||||
docker_version | Docker's version used in the node
|
||||
cpu | Node number of CPUs
|
||||
disk | Node storage size in GB
|
||||
memory | Node memory in MB
|
||||
current_num_containers | The actual number of containers deployed in this node
|
||||
last_seen | Date and time of the last time the node was contacted by Docker Cloud
|
||||
public_ip | The public IP allocated to the node
|
||||
tunnel | If the node does not accept incoming connections to port 2375, the address of the reverse tunnel to access the docker daemon, or `null` otherwise
|
||||
deployed_datetime | The date and time when this node cluster was deployed
|
||||
destroyed_datetime | The date and time when this node cluster was terminated (if applicable)
|
||||
tags | List of tags to identify the node when deploying services (see [Tags](../../docker-cloud/apps/deploy-tags/) for more information)
|
||||
nickname | A user-friendly name for the node (`external_fqdn` by default)
|
||||
|
||||
|
||||
### Node states
|
||||
|
||||
State | Description
|
||||
----- | -----------
|
||||
Deploying | The node is being deployed in the cloud provider. No actions allowed in this state.
|
||||
Deployed | The node is deployed and provisioned and is ready to deploy containers. Possible actions in this state: `terminate`, `docker-upgrade`.
|
||||
Unreachable | The node is deployed but Docker Cloud cannot connect to the docker daemon. Possible actions in this state: `health-check` and `terminate`.
|
||||
Upgrading | The node docker daemon is being upgraded. No actions allowed in this state.
|
||||
Terminating | The node is being terminated in the cloud provider. No actions allowed in this state.
|
||||
Terminated | The node has been terminated and is no longer present in the cloud provider. No actions allowed in this state.
|
||||
|
||||
### Node Last Metric attributes
|
||||
|
||||
Attribute | Description
|
||||
--------- | -----------
|
||||
cpu | CPU percentage usage
|
||||
memory | Memory usage in bytes
|
||||
disk | Disk storage usage in bytes
|
||||
|
||||
|
||||
## List all nodes
|
||||
|
||||
```python
|
||||
import dockercloud
|
||||
|
||||
nodes = dockercloud.Node.list()
|
||||
```
|
||||
|
||||
```go
|
||||
import "github.com/docker/go-dockercloud/dockercloud"
|
||||
|
||||
nodeList, err := dockercloud.ListNodes()
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
log.Println(nodeList)
|
||||
```
|
||||
|
||||
```http
|
||||
GET /api/infra/v1/node/ HTTP/1.1
|
||||
Host: cloud.docker.com
|
||||
Authorization: Basic dXNlcm5hbWU6YXBpa2V5
|
||||
Accept: application/json
|
||||
```
|
||||
|
||||
```shell
|
||||
docker-cloud node ls
|
||||
```
|
||||
|
||||
Lists all current and recently terminated nodes. Returns a list of `Node` objects.
|
||||
|
||||
### Endpoint Type
|
||||
|
||||
Available in Docker Cloud's **REST API**
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`GET /api/infra/v1/node/`
|
||||
|
||||
### Query Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
uuid | Filter by UUID
|
||||
state | Filter by state. Possible values: `Deploying`, `Deployed`, `Unreachable`, `Upgrading`, `Terminating`, `Terminated`
|
||||
node_cluster | Filter by resource URI of the target node cluster
|
||||
node_type | Filter by resource URI of the target node type
|
||||
region | Filter by resource URI of the target region
|
||||
docker_version | Filter by Docker engine version running in the nodes
|
||||
|
||||
|
||||
|
||||
## Get an existing node
|
||||
|
||||
```python
|
||||
import dockercloud
|
||||
|
||||
node = dockercloud.Node.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
|
||||
```
|
||||
|
||||
```go
|
||||
import "github.com/docker/go-dockercloud/dockercloud"
|
||||
|
||||
node, err := dockercloud.GetNode("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
log.Println(node)
|
||||
```
|
||||
|
||||
```http
|
||||
GET /api/infra/v1/node/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/ HTTP/1.1
|
||||
Host: cloud.docker.com
|
||||
Authorization: Basic dXNlcm5hbWU6YXBpa2V5
|
||||
Accept: application/json
|
||||
```
|
||||
|
||||
```shell
|
||||
docker-cloud node inspect 7eaf7fff
|
||||
```
|
||||
|
||||
Get all the details of an specific node
|
||||
|
||||
### Endpoint Type
|
||||
|
||||
Available in Docker Cloud's **REST API**
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`GET /api/infra/v1/node/(uuid)/`
|
||||
|
||||
### Path Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
uuid | The UUID of the node to retrieve
|
||||
|
||||
|
||||
## Update a node
|
||||
|
||||
```python
|
||||
import dockercloud
|
||||
|
||||
node = dockercloud.Node.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
|
||||
node.tags.add(["tag-1"])
|
||||
node.save()
|
||||
```
|
||||
|
||||
```go
|
||||
import "github.com/docker/go-dockercloud/dockercloud"
|
||||
|
||||
node, err := dockercloud.GetNode("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
if err = node.Update(dockercloud.Node{Tags: []string{{Name: "tag-1"}}}); err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
```
|
||||
|
||||
```http
|
||||
PATCH /api/infra/v1/node/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/ HTTP/1.1
|
||||
Host: cloud.docker.com
|
||||
Authorization: Basic dXNlcm5hbWU6YXBpa2V5
|
||||
Accept: application/json
|
||||
|
||||
{"tags": [{"name": "tag-1"}], "nickname": "dev node"}
|
||||
```
|
||||
|
||||
```shell
|
||||
docker-cloud tag add -t tag-1 7eaf7fff
|
||||
docker-cloud tag set -t tag-2 7eaf7fff
|
||||
```
|
||||
|
||||
Names the node with a user-friendly name and/or replaces the old tags for the new list provided.
|
||||
|
||||
### Endpoint Type
|
||||
|
||||
Available in Docker Cloud's **REST API**
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`PATCH /api/infra/v1/node/(uuid)/`
|
||||
|
||||
### Path Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
uuid | The UUID of the node to retrieve
|
||||
|
||||
### JSON Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
nickname | (optional) A user-friendly name for the node (`external_fqdn` by default)
|
||||
tags | (optional) List of tags the node will have. This operation replaces the user tag list.
|
||||
|
||||
|
||||
## Upgrade Docker Daemon
|
||||
|
||||
```python
|
||||
import dockercloud
|
||||
|
||||
node = dockercloud.Node.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
|
||||
node.upgrade_docker()
|
||||
```
|
||||
|
||||
```go
|
||||
import "github.com/docker/go-dockercloud/dockercloud"
|
||||
|
||||
node, err := dockercloud.GetNode("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
if err = node.Upgrade(); err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
```
|
||||
|
||||
```http
|
||||
POST /api/infra/v1/node/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/docker-upgrade/ HTTP/1.1
|
||||
Host: cloud.docker.com
|
||||
Authorization: Basic dXNlcm5hbWU6YXBpa2V5
|
||||
Accept: application/json
|
||||
```
|
||||
|
||||
```shell
|
||||
docker-cloud node upgrade 7eaf7fff
|
||||
```
|
||||
|
||||
Upgrades the docker daemon of the node. This will restart your containers on that node. See [Docker upgrade](../../docker-cloud/infrastructure/docker-upgrade/) for more information.
|
||||
|
||||
### Endpoint Type
|
||||
|
||||
Available in Docker Cloud's **REST API**
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`POST /api/infra/v1/node/(uuid)/docker-upgrade/`
|
||||
|
||||
### Path Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
uuid | The UUID of the node to upgrade
|
||||
|
||||
|
||||
## Perform a health check of a node
|
||||
|
||||
```http
|
||||
POST /api/infra/v1/node/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/health-check/ HTTP/1.1
|
||||
Host: cloud.docker.com
|
||||
Authorization: Basic dXNlcm5hbWU6YXBpa2V5
|
||||
Accept: application/json
|
||||
```
|
||||
|
||||
Tests connectivity between Docker Cloud and the node. Updates the node status to `Deployed` if the check was successful, or to `Unreachable` otherwise.
|
||||
|
||||
### Endpoint Type
|
||||
|
||||
Available in Docker Cloud's **REST API**
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`POST /api/infra/v1/node/(uuid)/health-check/`
|
||||
|
||||
### Path Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
uuid | The UUID of the node to perform the health check to
|
||||
|
||||
|
||||
## Terminate a node
|
||||
|
||||
```python
|
||||
import dockercloud
|
||||
|
||||
node = dockercloud.Node.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
|
||||
node.delete()
|
||||
```
|
||||
|
||||
```http
|
||||
DELETE /api/infra/v1/node/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/ HTTP/1.1
|
||||
Host: cloud.docker.com
|
||||
Authorization: Basic dXNlcm5hbWU6YXBpa2V5
|
||||
Accept: application/json
|
||||
```
|
||||
|
||||
```go
|
||||
import "github.com/docker/go-dockercloud/dockercloud"
|
||||
|
||||
node, err := dockercloud.GetNode("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
if err = node.Terminate(); err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
```
|
||||
|
||||
```shell
|
||||
docker-cloud node rm 7eaf7fff
|
||||
```
|
||||
|
||||
Terminates the specified node.
|
||||
|
||||
### Endpoint Type
|
||||
|
||||
Available in Docker Cloud's **REST API**
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`DELETE /api/infra/v1/node/(uuid)/`
|
||||
|
||||
### Path Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
uuid | The UUID of the node to terminate
|
||||
|
|
@ -0,0 +1,410 @@
|
|||
# Node Clusters
|
||||
|
||||
## Node Cluster
|
||||
|
||||
> Example
|
||||
|
||||
```json
|
||||
{
|
||||
"current_num_nodes": 1,
|
||||
"deployed_datetime": "Tue, 16 Sep 2014 17:01:15 +0000",
|
||||
"destroyed_datetime": null,
|
||||
"disk": 60,
|
||||
"nickname": "my test cluster",
|
||||
"name": "TestCluster",
|
||||
"node_type": "/api/infra/v1/nodetype/aws/t2.micro/",
|
||||
"nodes": [
|
||||
"/api/infra/v1/node/75d20367-0948-4f10-8ba4-ffb4d16ed3c6/"
|
||||
],
|
||||
"region": "/api/infra/v1/region/aws/us-east-1/",
|
||||
"resource_uri": "/api/infra/v1/nodecluster/5516df0b-721e-4470-b350-741ff22e63a0/",
|
||||
"state": "Deployed",
|
||||
"tags": [
|
||||
{"name": "tag_one"},
|
||||
{"name": "tag-two"},
|
||||
{"name": "tagthree3"}
|
||||
],
|
||||
"target_num_nodes": 2,
|
||||
"uuid": "5516df0b-721e-4470-b350-741ff22e63a0",
|
||||
"provider_options": {
|
||||
"vpc": {
|
||||
"id": "vpc-aa1c70d4",
|
||||
"subnets": ["subnet-aaa7d94f", "subnet-aa15fa64"],
|
||||
"security_groups": ["sg-aa1c70d4"]
|
||||
},
|
||||
"iam": {
|
||||
"instance_profile_name": "my_instance_profile"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
A node cluster is a group of nodes that share the same provider, region and/or availability zone, and node type. They are on the same private network.
|
||||
|
||||
|
||||
### Attributes
|
||||
|
||||
Attribute | Description
|
||||
--------- | -----------
|
||||
uuid | A unique identifier for the node cluster generated automatically on creation
|
||||
resource_uri | A unique API endpoint that represents the node cluster
|
||||
name | A user provided name for the node cluster
|
||||
state | The state of the node cluster. See the below table for a list of possible states.
|
||||
node_type | The resource URI of the node type used for the node cluster
|
||||
disk | The size of the disk where images and containers are stored (in GB)
|
||||
nodes | A list of resource URIs of the `Node` objects on the node cluster
|
||||
region | The resource URI of the `Region` object where the node cluster is deployed
|
||||
target_num_nodes | The desired number of nodes for the node cluster
|
||||
current_num_nodes | The actual number of nodes in the node cluster. This may differ from `target_num_nodes` if the node cluster is being deployed or scaled
|
||||
deployed_datetime | The date and time when this node cluster was deployed
|
||||
destroyed_datetime | The date and time when this node cluster was terminated (if applicable)
|
||||
tags | List of tags to identify the node cluster nodes when deploying services (see [Tags](../../docker-cloud/apps/deploy-tags/) for more information)
|
||||
provider_options | Provider-specific extra options for the deployment of the node (see `Provider options` table below for more information)
|
||||
nickname | A user-friendly name for the node cluster (`name` by default)
|
||||
|
||||
|
||||
### Node Cluster states
|
||||
|
||||
State | Description
|
||||
----- | -----------
|
||||
Init | The node cluster has been created and has no deployed containers yet. Possible actions in this state: `deploy`, `terminate`.
|
||||
Deploying | All nodes in the cluster are either deployed or being deployed. No actions allowed in this state.
|
||||
Deployed | All nodes in the cluster are deployed and provisioned. Possible actions in this state: `terminate`.
|
||||
Partly deployed | One or more nodes of the cluster are deployed and running. Possible actions in this state: `terminate`.
|
||||
Scaling | The cluster is either deploying new nodes or terminating existing ones responding to a scaling request. No actions allowed in this state.
|
||||
Terminating | All nodes in the cluster are either being terminated or already terminated. No actions allowed in this state.
|
||||
Terminated | The node cluster and all its nodes have been terminated. No actions allowed in this state.
|
||||
Empty cluster | There are no nodes deployed in this cluster. Possible actions in this state: `terminate`.
|
||||
|
||||
|
||||
### Provider options
|
||||
|
||||
You can specify the following options when using the Amazon Web Services provider:
|
||||
|
||||
* `vpc`: VPC-related options (optional)
|
||||
* `id`: AWS VPC identifier of the target VPC where the nodes of the cluster will be deployed (required)
|
||||
* `subnets`: a list of target subnet indentifiers inside selected VPC. If you specify more than one subnet, Docker Cloud will balance among all of them following a high-availability schema (optional)
|
||||
* `security_groups`: the security group that will be applied to every node of the cluster (optional)
|
||||
* `iam`: IAM-related options (optional)
|
||||
* `instance_profile_name`: name of the instance profile (container for instance an IAM role) to attach to every node of the cluster (required)
|
||||
|
||||
|
||||
## List all node clusters
|
||||
|
||||
```python
|
||||
import dockercloud
|
||||
|
||||
nodeclusters = dockercloud.NodeCluster.list()
|
||||
```
|
||||
|
||||
```go
|
||||
import "github.com/docker/go-dockercloud/dockercloud"
|
||||
|
||||
nodeclusters, err := dockercloud.ListNodeClusters()
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
log.Println(nodeclusters)
|
||||
```
|
||||
|
||||
```http
|
||||
GET /api/infra/v1/nodecluster/ HTTP/1.1
|
||||
Host: cloud.docker.com
|
||||
Authorization: Basic dXNlcm5hbWU6YXBpa2V5
|
||||
Accept: application/json
|
||||
```
|
||||
|
||||
```shell
|
||||
docker-cloud nodecluster ls
|
||||
```
|
||||
|
||||
Lists all current and recently terminated node clusters. Returns a list of `NodeCluster` objects.
|
||||
|
||||
### Endpoint Type
|
||||
|
||||
Available in Docker Cloud's **REST API**
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`GET /api/infra/v1/nodecluster/`
|
||||
|
||||
### Query Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
uuid | Filter by UUID
|
||||
state | Filter by state. Possible values: `Init`, `Deploying`, `Deployed`, `Partly deployed`, `Scaling`, `Terminating`, `Terminated`, `Empty cluster`
|
||||
name | Filter by node cluster name
|
||||
region | Filter by resource URI of the target region
|
||||
node_type | Filter by resource URI of the target node type
|
||||
|
||||
|
||||
## Create a new node cluster
|
||||
|
||||
```python
|
||||
import dockercloud
|
||||
|
||||
region = dockercloud.Region.fetch("digitalocean/lon1")
|
||||
node_type = dockercloud.NodeType.fetch("digitalocean/1gb")
|
||||
nodecluster = dockercloud.NodeCluster.create(name="my_cluster", node_type=node_type, region=region, disk=60)
|
||||
nodecluster.save()
|
||||
```
|
||||
|
||||
```go
|
||||
import "github.com/docker/go-dockercloud/dockercloud"
|
||||
|
||||
nodecluster, err := dockercloud.CreateNodeCluster(dockercloud.NodeCreateRequest{Name: "my_cluster", Region: "/api/infra/v1/region/digitalocean/lon1/", NodeType: "/api/infra/v1/nodetype/digitalocean/1gb/", Target_num_nodes: 2})
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
log.Println(nodecluster)
|
||||
```
|
||||
|
||||
```http
|
||||
POST /api/infra/v1/nodecluster/ HTTP/1.1
|
||||
Host: cloud.docker.com
|
||||
Authorization: Basic dXNlcm5hbWU6YXBpa2V5
|
||||
Accept: application/json
|
||||
Content-Type: application/json
|
||||
|
||||
{"name": "my_cluster", "region": "/api/infra/v1/region/digitalocean/lon1/", "node_type": "/api/infra/v1/nodetype/digitalocean/1gb/", "disk": 60}
|
||||
```
|
||||
|
||||
```shell
|
||||
docker-cloud nodecluster create my_cluster digitalocean lon1 1gb
|
||||
```
|
||||
|
||||
Creates a new node cluster without deploying it.
|
||||
|
||||
### Endpoint Type
|
||||
|
||||
Available in Docker Cloud's **REST API**
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`POST /api/infra/v1/nodecluster/`
|
||||
|
||||
### JSON Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
name | (required) A user provided name for the node cluster
|
||||
node_type | (required) The resource URI of the node type to be used for the node cluster
|
||||
region | (required) The resource URI of the region where the node cluster is to be deployed
|
||||
disk | (optional) The size of the volume to create where images and containers will be stored, in GB (default: `60`). Not available for Digital Ocean. To create Softlayer nodes you must select one of the following sizes (in GBs): 10, 20, 25, 30, 40, 50, 75, 100, 125, 150, 175, 200, 250, 300, 350, 400, 500, 750, 1000, 1500 or 2000
|
||||
nickname | (optional) A user-friendly name for the node cluster (`name` by default)
|
||||
target_num_nodes | (optional) The desired number of nodes for the node cluster (default: `1`)
|
||||
tags | (optional) List of tags of the node cluster to be used when deploying services see [Tags](../../docker-cloud/apps/deploy-tags/) for more information) (default: `[]`)
|
||||
provider_options | Provider-specific extra options for the deployment of the node (see table `Provider options` above for more information)
|
||||
|
||||
|
||||
## Get an existing node cluster
|
||||
|
||||
```python
|
||||
import dockercloud
|
||||
|
||||
service = dockercloud.NodeCluster.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
|
||||
```
|
||||
|
||||
```go
|
||||
import "github.com/docker/go-dockercloud/dockercloud"
|
||||
|
||||
nodecluster, err := dockercloud.GetNodeCluster("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
log.Println(nodecluster)
|
||||
```
|
||||
|
||||
```http
|
||||
GET /api/infra/v1/nodecluster/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/ HTTP/1.1
|
||||
Host: cloud.docker.com
|
||||
Authorization: Basic dXNlcm5hbWU6YXBpa2V5
|
||||
Accept: application/json
|
||||
```
|
||||
|
||||
```shell
|
||||
docker-cloud nodecluster inspect 7eaf7fff
|
||||
```
|
||||
|
||||
Get all the details of an specific node cluster
|
||||
|
||||
### Endpoint Type
|
||||
|
||||
Available in Docker Cloud's **REST API**
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`GET /api/infra/v1/nodecluster/(uuid)/`
|
||||
|
||||
### Path Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
uuid | The UUID of the node cluster to retrieve
|
||||
|
||||
## Deploy a node cluster
|
||||
|
||||
```python
|
||||
import dockercloud
|
||||
|
||||
nodecluster = dockercloud.NodeCluster.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
|
||||
nodecluster.deploy()
|
||||
```
|
||||
|
||||
```go
|
||||
import "github.com/docker/go-dockercloud/dockercloud"
|
||||
|
||||
nodecluster, err := dockercloud.GetNodeCluster("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
if err = nodecluster.Deploy(); err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
```
|
||||
|
||||
```http
|
||||
POST /api/infra/v1/nodecluster/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/deploy/ HTTP/1.1
|
||||
Host: cloud.docker.com
|
||||
Authorization: Basic dXNlcm5hbWU6YXBpa2V5
|
||||
Accept: application/json
|
||||
```
|
||||
|
||||
Deploys and provisions a recently created node cluster in the specified region and cloud provider.
|
||||
|
||||
### Endpoint Type
|
||||
|
||||
Available in Docker Cloud's **REST API**
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`POST /api/infra/v1/nodecluster/(uuid)/deploy/`
|
||||
|
||||
### Path Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
uuid | The UUID of the node cluster to deploy
|
||||
|
||||
## Update an existing node cluster
|
||||
|
||||
```python
|
||||
import dockercloud
|
||||
|
||||
nodecluster = dockercloud.NodeCluster.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
|
||||
nodecluster.target_num_nodes = 3
|
||||
nodecluster.tags.add("tag-1")
|
||||
nodecluster.save()
|
||||
```
|
||||
|
||||
```go
|
||||
import "github.com/docker/go-dockercloud/dockercloud"
|
||||
|
||||
nodecluster, err := dockercloud.GetNodeCluster("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
if err = nodecluster.Update(dockercloud.NodeCreateRequest{Target_num_nodes: 4}); err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
```
|
||||
|
||||
```http
|
||||
PATCH /api/infra/v1/nodecluster/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/ HTTP/1.1
|
||||
Host: cloud.docker.com
|
||||
Authorization: Basic dXNlcm5hbWU6YXBpa2V5
|
||||
Accept: application/json
|
||||
Content-Type: application/json
|
||||
|
||||
{"target_num_nodes": 3, "tags": [{"name": "tag-1"}]}
|
||||
```
|
||||
|
||||
```shell
|
||||
docker-cloud nodecluster scale 7eaf7fff 3
|
||||
docker-cloud tag add -t tag-1 7eaf7fff
|
||||
docker-cloud tag set -t tag-2 7eaf7fff
|
||||
```
|
||||
|
||||
Updates the node cluster details and applies the changes automatically.
|
||||
|
||||
### Endpoint Type
|
||||
|
||||
Available in Docker Cloud's **REST API**
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`PATCH /api/infra/v1/nodecluster/(uuid)/`
|
||||
|
||||
### Path Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
uuid | The UUID of the node cluster to update
|
||||
|
||||
|
||||
### JSON Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
target_num_nodes | (optional) The number of nodes to scale this node cluster to
|
||||
tags | (optional) List of tags the node cluster (and nodes within the node cluster) will have. This operation replaces the user tag list.
|
||||
## Terminate a node cluster
|
||||
|
||||
```python
|
||||
import dockercloud
|
||||
|
||||
nodecluster = dockercloud.NodeCluster.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
|
||||
nodecluster.delete()
|
||||
```
|
||||
|
||||
```go
|
||||
import "github.com/docker/go-dockercloud/dockercloud"
|
||||
|
||||
nodecluster, err := dockercloud.GetNodeCluster("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
if err = nodecluster.Terminate(); err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
```
|
||||
|
||||
```http
|
||||
DELETE /api/infra/v1/nodecluster/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/ HTTP/1.1
|
||||
Host: cloud.docker.com
|
||||
Authorization: Basic dXNlcm5hbWU6YXBpa2V5
|
||||
Accept: application/json
|
||||
```
|
||||
|
||||
```shell
|
||||
dockercloud nodecluster rm 7eaf7fff
|
||||
```
|
||||
|
||||
Terminates all the nodes in a node cluster and the node cluster itself. This is not reversible.
|
||||
|
||||
### Endpoint Type
|
||||
|
||||
Available in Docker Cloud's **REST API**
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`DELETE /api/infra/v1/nodecluster/(uuid)/`
|
||||
|
||||
### Path Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
uuid | The UUID of the node cluster to terminate
|
||||
|
|
@ -0,0 +1,137 @@
|
|||
# Node Types
|
||||
|
||||
## Node Type
|
||||
|
||||
> Example
|
||||
|
||||
```json
|
||||
{
|
||||
"availability_zones": [],
|
||||
"available": true,
|
||||
"label": "1GB",
|
||||
"name": "1gb",
|
||||
"provider": "/api/infra/v1/provider/digitalocean/",
|
||||
"regions": [
|
||||
"/api/infra/v1/region/digitalocean/ams1/",
|
||||
"/api/infra/v1/region/digitalocean/sfo1/",
|
||||
"/api/infra/v1/region/digitalocean/nyc2/",
|
||||
"/api/infra/v1/region/digitalocean/ams2/",
|
||||
"/api/infra/v1/region/digitalocean/sgp1/",
|
||||
"/api/infra/v1/region/digitalocean/lon1/",
|
||||
"/api/infra/v1/region/digitalocean/nyc3/",
|
||||
"/api/infra/v1/region/digitalocean/nyc1/"
|
||||
],
|
||||
"resource_uri": "/api/infra/v1/nodetype/digitalocean/1gb/"
|
||||
}
|
||||
```
|
||||
|
||||
A node type is a representation of an instance size supported by a certain cloud provider in a certain region and/or availability zone.
|
||||
|
||||
|
||||
### Attributes
|
||||
|
||||
Attribute | Description
|
||||
--------- | -----------
|
||||
resource_uri | A unique API endpoint that represents the node type
|
||||
name | An identifier for the node type
|
||||
label | A user-friendly name for the node type
|
||||
regions | A list of resource URIs of the regions to which this node type can be deployed to
|
||||
availability_zones | A list of resource URIs of the availability zones to which this node type can be deployed to
|
||||
provider | The resource URI of the provider of the node type
|
||||
available | Whether the node type is currently available for new node deployments
|
||||
|
||||
|
||||
## List all node types
|
||||
|
||||
```python
|
||||
import dockercloud
|
||||
|
||||
nodetypes = dockercloud.NodeType.list()
|
||||
```
|
||||
|
||||
```go
|
||||
import "github.com/docker/go-dockercloud/dockercloud"
|
||||
|
||||
nodetypeList, err := dockercloud.ListNodeTypes()
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
log.Println(nodetypeList)
|
||||
```
|
||||
|
||||
```http
|
||||
GET /api/infra/v1/nodetype/ HTTP/1.1
|
||||
Host: cloud.docker.com
|
||||
Authorization: Basic dXNlcm5hbWU6YXBpa2V5
|
||||
Accept: application/json
|
||||
```
|
||||
|
||||
```shell
|
||||
docker-cloud nodecluster nodetype
|
||||
```
|
||||
|
||||
Lists all node types of all supported cloud providers. Returns a list of `NodeType` objects.
|
||||
|
||||
### Endpoint Type
|
||||
|
||||
Available in Docker Cloud's **REST API**
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`GET /api/infra/v1/nodetype/`
|
||||
|
||||
### Query Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
name | Filter by node type name
|
||||
regions | Filter by resource URI of the target regions
|
||||
availability_zones | Filter by resource URI of the target availability zones
|
||||
|
||||
|
||||
## Get an individual node type
|
||||
|
||||
```python
|
||||
import dockercloud
|
||||
|
||||
nodetype = dockercloud.NodeType.fetch("digitalocean/1gb")
|
||||
```
|
||||
|
||||
```go
|
||||
import "github.com/docker/go-dockercloud/dockercloud"
|
||||
|
||||
nodetype, err := dockercloud.GetNodeType("digitalocean","1gb")
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
log.Println(nodetype)
|
||||
```
|
||||
|
||||
```http
|
||||
GET /api/infra/v1/nodetype/digitalocean/1gb/ HTTP/1.1
|
||||
Host: cloud.docker.com
|
||||
Authorization: Basic dXNlcm5hbWU6YXBpa2V5
|
||||
Accept: application/json
|
||||
```
|
||||
|
||||
|
||||
Get all the details of a specific node type
|
||||
|
||||
### Endpoint Type
|
||||
|
||||
Available in Docker Cloud's **REST API**
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`GET /api/infra/v1/nodetype/(provider.name)/(name)/`
|
||||
|
||||
### Path Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
name | The name of the node type to retrieve
|
||||
provider.name | The name of the provider of the node type
|
||||
|
|
@ -0,0 +1,132 @@
|
|||
# Providers
|
||||
|
||||
## Provider
|
||||
|
||||
> Example
|
||||
|
||||
```json
|
||||
{
|
||||
"available": true,
|
||||
"label": "Digital Ocean",
|
||||
"name": "digitalocean",
|
||||
"regions": [
|
||||
"/api/infra/v1/region/digitalocean/ams1/",
|
||||
"/api/infra/v1/region/digitalocean/ams2/",
|
||||
"/api/infra/v1/region/digitalocean/ams3/",
|
||||
"/api/infra/v1/region/digitalocean/lon1/",
|
||||
"/api/infra/v1/region/digitalocean/nyc1/",
|
||||
"/api/infra/v1/region/digitalocean/nyc2/",
|
||||
"/api/infra/v1/region/digitalocean/nyc3/",
|
||||
"/api/infra/v1/region/digitalocean/sfo1/",
|
||||
"/api/infra/v1/region/digitalocean/sgp1/"
|
||||
],
|
||||
"resource_uri": "/api/infra/v1/provider/digitalocean/"
|
||||
}
|
||||
```
|
||||
|
||||
A provider is a representation of a cloud provider supported by Docker Cloud. Providers have one or more regions where nodes are deployed.
|
||||
|
||||
|
||||
### Attributes
|
||||
|
||||
Attribute | Description
|
||||
--------- | -----------
|
||||
resource_uri | A unique API endpoint that represents the provider
|
||||
name | A unique identifier for the provider
|
||||
label | A user-friendly name for the provider
|
||||
regions | A list of resource URIs of the regions available in this provider
|
||||
available | Whether the provider is currently available for new node deployments
|
||||
|
||||
|
||||
## List all providers
|
||||
|
||||
```python
|
||||
import dockercloud
|
||||
|
||||
providers = dockercloud.Provider.list()
|
||||
```
|
||||
|
||||
```http
|
||||
GET /api/infra/v1/provider/ HTTP/1.1
|
||||
Host: cloud.docker.com
|
||||
Authorization: Basic dXNlcm5hbWU6YXBpa2V5
|
||||
Accept: application/json
|
||||
```
|
||||
|
||||
```go
|
||||
import "github.com/docker/go-dockercloud/dockercloud"
|
||||
|
||||
providerList, err := dockercloud.ListProviders()
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
log.Println(providerList)
|
||||
```
|
||||
|
||||
```shell
|
||||
docker-cloud nodecluster provider
|
||||
```
|
||||
|
||||
Lists all supported cloud providers. Returns a list of `Provider` objects.
|
||||
|
||||
### Endpoint Type
|
||||
|
||||
Available in Docker Cloud's **REST API**
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`GET /api/infra/v1/provider/`
|
||||
|
||||
### Query Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
name | Filter by provider name
|
||||
|
||||
|
||||
|
||||
## Get an individual provider
|
||||
|
||||
```python
|
||||
import dockercloud
|
||||
|
||||
provider = dockercloud.Provider.fetch("digitalocean")
|
||||
```
|
||||
|
||||
```go
|
||||
import "github.com/docker/go-dockercloud/dockercloud"
|
||||
|
||||
provider, err := dockercloud.GetProvider("digitalocean")
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
log.Println(provider)
|
||||
```
|
||||
|
||||
```http
|
||||
GET /api/infra/v1/provider/digitalocean/ HTTP/1.1
|
||||
Host: cloud.docker.com
|
||||
Authorization: Basic dXNlcm5hbWU6YXBpa2V5
|
||||
Accept: application/json
|
||||
```
|
||||
|
||||
|
||||
Get all the details of a specific provider
|
||||
|
||||
### Endpoint Type
|
||||
|
||||
Available in Docker Cloud's **REST API**
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`GET /api/infra/v1/provider/(name)/`
|
||||
|
||||
### Path Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
name | The name of the provider to retrieve
|
||||
|
|
@ -0,0 +1,137 @@
|
|||
# Regions
|
||||
|
||||
## Region
|
||||
|
||||
> Example
|
||||
|
||||
```json
|
||||
{
|
||||
"availability_zones": [],
|
||||
"available": true,
|
||||
"label": "Amsterdam 2",
|
||||
"name": "ams2",
|
||||
"node_types": [
|
||||
"/api/infra/v1/nodetype/digitalocean/1gb/",
|
||||
"/api/infra/v1/nodetype/digitalocean/2gb/",
|
||||
"/api/infra/v1/nodetype/digitalocean/4gb/",
|
||||
"/api/infra/v1/nodetype/digitalocean/8gb/",
|
||||
"/api/infra/v1/nodetype/digitalocean/16gb/",
|
||||
"/api/infra/v1/nodetype/digitalocean/32gb/",
|
||||
"/api/infra/v1/nodetype/digitalocean/48gb/",
|
||||
"/api/infra/v1/nodetype/digitalocean/64gb/"
|
||||
],
|
||||
"provider": "/api/infra/v1/provider/digitalocean/",
|
||||
"resource_uri": "/api/infra/v1/region/digitalocean/ams2/"
|
||||
}
|
||||
```
|
||||
|
||||
A region is a representation of an entire or a subset of a data center of a cloud provider. It can contain availability zones (depending on the provider) and one or more node types.
|
||||
|
||||
|
||||
### Attributes
|
||||
|
||||
Attribute | Description
|
||||
--------- | -----------
|
||||
resource_uri | A unique API endpoint that represents the region
|
||||
name | An identifier for the region
|
||||
label | A user-friendly name for the region
|
||||
node_types | A list of resource URIs of the node types available in the region
|
||||
availability_zones | A list of resource URIs of the availability zones available in the region
|
||||
provider | The resource URI of the provider of the region
|
||||
available | Whether the region is currently available for new node deployments
|
||||
|
||||
|
||||
## List all regions
|
||||
|
||||
```python
|
||||
import dockercloud
|
||||
|
||||
regions = dockercloud.Region.list()
|
||||
```
|
||||
|
||||
```http
|
||||
GET /api/infra/v1/region/ HTTP/1.1
|
||||
Host: cloud.docker.com
|
||||
Authorization: Basic dXNlcm5hbWU6YXBpa2V5
|
||||
Accept: application/json
|
||||
```
|
||||
|
||||
```go
|
||||
import "github.com/docker/go-dockercloud/dockercloud"
|
||||
|
||||
regionList, err := dockercloud.ListRegions()
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
log.Println(regionList)
|
||||
```
|
||||
|
||||
```shell
|
||||
docker-cloud nodecluster region
|
||||
```
|
||||
|
||||
Lists all regions of all supported cloud providers. Returns a list of `Region` objects.
|
||||
|
||||
### Endpoint Type
|
||||
|
||||
Available in Docker Cloud's **REST API**
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`GET /api/infra/v1/region/`
|
||||
|
||||
### Query Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
name | Filter by region name
|
||||
provider | Filter by resource URI of the target provider
|
||||
|
||||
|
||||
|
||||
## Get an individual region
|
||||
|
||||
```python
|
||||
import dockercloud
|
||||
|
||||
region = dockercloud.Region.fetch("digitalocean/lon1")
|
||||
```
|
||||
|
||||
```go
|
||||
import "github.com/docker/go-dockercloud/dockercloud"
|
||||
|
||||
region, err := dockercloud.GetRegion("digitalocean","lon1")
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
log.Println(region)
|
||||
```
|
||||
|
||||
```http
|
||||
GET /api/infra/v1/region/digitalocean/lon1/ HTTP/1.1
|
||||
Host: cloud.docker.com
|
||||
Authorization: Basic dXNlcm5hbWU6YXBpa2V5
|
||||
Accept: application/json
|
||||
```
|
||||
|
||||
|
||||
Get all the details of a specific region
|
||||
|
||||
### Endpoint Type
|
||||
|
||||
Available in Docker Cloud's **REST API**
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`GET /api/infra/v1/region/(provider.name)/(name)/`
|
||||
|
||||
### Path Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
name | The name of the region to retrieve
|
||||
provider.name | The name of the provider of the region
|
||||
|
|
@ -0,0 +1,85 @@
|
|||
# Registries
|
||||
|
||||
## Registry
|
||||
|
||||
> Example
|
||||
|
||||
```json
|
||||
{
|
||||
"host": "registry-1.docker.io",
|
||||
"is_docker_registry": true,
|
||||
"is_ssl": true,
|
||||
"name": "Docker Hub",
|
||||
"port": 443,
|
||||
"resource_uri": "/api/repo/v1/registry/registry-1.docker.io/",
|
||||
}
|
||||
```
|
||||
|
||||
Represents a registry where repositories are hosted.
|
||||
|
||||
|
||||
### Attributes
|
||||
|
||||
Attribute | Description
|
||||
--------- | -----------
|
||||
resource_uri | A unique API endpoint that represents the registry
|
||||
name | Human-readable name of the registry
|
||||
host | FQDN of the registry, i.e. `registry-1.docker.io`
|
||||
is_docker_registry | Whether this registry is run by Docker
|
||||
is_ssl | Whether this registry has SSL activated or not
|
||||
port | The port number where the registry is listening to
|
||||
|
||||
|
||||
## List all registries
|
||||
|
||||
```http
|
||||
GET /api/repo/v1/registry/ HTTP/1.1
|
||||
Host: cloud.docker.com
|
||||
Authorization: Basic dXNlcm5hbWU6YXBpa2V5
|
||||
Accept: application/json
|
||||
```
|
||||
|
||||
Lists all current registries. Returns a list of `Registry` objects.
|
||||
|
||||
### Endpoint Type
|
||||
|
||||
Available in Docker Cloud's **REST API**
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`GET /api/repo/v1/registry/`
|
||||
|
||||
### Query Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
uuid | Filter by UUID
|
||||
name | Filter by registry name
|
||||
host | Filter by registry host
|
||||
is_docker_registry | Filter by whether the registry is run by Docker or not. Possible values: 'true' or 'false'
|
||||
|
||||
|
||||
## Get an existing registry
|
||||
|
||||
```http
|
||||
GET /api/repo/v1/registry/registry-1.docker.io/ HTTP/1.1
|
||||
Host: cloud.docker.com
|
||||
Authorization: Basic dXNlcm5hbWU6YXBpa2V5
|
||||
Accept: application/json
|
||||
```
|
||||
|
||||
Gets all the details of an specific registry
|
||||
|
||||
### Endpoint Type
|
||||
|
||||
Available in Docker Cloud's **REST API**
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`GET /api/v1/registry/(host)/`
|
||||
|
||||
### Path Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
host | The host of the registry to retrieve
|
||||
|
|
@ -0,0 +1,273 @@
|
|||
# External Repositories
|
||||
|
||||
## External Repository
|
||||
|
||||
> Example
|
||||
|
||||
```json
|
||||
{
|
||||
"in_use": false,
|
||||
"name": "quay.io/tutum/ubuntu",
|
||||
"registry": "/api/repo/v1/registry/quay.io/",
|
||||
"resource_uri": "/api/repo/v1/repository/quay.io/tutum/ubuntu/",
|
||||
}
|
||||
```
|
||||
|
||||
The `repository` endpoint is used to add and remove existing repositories on third party registries to be used in deployments and builds.
|
||||
|
||||
### Attributes
|
||||
|
||||
Attribute | Description
|
||||
--------- | -----------
|
||||
resource_uri | A unique API endpoint that represents the repository
|
||||
name | Name of the repository, i.e. `quay.io/tutum/ubuntu`
|
||||
in_use | If the image is being used by any of your services
|
||||
registry | Resource URI of the registry where this image is hosted
|
||||
|
||||
|
||||
## List all external repositories
|
||||
|
||||
```python
|
||||
import dockercloud
|
||||
|
||||
repositories = dockercloud.Repository.list()
|
||||
```
|
||||
|
||||
```http
|
||||
GET /api/repo/v1/repository/ HTTP/1.1
|
||||
Host: cloud.docker.com
|
||||
Authorization: Basic dXNlcm5hbWU6YXBpa2V5
|
||||
Accept: application/json
|
||||
```
|
||||
|
||||
```go
|
||||
import "github.com/docker/go-dockercloud/dockercloud"
|
||||
|
||||
repositoriesList, err := dockercloud.ListRepositories()
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
log.Pringln(repositoriesList)
|
||||
```
|
||||
|
||||
```shell
|
||||
docker-cloud repository ls
|
||||
```
|
||||
|
||||
Lists all added repositories from third party registries. Returns a list of `Repository` objects.
|
||||
|
||||
### Endpoint Type
|
||||
|
||||
Available in Docker Cloud's **REST API**
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`GET /api/repo/v1/repository/`
|
||||
|
||||
### Query Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
name | Filter by image name
|
||||
registry | Filter by resource URI of the target repository registry
|
||||
|
||||
|
||||
## Add a new external repository
|
||||
|
||||
```python
|
||||
import dockercloud
|
||||
|
||||
repository = dockercloud.Repository.create(name="registry.local/user1/image1", username=username, password=password)
|
||||
repository.save()
|
||||
```
|
||||
|
||||
```http
|
||||
POST /api/repo/v1/repository/ HTTP/1.1
|
||||
Host: cloud.docker.com
|
||||
Authorization: Basic dXNlcm5hbWU6YXBpa2V5
|
||||
Accept: application/json
|
||||
Content-Type: application/json
|
||||
|
||||
{"name": "registry.local/user1/image1", "username": "username", "password": "password"}
|
||||
```
|
||||
|
||||
```go
|
||||
import "github.com/docker/go-dockercloud/dockercloud"
|
||||
|
||||
image, err := dockercloud.CreateImage(dockercloud.ImageCreateRequest{
|
||||
Name: "registry.local/user1/image1",
|
||||
Username: "username",
|
||||
Password: "password"
|
||||
})
|
||||
```
|
||||
|
||||
```shell
|
||||
docker-cloud repository register -u username -p password registry.local/user1/image1
|
||||
```
|
||||
|
||||
Adds an existing repository on a third party registry.
|
||||
|
||||
### Endpoint Type
|
||||
|
||||
Available in Docker Cloud's **REST API**
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`POST /api/repo/v1/repository/`
|
||||
|
||||
### JSON Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
name | Name of the repository, i.e. 'quay.io/tutum/hello-world'
|
||||
username | Username to authenticate with the third party registry
|
||||
password | Password to authenticate with the third party registry
|
||||
|
||||
|
||||
## Get an external repository details
|
||||
|
||||
```python
|
||||
import dockercloud
|
||||
|
||||
repository = dockercloud.Repository.fetch("registry.local/user1/image1")
|
||||
```
|
||||
|
||||
```http
|
||||
GET /api/repo/v1/repository/registry.local/user1/image1/ HTTP/1.1
|
||||
Host: cloud.docker.com
|
||||
Authorization: Basic dXNlcm5hbWU6YXBpa2V5
|
||||
Accept: application/json
|
||||
```
|
||||
|
||||
```go
|
||||
import "github.com/docker/go-dockercloud/dockercloud"
|
||||
|
||||
repository, err = dockercloud.GetRepository("registry.local/user1/image1")
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
log.Println(repository)
|
||||
```
|
||||
|
||||
```shell
|
||||
docker-cloud repository inspect registry.local/user1/image1
|
||||
```
|
||||
|
||||
Gets all the details of an specific repository
|
||||
|
||||
### Endpoint Type
|
||||
|
||||
Available in Docker Cloud's **REST API**
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`GET /api/repo/v1/repository/(name)/`
|
||||
|
||||
### Path Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
name | The name of the repository to retrieve
|
||||
|
||||
|
||||
## Update credentials of an external repository
|
||||
|
||||
```python
|
||||
import dockercloud
|
||||
|
||||
repository = dockercloud.Repository.fetch("registry.local/user1/image1")
|
||||
repository.username = "new username"
|
||||
repository.password = "new password"
|
||||
repository.save()
|
||||
```
|
||||
|
||||
```http
|
||||
PATCH /api/repo/v1/repository/registry.local/user1/image1/ HTTP/1.1
|
||||
Host: cloud.docker.com
|
||||
Authorization: Basic dXNlcm5hbWU6YXBpa2V5
|
||||
Accept: application/json
|
||||
Content-Type: application/json
|
||||
|
||||
{"username": "username", "password": "password"}
|
||||
```
|
||||
|
||||
```shell
|
||||
docker-cloud repository update -n "new username" -p "new password" registry.local/user1/image1
|
||||
```
|
||||
|
||||
Updates the external repository credentials.
|
||||
|
||||
### Endpoint Type
|
||||
|
||||
Available in Docker Cloud's **REST API**
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`PATCH /api/repo/v1/repository/(name)/`
|
||||
|
||||
### Path Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
name | The name of the repository to update
|
||||
|
||||
|
||||
### JSON Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
username | Username to authenticate with the private registry
|
||||
password | Password to authenticate with the private registry
|
||||
|
||||
|
||||
## Remove an external repository
|
||||
|
||||
```python
|
||||
import dockercloud
|
||||
|
||||
repository = dockercloud.Repository.fetch("registry.local/user1/image1")
|
||||
repository.delete()
|
||||
```
|
||||
|
||||
```http
|
||||
DELETE /api/repo/v1/repository/registry.local/user1/image1/ HTTP/1.1
|
||||
Host: cloud.docker.com
|
||||
Authorization: Basic dXNlcm5hbWU6YXBpa2V5
|
||||
Accept: application/json
|
||||
```
|
||||
|
||||
```go
|
||||
import "github.com/docker/go-dockercloud/dockercloud"
|
||||
|
||||
repository, err = dockercloud.GetRepository("registry.local/user1/image1")
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
repository.Remove()
|
||||
```
|
||||
|
||||
```shell
|
||||
docker-cloud repository rm registry.local/user1/image1
|
||||
```
|
||||
|
||||
Removes the external repository from Docker Cloud. It won't remove the repository from the third party registry where it's stored.
|
||||
|
||||
### Endpoint Type
|
||||
|
||||
Available in Docker Cloud's **REST API**
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`DELETE /api/repo/v1/repository/registry.local/user1/image1/`
|
||||
|
||||
### Path Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
name | The name of the external repository to remove
|
||||
|
|
@ -0,0 +1,933 @@
|
|||
# Services
|
||||
|
||||
## Service
|
||||
|
||||
> Example
|
||||
|
||||
```json
|
||||
{
|
||||
"autodestroy": "OFF",
|
||||
"autoredeploy": false,
|
||||
"autorestart": "ON_FAILURE",
|
||||
"bindings": [
|
||||
{
|
||||
"host_path": null,
|
||||
"container_path": "/tmp",
|
||||
"rewritable": true,
|
||||
"volumes_from": null
|
||||
},
|
||||
{
|
||||
"host_path": "/etc",
|
||||
"container_path": "/etc",
|
||||
"rewritable": true,
|
||||
"volumes_from": null
|
||||
},
|
||||
{
|
||||
"host_path": null,
|
||||
"container_path": null,
|
||||
"rewritable": true,
|
||||
"volumes_from": "/api/app/v1/service/2f4f54e5-9d3b-4ac1-85ad-a2d4ff25a179/"
|
||||
}
|
||||
],
|
||||
"cap_add": [
|
||||
"ALL"
|
||||
],
|
||||
"cap_drop": [
|
||||
"NET_ADMIN",
|
||||
"SYS_ADMIN"
|
||||
],
|
||||
"container_envvars": [
|
||||
{
|
||||
"key": "DB_PASS",
|
||||
"value": "test"
|
||||
}
|
||||
],
|
||||
"container_ports": [
|
||||
{
|
||||
"endpoint_uri": "http://wordpress-stackable.admin.srv.dockerapp.io:80/",
|
||||
"inner_port": 80,
|
||||
"outer_port": 80,
|
||||
"port_name": "http",
|
||||
"protocol": "tcp",
|
||||
"published": true
|
||||
}
|
||||
],
|
||||
"containers": [
|
||||
"/api/app/v1/container/6f8ee454-9dc3-4387-80c3-57aac1be3cc6/",
|
||||
"/api/app/v1/container/fdf9c116-7c08-4a60-b0ce-c54ca72c2f25/"
|
||||
],
|
||||
"cpu_shares": 100,
|
||||
"cpuset": "0,1",
|
||||
"cgroup_parent": "m-executor-abcd",
|
||||
"current_num_containers": 2,
|
||||
"deployed_datetime": "Mon, 13 Oct 2014 11:01:43 +0000",
|
||||
"deployment_strategy": "EMPTIEST_NODE",
|
||||
"destroyed_datetime": null,
|
||||
"devices": [
|
||||
"/dev/ttyUSB0:/dev/ttyUSB0"
|
||||
],
|
||||
"dns": [
|
||||
"8.8.8.8"
|
||||
],
|
||||
"dns_search": [
|
||||
"example.com"
|
||||
],
|
||||
"domainname": "domainname",
|
||||
"entrypoint": "",
|
||||
"extra_hosts": [
|
||||
"onehost:50.31.209.229"
|
||||
],
|
||||
"hostname": "hostname",
|
||||
"image_name": "tutum/wordpress-stackable:latest",
|
||||
"nickname": "wordpress-stackable",
|
||||
"labels": {
|
||||
"com.example.description": "Accounting webapp",
|
||||
"com.example.department": "Finance",
|
||||
"com.example.label-with-empty-value": ""
|
||||
},
|
||||
"link_variables": {
|
||||
"WORDPRESS_STACKABLE_1_ENV_DB_HOST": "**LinkMe**",
|
||||
"WORDPRESS_STACKABLE_1_ENV_DB_NAME": "wordpress",
|
||||
"WORDPRESS_STACKABLE_1_ENV_DB_PASS": "szVaPz925B7I",
|
||||
"WORDPRESS_STACKABLE_1_ENV_DB_PORT": "**LinkMe**",
|
||||
"WORDPRESS_STACKABLE_1_ENV_DB_USER": "admin",
|
||||
"WORDPRESS_STACKABLE_1_ENV_DEBIAN_FRONTEND": "noninteractive",
|
||||
"WORDPRESS_STACKABLE_1_ENV_HOME": "/",
|
||||
"WORDPRESS_STACKABLE_1_ENV_PATH": "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
|
||||
"WORDPRESS_STACKABLE_1_PORT": "tcp://wordpress-stackable-1.admin.cont.dockerapp.io:49153",
|
||||
"WORDPRESS_STACKABLE_1_PORT_80_TCP": "tcp://wordpress-stackable-1.admin.cont.dockerapp.io:49153",
|
||||
"WORDPRESS_STACKABLE_1_PORT_80_TCP_ADDR": "wordpress-stackable-1.admin.cont.dockerapp.io",
|
||||
"WORDPRESS_STACKABLE_1_PORT_80_TCP_PORT": "49153",
|
||||
"WORDPRESS_STACKABLE_1_PORT_80_TCP_PROTO": "tcp",
|
||||
"WORDPRESS_STACKABLE_2_ENV_DB_HOST": "**LinkMe**",
|
||||
"WORDPRESS_STACKABLE_2_ENV_DB_NAME": "wordpress",
|
||||
"WORDPRESS_STACKABLE_2_ENV_DB_PASS": "szVaPz925B7I",
|
||||
"WORDPRESS_STACKABLE_2_ENV_DB_PORT": "**LinkMe**",
|
||||
"WORDPRESS_STACKABLE_2_ENV_DB_USER": "admin",
|
||||
"WORDPRESS_STACKABLE_2_ENV_DEBIAN_FRONTEND": "noninteractive",
|
||||
"WORDPRESS_STACKABLE_2_ENV_HOME": "/",
|
||||
"WORDPRESS_STACKABLE_2_ENV_PATH": "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
|
||||
"WORDPRESS_STACKABLE_2_PORT": "tcp://wordpress-stackable-2.admin.cont.dockerapp.io:49154",
|
||||
"WORDPRESS_STACKABLE_2_PORT_80_TCP": "tcp://wordpress-stackable-2.admin.cont.dockerapp.io:49154",
|
||||
"WORDPRESS_STACKABLE_2_PORT_80_TCP_ADDR": "wordpress-stackable-2.admin.cont.dockerapp.io",
|
||||
"WORDPRESS_STACKABLE_2_PORT_80_TCP_PORT": "49154",
|
||||
"WORDPRESS_STACKABLE_2_PORT_80_TCP_PROTO": "tcp",
|
||||
"WORDPRESS_STACKABLE_ENV_DB_HOST": "**LinkMe**",
|
||||
"WORDPRESS_STACKABLE_ENV_DB_NAME": "wordpress",
|
||||
"WORDPRESS_STACKABLE_ENV_DB_PASS": "szVaPz925B7I",
|
||||
"WORDPRESS_STACKABLE_ENV_DB_PORT": "**LinkMe**",
|
||||
"WORDPRESS_STACKABLE_ENV_DB_USER": "admin",
|
||||
"WORDPRESS_STACKABLE_ENV_DEBIAN_FRONTEND": "noninteractive",
|
||||
"WORDPRESS_STACKABLE_ENV_HOME": "/",
|
||||
"WORDPRESS_STACKABLE_ENV_PATH": "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
|
||||
"WORDPRESS_STACKABLE_PORT": "tcp://wordpress-stackable-1.admin.cont.dockerapp.io:49153",
|
||||
"WORDPRESS_STACKABLE_PORT_80_TCP": "tcp://wordpress-stackable-1.admin.cont.dockerapp.io:49153",
|
||||
"WORDPRESS_STACKABLE_PORT_80_TCP_ADDR": "wordpress-stackable-1.admin.cont.dockerapp.io",
|
||||
"WORDPRESS_STACKABLE_PORT_80_TCP_PORT": "49153",
|
||||
"WORDPRESS_STACKABLE_PORT_80_TCP_PROTO": "tcp",
|
||||
"WORDPRESS_STACKABLE_DOCKERCLOUD_API_URL": "https://cloud.docker.com/api/app/v1/service/adeebc1b-1b81-4af0-b8f2-cefffc69d7fb/"
|
||||
},
|
||||
"linked_from_service": [],
|
||||
"linked_to_service": [
|
||||
{
|
||||
"from_service": "/api/app/v1/service/09cbcf8d-a727-40d9-b420-c8e18b7fa55b/",
|
||||
"name": "DB",
|
||||
"to_service": "/api/app/v1/service/72f175bd-390b-46e3-9463-830aca32ce3e/"
|
||||
}
|
||||
],
|
||||
"mac_address": "02:42:ac:11:65:43",
|
||||
"memory": 2048,
|
||||
"memory_swap": 8192,
|
||||
"name": "wordpress-stackable",
|
||||
"net": "bridge",
|
||||
"privileged": false,
|
||||
"public_dns": "wordpress-stackable.admin.svc.dockerapp.io",
|
||||
"read_only": true,
|
||||
"resource_uri": "/api/app/v1/service/09cbcf8d-a727-40d9-b420-c8e18b7fa55b/",
|
||||
"roles": ["global"],
|
||||
"run_command": "/run-wordpress.sh",
|
||||
"running_num_containers": 1,
|
||||
"security_opt": [
|
||||
],
|
||||
"sequential_deployment": false,
|
||||
"started_datetime": "Mon, 13 Oct 2014 11:01:43 +0000",
|
||||
"state": "Partly running",
|
||||
"stack": "/api/app/v1/stack/46aca402-2109-4a70-a378-760cfed43816/",
|
||||
"stdin_open": false,
|
||||
"stopped_datetime": null,
|
||||
"stopped_num_containers": 0,
|
||||
"synchronized": true,
|
||||
"tags": [
|
||||
{"name": "tag_one"},
|
||||
{"name": "tag-two"},
|
||||
{"name": "tagthree3"}
|
||||
],
|
||||
"target_num_containers": 2,
|
||||
"tty": false,
|
||||
"user": "root",
|
||||
"uuid": "09cbcf8d-a727-40d9-b420-c8e18b7fa55b",
|
||||
"working_dir": "/app"
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
A service is a template used to deploy one or more containers.
|
||||
|
||||
### Attributes
|
||||
|
||||
Attribute | Description
|
||||
--------- | -----------
|
||||
uuid | A unique identifier for the service generated automatically on creation
|
||||
resource_uri | A unique API endpoint that represents the service
|
||||
image_name | The Docker image name and tag used for the service containers
|
||||
name | A user provided name for the service. This name will be inherited by the service containers and will be used in endpoint URLs, environment variable names, etc.
|
||||
public_dns | An external FQDN that resolves to all IPs of the nodes where the service containers are running on (as an `A` record with multiple IP entries which will be used by clients in a [round-robin fashion](http://en.wikipedia.org/wiki/Round-robin_DNS)). If the service is not publishing any ports, this FQDN will fail to resolve.
|
||||
state | The state of the service (see table `Service states` below)
|
||||
net | Network mode to set on the containers (see table `Network Modes` below, more information ../../docker-cloud/apps/service-links/)
|
||||
pid | Set the PID (Process) Namespace mode for the containers (more information ../../reference/run/#pid-settings-pid)
|
||||
synchronized | Flag indicating if the current service definition is synchronized with the current containers.
|
||||
deployed_datetime | The date and time of the last deployment of the service (if applicable, `null` otherwise)
|
||||
started_datetime | The date and time of the last `start` operation on the service (if applicable, `null` otherwise)
|
||||
stopped_datetime | The date and time of the last `stop` operation on the service (if applicable, `null` otherwise)
|
||||
destroyed_datetime | The date and time of the `terminate` operation on the service (if applicable, `null` otherwise)
|
||||
target_num_containers | The requested number of containers to deploy for the service
|
||||
current_num_containers | The actual number of containers deployed for the service
|
||||
running_num_containers | The actual number of containers deployed for the service in `Running` state
|
||||
stopped_num_containers | The actual number of containers deployed for the service in `Stopped` state
|
||||
stack | Resource URIs of the stack that the service belongs to
|
||||
containers | List of resource URIs of the containers launched as part of the service
|
||||
container_ports | List of ports to be published on the containers of this service (see table `Service Port attributes` below)
|
||||
container_envvars | List of user-defined environment variables to set on the containers of the service, which will override the image environment variables (see table `Service Environment Variable attributes` below)
|
||||
labels | Metadata in form of dictionary used for every container of this service
|
||||
working_dir | Working directory for running binaries within a container of this service
|
||||
user | Set the user used on containers of this service (`root` by default)
|
||||
hostname | Set the hostname used on containers of this service
|
||||
domainname | Set the domainname used on containers of this service
|
||||
mac_address | Ethernet device's MAC address used on containers of this service
|
||||
cgroup_name | Optional parent cgroup used on containers of this service.
|
||||
tty | If the containers of this service have the tty enable (`false` by default)
|
||||
stdin_open | If the containers of this service have stdin opened (`false` by default)
|
||||
dns | Custom DNS servers for containers of this service
|
||||
dns_search | Custom DNS search domain for containers of this service
|
||||
cap_add | Added capabilities for containers of this service
|
||||
cap_drop | Dropped capabilities for containers of this service
|
||||
devices | List of device mappings for containers of this service
|
||||
extra_hosts | List of hostname mappings for containers of this service
|
||||
secuirty_opt | Labeling scheme for containers of this service
|
||||
entrypoint | Entrypoint to be set on the containers launched as part of the service, which will override the image entrypoint
|
||||
run_command | Run command to be set on the containers launched as part of the service, which will override the image run command
|
||||
sequential_deployment | Whether the containers for this service should be deployed in sequence, linking each of them to the previous containers (see [Service scaling](../../docker-cloud/apps/service-scaling/) for more information)
|
||||
cpu_shares | The relative CPU priority of the containers of the service (see [Runtime Constraints on CPU and Memory](../../engine/reference/run/#runtime-constraints-on-cpu-and-memory) for more information)
|
||||
cpuset | CPUs in which to allow execution
|
||||
memory | The memory limit of the containers of the service in MB (see [Runtime Constraints on CPU and Memory](../../engine/reference/run/#runtime-constraints-on-cpu-and-memory) for more information)
|
||||
memory_swap | Total memory limit (memory + swap) of the containers of the service in MB
|
||||
linked_from_service | A list of services that are linked to this one (see table `Related services attributes` below)
|
||||
linked_to_service | A list of services that the service is linked to (see table `Related services attributes` below)
|
||||
bindings | A list of volume bindings that the service has mounted (see table `Service binding attributes` below)
|
||||
autorestart | Whether to restart the containers of the service automatically if they stop (see [Crash recovery](../../docker-cloud/apps/autorestart/) for more information)
|
||||
autodestroy | Whether to terminate the containers of the service automatically if they stop (see [Autodestroy](../../docker-cloud/apps/auto-destroy/) for more information)
|
||||
roles | List of Docker Cloud roles assigned to this service (see [Service links](../../docker-cloud/apps/service-links/) for more information)
|
||||
link_variables | List of environment variables that would be exposed in the containers if they are linked to this service
|
||||
privileged | Whether to start the containers with Docker's `privileged` flag set or not, which allows containers to access all devices on the host among other things (see [Runtime privilege](../../engine/reference/run/#runtime-privilege-linux-capabilities-and-lxc-configuration) for more information)
|
||||
read_only | Whether the filesystem of every service container is read-only or not (`false` by default)
|
||||
deployment_strategy | Container distribution among nodes (see table `Deployment strategies` below and [Deployment strategies](../../docker-cloud/infrastructure/deployment-strategies/) for more information)
|
||||
tags | List of tags to be used to deploy the service (see [Tags](../../docker-cloud/apps/deploy-tags/) for more information)
|
||||
autoredeploy | Whether to redeploy the containers of the service when its image is updated in Docker Cloud registry (see [Docker Cloud's private registry](../../docker-cloud/apps/auto-redeploy/) for more information)
|
||||
nickname | A user-friendly name for the service (`name` by default)
|
||||
|
||||
|
||||
### Service binding attributes
|
||||
|
||||
Attribute | Description
|
||||
--------- | -----------
|
||||
host_path | The host path of the volume
|
||||
container_path | The container path where the volume is mounted
|
||||
rewritable | `true` is the volume has writable permissions
|
||||
volumes_from | The resource URI of the service
|
||||
|
||||
|
||||
### Service Port attributes
|
||||
|
||||
Attribute | Description
|
||||
--------- | -----------
|
||||
protocol | The protocol of the port, either `tcp` or `udp`
|
||||
inner_port | The published port number inside the container
|
||||
outer_port | The published port number in the node public network interface
|
||||
port_name | Name of the service associated to this port
|
||||
endpoint_uri | The URI of the service endpoint for this port
|
||||
published | Whether the port has been published in the host public network interface or not. Non-published ports can only be accessed via links.
|
||||
|
||||
|
||||
### Service Environment Variable attributes
|
||||
|
||||
Attribute | Description
|
||||
--------- | -----------
|
||||
key | The name of the environment variable
|
||||
value | The value of the environment variable
|
||||
|
||||
|
||||
### Related services attributes
|
||||
|
||||
Attribute | Description
|
||||
--------- | -----------
|
||||
name | The link name
|
||||
from_service | The resource URI of the origin of the link
|
||||
to_service | The resource URI of the target of the link
|
||||
|
||||
|
||||
### Service states
|
||||
|
||||
State | Description
|
||||
----- | -----------
|
||||
Not running | The service has been created and has no deployed containers yet. Possible actions in this state: `start`, `terminate`.
|
||||
Starting | All containers for the service are either starting or already running. No actions allowed in this state.
|
||||
Running | All containers for the service are deployed and running. Possible actions in this state: `stop`, `redeploy`, `terminate`.
|
||||
Partly running | One or more containers of the service are deployed and running. Possible actions in this state: `stop`, `redeploy`, `terminate`.
|
||||
Scaling | The service is either deploying new containers or destroying existing ones responding to a scaling request. No actions allowed in this state.
|
||||
Redeploying | The service is redeploying all its containers with the updated configuration. No actions allowed in this state.
|
||||
Stopping | All containers for the service are either stopping or already stopped. No actions allowed in this state.
|
||||
Stopped | All containers for the service are stopped. Possible actions in this state: `start`, `redeploy`, `terminate`.
|
||||
Terminating | All containers for the service are either being terminated or already terminated. No actions allowed in this state.
|
||||
Terminated | The service and all its containers have been terminated. No actions allowed in this state.
|
||||
|
||||
|
||||
### Deployment strategies
|
||||
|
||||
Strategy | Description
|
||||
-------- | -----------
|
||||
EMPTIEST_NODE | It will deploy containers to the node with the lower total amount of running containers (default).
|
||||
HIGH_AVAILABILITY | It will deploy containers to the node with the lower amount of running containers of the same service.
|
||||
EVERY_NODE | It will deploy one container on every node. The service won't be able to scale manually. New containers will be deployed to new nodes automatically.
|
||||
|
||||
|
||||
### Network Modes
|
||||
|
||||
Strategy | Description
|
||||
-------- | -----------
|
||||
bridge | Creates a new network stack for the container on the docker bridge.
|
||||
host | Uses the host network stack inside the container.
|
||||
|
||||
## List all services
|
||||
|
||||
```python
|
||||
import dockercloud
|
||||
|
||||
services = dockercloud.Service.list()
|
||||
```
|
||||
|
||||
```go
|
||||
import "github.com/docker/go-dockercloud/dockercloud"
|
||||
|
||||
serviceList, err := dockercloud.ListServices()
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
log.Println(serviceList)
|
||||
```
|
||||
|
||||
```http
|
||||
GET /api/app/v1/service/ HTTP/1.1
|
||||
Host: cloud.docker.com
|
||||
Authorization: Basic dXNlcm5hbWU6YXBpa2V5
|
||||
Accept: application/json
|
||||
```
|
||||
|
||||
```shell
|
||||
docker-cloud service ps
|
||||
```
|
||||
|
||||
Lists all current and recently terminated services. Returns a list of `Service` objects.
|
||||
|
||||
### Endpoint Type
|
||||
|
||||
Available in Docker Cloud's **REST API**
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`GET /api/app/v1/service/`
|
||||
|
||||
### Query Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
uuid | Filter by UUID
|
||||
state | Filter by state. Possible values: `Not running`, `Starting`, `Running`, `Partly running`, `Scaling`, `Redeploying`, `Stopping`, `Stopped`, `Terminating`, `Terminated`
|
||||
name | Filter by service name
|
||||
stack | Filter by resource URI of the target stack.
|
||||
|
||||
## Create a new service
|
||||
|
||||
```python
|
||||
import dockercloud
|
||||
|
||||
service = dockercloud.Service.create(image="tutum/hello-world", name="my-new-app", target_num_containers=2)
|
||||
service.save()
|
||||
```
|
||||
|
||||
```go
|
||||
import "github.com/docker/go-dockercloud/dockercloud"
|
||||
|
||||
service, err := dockercloud.CreateService(dockercloud.ServiceCreateRequest{Image: "tutum/hello-world", Name: "my-new-app", Target_num_containers: 2})
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
log.Println(service)
|
||||
```
|
||||
|
||||
```http
|
||||
POST /api/app/v1/service/ HTTP/1.1
|
||||
Host: cloud.docker.com
|
||||
Authorization: Basic dXNlcm5hbWU6YXBpa2V5
|
||||
Accept: application/json
|
||||
Content-Type: application/json
|
||||
|
||||
{"image": "tutum/hello-world", "name": "my-new-app", "target_num_containers": 2}
|
||||
```
|
||||
|
||||
```shell
|
||||
docker-cloud service create -t 2 --name my-new-app tutum/hello-world
|
||||
```
|
||||
|
||||
Creates a new service without starting it.
|
||||
|
||||
### Endpoint Type
|
||||
|
||||
Available in Docker Cloud's **REST API**
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`POST /api/app/v1/service/`
|
||||
|
||||
### JSON Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
image | (required) The image used to deploy this service in docker format, i.e. `tutum/hello-world`
|
||||
name | (optional) A human-readable name for the service, i.e. `my-hello-world-app` (default: `image` without namespace)
|
||||
target_num_containers | (optional) The number of containers to run for this service initially (default: 1)
|
||||
run_command | (optional) The command used to start the containers of this service, overriding the value specified in the image, i.e. `/run.sh` (default: `null`)
|
||||
entrypoint | (optional) The command prefix used to start the containers of this service, overriding the value specified in the image, i.e. `/usr/sbin/sshd` (default: `null`)
|
||||
container_ports | (optional) An array of objects with port information to be published in the containers for this service, which will be added to the image port information, i.e. `[{"protocol": "tcp", "inner_port": 80, "outer_port": 80}]` (default: `[]`) (See table `Service Port attributes` below)
|
||||
container_envvars | (optional) An array of objects with environment variables to be added in the service containers on launch (overriding any image-defined environment variables), i.e. `[{"key": "DB_PASSWORD", "value": "mypass"}]` (default: `[]`) (See table `Service Environment Variable attributes` below)
|
||||
linked_to_service | (optional) An array of service resource URIs to link this service to, including the link name, i.e. `[{"to_service": "/api/app/v1/service/80ff1635-2d56-478d-a97f-9b59c720e513/", "name": "db"}]` (default: `[]`) (See table `Related services attributes` below)
|
||||
bindings | (optional) An array of bindings this service has to mount, i.e. `[{"volumes_from": "/api/app/v1/service/80ff1635-2d56-478d-a97f-9b59c720e513/", "rewritable": true}]` (default: `[]`) (See table `Related bindings attributes` below)
|
||||
autorestart | (optional) Whether the containers for this service should be restarted if they stop, i.e. `ALWAYS` (default: `OFF`, possible values: `OFF`, `ON_FAILURE`, `ALWAYS`) (see [Crash recovery](../../docker-cloud/apps/autorestart/) for more information)
|
||||
autodestroy | (optional) Whether the containers should be terminated if they stop, i.e. `OFF` (default: `OFF`, possible values: `OFF`, `ON_SUCCESS`, `ALWAYS`) (see [Autodestroy](../../docker-cloud/apps/auto-destroy/) for more information)
|
||||
sequential_deployment | (optional) Whether the containers should be launched and scaled in sequence, i.e. `true` (default: `false`) (see [Service scaling](../../docker-cloud/apps/service-scaling/) for more information)
|
||||
roles | (optional) A list of Docker Cloud API roles to grant the service, i.e. `["global"]` (default: `[]`, possible values: `global`) (see [Service links](../../docker-cloud/apps/service-links/) for more information)
|
||||
privileged | (optional) Whether to start the containers with Docker's `privileged` flag set or not, i.e. `false` (default: `false`) (see [Runtime privilege](../../engine/reference/run/#runtime-privilege-linux-capabilities-and-lxc-configuration) for more information)
|
||||
deployment_strategy | (optional) Container distribution among nodes (default: `EMPTIEST_NODE`, see table `Deployment strategies` above and [Deployment strategies](../../docker-cloud/infrastructure/deployment-strategies/) for more information)
|
||||
tags | (optional) A list of tags to be used to deploy the service (see [Tags](../../docker-cloud/apps/deploy-tags/) for more information) (default: `[]`)
|
||||
autoredeploy | (optional) Whether to redeploy the containers of the service when its image is updated in Docker Cloud registry (default: `false`) (see [Docker Cloud's private registry](../../docker-cloud/apps/auto-redeploy/) for more information)
|
||||
net | (optional) Set the network mode to the containers (default: `bridge`, possible values: `bridge`, `host`)
|
||||
pid | (optional) Set the PID (Process) Namespace mode for the containers (default: `none` value, possible values: `none`, `host`)
|
||||
working_dir | (optional) Working directory for running binaries within a container of this service (default: `/`)
|
||||
nickname | (optional) A user-friendly name for the service (`name` by default)
|
||||
|
||||
|
||||
### Related bindings attributes
|
||||
|
||||
Attribute | Description
|
||||
--------- | -----------
|
||||
host_path | (optional) The host path of the volume
|
||||
container_path | (required if `volumes_from` is omitted) The container path where the volume is mounted
|
||||
rewritable | (optional) `true` is the volume has writable permissions (default: `true`)
|
||||
volumes_from | (required if `container_path` is omitted) The resource URI of the service
|
||||
|
||||
|
||||
### Service Port attributes
|
||||
|
||||
Attribute | Description
|
||||
--------- | -----------
|
||||
protocol | (required) The protocol of the port, either `tcp` or `udp`
|
||||
inner_port | (required) The port number inside the container to be published
|
||||
outer_port | (optional) The port number in the node public network interface to be published (default: dynamic allocation if `published` is `true`)
|
||||
published | (optional) Whether to publish the port in the host public network interface or not. Non-published ports can only be accessed via links. (default: `false`)
|
||||
|
||||
|
||||
### Service Environment Variable attributes
|
||||
|
||||
Attribute | Description
|
||||
--------- | -----------
|
||||
key | (required) The name of the environment variable
|
||||
value | (required) The value of the environment variable
|
||||
|
||||
|
||||
### Related services attributes
|
||||
|
||||
Attribute | Description
|
||||
--------- | -----------
|
||||
to_service | (required) The resource URI of the target of the link
|
||||
name | (optional) The link name
|
||||
|
||||
|
||||
## Get an existing service
|
||||
|
||||
```python
|
||||
import dockercloud
|
||||
|
||||
service = dockercloud.Service.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
|
||||
```
|
||||
|
||||
```go
|
||||
import "github.com/docker/go-dockercloud/dockercloud"
|
||||
|
||||
service, err := dockercloud.GetService("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
log.Println(service)
|
||||
```
|
||||
|
||||
```http
|
||||
GET /api/app/v1/service/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/ HTTP/1.1
|
||||
Host: cloud.docker.com
|
||||
Authorization: Basic dXNlcm5hbWU6YXBpa2V5
|
||||
Accept: application/json
|
||||
```
|
||||
|
||||
```shell
|
||||
docker-cloud service inspect 7eaf7fff
|
||||
```
|
||||
|
||||
Get all the details of an specific service
|
||||
|
||||
### Endpoint Type
|
||||
|
||||
Available in Docker Cloud's **REST API**
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`GET /api/app/v1/service/(uuid)/`
|
||||
|
||||
### Path Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
uuid | The UUID of the service to retrieve
|
||||
|
||||
|
||||
## Get the logs of a service
|
||||
|
||||
> Example log line
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "log",
|
||||
"source": "wordpress-stackable-1",
|
||||
"log": "Log line from the container indicated by 'source'",
|
||||
"streamType": "stdout",
|
||||
"timestamp": 1433779324
|
||||
}
|
||||
```
|
||||
|
||||
```python
|
||||
import dockercloud
|
||||
|
||||
def log_handler(message):
|
||||
print message
|
||||
|
||||
service = dockercloud.Service.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
|
||||
service.logs(tail=300, follow=True, log_handler=log_handler)
|
||||
```
|
||||
|
||||
```go
|
||||
import "github.com/docker/go-dockercloud/dockercloud"
|
||||
|
||||
service, err := dockercloud.GetService("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
c := make(chan Logs)
|
||||
|
||||
go service.Logs(c)
|
||||
for {
|
||||
s := <-c
|
||||
log.Println(s)
|
||||
}
|
||||
```
|
||||
|
||||
```http
|
||||
GET /api/app/v1/service/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/logs/ HTTP/1.1
|
||||
Host: ws.cloud.docker.com
|
||||
Authorization: Basic dXNlcm5hbWU6YXBpa2V5
|
||||
Connection: Upgrade
|
||||
Upgrade: websocket
|
||||
```
|
||||
|
||||
```shell
|
||||
docker-cloud service logs 7eaf7fff
|
||||
```
|
||||
|
||||
Get the aggregated logs of all the containers of the service.
|
||||
|
||||
### Endpoint Type
|
||||
|
||||
Available in Docker Cloud's **STREAM API**
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`GET /api/app/v1/service/(uuid)/logs/`
|
||||
|
||||
### Path Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
uuid | The UUID of the service to retrieve logs
|
||||
|
||||
### Query Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
tail | Number of lines to show from the end of the logs (default: `300`)
|
||||
follow | Whether to stream logs or close the connection immediately (default: true)
|
||||
|
||||
|
||||
## Update an existing service
|
||||
|
||||
```python
|
||||
import dockercloud
|
||||
|
||||
service = dockercloud.Service.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
|
||||
service.target_num_containers = 3
|
||||
service.tags.append({"name":"tag-1"})
|
||||
service.save()
|
||||
```
|
||||
|
||||
```go
|
||||
import "github.com/docker/go-dockercloud/dockercloud"
|
||||
|
||||
service, err := dockercloud.GetService("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
if err = service.Update(dockercloud.ServiceCreateRequest{Target_num_containers: 3}); err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
```
|
||||
|
||||
```http
|
||||
PATCH /api/app/v1/service/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/ HTTP/1.1
|
||||
Host: cloud.docker.com
|
||||
Authorization: Basic dXNlcm5hbWU6YXBpa2V5
|
||||
Accept: application/json
|
||||
Content-Type: application/json
|
||||
|
||||
{"autorestart": "ON_FAILURE", "autodestroy": "OFF", "container_envvars": [{"key": "DB_PASSWORD", "value": "mypass"}],
|
||||
"container_ports": [{"protocol": "tcp", "inner_port": 80, "outer_port": 80}], "cpu_shares": 512,
|
||||
"entrypoint": "/usr/sbin/sshd", "image": "tutum/hello-world",
|
||||
"linked_to_service": [{"to_service": "/api/app/v1/service/80ff1635-2d56-478d-a97f-9b59c720e513/", "name": "db"}],
|
||||
"memory": 2048, "privileged": True, "roles": ["global"], "run_command": "/run.sh", "sequential_deployment": False,
|
||||
"tags": [{"name": "tag-1"}], "target_num_containers": 3, "autoredeploy": False}
|
||||
|
||||
```
|
||||
|
||||
```shell
|
||||
docker-cloud service scale 7eaf7fff 3
|
||||
docker-cloud tag add -t tag-1 7eaf7fff
|
||||
docker-cloud tag set -t tag-2 7eaf7fff
|
||||
```
|
||||
|
||||
Updates the service details.
|
||||
|
||||
### Endpoint Type
|
||||
|
||||
Available in Docker Cloud's **REST API**
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`PATCH /api/app/v1/service/(uuid)/`
|
||||
|
||||
### Path Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
uuid | The UUID of the service to update
|
||||
|
||||
|
||||
### JSON Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
autorestart | (optional) Whether the containers for this service should be restarted if they stop, i.e. `ALWAYS` (possible values: `OFF`, `ON_FAILURE`, `ALWAYS`) (see [Crash recovery](../../docker-cloud/apps/autorestart/) for more information)
|
||||
autodestroy | (optional) Whether the containers should be terminated if they stop, i.e. `OFF` (possible values: `OFF`, `ON_SUCCESS`, `ALWAYS`) (see [Autodestroy](../../docker-cloud/apps/auto-destroy/) for more information)
|
||||
container_envvars | (optional) An array of objects with environment variables to be added in the service containers on launch (overriding any image-defined environment variables), i.e. `[{"key": "DB_PASSWORD", "value": "mypass"}]` (See table `Service Environment Variable attributes`)
|
||||
container_ports | (optional) An array of objects with port information to be published in the containers for this service, which will be added to the image port information, i.e. `[{"protocol": "tcp", "inner_port": 80, "outer_port": 80}]` (See table `Service Port attributes`)
|
||||
cpu_shares | (optional) The relative CPU priority of the containers the service describes (see [Runtime Constraints on CPU and Memory](../../engine/reference/run/#runtime-constraints-on-cpu-and-memory) for more information)
|
||||
entrypoint | (optional) The command prefix used to start the containers of this service, overriding the value specified in the image, i.e. `/usr/sbin/sshd`
|
||||
image | (optional) The image used to deploy this service in docker format, i.e. `tutum/hello-world`, `tutum/ubuntu:5.6`. If no tag is indicated, it will be set to `latest` by default
|
||||
linked_to_service | (optional) An array of service resource URIs to link this service to, including the link name, i.e. `[{"to_service": "/api/app/v1/service/80ff1635-2d56-478d-a97f-9b59c720e513/", "name": "db"}]` (See table `Related services attributes` below)
|
||||
memory | (optional) The memory limit of the containers of the service in MB (see [Runtime Constraints on CPU and Memory](../../engine/reference/run/#runtime-constraints-on-cpu-and-memory) for more information)
|
||||
privileged | (optional) Whether to start the containers with Docker's `privileged` flag set or not, i.e. `false` (see [Runtime privilege](../../engine/reference/run/#runtime-privilege-linux-capabilities-and-lxc-configuration) for more information)
|
||||
roles | (optional) A list of Docker Cloud API roles to grant the service, i.e. `["global"]` (possible values: `global`) (see [Service links](../../docker-cloud/apps/service-links/) for more information)
|
||||
run_command | (optional) The command used to start the containers of this service, overriding the value specified in the image, i.e. `/run.sh`
|
||||
sequential_deployment | (optional) Whether the containers should be launched and scaled in sequence, i.e. `true` (see [Service scaling](../../docker-cloud/apps/service-scaling/) for more information)
|
||||
tags | (optional) List of new tags the service will have. This operation replaces the tag list
|
||||
target_num_containers | (optional) The number of containers to scale this service to
|
||||
deployment_strategy | (optional) Container distribution among nodes. A service cannot be updated to or from a deployment strategy of `EVERY_NODE`. (See table `Deployment strategies` above and [Deployment strategies](../../docker-cloud/infrastructure/deployment-strategies/) for more information)
|
||||
autoredeploy | Whether to redeploy the containers of the service when its image is updated in Docker Cloud registry (see [Docker Cloud's private registry](../../docker-cloud/apps/auto-redeploy/) for more information)
|
||||
net | (optional) Set the network mode to the containers (default: `bridge`, possible values: `bridge`, `host`)
|
||||
pid | (optional) Set the PID (Process) Namespace mode for the containers (default: `none` value, possible values: `none`, `host`)
|
||||
working_dir | (optional) Working directory for running binaries within a container of this service (default: `/`)
|
||||
nickname | (optional) A user-friendly name for the service (`name` by default)
|
||||
|
||||
|
||||
## Start a service
|
||||
|
||||
```python
|
||||
import dockercloud
|
||||
|
||||
service = dockercloud.Service.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
|
||||
service.start()
|
||||
```
|
||||
|
||||
```go
|
||||
import "github.com/docker/go-dockercloud/dockercloud"
|
||||
|
||||
service, err := dockercloud.GetService("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
if err = service.Start(); err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
```
|
||||
|
||||
```http
|
||||
POST /api/app/v1/service/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/start/ HTTP/1.1
|
||||
Host: cloud.docker.com
|
||||
Authorization: Basic dXNlcm5hbWU6YXBpa2V5
|
||||
Accept: application/json
|
||||
```
|
||||
|
||||
```shell
|
||||
docker-cloud service start 7eaf7fff
|
||||
```
|
||||
|
||||
Starts all containers in a stopped or partly running service.
|
||||
|
||||
### Endpoint Type
|
||||
|
||||
Available in Docker Cloud's **REST API**
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`POST /api/app/v1/service/(uuid)/start/`
|
||||
|
||||
### Path Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
uuid | The UUID of the service to start
|
||||
|
||||
|
||||
## Stop a service
|
||||
|
||||
```python
|
||||
import dockercloud
|
||||
|
||||
service = dockercloud.Service.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
|
||||
service.stop()
|
||||
```
|
||||
|
||||
```go
|
||||
import "github.com/docker/go-dockercloud/dockercloud"
|
||||
|
||||
service, err := dockercloud.GetService("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
if err = service.Stop(); err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
```
|
||||
|
||||
```http
|
||||
POST /api/app/v1/service/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/stop/ HTTP/1.1
|
||||
Host: cloud.docker.com
|
||||
Authorization: Basic dXNlcm5hbWU6YXBpa2V5
|
||||
Accept: application/json
|
||||
```
|
||||
|
||||
```shell
|
||||
docker-cloud service stop 7eaf7fff
|
||||
```
|
||||
|
||||
Stops all containers in a running or partly running service.
|
||||
|
||||
### Endpoint Type
|
||||
|
||||
Available in Docker Cloud's **REST API**
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`POST /api/app/v1/service/(uuid)/stop/`
|
||||
|
||||
### Path Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
uuid | The UUID of the service to stop
|
||||
|
||||
|
||||
## Scale a service
|
||||
|
||||
```python
|
||||
import dockercloud
|
||||
|
||||
service = dockercloud.Service.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
|
||||
service.target_num_containers = 3
|
||||
service.save()
|
||||
service.scale()
|
||||
```
|
||||
|
||||
```http
|
||||
POST /api/app/v1/service/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/scale/ HTTP/1.1
|
||||
Host: cloud.docker.com
|
||||
Authorization: Basic dXNlcm5hbWU6YXBpa2V5
|
||||
Accept: application/json
|
||||
```
|
||||
|
||||
```shell
|
||||
docker-cloud service scale 7eaf7fff-882c-4f3d-9a8f-a22317ac00ce 3
|
||||
```
|
||||
|
||||
Scales the service to its current `target_num_containers` field.
|
||||
|
||||
### Endpoint Type
|
||||
|
||||
Available in Docker Cloud's **REST API**
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`POST /api/app/v1/service/(uuid)/scale/`
|
||||
|
||||
### Path Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
uuid | The UUID of the service to scale
|
||||
|
||||
|
||||
## Redeploy a service
|
||||
|
||||
```python
|
||||
import dockercloud
|
||||
|
||||
service = dockercloud.Service.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
|
||||
service.redeploy()
|
||||
```
|
||||
|
||||
```go
|
||||
import "github.com/docker/go-dockercloud/dockercloud"
|
||||
|
||||
service, err := dockercloud.GetService("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
//Redeploy(dockercloud.ReuseVolumesOption{Reuse: true}) to reuse the existing volumes
|
||||
//Redeploy(dockercloud.ReuseVolumesOption{Reuse: false}) to not reuse the existing volumes
|
||||
if err = service.Redeploy(dockercloud.ReuseVolumesOption{Reuse: false}); err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
```
|
||||
|
||||
```http
|
||||
POST /api/app/v1/service/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/redeploy/ HTTP/1.1
|
||||
Host: cloud.docker.com
|
||||
Authorization: Basic dXNlcm5hbWU6YXBpa2V5
|
||||
Accept: application/json
|
||||
```
|
||||
|
||||
```shell
|
||||
docker-cloud service redeploy 7eaf7fff
|
||||
```
|
||||
|
||||
Redeploys all containers in the service with the current service configuration.
|
||||
|
||||
### Endpoint Type
|
||||
|
||||
Available in Docker Cloud's **REST API**
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`POST /api/app/v1/service/(uuid)/redeploy/`
|
||||
|
||||
### Path Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
uuid | The UUID of the service to redeploy
|
||||
|
||||
### Query Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
reuse_volumes | Wheather to reuse container volumes for this redeploy operation or not (default: `true`).
|
||||
|
||||
|
||||
## Terminate a service
|
||||
|
||||
```python
|
||||
import dockercloud
|
||||
|
||||
service = dockercloud.Service.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
|
||||
service.delete()
|
||||
```
|
||||
|
||||
```go
|
||||
import "github.com/docker/go-dockercloud/dockercloud"
|
||||
|
||||
service, err := dockercloud.GetService("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
if err = service.Terminate(); err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
```
|
||||
|
||||
```http
|
||||
DELETE /api/app/v1/service/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/ HTTP/1.1
|
||||
Host: cloud.docker.com
|
||||
Authorization: Basic dXNlcm5hbWU6YXBpa2V5
|
||||
Accept: application/json
|
||||
```
|
||||
|
||||
```shell
|
||||
docker-cloud service terminate 7eaf7fff
|
||||
```
|
||||
|
||||
Terminate all the containers in a service and the service itself. This is not reversible. All the data stored in all containers of the service will be permanently deleted.
|
||||
|
||||
### Endpoint Type
|
||||
|
||||
Available in Docker Cloud's **REST API**
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`DELETE /api/app/v1/service/(uuid)/`
|
||||
|
||||
### Path Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
uuid | The UUID of the service to terminate
|
||||
|
|
@ -0,0 +1,568 @@
|
|||
# Stacks
|
||||
|
||||
## Stack
|
||||
|
||||
> Example
|
||||
|
||||
```json
|
||||
{
|
||||
"deployed_datetime": "Mon, 13 Oct 2014 11:01:43 +0000",
|
||||
"destroyed_datetime": null,
|
||||
"nickname": "deployment stack",
|
||||
"name": "dockercloud-app",
|
||||
"resource_uri": "/api/app/v1/stack/7fe7ec85-58be-4904-81da-de2219098d7c/",
|
||||
"services": [
|
||||
"/api/app/v1/service/09cbcf8d-a727-40d9-b420-c8e18b7fa55b/"
|
||||
],
|
||||
"state": "Running",
|
||||
"synchronized": true,
|
||||
"uuid": "09cbcf8d-a727-40d9-b420-c8e18b7fa55b"
|
||||
}
|
||||
```
|
||||
|
||||
A stack is a logical grouping of closely related services, that may be linked with one another.
|
||||
|
||||
### Attributes
|
||||
|
||||
Attribute | Description
|
||||
--------- | -----------
|
||||
uuid | A unique identifier for the stack generated automatically on creation
|
||||
resource_uri | A unique API endpoint that represents the stack
|
||||
name | A user provided name for the stack.
|
||||
state | The state of the stack (see table `Stack states` below)
|
||||
synchronized | Flag indicating if the current stack definition is synchronized with their services.
|
||||
services | List of service resource URIs belonging to the stack
|
||||
deployed_datetime | The date and time of the last deployment of the stack (if applicable, `null` otherwise)
|
||||
destroyed_datetime | The date and time of the `terminate` operation on the stack (if applicable, `null` otherwise)
|
||||
nickname | A user-friendly name for the stack (`name` by default)
|
||||
|
||||
|
||||
### Stack states
|
||||
|
||||
State | Description
|
||||
----- | -----------
|
||||
Not Running | The stack has been created and has no deployed services yet. Possible actions in this state: `start`, `terminate`.
|
||||
Starting | All services for the stack are either starting or already running. No actions allowed in this state.
|
||||
Running | All services for the service are deployed and running. Possible actions in this state: `redeploy`, `terminate`.
|
||||
Partly running | One or more services of the stack are deployed and running. Possible actions in this state: `redeploy`, `terminate`.
|
||||
Stopping | All services for the stack are either stopping or already stopped. No actions allowed in this state.
|
||||
Stopped | All services for the service are stopped. Possible actions in this state: `start`, `redeploy`, `terminate`.
|
||||
Redeploying | The stack is redeploying all its services with the updated configuration. No actions allowed in this state.
|
||||
Terminating | All services for the stack are either being terminated or already terminated. No actions allowed in this state.
|
||||
Terminated | The stack and all its services have been terminated. No actions allowed in this state.
|
||||
|
||||
|
||||
## List all stacks
|
||||
|
||||
```python
|
||||
import dockercloud
|
||||
|
||||
stacks = dockercloud.Stack.list()
|
||||
```
|
||||
|
||||
```go
|
||||
import "github.com/docker/go-dockercloud/dockercloud"
|
||||
|
||||
stackList, err := dockercloud.ListStacks()
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
log.Println(stackList)
|
||||
```
|
||||
|
||||
```http
|
||||
GET /api/app/v1/stack/ HTTP/1.1
|
||||
Host: cloud.docker.com
|
||||
Authorization: Basic dXNlcm5hbWU6YXBpa2V5
|
||||
Accept: application/json
|
||||
```
|
||||
|
||||
```shell
|
||||
docker-cloud stack ls
|
||||
```
|
||||
|
||||
Lists all current and recently terminated stacks. Returns a list of `Stack` objects.
|
||||
|
||||
### Endpoint Type
|
||||
|
||||
Available in Docker Cloud's **REST API**
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`GET /api/app/v1/stack/`
|
||||
|
||||
### Query Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
uuid | Filter by UUID
|
||||
name | Filter by stack name
|
||||
|
||||
|
||||
## Create a new stack
|
||||
|
||||
```python
|
||||
import dockercloud
|
||||
|
||||
stack = dockercloud.Stack.create(name="my-new-stack", services=[{"name": "hello-word", "image": "tutum/hello-world", "target_num_containers": 2}])
|
||||
stack.save()
|
||||
```
|
||||
|
||||
```go
|
||||
import "github.com/docker/go-dockercloud/dockercloud"
|
||||
|
||||
stack, err := dockercloud.CreateStack(dockercloud.StackCreateRequest{Name: "my-new-stack", Services: []dockercloud.ServiceCreateRequest{{Image: "tutum/hello-world", Name: "test", Target_num_containers: 2}}})
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
log.Println(stack)
|
||||
```
|
||||
|
||||
```http
|
||||
POST /api/app/v1/stack/ HTTP/1.1
|
||||
Host: cloud.docker.com
|
||||
Authorization: Basic dXNlcm5hbWU6YXBpa2V5
|
||||
Accept: application/json
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"name": "my-new-stack",
|
||||
"services": [
|
||||
{
|
||||
"name": "hello-word",
|
||||
"image": "tutum/hello-world",
|
||||
"target_num_containers": 2,
|
||||
"linked_to_service": [
|
||||
{
|
||||
"to_service": "database",
|
||||
"name": "DB"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "database",
|
||||
"image": "tutum/mysql"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
```shell
|
||||
docker-cloud stack create --name hello-world -f docker-compose.yml
|
||||
```
|
||||
|
||||
Creates a new stack without starting it. Note that the JSON syntax is abstracted by both, the Docker Cloud CLI and our UI, in order to use [Stack YAML files](../../docker-cloud/apps/stack-yaml-reference/).
|
||||
|
||||
### Endpoint Type
|
||||
|
||||
Available in Docker Cloud's **REST API**
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`POST /api/app/v1/stack/`
|
||||
|
||||
### JSON Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
name | (required) A human-readable name for the stack, i.e. `my-hello-world-stack`
|
||||
nickname | (optional) A user-friendly name for the stack (`name` by default)
|
||||
services | (optional) List of services belonging to the stack. Each service accepts the same parameters as a [Create new service](#create-a-new-service) operation (default: `[]`) plus the ability to refer "links" and "volumes-from" by the name of another service in the stack (see example).
|
||||
|
||||
|
||||
## Export an existing stack
|
||||
|
||||
```python
|
||||
import dockercloud
|
||||
|
||||
stack = dockercloud.Stack.fetch("46aca402-2109-4a70-a378-760cfed43816")
|
||||
stack.export()
|
||||
```
|
||||
|
||||
```go
|
||||
import "github.com/docker/go-dockercloud/dockercloud"
|
||||
|
||||
stack, err := dockercloud.GetStack("46aca402-2109-4a70-a378-760cfed43816")
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
if err = stack.Export(); err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
```
|
||||
|
||||
```http
|
||||
GET /api/app/v1/stack/46aca402-2109-4a70-a378-760cfed43816/export/ HTTP/1.1
|
||||
Host: cloud.docker.com
|
||||
Authorization: Basic dXNlcm5hbWU6YXBpa2V5
|
||||
Accept: application/json
|
||||
```
|
||||
|
||||
```shell
|
||||
docker-cloud stack export 46aca402
|
||||
```
|
||||
|
||||
Get a JSON representation of the stack following the [Stack YAML representation](../../docker-cloud/apps/stacks/).
|
||||
|
||||
### Endpoint Type
|
||||
|
||||
Available in Docker Cloud's **REST API**
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`GET /api/app/v1/stack/(uuid)/export/`
|
||||
|
||||
### Path Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
uuid | The UUID of the stack to retrieve
|
||||
|
||||
|
||||
|
||||
## Get an existing stack
|
||||
|
||||
```python
|
||||
import dockercloud
|
||||
|
||||
stack = dockercloud.Stack.fetch("46aca402-2109-4a70-a378-760cfed43816")
|
||||
```
|
||||
|
||||
```go
|
||||
import "github.com/docker/go-dockercloud/dockercloud"
|
||||
|
||||
stack, err := dockercloud.GetStack("46aca402-2109-4a70-a378-760cfed43816")
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
log.Println(stack)
|
||||
```
|
||||
|
||||
```http
|
||||
GET /api/app/v1/stack/46aca402-2109-4a70-a378-760cfed43816/ HTTP/1.1
|
||||
Host: cloud.docker.com
|
||||
Authorization: Basic dXNlcm5hbWU6YXBpa2V5
|
||||
Accept: application/json
|
||||
```
|
||||
|
||||
```shell
|
||||
docker-cloud stack inspect 46aca402-2109-4a70-a378-760cfed43816
|
||||
```
|
||||
|
||||
Get all the details of an specific stack
|
||||
|
||||
### Endpoint Type
|
||||
|
||||
Available in Docker Cloud's **REST API**
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`GET /api/app/v1/stack/(uuid)/`
|
||||
|
||||
### Path Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
uuid | The UUID of the stack to retrieve
|
||||
|
||||
|
||||
|
||||
## Update an existing stack
|
||||
|
||||
```python
|
||||
import dockercloud
|
||||
|
||||
stack = dockercloud.Stack.fetch("46aca402-2109-4a70-a378-760cfed43816")
|
||||
stack.services = {"services": [{"name": "hello-word", "image": "tutum/hello-world", "target_num_containers": 2}]}
|
||||
stack.save()
|
||||
```
|
||||
|
||||
```go
|
||||
import "github.com/docker/go-dockercloud/dockercloud"
|
||||
|
||||
stack, err := dockercloud.GetStack("46aca402-2109-4a70-a378-760cfed43816")
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
if err = stack.Update(dockercloud.StackCreateRequest{Services: []dockercloud.ServiceCreateRequest{{Name: "hello-world", Image: "tutum/hello-world", Target_num_containers: 2}}}); err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
```
|
||||
|
||||
```http
|
||||
PATCH /api/app/v1/stack/46aca402-2109-4a70-a378-760cfed43816/ HTTP/1.1
|
||||
Host: cloud.docker.com
|
||||
Authorization: Basic dXNlcm5hbWU6YXBpa2V5
|
||||
Accept: application/json
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"services": [
|
||||
{
|
||||
"name": "hello-word",
|
||||
"image": "tutum/hello-world",
|
||||
"target_num_containers": 3,
|
||||
"linked_to_service": [
|
||||
{
|
||||
"to_service": "database",
|
||||
"name": "DB"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "database",
|
||||
"image": "tutum/mysql"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
```shell
|
||||
docker-cloud stack update -f docker-compose.yml 46aca402
|
||||
```
|
||||
|
||||
Updates the details of every service in the stack.
|
||||
|
||||
### Endpoint Type
|
||||
|
||||
Available in Docker Cloud's **REST API**
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`PATCH /api/app/v1/stack/(uuid)/`
|
||||
|
||||
### Path Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
uuid | The UUID of the stack to update
|
||||
|
||||
|
||||
### JSON Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
services | (optional) List of services belonging to the stack. Each service accepts the same parameters as a [Update an existing service](#update-an-existing-service) operation (default: `[]`) plus the ability to refer "links" and "volumes-from" by the name of another service in the stack (see example).
|
||||
|
||||
|
||||
|
||||
## Stop a stack
|
||||
|
||||
```python
|
||||
import dockercloud
|
||||
|
||||
stack = dockercloud.Stack.fetch("46aca402-2109-4a70-a378-760cfed43816")
|
||||
stack.stop()
|
||||
```
|
||||
|
||||
```go
|
||||
import "github.com/docker/go-dockercloud/dockercloud"
|
||||
|
||||
stack, err := dockercloud.GetStack("46aca402-2109-4a70-a378-760cfed43816")
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
if err = stack.Stop(); err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
```
|
||||
|
||||
```http
|
||||
POST /api/app/v1/stack/46aca402-2109-4a70-a378-760cfed43816/stop/ HTTP/1.1
|
||||
Host: cloud.docker.com
|
||||
Authorization: Basic dXNlcm5hbWU6YXBpa2V5
|
||||
Accept: application/json
|
||||
```
|
||||
|
||||
```shell
|
||||
docker-cloud stack stop 46aca402-2109-4a70-a378-760cfed43816
|
||||
```
|
||||
|
||||
Stops the services in the stack.
|
||||
|
||||
### Endpoint Type
|
||||
|
||||
Available in Docker Cloud's **REST API**
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`POST /api/app/v1/stack/(uuid)/stop/`
|
||||
|
||||
### Path Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
uuid | The UUID of the stack to stop
|
||||
|
||||
|
||||
## Start a stack
|
||||
|
||||
```python
|
||||
import dockercloud
|
||||
|
||||
stack = dockercloud.Stack.fetch()
|
||||
stack.start()
|
||||
```
|
||||
|
||||
```go
|
||||
import "github.com/docker/go-dockercloud/dockercloud"
|
||||
|
||||
stack, err := dockercloud.GetStack("46aca402-2109-4a70-a378-760cfed43816")
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
if err = stack.Start(); err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
```
|
||||
|
||||
```http
|
||||
POST /api/app/v1/stack/46aca402-2109-4a70-a378-760cfed43816/start/ HTTP/1.1
|
||||
Host: cloud.docker.com
|
||||
Authorization: Basic dXNlcm5hbWU6YXBpa2V5
|
||||
Accept: application/json
|
||||
```
|
||||
|
||||
```shell
|
||||
docker-cloud stack start 46aca402
|
||||
```
|
||||
|
||||
Starts the services in the stack.
|
||||
|
||||
### Endpoint Type
|
||||
|
||||
Available in Docker Cloud's **REST API**
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`POST /api/app/v1/stack/(uuid)/start/`
|
||||
|
||||
### Path Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
uuid | The UUID of the stack to start
|
||||
|
||||
|
||||
## Redeploy a stack
|
||||
|
||||
```python
|
||||
import dockercloud
|
||||
|
||||
stack = dockercloud.Stack.fetch("46aca402-2109-4a70-a378-760cfed43816")
|
||||
stack.redeploy()
|
||||
```
|
||||
|
||||
```go
|
||||
import "github.com/docker/go-dockercloud/dockercloud"
|
||||
|
||||
stack, err := dockercloud.GetStack("46aca402-2109-4a70-a378-760cfed43816")
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
//Redeploy(dockercloud.ReuseVolumesOption{Reuse: true}) to reuse the existing volumes
|
||||
//Redeploy(dockercloud.ReuseVolumesOption{Reuse: false}) to not reuse the existing volumes
|
||||
if err = stack.Redeploy(dockercloud.ReuseVolumesOption{Reuse: false}); err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
```
|
||||
|
||||
```http
|
||||
POST /api/app/v1/stack/46aca402-2109-4a70-a378-760cfed43816/redeploy/ HTTP/1.1
|
||||
Host: cloud.docker.com
|
||||
Authorization: Basic dXNlcm5hbWU6YXBpa2V5
|
||||
Accept: application/json
|
||||
```
|
||||
|
||||
```shell
|
||||
docker-cloud stack redeploy 46aca402
|
||||
```
|
||||
|
||||
Redeploys all the services in the stack.
|
||||
|
||||
### Endpoint Type
|
||||
|
||||
Available in Docker Cloud's **REST API**
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`POST /api/app/v1/stack/(uuid)/redeploy/`
|
||||
|
||||
### Path Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
uuid | The UUID of the stack to redeploy
|
||||
|
||||
### Query Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
reuse_volumes | Wheather to reuse container volumes for this redeploy operation or not (default: `true`).
|
||||
|
||||
|
||||
## Terminate a stack
|
||||
|
||||
```python
|
||||
import dockercloud
|
||||
|
||||
stack = dockercloud.Stack.fetch("46aca402-2109-4a70-a378-760cfed43816")
|
||||
stack.delete()
|
||||
```
|
||||
|
||||
```go
|
||||
import "github.com/docker/go-dockercloud/dockercloud"
|
||||
|
||||
stack, err := dockercloud.GetStack("46aca402-2109-4a70-a378-760cfed43816")
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
if err = stack.Terminate(); err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
```
|
||||
|
||||
```http
|
||||
DELETE /api/app/v1/stack/46aca402-2109-4a70-a378-760cfed43816/ HTTP/1.1
|
||||
Host: cloud.docker.com
|
||||
Authorization: Basic dXNlcm5hbWU6YXBpa2V5
|
||||
Accept: application/json
|
||||
```
|
||||
|
||||
```shell
|
||||
docker-cloud stack terminate 46aca402
|
||||
```
|
||||
|
||||
Terminate all the services in a the stack and the stack itself.
|
||||
|
||||
### Endpoint Type
|
||||
|
||||
Available in Docker Cloud's **REST API**
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`DELETE /api/app/v1/stack/(uuid)/`
|
||||
|
||||
### Path Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
uuid | The UUID of the stack to terminate
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
# Tags
|
||||
|
||||
## Tag
|
||||
|
||||
> Example
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "byon=false",
|
||||
"origin": "tutum"
|
||||
}
|
||||
```
|
||||
|
||||
Tags are used to target the deployment of services to a specific set of nodes. [Learn more](../../docker-cloud/apps/deploy-tags/)
|
||||
|
||||
### Attributes
|
||||
|
||||
Attribute | Description
|
||||
--------- | -----------
|
||||
name | Name of the tag
|
||||
origin | Possible values: `user`, `tutum`
|
||||
|
||||
|
||||
## List all node tags
|
||||
|
||||
```http
|
||||
GET /api/infra/v1/tag/ HTTP/1.1
|
||||
Host: cloud.docker.com
|
||||
Authorization: Basic dXNlcm5hbWU6YXBpa2V5
|
||||
Accept: application/json
|
||||
```
|
||||
|
||||
```
|
||||
docker-cloud tag ls 7eaf7fff-882c
|
||||
```
|
||||
|
||||
Lists all tags used by all nodes. Returns a list of `Tag` objects.
|
||||
|
||||
### Endpoint Type
|
||||
|
||||
Available in Docker Cloud's **REST API**
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`GET /api/infra/v1/tag/`
|
||||
|
||||
### Query Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
name | Filter by name
|
||||
origin | Filter by origin. Possible values: `user`, `tutum`
|
||||
|
|
@ -0,0 +1,299 @@
|
|||
# Triggers
|
||||
|
||||
## Service triggers
|
||||
|
||||
> Example
|
||||
|
||||
```json
|
||||
{
|
||||
"url": "/api/app/v1/service/82d4a246-52d8-468d-903d-9da9ef05ff28/trigger/0224815a-c156-44e4-92d7-997c69354438/call/",
|
||||
"operation": "REDEPLOY",
|
||||
"name": "docker_trigger",
|
||||
"resource_uri": "/api/app/v1/service/82d4a246-52d8-468d-903d-9da9ef05ff28/trigger/0224815a-c156-44e4-92d7-997c69354438/"
|
||||
}
|
||||
```
|
||||
|
||||
Triggers are URLs that will start a redeploy of the service whenever a `POST` request is sent to them. They require no authorization headers, so they should be treated as access tokens. Triggers can be revoked if they are leaked or no longer used for security purposes. See [Triggers](../../docker-cloud/apps/triggers/) for more information.
|
||||
|
||||
|
||||
### Attributes
|
||||
|
||||
Attribute | Description
|
||||
--------- | -----------
|
||||
url | Address to be used to call the trigger with a `POST` request
|
||||
name | A user provided name for the trigger
|
||||
operation | The operation that the trigger call performs (see table `Operations` below)
|
||||
resource_uri | A unique API endpoint that represents the trigger
|
||||
|
||||
|
||||
### Operations
|
||||
|
||||
Operation | Description
|
||||
--------- | -----------
|
||||
REDEPLOY | Performs a `redeploy` service operation.
|
||||
SCALEUP | Performs a `scale up` service operation.
|
||||
|
||||
|
||||
|
||||
## List all triggers
|
||||
|
||||
```python
|
||||
import dockercloud
|
||||
|
||||
service = dockercloud.Service.fetch('61a29874-9134-48f9-b460-f37d4bec4826')
|
||||
trigger = dockercloud.Trigger.fetch(service)
|
||||
trigger.list()
|
||||
```
|
||||
|
||||
```http
|
||||
GET /api/app/v1/service/61a29874-9134-48f9-b460-f37d4bec4826/trigger/ HTTP/1.1
|
||||
Host: cloud.docker.com
|
||||
Authorization: Basic dXNlcm5hbWU6YXBpa2V5
|
||||
Accept: application/json
|
||||
```
|
||||
|
||||
```go
|
||||
import "github.com/docker/go-dockercloud/dockercloud"
|
||||
|
||||
service, err := dockercloud.GetService("61a29874-9134-48f9-b460-f37d4bec4826")
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
trigger, err := service.ListTriggers()
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
log.Println(trigger)
|
||||
```
|
||||
|
||||
```shell
|
||||
docker-cloud trigger list 61a29874-9134-48f9-b460-f37d4bec4826
|
||||
```
|
||||
|
||||
Lists all current triggers the service has associated to. Returns a list of `Service Trigger` objects.
|
||||
|
||||
### Endpoint Type
|
||||
|
||||
Available in Docker Cloud's **REST API**
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`GET /api/app/v1/service/(uuid)/trigger/`
|
||||
|
||||
### Path Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
uuid | The UUID of the service the triggers are associated to
|
||||
|
||||
|
||||
## Create a new trigger
|
||||
|
||||
```python
|
||||
import dockercloud
|
||||
|
||||
service = dockercloud.Service.fetch('61a29874-9134-48f9-b460-f37d4bec4826')
|
||||
trigger = dockercloud.Trigger.fetch(service)
|
||||
trigger.add(name="mytrigger_name", operation="REDEPLOY")
|
||||
trigger.save()
|
||||
```
|
||||
|
||||
```go
|
||||
import "github.com/docker/go-dockercloud/dockercloud"
|
||||
|
||||
service, err := dockercloud.GetService("61a29874-9134-48f9-b460-f37d4bec4826")
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
trigger, err := service.CreateTrigger(dockercloud.TriggerCreateRequest{Name: "test-trigger", Operation: "REDEPLOY"})
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
log.Println(trigger)
|
||||
```
|
||||
|
||||
```http
|
||||
POST /api/app/v1/service/61a29874-9134-48f9-b460-f37d4bec4826/trigger/ HTTP/1.1
|
||||
Host: cloud.docker.com
|
||||
Authorization: Basic dXNlcm5hbWU6YXBpa2V5
|
||||
Accept: application/json
|
||||
Content-Type: application/json
|
||||
|
||||
{"name": "mytrigger_name", "operation": "REDEPLOY"}
|
||||
```
|
||||
|
||||
```shell
|
||||
docker-cloud trigger create --name mytrigger_name --operation REDEPLOY 61a29874-9134-48f9-b460-f37d4bec4826
|
||||
```
|
||||
|
||||
Creates a new service trigger.
|
||||
|
||||
### Endpoint Type
|
||||
|
||||
Available in Docker Cloud's **REST API**
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`POST /api/app/v1/service/(uuid)/trigger/`
|
||||
|
||||
### JSON Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
name | (optional) A user provided name for the trigger
|
||||
operation | (optional) The operation to be performed by the trigger (default: "REDEPLOY")
|
||||
|
||||
## Get an existing trigger
|
||||
```python
|
||||
import dockercloud
|
||||
|
||||
service = dockercloud.Service.fetch('61a29874-9134-48f9-b460-f37d4bec4826')
|
||||
trigger = dockercloud.Trigger.fetch(service)
|
||||
```
|
||||
|
||||
|
||||
```go
|
||||
import "github.com/docker/go-dockercloud/dockercloud"
|
||||
|
||||
service, err := dockercloud.GetService("61a29874-9134-48f9-b460-f37d4bec4826")
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
trigger, err := service.GetTrigger("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
log.Println(trigger)
|
||||
```
|
||||
|
||||
```http
|
||||
GET /api/app/v1/service/61a29874-9134-48f9-b460-f37d4bec4826/trigger/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/ HTTP/1.1
|
||||
Host: cloud.docker.com
|
||||
Authorization: Basic dXNlcm5hbWU6YXBpa2V5
|
||||
Accept: application/json
|
||||
```
|
||||
|
||||
Get all the details of an specific trigger
|
||||
|
||||
### Endpoint Type
|
||||
|
||||
Available in Docker Cloud's **REST API**
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`GET /api/app/v1/service/(uuid)/trigger/(trigger_uuid)/`
|
||||
|
||||
### Path Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
uuid | The UUID of the service the triggers are associated to
|
||||
trigger_uuid | The UUID of the trigger to retrieve
|
||||
|
||||
## Delete a trigger
|
||||
|
||||
```python
|
||||
import dockercloud
|
||||
|
||||
service = dockercloud.Service.fetch('61a29874-9134-48f9-b460-f37d4bec4826')
|
||||
trigger = dockercloud.Trigger.fetch(service)
|
||||
trigger.delete("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
|
||||
```
|
||||
|
||||
```go
|
||||
import "github.com/docker/go-dockercloud/dockercloud"
|
||||
|
||||
service, err := dockercloud.GetService("61a29874-9134-48f9-b460-f37d4bec4826")
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
service.DeleteTrigger("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
|
||||
```
|
||||
|
||||
```http
|
||||
DELETE /api/app/v1/service/61a29874-9134-48f9-b460-f37d4bec4826/trigger/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/ HTTP/1.1
|
||||
Host: cloud.docker.com
|
||||
Authorization: Basic dXNlcm5hbWU6YXBpa2V5
|
||||
Accept: application/json
|
||||
```
|
||||
|
||||
```shell
|
||||
docker-cloud trigger rm 61a29874-9134-48f9-b460-f37d4bec4826 7eaf7fff-882c-4f3d-9a8f-a22317ac00ce
|
||||
```
|
||||
|
||||
Deletes specific trigger. It will be no longer available to be called.
|
||||
|
||||
### Endpoint Type
|
||||
|
||||
Available in Docker Cloud's **REST API**
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`DELETE /api/app/v1/service/(uuid)/trigger/(trigger_uuid)/`
|
||||
|
||||
### Path Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
uuid | The UUID of the associated service
|
||||
trigger_uuid | The UUID of the trigger to delete
|
||||
|
||||
|
||||
## Call a trigger
|
||||
|
||||
```python
|
||||
import dockercloud
|
||||
|
||||
service = dockercloud.Service.fetch('61a29874-9134-48f9-b460-f37d4bec4826')
|
||||
trigger = dockercloud.Trigger.fetch(service)
|
||||
trigger.call("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
|
||||
```
|
||||
|
||||
```go
|
||||
import "github.com/docker/go-dockercloud/dockercloud"
|
||||
|
||||
service, err := dockercloud.GetService("61a29874-9134-48f9-b460-f37d4bec4826")
|
||||
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
service.CallTrigger("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
|
||||
```
|
||||
|
||||
```http
|
||||
POST /api/app/v1/service/61a29874-9134-48f9-b460-f37d4bec4826/trigger/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/call/ HTTP/1.1
|
||||
Host: cloud.docker.com
|
||||
Accept: application/json
|
||||
```
|
||||
|
||||
Executes the trigger. For `SCALEUP` triggers, the number of containers to scale up can be passed at the end of the trigger call url, for example `/api/app/v1/service/61a29874-9134-48f9-b460-f37d4bec4826/trigger/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/call/3/`.
|
||||
|
||||
### Endpoint Type
|
||||
|
||||
Available in Docker Cloud's **REST API**
|
||||
|
||||
### HTTP Request
|
||||
|
||||
`POST /api/app/v1/service/(uuid)/trigger/(trigger_uuid)/call/`
|
||||
|
||||
### Path Parameters
|
||||
|
||||
Parameter | Description
|
||||
--------- | -----------
|
||||
uuid | The UUID of the associated service
|
||||
trigger_uuid | The UUID of the trigger to call
|
||||
|
|
@ -0,0 +1,138 @@
|
|||
---
|
||||
title: Docker Cloud API reference
|
||||
|
||||
language_tabs:
|
||||
- http
|
||||
- go
|
||||
- python
|
||||
- shell: CLI
|
||||
|
||||
toc_footers:
|
||||
|
||||
includes:
|
||||
- action
|
||||
- provider
|
||||
- region
|
||||
- availabilityzone
|
||||
- nodetype
|
||||
- nodecluster
|
||||
- node
|
||||
- registry
|
||||
- repository
|
||||
- stack
|
||||
- service
|
||||
- container
|
||||
- triggers
|
||||
- dockercloud-events
|
||||
- errors
|
||||
|
||||
search: true
|
||||
---
|
||||
|
||||
# Introduction
|
||||
|
||||
Docker Cloud currently offers a **HTTP REST API** and a **Websocket Stream API** which are used by both the [Web UI](https://cloud.docker.com/) and the [CLI](https://github.com/docker/dockercloud-cli). This API documentation contains all API operations currently supported in the platform and provides examples of how to execute them using our Command Line Interface (CLI), [Python SDK](https://github.com/docker/python-dockercloud) and [Go SDK](https://github.com/docker/go-dockercloud).
|
||||
|
||||
# Authentication
|
||||
|
||||
In order to be able to make requests to the Docker Cloud API, you should first obtain an ApiKey for your account. For this, log into Docker Cloud, click on the menu on the upper right corner of the screen, select **Account info** and then select **API keys**.
|
||||
|
||||
## REST API
|
||||
|
||||
```python
|
||||
import dockercloud
|
||||
dockercloud.user = "username"
|
||||
dockercloud.apikey = "apikey"
|
||||
```
|
||||
|
||||
```go
|
||||
import "github.com/docker/go-dockercloud/dockercloud"
|
||||
|
||||
dockercloud.User = "username"
|
||||
dockercloud.ApiKey = "apikey"
|
||||
```
|
||||
|
||||
```http
|
||||
GET /api/app/v1/service/ HTTP/1.1
|
||||
Host: cloud.docker.com
|
||||
Authorization: Basic dXNlcm5hbWU6YXBpa2V5
|
||||
Accept: application/json
|
||||
```
|
||||
|
||||
```shell
|
||||
export DOCKERCLOUD_USER=username
|
||||
export DOCKERCLOUD_APIKEY=apikey
|
||||
```
|
||||
|
||||
> Make sure to replace `username` with your username and `apikey` with your API key.
|
||||
|
||||
The Docker Cloud REST API is reachable through the following hostname:
|
||||
|
||||
`https://cloud.docker.com/`
|
||||
|
||||
All requests should be sent to this endpoint using `Basic` authentication using your API key as password:
|
||||
|
||||
`Authorization: Basic dXNlcm5hbWU6YXBpa2V5`
|
||||
|
||||
HTTP responses are given in JSON format, so the following `Accept` header is required for every API call:
|
||||
|
||||
`Accept: application/json`
|
||||
|
||||
## Stream API
|
||||
|
||||
```python
|
||||
import websocket
|
||||
import base64
|
||||
|
||||
header = "Authorization: Basic %s" % base64.b64encode("%s:%s" % (username, password))
|
||||
ws = websocket.WebSocketApp('wss://ws.cloud.docker.com/v1/events', header=[header])
|
||||
```
|
||||
|
||||
```go
|
||||
import "github.com/gorilla/websocket"
|
||||
import "encoding/base64"
|
||||
|
||||
var StreamUrl = "wss://ws.cloud.docker.com:443/v1/events"
|
||||
|
||||
sEnc := base64.StdEncoding.EncodeToString([]byte(User + ":" + ApiKey))
|
||||
header := http.Header{}
|
||||
header.Add("Authorization", fmt.Sprintf("Basic %s", sEnc))
|
||||
|
||||
var Dialer websocket.Dialer
|
||||
ws, _, err := Dialer.Dial(url, header)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
```
|
||||
|
||||
```http
|
||||
GET /api/audit/v1/events HTTP/1.1
|
||||
Host: ws.cloud.docker.com
|
||||
Authorization: Basic dXNlcm5hbWU6YXBpa2V5
|
||||
Connection: Upgrade
|
||||
Upgrade: websocket
|
||||
```
|
||||
|
||||
```shell
|
||||
export DOCKERCLOUD_USER=username
|
||||
export DOCKERCLOUD_APIKEY=apikey
|
||||
```
|
||||
|
||||
> Make sure to replace `username` with your username and `apikey` with your API key.
|
||||
|
||||
The Docker Cloud Stream API is reachable through the following hostname:
|
||||
|
||||
`wss://ws.cloud.docker.com/`
|
||||
|
||||
The Stream API requires the same authentication mechanism as the REST API:
|
||||
|
||||
`Authorization: Basic dXNlcm5hbWU6YXBpa2V5`
|
||||
|
||||
|
||||
## API roles
|
||||
|
||||
> The CLI and the SDKs will detect this environment variable and automatically use it
|
||||
|
||||
If you give an [API role](../../docker-cloud/apps/api-roles/) to a container, the environment variable `DOCKERCLOUD_AUTH` inside the container will have the contents of the `Authorization` header that you can use to authenticate against the REST or Stream APIs:
|
||||
|
||||
`curl -H "Authorization: $DOCKERCLOUD_AUTH" https://cloud.docker.com/api/app/v1/service/`
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
//= require ./lib/_energize
|
||||
//= require ./app/_lang
|
||||
//= require ./app/_search
|
||||
//= require ./app/_toc
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
//= require ./lib/_energize
|
||||
//= require ./app/_lang
|
||||
//= require ./app/_toc
|
||||
|
|
@ -0,0 +1,162 @@
|
|||
/*
|
||||
Copyright 2008-2013 Concur Technologies, Inc.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
not use this file except in compliance with the License. You may obtain
|
||||
a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
License for the specific language governing permissions and limitations
|
||||
under the License.
|
||||
*/
|
||||
(function (global) {
|
||||
'use strict';
|
||||
|
||||
var languages = [];
|
||||
|
||||
global.setupLanguages = setupLanguages;
|
||||
global.activateLanguage = activateLanguage;
|
||||
|
||||
function activateLanguage(language) {
|
||||
if (!language) return;
|
||||
if (language === "") return;
|
||||
|
||||
$(".lang-selector a").removeClass('active');
|
||||
$(".lang-selector a[data-language-name='" + language + "']").addClass('active');
|
||||
for (var i=0; i < languages.length; i++) {
|
||||
$(".highlight." + languages[i]).hide();
|
||||
}
|
||||
$(".highlight." + language).show();
|
||||
|
||||
global.toc.calculateHeights();
|
||||
|
||||
// scroll to the new location of the position
|
||||
if ($(window.location.hash).get(0)) {
|
||||
$(window.location.hash).get(0).scrollIntoView(true);
|
||||
}
|
||||
}
|
||||
|
||||
// parseURL and stringifyURL are from https://github.com/sindresorhus/query-string
|
||||
// MIT licensed
|
||||
// https://github.com/sindresorhus/query-string/blob/7bee64c16f2da1a326579e96977b9227bf6da9e6/license
|
||||
function parseURL(str) {
|
||||
if (typeof str !== 'string') {
|
||||
return {};
|
||||
}
|
||||
|
||||
str = str.trim().replace(/^(\?|#|&)/, '');
|
||||
|
||||
if (!str) {
|
||||
return {};
|
||||
}
|
||||
|
||||
return str.split('&').reduce(function (ret, param) {
|
||||
var parts = param.replace(/\+/g, ' ').split('=');
|
||||
var key = parts[0];
|
||||
var val = parts[1];
|
||||
|
||||
key = decodeURIComponent(key);
|
||||
// missing `=` should be `null`:
|
||||
// http://w3.org/TR/2012/WD-url-20120524/#collect-url-parameters
|
||||
val = val === undefined ? null : decodeURIComponent(val);
|
||||
|
||||
if (!ret.hasOwnProperty(key)) {
|
||||
ret[key] = val;
|
||||
} else if (Array.isArray(ret[key])) {
|
||||
ret[key].push(val);
|
||||
} else {
|
||||
ret[key] = [ret[key], val];
|
||||
}
|
||||
|
||||
return ret;
|
||||
}, {});
|
||||
};
|
||||
|
||||
function stringifyURL(obj) {
|
||||
return obj ? Object.keys(obj).sort().map(function (key) {
|
||||
var val = obj[key];
|
||||
|
||||
if (Array.isArray(val)) {
|
||||
return val.sort().map(function (val2) {
|
||||
return encodeURIComponent(key) + '=' + encodeURIComponent(val2);
|
||||
}).join('&');
|
||||
}
|
||||
|
||||
return encodeURIComponent(key) + '=' + encodeURIComponent(val);
|
||||
}).join('&') : '';
|
||||
};
|
||||
|
||||
// gets the language set in the query string
|
||||
function getLanguageFromQueryString() {
|
||||
if (location.search.length >= 1) {
|
||||
var language = parseURL(location.search).language
|
||||
if (language) {
|
||||
return language;
|
||||
} else if (jQuery.inArray(location.search.substr(1), languages) != -1) {
|
||||
return location.search.substr(1);
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// returns a new query string with the new language in it
|
||||
function generateNewQueryString(language) {
|
||||
var url = parseURL(location.search);
|
||||
if (url.language) {
|
||||
url.language = language;
|
||||
return stringifyURL(url);
|
||||
}
|
||||
return language;
|
||||
}
|
||||
|
||||
// if a button is clicked, add the state to the history
|
||||
function pushURL(language) {
|
||||
if (!history) { return; }
|
||||
var hash = window.location.hash;
|
||||
if (hash) {
|
||||
hash = hash.replace(/^#+/, '');
|
||||
}
|
||||
history.pushState({}, '', '?' + generateNewQueryString(language) + '#' + hash);
|
||||
|
||||
// save language as next default
|
||||
localStorage.setItem("language", language);
|
||||
}
|
||||
|
||||
function setupLanguages(l) {
|
||||
var defaultLanguage = localStorage.getItem("language");
|
||||
|
||||
languages = l;
|
||||
|
||||
var presetLanguage = getLanguageFromQueryString();
|
||||
if (presetLanguage) {
|
||||
// the language is in the URL, so use that language!
|
||||
activateLanguage(presetLanguage);
|
||||
|
||||
localStorage.setItem("language", presetLanguage);
|
||||
} else if ((defaultLanguage !== null) && (jQuery.inArray(defaultLanguage, languages) != -1)) {
|
||||
// the language was the last selected one saved in localstorage, so use that language!
|
||||
activateLanguage(defaultLanguage);
|
||||
} else {
|
||||
// no language selected, so use the default
|
||||
activateLanguage(languages[0]);
|
||||
}
|
||||
}
|
||||
|
||||
// if we click on a language tab, activate that language
|
||||
$(function() {
|
||||
$(".lang-selector a").on("click", function() {
|
||||
var language = $(this).data("language-name");
|
||||
pushURL(language);
|
||||
activateLanguage(language);
|
||||
return false;
|
||||
});
|
||||
window.onpopstate = function() {
|
||||
activateLanguage(getLanguageFromQueryString());
|
||||
};
|
||||
});
|
||||
})(window);
|
||||
|
|
@ -0,0 +1,74 @@
|
|||
//= require ../lib/_lunr
|
||||
//= require ../lib/_jquery.highlight
|
||||
(function () {
|
||||
'use strict';
|
||||
|
||||
var content, searchResults;
|
||||
var highlightOpts = { element: 'span', className: 'search-highlight' };
|
||||
|
||||
var index = new lunr.Index();
|
||||
|
||||
index.ref('id');
|
||||
index.field('title', { boost: 10 });
|
||||
index.field('body');
|
||||
index.pipeline.add(lunr.trimmer, lunr.stopWordFilter);
|
||||
|
||||
$(populate);
|
||||
$(bind);
|
||||
|
||||
function populate() {
|
||||
$('h1, h2').each(function() {
|
||||
var title = $(this);
|
||||
var body = title.nextUntil('h1, h2');
|
||||
index.add({
|
||||
id: title.prop('id'),
|
||||
title: title.text(),
|
||||
body: body.text()
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function bind() {
|
||||
content = $('.content');
|
||||
searchResults = $('.search-results');
|
||||
|
||||
$('#input-search').on('keyup', search);
|
||||
}
|
||||
|
||||
function search(event) {
|
||||
unhighlight();
|
||||
searchResults.addClass('visible');
|
||||
|
||||
// ESC clears the field
|
||||
if (event.keyCode === 27) this.value = '';
|
||||
|
||||
if (this.value) {
|
||||
var results = index.search(this.value).filter(function(r) {
|
||||
return r.score > 0.0001;
|
||||
});
|
||||
|
||||
if (results.length) {
|
||||
searchResults.empty();
|
||||
$.each(results, function (index, result) {
|
||||
var elem = document.getElementById(result.ref);
|
||||
searchResults.append("<li><a href='#" + result.ref + "'>" + $(elem).text() + "</a></li>");
|
||||
});
|
||||
highlight.call(this);
|
||||
} else {
|
||||
searchResults.html('<li></li>');
|
||||
$('.search-results li').text('No Results Found for "' + this.value + '"');
|
||||
}
|
||||
} else {
|
||||
unhighlight();
|
||||
searchResults.removeClass('visible');
|
||||
}
|
||||
}
|
||||
|
||||
function highlight() {
|
||||
if (this.value) content.highlight(this.value, highlightOpts);
|
||||
}
|
||||
|
||||
function unhighlight() {
|
||||
content.unhighlight(highlightOpts);
|
||||
}
|
||||
})();
|
||||
|
|
@ -0,0 +1,55 @@
|
|||
//= require ../lib/_jquery_ui
|
||||
//= require ../lib/_jquery.tocify
|
||||
//= require ../lib/_imagesloaded.min
|
||||
(function (global) {
|
||||
'use strict';
|
||||
|
||||
var closeToc = function() {
|
||||
$(".tocify-wrapper").removeClass('open');
|
||||
$("#nav-button").removeClass('open');
|
||||
};
|
||||
|
||||
var makeToc = function() {
|
||||
global.toc = $("#toc").tocify({
|
||||
selectors: 'h1, h2',
|
||||
extendPage: false,
|
||||
theme: 'none',
|
||||
smoothScroll: false,
|
||||
showEffectSpeed: 0,
|
||||
hideEffectSpeed: 180,
|
||||
ignoreSelector: '.toc-ignore',
|
||||
highlightOffset: 60,
|
||||
scrollTo: -1,
|
||||
scrollHistory: true,
|
||||
hashGenerator: function (text, element) {
|
||||
return element.prop('id');
|
||||
}
|
||||
}).data('toc-tocify');
|
||||
|
||||
$("#nav-button").click(function() {
|
||||
$(".tocify-wrapper").toggleClass('open');
|
||||
$("#nav-button").toggleClass('open');
|
||||
return false;
|
||||
});
|
||||
|
||||
$(".page-wrapper").click(closeToc);
|
||||
$(".tocify-item").click(closeToc);
|
||||
};
|
||||
|
||||
// Hack to make already open sections to start opened,
|
||||
// instead of displaying an ugly animation
|
||||
function animate() {
|
||||
setTimeout(function() {
|
||||
toc.setOption('showEffectSpeed', 180);
|
||||
}, 50);
|
||||
}
|
||||
|
||||
$(function() {
|
||||
makeToc();
|
||||
animate();
|
||||
$('.content').imagesLoaded( function() {
|
||||
global.toc.calculateHeights();
|
||||
});
|
||||
});
|
||||
})(window);
|
||||
|
||||
|
|
@ -0,0 +1,169 @@
|
|||
/**
|
||||
* energize.js v0.1.0
|
||||
*
|
||||
* Speeds up click events on mobile devices.
|
||||
* https://github.com/davidcalhoun/energize.js
|
||||
*/
|
||||
|
||||
(function() { // Sandbox
|
||||
/**
|
||||
* Don't add to non-touch devices, which don't need to be sped up
|
||||
*/
|
||||
if(!('ontouchstart' in window)) return;
|
||||
|
||||
var lastClick = {},
|
||||
isThresholdReached, touchstart, touchmove, touchend,
|
||||
click, closest;
|
||||
|
||||
/**
|
||||
* isThresholdReached
|
||||
*
|
||||
* Compare touchstart with touchend xy coordinates,
|
||||
* and only fire simulated click event if the coordinates
|
||||
* are nearby. (don't want clicking to be confused with a swipe)
|
||||
*/
|
||||
isThresholdReached = function(startXY, xy) {
|
||||
return Math.abs(startXY[0] - xy[0]) > 5 || Math.abs(startXY[1] - xy[1]) > 5;
|
||||
};
|
||||
|
||||
/**
|
||||
* touchstart
|
||||
*
|
||||
* Save xy coordinates when the user starts touching the screen
|
||||
*/
|
||||
touchstart = function(e) {
|
||||
this.startXY = [e.touches[0].clientX, e.touches[0].clientY];
|
||||
this.threshold = false;
|
||||
};
|
||||
|
||||
/**
|
||||
* touchmove
|
||||
*
|
||||
* Check if the user is scrolling past the threshold.
|
||||
* Have to check here because touchend will not always fire
|
||||
* on some tested devices (Kindle Fire?)
|
||||
*/
|
||||
touchmove = function(e) {
|
||||
// NOOP if the threshold has already been reached
|
||||
if(this.threshold) return false;
|
||||
|
||||
this.threshold = isThresholdReached(this.startXY, [e.touches[0].clientX, e.touches[0].clientY]);
|
||||
};
|
||||
|
||||
/**
|
||||
* touchend
|
||||
*
|
||||
* If the user didn't scroll past the threshold between
|
||||
* touchstart and touchend, fire a simulated click.
|
||||
*
|
||||
* (This will fire before a native click)
|
||||
*/
|
||||
touchend = function(e) {
|
||||
// Don't fire a click if the user scrolled past the threshold
|
||||
if(this.threshold || isThresholdReached(this.startXY, [e.changedTouches[0].clientX, e.changedTouches[0].clientY])) {
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create and fire a click event on the target element
|
||||
* https://developer.mozilla.org/en/DOM/event.initMouseEvent
|
||||
*/
|
||||
var touch = e.changedTouches[0],
|
||||
evt = document.createEvent('MouseEvents');
|
||||
evt.initMouseEvent('click', true, true, window, 0, touch.screenX, touch.screenY, touch.clientX, touch.clientY, false, false, false, false, 0, null);
|
||||
evt.simulated = true; // distinguish from a normal (nonsimulated) click
|
||||
e.target.dispatchEvent(evt);
|
||||
};
|
||||
|
||||
/**
|
||||
* click
|
||||
*
|
||||
* Because we've already fired a click event in touchend,
|
||||
* we need to listed for all native click events here
|
||||
* and suppress them as necessary.
|
||||
*/
|
||||
click = function(e) {
|
||||
/**
|
||||
* Prevent ghost clicks by only allowing clicks we created
|
||||
* in the click event we fired (look for e.simulated)
|
||||
*/
|
||||
var time = Date.now(),
|
||||
timeDiff = time - lastClick.time,
|
||||
x = e.clientX,
|
||||
y = e.clientY,
|
||||
xyDiff = [Math.abs(lastClick.x - x), Math.abs(lastClick.y - y)],
|
||||
target = closest(e.target, 'A') || e.target, // needed for standalone apps
|
||||
nodeName = target.nodeName,
|
||||
isLink = nodeName === 'A',
|
||||
standAlone = window.navigator.standalone && isLink && e.target.getAttribute("href");
|
||||
|
||||
lastClick.time = time;
|
||||
lastClick.x = x;
|
||||
lastClick.y = y;
|
||||
|
||||
/**
|
||||
* Unfortunately Android sometimes fires click events without touch events (seen on Kindle Fire),
|
||||
* so we have to add more logic to determine the time of the last click. Not perfect...
|
||||
*
|
||||
* Older, simpler check: if((!e.simulated) || standAlone)
|
||||
*/
|
||||
if((!e.simulated && (timeDiff < 500 || (timeDiff < 1500 && xyDiff[0] < 50 && xyDiff[1] < 50))) || standAlone) {
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
if(!standAlone) return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Special logic for standalone web apps
|
||||
* See http://stackoverflow.com/questions/2898740/iphone-safari-web-app-opens-links-in-new-window
|
||||
*/
|
||||
if(standAlone) {
|
||||
window.location = target.getAttribute("href");
|
||||
}
|
||||
|
||||
/**
|
||||
* Add an energize-focus class to the targeted link (mimics :focus behavior)
|
||||
* TODO: test and/or remove? Does this work?
|
||||
*/
|
||||
if(!target || !target.classList) return;
|
||||
target.classList.add("energize-focus");
|
||||
window.setTimeout(function(){
|
||||
target.classList.remove("energize-focus");
|
||||
}, 150);
|
||||
};
|
||||
|
||||
/**
|
||||
* closest
|
||||
* @param {HTMLElement} node current node to start searching from.
|
||||
* @param {string} tagName the (uppercase) name of the tag you're looking for.
|
||||
*
|
||||
* Find the closest ancestor tag of a given node.
|
||||
*
|
||||
* Starts at node and goes up the DOM tree looking for a
|
||||
* matching nodeName, continuing until hitting document.body
|
||||
*/
|
||||
closest = function(node, tagName){
|
||||
var curNode = node;
|
||||
|
||||
while(curNode !== document.body) { // go up the dom until we find the tag we're after
|
||||
if(!curNode || curNode.nodeName === tagName) { return curNode; } // found
|
||||
curNode = curNode.parentNode; // not found, so keep going up
|
||||
}
|
||||
|
||||
return null; // not found
|
||||
};
|
||||
|
||||
/**
|
||||
* Add all delegated event listeners
|
||||
*
|
||||
* All the events we care about bubble up to document,
|
||||
* so we can take advantage of event delegation.
|
||||
*
|
||||
* Note: no need to wait for DOMContentLoaded here
|
||||
*/
|
||||
document.addEventListener('touchstart', touchstart, false);
|
||||
document.addEventListener('touchmove', touchmove, false);
|
||||
document.addEventListener('touchend', touchend, false);
|
||||
document.addEventListener('click', click, true); // TODO: why does this use capture?
|
||||
|
||||
})();
|
||||
|
|
@ -0,0 +1,108 @@
|
|||
/*
|
||||
* jQuery Highlight plugin
|
||||
*
|
||||
* Based on highlight v3 by Johann Burkard
|
||||
* http://johannburkard.de/blog/programming/javascript/highlight-javascript-text-higlighting-jquery-plugin.html
|
||||
*
|
||||
* Code a little bit refactored and cleaned (in my humble opinion).
|
||||
* Most important changes:
|
||||
* - has an option to highlight only entire words (wordsOnly - false by default),
|
||||
* - has an option to be case sensitive (caseSensitive - false by default)
|
||||
* - highlight element tag and class names can be specified in options
|
||||
*
|
||||
* Usage:
|
||||
* // wrap every occurrance of text 'lorem' in content
|
||||
* // with <span class='highlight'> (default options)
|
||||
* $('#content').highlight('lorem');
|
||||
*
|
||||
* // search for and highlight more terms at once
|
||||
* // so you can save some time on traversing DOM
|
||||
* $('#content').highlight(['lorem', 'ipsum']);
|
||||
* $('#content').highlight('lorem ipsum');
|
||||
*
|
||||
* // search only for entire word 'lorem'
|
||||
* $('#content').highlight('lorem', { wordsOnly: true });
|
||||
*
|
||||
* // don't ignore case during search of term 'lorem'
|
||||
* $('#content').highlight('lorem', { caseSensitive: true });
|
||||
*
|
||||
* // wrap every occurrance of term 'ipsum' in content
|
||||
* // with <em class='important'>
|
||||
* $('#content').highlight('ipsum', { element: 'em', className: 'important' });
|
||||
*
|
||||
* // remove default highlight
|
||||
* $('#content').unhighlight();
|
||||
*
|
||||
* // remove custom highlight
|
||||
* $('#content').unhighlight({ element: 'em', className: 'important' });
|
||||
*
|
||||
*
|
||||
* Copyright (c) 2009 Bartek Szopka
|
||||
*
|
||||
* Licensed under MIT license.
|
||||
*
|
||||
*/
|
||||
|
||||
jQuery.extend({
|
||||
highlight: function (node, re, nodeName, className) {
|
||||
if (node.nodeType === 3) {
|
||||
var match = node.data.match(re);
|
||||
if (match) {
|
||||
var highlight = document.createElement(nodeName || 'span');
|
||||
highlight.className = className || 'highlight';
|
||||
var wordNode = node.splitText(match.index);
|
||||
wordNode.splitText(match[0].length);
|
||||
var wordClone = wordNode.cloneNode(true);
|
||||
highlight.appendChild(wordClone);
|
||||
wordNode.parentNode.replaceChild(highlight, wordNode);
|
||||
return 1; //skip added node in parent
|
||||
}
|
||||
} else if ((node.nodeType === 1 && node.childNodes) && // only element nodes that have children
|
||||
!/(script|style)/i.test(node.tagName) && // ignore script and style nodes
|
||||
!(node.tagName === nodeName.toUpperCase() && node.className === className)) { // skip if already highlighted
|
||||
for (var i = 0; i < node.childNodes.length; i++) {
|
||||
i += jQuery.highlight(node.childNodes[i], re, nodeName, className);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
});
|
||||
|
||||
jQuery.fn.unhighlight = function (options) {
|
||||
var settings = { className: 'highlight', element: 'span' };
|
||||
jQuery.extend(settings, options);
|
||||
|
||||
return this.find(settings.element + "." + settings.className).each(function () {
|
||||
var parent = this.parentNode;
|
||||
parent.replaceChild(this.firstChild, this);
|
||||
parent.normalize();
|
||||
}).end();
|
||||
};
|
||||
|
||||
jQuery.fn.highlight = function (words, options) {
|
||||
var settings = { className: 'highlight', element: 'span', caseSensitive: false, wordsOnly: false };
|
||||
jQuery.extend(settings, options);
|
||||
|
||||
if (words.constructor === String) {
|
||||
words = [words];
|
||||
}
|
||||
words = jQuery.grep(words, function(word, i){
|
||||
return word != '';
|
||||
});
|
||||
words = jQuery.map(words, function(word, i) {
|
||||
return word.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
|
||||
});
|
||||
if (words.length == 0) { return this; };
|
||||
|
||||
var flag = settings.caseSensitive ? "" : "i";
|
||||
var pattern = "(" + words.join("|") + ")";
|
||||
if (settings.wordsOnly) {
|
||||
pattern = "\\b" + pattern + "\\b";
|
||||
}
|
||||
var re = new RegExp(pattern, flag);
|
||||
|
||||
return this.each(function () {
|
||||
jQuery.highlight(this, re, settings.element, settings.className);
|
||||
});
|
||||
};
|
||||
|
||||
|
|
@ -0,0 +1,566 @@
|
|||
/*! jQuery UI - v1.11.3 - 2015-02-12
|
||||
* http://jqueryui.com
|
||||
* Includes: widget.js
|
||||
* Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */
|
||||
|
||||
(function( factory ) {
|
||||
if ( typeof define === "function" && define.amd ) {
|
||||
|
||||
// AMD. Register as an anonymous module.
|
||||
define([ "jquery" ], factory );
|
||||
} else {
|
||||
|
||||
// Browser globals
|
||||
factory( jQuery );
|
||||
}
|
||||
}(function( $ ) {
|
||||
/*!
|
||||
* jQuery UI Widget 1.11.3
|
||||
* http://jqueryui.com
|
||||
*
|
||||
* Copyright jQuery Foundation and other contributors
|
||||
* Released under the MIT license.
|
||||
* http://jquery.org/license
|
||||
*
|
||||
* http://api.jqueryui.com/jQuery.widget/
|
||||
*/
|
||||
|
||||
|
||||
var widget_uuid = 0,
|
||||
widget_slice = Array.prototype.slice;
|
||||
|
||||
$.cleanData = (function( orig ) {
|
||||
return function( elems ) {
|
||||
var events, elem, i;
|
||||
for ( i = 0; (elem = elems[i]) != null; i++ ) {
|
||||
try {
|
||||
|
||||
// Only trigger remove when necessary to save time
|
||||
events = $._data( elem, "events" );
|
||||
if ( events && events.remove ) {
|
||||
$( elem ).triggerHandler( "remove" );
|
||||
}
|
||||
|
||||
// http://bugs.jquery.com/ticket/8235
|
||||
} catch ( e ) {}
|
||||
}
|
||||
orig( elems );
|
||||
};
|
||||
})( $.cleanData );
|
||||
|
||||
$.widget = function( name, base, prototype ) {
|
||||
var fullName, existingConstructor, constructor, basePrototype,
|
||||
// proxiedPrototype allows the provided prototype to remain unmodified
|
||||
// so that it can be used as a mixin for multiple widgets (#8876)
|
||||
proxiedPrototype = {},
|
||||
namespace = name.split( "." )[ 0 ];
|
||||
|
||||
name = name.split( "." )[ 1 ];
|
||||
fullName = namespace + "-" + name;
|
||||
|
||||
if ( !prototype ) {
|
||||
prototype = base;
|
||||
base = $.Widget;
|
||||
}
|
||||
|
||||
// create selector for plugin
|
||||
$.expr[ ":" ][ fullName.toLowerCase() ] = function( elem ) {
|
||||
return !!$.data( elem, fullName );
|
||||
};
|
||||
|
||||
$[ namespace ] = $[ namespace ] || {};
|
||||
existingConstructor = $[ namespace ][ name ];
|
||||
constructor = $[ namespace ][ name ] = function( options, element ) {
|
||||
// allow instantiation without "new" keyword
|
||||
if ( !this._createWidget ) {
|
||||
return new constructor( options, element );
|
||||
}
|
||||
|
||||
// allow instantiation without initializing for simple inheritance
|
||||
// must use "new" keyword (the code above always passes args)
|
||||
if ( arguments.length ) {
|
||||
this._createWidget( options, element );
|
||||
}
|
||||
};
|
||||
// extend with the existing constructor to carry over any static properties
|
||||
$.extend( constructor, existingConstructor, {
|
||||
version: prototype.version,
|
||||
// copy the object used to create the prototype in case we need to
|
||||
// redefine the widget later
|
||||
_proto: $.extend( {}, prototype ),
|
||||
// track widgets that inherit from this widget in case this widget is
|
||||
// redefined after a widget inherits from it
|
||||
_childConstructors: []
|
||||
});
|
||||
|
||||
basePrototype = new base();
|
||||
// we need to make the options hash a property directly on the new instance
|
||||
// otherwise we'll modify the options hash on the prototype that we're
|
||||
// inheriting from
|
||||
basePrototype.options = $.widget.extend( {}, basePrototype.options );
|
||||
$.each( prototype, function( prop, value ) {
|
||||
if ( !$.isFunction( value ) ) {
|
||||
proxiedPrototype[ prop ] = value;
|
||||
return;
|
||||
}
|
||||
proxiedPrototype[ prop ] = (function() {
|
||||
var _super = function() {
|
||||
return base.prototype[ prop ].apply( this, arguments );
|
||||
},
|
||||
_superApply = function( args ) {
|
||||
return base.prototype[ prop ].apply( this, args );
|
||||
};
|
||||
return function() {
|
||||
var __super = this._super,
|
||||
__superApply = this._superApply,
|
||||
returnValue;
|
||||
|
||||
this._super = _super;
|
||||
this._superApply = _superApply;
|
||||
|
||||
returnValue = value.apply( this, arguments );
|
||||
|
||||
this._super = __super;
|
||||
this._superApply = __superApply;
|
||||
|
||||
return returnValue;
|
||||
};
|
||||
})();
|
||||
});
|
||||
constructor.prototype = $.widget.extend( basePrototype, {
|
||||
// TODO: remove support for widgetEventPrefix
|
||||
// always use the name + a colon as the prefix, e.g., draggable:start
|
||||
// don't prefix for widgets that aren't DOM-based
|
||||
widgetEventPrefix: existingConstructor ? (basePrototype.widgetEventPrefix || name) : name
|
||||
}, proxiedPrototype, {
|
||||
constructor: constructor,
|
||||
namespace: namespace,
|
||||
widgetName: name,
|
||||
widgetFullName: fullName
|
||||
});
|
||||
|
||||
// If this widget is being redefined then we need to find all widgets that
|
||||
// are inheriting from it and redefine all of them so that they inherit from
|
||||
// the new version of this widget. We're essentially trying to replace one
|
||||
// level in the prototype chain.
|
||||
if ( existingConstructor ) {
|
||||
$.each( existingConstructor._childConstructors, function( i, child ) {
|
||||
var childPrototype = child.prototype;
|
||||
|
||||
// redefine the child widget using the same prototype that was
|
||||
// originally used, but inherit from the new version of the base
|
||||
$.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor, child._proto );
|
||||
});
|
||||
// remove the list of existing child constructors from the old constructor
|
||||
// so the old child constructors can be garbage collected
|
||||
delete existingConstructor._childConstructors;
|
||||
} else {
|
||||
base._childConstructors.push( constructor );
|
||||
}
|
||||
|
||||
$.widget.bridge( name, constructor );
|
||||
|
||||
return constructor;
|
||||
};
|
||||
|
||||
$.widget.extend = function( target ) {
|
||||
var input = widget_slice.call( arguments, 1 ),
|
||||
inputIndex = 0,
|
||||
inputLength = input.length,
|
||||
key,
|
||||
value;
|
||||
for ( ; inputIndex < inputLength; inputIndex++ ) {
|
||||
for ( key in input[ inputIndex ] ) {
|
||||
value = input[ inputIndex ][ key ];
|
||||
if ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) {
|
||||
// Clone objects
|
||||
if ( $.isPlainObject( value ) ) {
|
||||
target[ key ] = $.isPlainObject( target[ key ] ) ?
|
||||
$.widget.extend( {}, target[ key ], value ) :
|
||||
// Don't extend strings, arrays, etc. with objects
|
||||
$.widget.extend( {}, value );
|
||||
// Copy everything else by reference
|
||||
} else {
|
||||
target[ key ] = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return target;
|
||||
};
|
||||
|
||||
$.widget.bridge = function( name, object ) {
|
||||
var fullName = object.prototype.widgetFullName || name;
|
||||
$.fn[ name ] = function( options ) {
|
||||
var isMethodCall = typeof options === "string",
|
||||
args = widget_slice.call( arguments, 1 ),
|
||||
returnValue = this;
|
||||
|
||||
if ( isMethodCall ) {
|
||||
this.each(function() {
|
||||
var methodValue,
|
||||
instance = $.data( this, fullName );
|
||||
if ( options === "instance" ) {
|
||||
returnValue = instance;
|
||||
return false;
|
||||
}
|
||||
if ( !instance ) {
|
||||
return $.error( "cannot call methods on " + name + " prior to initialization; " +
|
||||
"attempted to call method '" + options + "'" );
|
||||
}
|
||||
if ( !$.isFunction( instance[options] ) || options.charAt( 0 ) === "_" ) {
|
||||
return $.error( "no such method '" + options + "' for " + name + " widget instance" );
|
||||
}
|
||||
methodValue = instance[ options ].apply( instance, args );
|
||||
if ( methodValue !== instance && methodValue !== undefined ) {
|
||||
returnValue = methodValue && methodValue.jquery ?
|
||||
returnValue.pushStack( methodValue.get() ) :
|
||||
methodValue;
|
||||
return false;
|
||||
}
|
||||
});
|
||||
} else {
|
||||
|
||||
// Allow multiple hashes to be passed on init
|
||||
if ( args.length ) {
|
||||
options = $.widget.extend.apply( null, [ options ].concat(args) );
|
||||
}
|
||||
|
||||
this.each(function() {
|
||||
var instance = $.data( this, fullName );
|
||||
if ( instance ) {
|
||||
instance.option( options || {} );
|
||||
if ( instance._init ) {
|
||||
instance._init();
|
||||
}
|
||||
} else {
|
||||
$.data( this, fullName, new object( options, this ) );
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
return returnValue;
|
||||
};
|
||||
};
|
||||
|
||||
$.Widget = function( /* options, element */ ) {};
|
||||
$.Widget._childConstructors = [];
|
||||
|
||||
$.Widget.prototype = {
|
||||
widgetName: "widget",
|
||||
widgetEventPrefix: "",
|
||||
defaultElement: "<div>",
|
||||
options: {
|
||||
disabled: false,
|
||||
|
||||
// callbacks
|
||||
create: null
|
||||
},
|
||||
_createWidget: function( options, element ) {
|
||||
element = $( element || this.defaultElement || this )[ 0 ];
|
||||
this.element = $( element );
|
||||
this.uuid = widget_uuid++;
|
||||
this.eventNamespace = "." + this.widgetName + this.uuid;
|
||||
|
||||
this.bindings = $();
|
||||
this.hoverable = $();
|
||||
this.focusable = $();
|
||||
|
||||
if ( element !== this ) {
|
||||
$.data( element, this.widgetFullName, this );
|
||||
this._on( true, this.element, {
|
||||
remove: function( event ) {
|
||||
if ( event.target === element ) {
|
||||
this.destroy();
|
||||
}
|
||||
}
|
||||
});
|
||||
this.document = $( element.style ?
|
||||
// element within the document
|
||||
element.ownerDocument :
|
||||
// element is window or document
|
||||
element.document || element );
|
||||
this.window = $( this.document[0].defaultView || this.document[0].parentWindow );
|
||||
}
|
||||
|
||||
this.options = $.widget.extend( {},
|
||||
this.options,
|
||||
this._getCreateOptions(),
|
||||
options );
|
||||
|
||||
this._create();
|
||||
this._trigger( "create", null, this._getCreateEventData() );
|
||||
this._init();
|
||||
},
|
||||
_getCreateOptions: $.noop,
|
||||
_getCreateEventData: $.noop,
|
||||
_create: $.noop,
|
||||
_init: $.noop,
|
||||
|
||||
destroy: function() {
|
||||
this._destroy();
|
||||
// we can probably remove the unbind calls in 2.0
|
||||
// all event bindings should go through this._on()
|
||||
this.element
|
||||
.unbind( this.eventNamespace )
|
||||
.removeData( this.widgetFullName )
|
||||
// support: jquery <1.6.3
|
||||
// http://bugs.jquery.com/ticket/9413
|
||||
.removeData( $.camelCase( this.widgetFullName ) );
|
||||
this.widget()
|
||||
.unbind( this.eventNamespace )
|
||||
.removeAttr( "aria-disabled" )
|
||||
.removeClass(
|
||||
this.widgetFullName + "-disabled " +
|
||||
"ui-state-disabled" );
|
||||
|
||||
// clean up events and states
|
||||
this.bindings.unbind( this.eventNamespace );
|
||||
this.hoverable.removeClass( "ui-state-hover" );
|
||||
this.focusable.removeClass( "ui-state-focus" );
|
||||
},
|
||||
_destroy: $.noop,
|
||||
|
||||
widget: function() {
|
||||
return this.element;
|
||||
},
|
||||
|
||||
option: function( key, value ) {
|
||||
var options = key,
|
||||
parts,
|
||||
curOption,
|
||||
i;
|
||||
|
||||
if ( arguments.length === 0 ) {
|
||||
// don't return a reference to the internal hash
|
||||
return $.widget.extend( {}, this.options );
|
||||
}
|
||||
|
||||
if ( typeof key === "string" ) {
|
||||
// handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } }
|
||||
options = {};
|
||||
parts = key.split( "." );
|
||||
key = parts.shift();
|
||||
if ( parts.length ) {
|
||||
curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );
|
||||
for ( i = 0; i < parts.length - 1; i++ ) {
|
||||
curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};
|
||||
curOption = curOption[ parts[ i ] ];
|
||||
}
|
||||
key = parts.pop();
|
||||
if ( arguments.length === 1 ) {
|
||||
return curOption[ key ] === undefined ? null : curOption[ key ];
|
||||
}
|
||||
curOption[ key ] = value;
|
||||
} else {
|
||||
if ( arguments.length === 1 ) {
|
||||
return this.options[ key ] === undefined ? null : this.options[ key ];
|
||||
}
|
||||
options[ key ] = value;
|
||||
}
|
||||
}
|
||||
|
||||
this._setOptions( options );
|
||||
|
||||
return this;
|
||||
},
|
||||
_setOptions: function( options ) {
|
||||
var key;
|
||||
|
||||
for ( key in options ) {
|
||||
this._setOption( key, options[ key ] );
|
||||
}
|
||||
|
||||
return this;
|
||||
},
|
||||
_setOption: function( key, value ) {
|
||||
this.options[ key ] = value;
|
||||
|
||||
if ( key === "disabled" ) {
|
||||
this.widget()
|
||||
.toggleClass( this.widgetFullName + "-disabled", !!value );
|
||||
|
||||
// If the widget is becoming disabled, then nothing is interactive
|
||||
if ( value ) {
|
||||
this.hoverable.removeClass( "ui-state-hover" );
|
||||
this.focusable.removeClass( "ui-state-focus" );
|
||||
}
|
||||
}
|
||||
|
||||
return this;
|
||||
},
|
||||
|
||||
enable: function() {
|
||||
return this._setOptions({ disabled: false });
|
||||
},
|
||||
disable: function() {
|
||||
return this._setOptions({ disabled: true });
|
||||
},
|
||||
|
||||
_on: function( suppressDisabledCheck, element, handlers ) {
|
||||
var delegateElement,
|
||||
instance = this;
|
||||
|
||||
// no suppressDisabledCheck flag, shuffle arguments
|
||||
if ( typeof suppressDisabledCheck !== "boolean" ) {
|
||||
handlers = element;
|
||||
element = suppressDisabledCheck;
|
||||
suppressDisabledCheck = false;
|
||||
}
|
||||
|
||||
// no element argument, shuffle and use this.element
|
||||
if ( !handlers ) {
|
||||
handlers = element;
|
||||
element = this.element;
|
||||
delegateElement = this.widget();
|
||||
} else {
|
||||
element = delegateElement = $( element );
|
||||
this.bindings = this.bindings.add( element );
|
||||
}
|
||||
|
||||
$.each( handlers, function( event, handler ) {
|
||||
function handlerProxy() {
|
||||
// allow widgets to customize the disabled handling
|
||||
// - disabled as an array instead of boolean
|
||||
// - disabled class as method for disabling individual parts
|
||||
if ( !suppressDisabledCheck &&
|
||||
( instance.options.disabled === true ||
|
||||
$( this ).hasClass( "ui-state-disabled" ) ) ) {
|
||||
return;
|
||||
}
|
||||
return ( typeof handler === "string" ? instance[ handler ] : handler )
|
||||
.apply( instance, arguments );
|
||||
}
|
||||
|
||||
// copy the guid so direct unbinding works
|
||||
if ( typeof handler !== "string" ) {
|
||||
handlerProxy.guid = handler.guid =
|
||||
handler.guid || handlerProxy.guid || $.guid++;
|
||||
}
|
||||
|
||||
var match = event.match( /^([\w:-]*)\s*(.*)$/ ),
|
||||
eventName = match[1] + instance.eventNamespace,
|
||||
selector = match[2];
|
||||
if ( selector ) {
|
||||
delegateElement.delegate( selector, eventName, handlerProxy );
|
||||
} else {
|
||||
element.bind( eventName, handlerProxy );
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
_off: function( element, eventName ) {
|
||||
eventName = (eventName || "").split( " " ).join( this.eventNamespace + " " ) +
|
||||
this.eventNamespace;
|
||||
element.unbind( eventName ).undelegate( eventName );
|
||||
|
||||
// Clear the stack to avoid memory leaks (#10056)
|
||||
this.bindings = $( this.bindings.not( element ).get() );
|
||||
this.focusable = $( this.focusable.not( element ).get() );
|
||||
this.hoverable = $( this.hoverable.not( element ).get() );
|
||||
},
|
||||
|
||||
_delay: function( handler, delay ) {
|
||||
function handlerProxy() {
|
||||
return ( typeof handler === "string" ? instance[ handler ] : handler )
|
||||
.apply( instance, arguments );
|
||||
}
|
||||
var instance = this;
|
||||
return setTimeout( handlerProxy, delay || 0 );
|
||||
},
|
||||
|
||||
_hoverable: function( element ) {
|
||||
this.hoverable = this.hoverable.add( element );
|
||||
this._on( element, {
|
||||
mouseenter: function( event ) {
|
||||
$( event.currentTarget ).addClass( "ui-state-hover" );
|
||||
},
|
||||
mouseleave: function( event ) {
|
||||
$( event.currentTarget ).removeClass( "ui-state-hover" );
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
_focusable: function( element ) {
|
||||
this.focusable = this.focusable.add( element );
|
||||
this._on( element, {
|
||||
focusin: function( event ) {
|
||||
$( event.currentTarget ).addClass( "ui-state-focus" );
|
||||
},
|
||||
focusout: function( event ) {
|
||||
$( event.currentTarget ).removeClass( "ui-state-focus" );
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
_trigger: function( type, event, data ) {
|
||||
var prop, orig,
|
||||
callback = this.options[ type ];
|
||||
|
||||
data = data || {};
|
||||
event = $.Event( event );
|
||||
event.type = ( type === this.widgetEventPrefix ?
|
||||
type :
|
||||
this.widgetEventPrefix + type ).toLowerCase();
|
||||
// the original event may come from any element
|
||||
// so we need to reset the target on the new event
|
||||
event.target = this.element[ 0 ];
|
||||
|
||||
// copy original event properties over to the new event
|
||||
orig = event.originalEvent;
|
||||
if ( orig ) {
|
||||
for ( prop in orig ) {
|
||||
if ( !( prop in event ) ) {
|
||||
event[ prop ] = orig[ prop ];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
this.element.trigger( event, data );
|
||||
return !( $.isFunction( callback ) &&
|
||||
callback.apply( this.element[0], [ event ].concat( data ) ) === false ||
|
||||
event.isDefaultPrevented() );
|
||||
}
|
||||
};
|
||||
|
||||
$.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) {
|
||||
$.Widget.prototype[ "_" + method ] = function( element, options, callback ) {
|
||||
if ( typeof options === "string" ) {
|
||||
options = { effect: options };
|
||||
}
|
||||
var hasOptions,
|
||||
effectName = !options ?
|
||||
method :
|
||||
options === true || typeof options === "number" ?
|
||||
defaultEffect :
|
||||
options.effect || defaultEffect;
|
||||
options = options || {};
|
||||
if ( typeof options === "number" ) {
|
||||
options = { duration: options };
|
||||
}
|
||||
hasOptions = !$.isEmptyObject( options );
|
||||
options.complete = callback;
|
||||
if ( options.delay ) {
|
||||
element.delay( options.delay );
|
||||
}
|
||||
if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {
|
||||
element[ method ]( options );
|
||||
} else if ( effectName !== method && element[ effectName ] ) {
|
||||
element[ effectName ]( options.duration, options.easing, callback );
|
||||
} else {
|
||||
element.queue(function( next ) {
|
||||
$( this )[ method ]();
|
||||
if ( callback ) {
|
||||
callback.call( element[ 0 ] );
|
||||
}
|
||||
next();
|
||||
});
|
||||
}
|
||||
};
|
||||
});
|
||||
|
||||
var widget = $.widget;
|
||||
|
||||
|
||||
|
||||
}));
|
||||
|
|
@ -0,0 +1,117 @@
|
|||
<%#
|
||||
Copyright 2008-2013 Concur Technologies, Inc.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
not use this file except in compliance with the License. You may obtain
|
||||
a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
License for the specific language governing permissions and limitations
|
||||
under the License.
|
||||
%>
|
||||
<% language_tabs = current_page.data.language_tabs %>
|
||||
<!doctype html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||
<title><%= current_page.data.title || "API Documentation" %></title>
|
||||
|
||||
<%= stylesheet_link_tag :screen, media: :screen %>
|
||||
<%= stylesheet_link_tag :print, media: :print %>
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
|
||||
<% if current_page.data.search %>
|
||||
<%= javascript_include_tag "all" %>
|
||||
<% else %>
|
||||
<%= javascript_include_tag "all_nosearch" %>
|
||||
<% end %>
|
||||
|
||||
<% if language_tabs %>
|
||||
<script>
|
||||
$(function() {
|
||||
setupLanguages(<%= language_tabs.map{ |lang| lang.is_a?(Hash) ? lang.keys.first : lang }.to_json %>);
|
||||
});
|
||||
</script>
|
||||
<% end %>
|
||||
</head>
|
||||
|
||||
<body class="<%= page_classes %>">
|
||||
<a href="#" id="nav-button">
|
||||
<span>
|
||||
NAV
|
||||
<%= image_tag('navbar.png') %>
|
||||
</span>
|
||||
</a>
|
||||
<div class="tocify-wrapper">
|
||||
<%= image_tag "logo.png" %>
|
||||
<% if language_tabs %>
|
||||
<div class="lang-selector">
|
||||
<% language_tabs.each do |lang| %>
|
||||
<% if lang.is_a? Hash %>
|
||||
<a href="#" data-language-name="<%= lang.keys.first %>"><%= lang.values.first %></a>
|
||||
<% else %>
|
||||
<a href="#" data-language-name="<%= lang %>"><%= lang %></a>
|
||||
<% end %>
|
||||
<% end %>
|
||||
</div>
|
||||
<% end %>
|
||||
<% if current_page.data.search %>
|
||||
<div class="search">
|
||||
<input type="text" class="search" id="input-search" placeholder="Search">
|
||||
</div>
|
||||
<ul class="search-results"></ul>
|
||||
<% end %>
|
||||
<div id="toc">
|
||||
</div>
|
||||
<% if current_page.data.toc_footers %>
|
||||
<ul class="toc-footer">
|
||||
<% current_page.data.toc_footers.each do |footer| %>
|
||||
<li><%= footer %></li>
|
||||
<% end %>
|
||||
</ul>
|
||||
<% end %>
|
||||
</div>
|
||||
<div class="page-wrapper">
|
||||
<div class="dark-box"></div>
|
||||
<div class="content">
|
||||
<%= yield %>
|
||||
<% current_page.data.includes && current_page.data.includes.each do |include| %>
|
||||
<%= partial "includes/#{include}" %>
|
||||
<% end %>
|
||||
</div>
|
||||
<div class="dark-box">
|
||||
<% if language_tabs %>
|
||||
<div class="lang-selector">
|
||||
<% language_tabs.each do |lang| %>
|
||||
<% if lang.is_a? Hash %>
|
||||
<a href="#" data-language-name="<%= lang.keys.first %>"><%= lang.values.first %></a>
|
||||
<% else %>
|
||||
<a href="#" data-language-name="<%= lang %>"><%= lang %></a>
|
||||
<% end %>
|
||||
<% end %>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
<div class="google-analytics">
|
||||
<!-- Google Tag Manager -->
|
||||
<noscript>
|
||||
<iframe src="//www.googletagmanager.com/ns.html?id=GTM-WLGFZV"
|
||||
height="0" width="0" style="display:none;visibility:hidden"></iframe>
|
||||
</noscript>
|
||||
<script>
|
||||
(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
|
||||
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
|
||||
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
|
||||
'//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
|
||||
})(window,document,'script','dataLayer','GTM-WLGFZV');
|
||||
</script>
|
||||
<!-- End Google Tag Manager -->
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
@font-face {
|
||||
font-family: 'slate';
|
||||
src:font-url('slate.eot?-syv14m');
|
||||
src:font-url('slate.eot?#iefix-syv14m') format('embedded-opentype'),
|
||||
font-url('slate.woff2?-syv14m') format('woff2'),
|
||||
font-url('slate.woff?-syv14m') format('woff'),
|
||||
font-url('slate.ttf?-syv14m') format('truetype'),
|
||||
font-url('slate.svg?-syv14m#slate') format('svg');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
%icon {
|
||||
font-family: 'slate';
|
||||
speak: none;
|
||||
font-style: normal;
|
||||
font-weight: normal;
|
||||
font-variant: normal;
|
||||
text-transform: none;
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
%icon-exclamation-sign {
|
||||
@extend %icon;
|
||||
content: "\e600";
|
||||
}
|
||||
%icon-info-sign {
|
||||
@extend %icon;
|
||||
content: "\e602";
|
||||
}
|
||||
%icon-ok-sign {
|
||||
@extend %icon;
|
||||
content: "\e606";
|
||||
}
|
||||
%icon-search {
|
||||
@extend %icon;
|
||||
content: "\e607";
|
||||
}
|
||||
|
|
@ -0,0 +1,427 @@
|
|||
/*! normalize.css v3.0.2 | MIT License | git.io/normalize */
|
||||
|
||||
/**
|
||||
* 1. Set default font family to sans-serif.
|
||||
* 2. Prevent iOS text size adjust after orientation change, without disabling
|
||||
* user zoom.
|
||||
*/
|
||||
|
||||
html {
|
||||
font-family: sans-serif; /* 1 */
|
||||
-ms-text-size-adjust: 100%; /* 2 */
|
||||
-webkit-text-size-adjust: 100%; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove default margin.
|
||||
*/
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
/* HTML5 display definitions
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Correct `block` display not defined for any HTML5 element in IE 8/9.
|
||||
* Correct `block` display not defined for `details` or `summary` in IE 10/11
|
||||
* and Firefox.
|
||||
* Correct `block` display not defined for `main` in IE 11.
|
||||
*/
|
||||
|
||||
article,
|
||||
aside,
|
||||
details,
|
||||
figcaption,
|
||||
figure,
|
||||
footer,
|
||||
header,
|
||||
hgroup,
|
||||
main,
|
||||
menu,
|
||||
nav,
|
||||
section,
|
||||
summary {
|
||||
display: block;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Correct `inline-block` display not defined in IE 8/9.
|
||||
* 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
|
||||
*/
|
||||
|
||||
audio,
|
||||
canvas,
|
||||
progress,
|
||||
video {
|
||||
display: inline-block; /* 1 */
|
||||
vertical-align: baseline; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Prevent modern browsers from displaying `audio` without controls.
|
||||
* Remove excess height in iOS 5 devices.
|
||||
*/
|
||||
|
||||
audio:not([controls]) {
|
||||
display: none;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address `[hidden]` styling not present in IE 8/9/10.
|
||||
* Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.
|
||||
*/
|
||||
|
||||
[hidden],
|
||||
template {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* Links
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Remove the gray background color from active links in IE 10.
|
||||
*/
|
||||
|
||||
a {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
/**
|
||||
* Improve readability when focused and also mouse hovered in all browsers.
|
||||
*/
|
||||
|
||||
a:active,
|
||||
a:hover {
|
||||
outline: 0;
|
||||
}
|
||||
|
||||
/* Text-level semantics
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Address styling not present in IE 8/9/10/11, Safari, and Chrome.
|
||||
*/
|
||||
|
||||
abbr[title] {
|
||||
border-bottom: 1px dotted;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
|
||||
*/
|
||||
|
||||
b,
|
||||
strong {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address styling not present in Safari and Chrome.
|
||||
*/
|
||||
|
||||
dfn {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address variable `h1` font-size and margin within `section` and `article`
|
||||
* contexts in Firefox 4+, Safari, and Chrome.
|
||||
*/
|
||||
|
||||
h1 {
|
||||
font-size: 2em;
|
||||
margin: 0.67em 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address styling not present in IE 8/9.
|
||||
*/
|
||||
|
||||
mark {
|
||||
background: #ff0;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address inconsistent and variable font size in all browsers.
|
||||
*/
|
||||
|
||||
small {
|
||||
font-size: 80%;
|
||||
}
|
||||
|
||||
/**
|
||||
* Prevent `sub` and `sup` affecting `line-height` in all browsers.
|
||||
*/
|
||||
|
||||
sub,
|
||||
sup {
|
||||
font-size: 75%;
|
||||
line-height: 0;
|
||||
position: relative;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
sup {
|
||||
top: -0.5em;
|
||||
}
|
||||
|
||||
sub {
|
||||
bottom: -0.25em;
|
||||
}
|
||||
|
||||
/* Embedded content
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Remove border when inside `a` element in IE 8/9/10.
|
||||
*/
|
||||
|
||||
img {
|
||||
border: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Correct overflow not hidden in IE 9/10/11.
|
||||
*/
|
||||
|
||||
svg:not(:root) {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/* Grouping content
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Address margin not present in IE 8/9 and Safari.
|
||||
*/
|
||||
|
||||
figure {
|
||||
margin: 1em 40px;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address differences between Firefox and other browsers.
|
||||
*/
|
||||
|
||||
hr {
|
||||
-moz-box-sizing: content-box;
|
||||
box-sizing: content-box;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Contain overflow in all browsers.
|
||||
*/
|
||||
|
||||
pre {
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address odd `em`-unit font size rendering in all browsers.
|
||||
*/
|
||||
|
||||
code,
|
||||
kbd,
|
||||
pre,
|
||||
samp {
|
||||
font-family: monospace, monospace;
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
/* Forms
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Known limitation: by default, Chrome and Safari on OS X allow very limited
|
||||
* styling of `select`, unless a `border` property is set.
|
||||
*/
|
||||
|
||||
/**
|
||||
* 1. Correct color not being inherited.
|
||||
* Known issue: affects color of disabled elements.
|
||||
* 2. Correct font properties not being inherited.
|
||||
* 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
|
||||
*/
|
||||
|
||||
button,
|
||||
input,
|
||||
optgroup,
|
||||
select,
|
||||
textarea {
|
||||
color: inherit; /* 1 */
|
||||
font: inherit; /* 2 */
|
||||
margin: 0; /* 3 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Address `overflow` set to `hidden` in IE 8/9/10/11.
|
||||
*/
|
||||
|
||||
button {
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address inconsistent `text-transform` inheritance for `button` and `select`.
|
||||
* All other form control elements do not inherit `text-transform` values.
|
||||
* Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
|
||||
* Correct `select` style inheritance in Firefox.
|
||||
*/
|
||||
|
||||
button,
|
||||
select {
|
||||
text-transform: none;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
|
||||
* and `video` controls.
|
||||
* 2. Correct inability to style clickable `input` types in iOS.
|
||||
* 3. Improve usability and consistency of cursor style between image-type
|
||||
* `input` and others.
|
||||
*/
|
||||
|
||||
button,
|
||||
html input[type="button"], /* 1 */
|
||||
input[type="reset"],
|
||||
input[type="submit"] {
|
||||
-webkit-appearance: button; /* 2 */
|
||||
cursor: pointer; /* 3 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Re-set default cursor for disabled elements.
|
||||
*/
|
||||
|
||||
button[disabled],
|
||||
html input[disabled] {
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove inner padding and border in Firefox 4+.
|
||||
*/
|
||||
|
||||
button::-moz-focus-inner,
|
||||
input::-moz-focus-inner {
|
||||
border: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address Firefox 4+ setting `line-height` on `input` using `!important` in
|
||||
* the UA stylesheet.
|
||||
*/
|
||||
|
||||
input {
|
||||
line-height: normal;
|
||||
}
|
||||
|
||||
/**
|
||||
* It's recommended that you don't attempt to style these elements.
|
||||
* Firefox's implementation doesn't respect box-sizing, padding, or width.
|
||||
*
|
||||
* 1. Address box sizing set to `content-box` in IE 8/9/10.
|
||||
* 2. Remove excess padding in IE 8/9/10.
|
||||
*/
|
||||
|
||||
input[type="checkbox"],
|
||||
input[type="radio"] {
|
||||
box-sizing: border-box; /* 1 */
|
||||
padding: 0; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Fix the cursor style for Chrome's increment/decrement buttons. For certain
|
||||
* `font-size` values of the `input`, it causes the cursor style of the
|
||||
* decrement button to change from `default` to `text`.
|
||||
*/
|
||||
|
||||
input[type="number"]::-webkit-inner-spin-button,
|
||||
input[type="number"]::-webkit-outer-spin-button {
|
||||
height: auto;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Address `appearance` set to `searchfield` in Safari and Chrome.
|
||||
* 2. Address `box-sizing` set to `border-box` in Safari and Chrome
|
||||
* (include `-moz` to future-proof).
|
||||
*/
|
||||
|
||||
input[type="search"] {
|
||||
-webkit-appearance: textfield; /* 1 */
|
||||
-moz-box-sizing: content-box;
|
||||
-webkit-box-sizing: content-box; /* 2 */
|
||||
box-sizing: content-box;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove inner padding and search cancel button in Safari and Chrome on OS X.
|
||||
* Safari (but not Chrome) clips the cancel button when the search input has
|
||||
* padding (and `textfield` appearance).
|
||||
*/
|
||||
|
||||
input[type="search"]::-webkit-search-cancel-button,
|
||||
input[type="search"]::-webkit-search-decoration {
|
||||
-webkit-appearance: none;
|
||||
}
|
||||
|
||||
/**
|
||||
* Define consistent border, margin, and padding.
|
||||
*/
|
||||
|
||||
fieldset {
|
||||
border: 1px solid #c0c0c0;
|
||||
margin: 0 2px;
|
||||
padding: 0.35em 0.625em 0.75em;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Correct `color` not being inherited in IE 8/9/10/11.
|
||||
* 2. Remove padding so people aren't caught out if they zero out fieldsets.
|
||||
*/
|
||||
|
||||
legend {
|
||||
border: 0; /* 1 */
|
||||
padding: 0; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove default vertical scrollbar in IE 8/9/10/11.
|
||||
*/
|
||||
|
||||
textarea {
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
/**
|
||||
* Don't inherit the `font-weight` (applied by a rule above).
|
||||
* NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
|
||||
*/
|
||||
|
||||
optgroup {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* Tables
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Remove most spacing between table cells.
|
||||
*/
|
||||
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
}
|
||||
|
||||
td,
|
||||
th {
|
||||
padding: 0;
|
||||
}
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
/*
|
||||
Copyright 2008-2013 Concur Technologies, Inc.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
not use this file except in compliance with the License. You may obtain
|
||||
a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
License for the specific language governing permissions and limitations
|
||||
under the License.
|
||||
*/
|
||||
|
||||
@import 'variables';
|
||||
|
||||
<%= Rouge::Themes::Base16::Monokai.render(:scope => '.highlight') %>
|
||||
|
||||
.highlight .c, .highlight .cm, .highlight .c1, .highlight .cs {
|
||||
color: #909090;
|
||||
}
|
||||
|
||||
.highlight, .highlight .w {
|
||||
background-color: $code-bg;
|
||||
}
|
||||
|
|
@ -0,0 +1,109 @@
|
|||
/*
|
||||
Copyright 2008-2013 Concur Technologies, Inc.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
not use this file except in compliance with the License. You may obtain
|
||||
a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
License for the specific language governing permissions and limitations
|
||||
under the License.
|
||||
*/
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// CUSTOMIZE SLATE
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Use these settings to help adjust the appearance of Slate
|
||||
|
||||
|
||||
// BACKGROUND COLORS
|
||||
////////////////////
|
||||
$nav-bg: #393939;
|
||||
$examples-bg: #393939;
|
||||
$code-bg: #292929;
|
||||
$code-annotation-bg: #1c1c1c;
|
||||
$nav-subitem-bg: #262626;
|
||||
$nav-active-bg: #2467af;
|
||||
$lang-select-border: #000;
|
||||
$lang-select-bg: #222;
|
||||
$lang-select-active-bg: $examples-bg; // feel free to change this to blue or something
|
||||
$lang-select-pressed-bg: #111; // color of language tab bg when mouse is pressed
|
||||
$main-bg: #eaf2f6;
|
||||
$aside-notice-bg: #8fbcd4;
|
||||
$aside-warning-bg: #c97a7e;
|
||||
$aside-success-bg: #6ac174;
|
||||
$search-notice-bg: #c97a7e;
|
||||
|
||||
|
||||
// TEXT COLORS
|
||||
////////////////////
|
||||
$main-text: #333; // main content text color
|
||||
$nav-text: #fff;
|
||||
$nav-active-text: #fff;
|
||||
$lang-select-text: #fff; // color of unselected language tab text
|
||||
$lang-select-active-text: #fff; // color of selected language tab text
|
||||
$lang-select-pressed-text: #fff; // color of language tab text when mouse is pressed
|
||||
|
||||
|
||||
// SIZES
|
||||
////////////////////
|
||||
$nav-width: 230px; // width of the navbar
|
||||
$examples-width: 50%; // portion of the screen taken up by code examples
|
||||
$logo-margin: 20px; // margin between nav items and logo, ignored if search is active
|
||||
$main-padding: 28px; // padding to left and right of content & examples
|
||||
$nav-padding: 15px; // padding to left and right of navbar
|
||||
$nav-v-padding: 10px; // padding used vertically around search boxes and results
|
||||
$nav-indent: 10px; // extra padding for ToC subitems
|
||||
$code-annotation-padding: 13px; // padding inside code annotations
|
||||
$h1-margin-bottom: 21px; // padding under the largest header tags
|
||||
$tablet-width: 930px; // min width before reverting to tablet size
|
||||
$phone-width: $tablet-width - $nav-width; // min width before reverting to mobile size
|
||||
|
||||
|
||||
// FONTS
|
||||
////////////////////
|
||||
%default-font {
|
||||
font-family: "Helvetica Neue", Helvetica, Arial, "Microsoft Yahei","微软雅黑", STXihei, "华文细黑", sans-serif;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
%header-font {
|
||||
@extend %default-font;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
%code-font {
|
||||
font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, serif;
|
||||
font-size: 12px;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
|
||||
// OTHER
|
||||
////////////////////
|
||||
$nav-active-shadow: #000;
|
||||
$nav-footer-border-color: #666;
|
||||
$nav-embossed-border-top: #000;
|
||||
$nav-embossed-border-bottom: #939393;
|
||||
$main-embossed-text-shadow: 0px 1px 0px #fff;
|
||||
$search-box-border-color: #666;
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// INTERNAL
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// These settings are probably best left alone.
|
||||
|
||||
%break-words {
|
||||
word-break: break-all;
|
||||
|
||||
/* Non standard for webkit */
|
||||
word-break: break-word;
|
||||
|
||||
hyphens: auto;
|
||||
}
|
||||
|
|
@ -0,0 +1,142 @@
|
|||
@charset "utf-8";
|
||||
@import 'normalize';
|
||||
@import 'compass';
|
||||
@import 'variables';
|
||||
@import 'icon-font';
|
||||
|
||||
/*
|
||||
Copyright 2008-2013 Concur Technologies, Inc.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
not use this file except in compliance with the License. You may obtain
|
||||
a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
License for the specific language governing permissions and limitations
|
||||
under the License.
|
||||
*/
|
||||
|
||||
$print-color: #999;
|
||||
$print-color-light: #ccc;
|
||||
$print-font-size: 12px;
|
||||
|
||||
body {
|
||||
@extend %default-font;
|
||||
}
|
||||
|
||||
.tocify, .toc-footer, .lang-selector, .search, #nav-button {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.tocify-wrapper>img {
|
||||
margin: 0 auto;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.content {
|
||||
font-size: 12px;
|
||||
|
||||
pre, code {
|
||||
@extend %code-font;
|
||||
@extend %break-words;
|
||||
border: 1px solid $print-color;
|
||||
border-radius: 5px;
|
||||
font-size: 0.8em;
|
||||
}
|
||||
|
||||
pre {
|
||||
padding: 1.3em;
|
||||
}
|
||||
|
||||
code {
|
||||
padding: 0.2em;
|
||||
}
|
||||
|
||||
table {
|
||||
border: 1px solid $print-color;
|
||||
tr {
|
||||
border-bottom: 1px solid $print-color;
|
||||
}
|
||||
td,th {
|
||||
padding: 0.7em;
|
||||
}
|
||||
}
|
||||
|
||||
p {
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
a {
|
||||
text-decoration: none;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
h1 {
|
||||
@extend %header-font;
|
||||
font-size: 2.5em;
|
||||
padding-top: 0.5em;
|
||||
padding-bottom: 0.5em;
|
||||
margin-top: 1em;
|
||||
margin-bottom: $h1-margin-bottom;
|
||||
border: 2px solid $print-color-light;
|
||||
border-width: 2px 0;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
h2 {
|
||||
@extend %header-font;
|
||||
font-size: 1.8em;
|
||||
margin-top: 2em;
|
||||
border-top: 2px solid $print-color-light;
|
||||
padding-top: 0.8em;
|
||||
}
|
||||
|
||||
h1+h2, h1+div+h2 {
|
||||
border-top: none;
|
||||
padding-top: 0;
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
h3, h4 {
|
||||
@extend %header-font;
|
||||
font-size: 0.8em;
|
||||
margin-top: 1.5em;
|
||||
margin-bottom: 0.8em;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
h5, h6 {
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
aside {
|
||||
padding: 1em;
|
||||
border: 1px solid $print-color-light;
|
||||
border-radius: 5px;
|
||||
margin-top: 1.5em;
|
||||
margin-bottom: 1.5em;
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
aside:before {
|
||||
vertical-align: middle;
|
||||
padding-right: 0.5em;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
aside.notice:before {
|
||||
@extend %icon-info-sign;
|
||||
}
|
||||
|
||||
aside.warning:before {
|
||||
@extend %icon-exclamation-sign;
|
||||
}
|
||||
|
||||
aside.success:before {
|
||||
@extend %icon-ok-sign;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,620 @@
|
|||
@charset "utf-8";
|
||||
@import 'normalize';
|
||||
@import 'compass';
|
||||
@import 'variables';
|
||||
@import 'syntax';
|
||||
@import 'icon-font';
|
||||
|
||||
/*
|
||||
Copyright 2008-2013 Concur Technologies, Inc.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
not use this file except in compliance with the License. You may obtain
|
||||
a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
License for the specific language governing permissions and limitations
|
||||
under the License.
|
||||
*/
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// GENERAL STUFF
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
html, body {
|
||||
color: $main-text;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
@extend %default-font;
|
||||
background-color: $main-bg;
|
||||
height: 100%;
|
||||
-webkit-text-size-adjust: none; /* Never autoresize text */
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// TABLE OF CONTENTS
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#toc > ul > li > a > span {
|
||||
float: right;
|
||||
background-color: #2484FF;
|
||||
border-radius: 40px;
|
||||
width: 20px;
|
||||
}
|
||||
|
||||
@mixin embossed-bg {
|
||||
background:
|
||||
linear-gradient(to bottom, rgba(#000, 0.2), rgba(#000, 0) 8px),
|
||||
linear-gradient(to top, rgba(#000, 0.2), rgba(#000, 0) 8px),
|
||||
linear-gradient(to bottom, rgba($nav-embossed-border-top, 1), rgba($nav-embossed-border-top, 0) 1.5px),
|
||||
linear-gradient(to top, rgba($nav-embossed-border-bottom, 1), rgba($nav-embossed-border-bottom, 0) 1.5px),
|
||||
$nav-subitem-bg;
|
||||
}
|
||||
|
||||
.tocify-wrapper {
|
||||
transition: left 0.3s ease-in-out;
|
||||
|
||||
overflow-y: auto;
|
||||
overflow-x: hidden;
|
||||
position: fixed;
|
||||
z-index: 30;
|
||||
top: 0;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
width: $nav-width;
|
||||
background-color: $nav-bg;
|
||||
font-size: 13px;
|
||||
font-weight: bold;
|
||||
|
||||
// language selector for mobile devices
|
||||
.lang-selector {
|
||||
display: none;
|
||||
a {
|
||||
padding-top: 0.5em;
|
||||
padding-bottom: 0.5em;
|
||||
}
|
||||
}
|
||||
|
||||
// This is the logo at the top of the ToC
|
||||
&>img {
|
||||
display: block;
|
||||
}
|
||||
|
||||
&>.search {
|
||||
position: relative;
|
||||
|
||||
input {
|
||||
background: $nav-bg;
|
||||
border-width: 0 0 1px 0;
|
||||
border-color: $search-box-border-color;
|
||||
padding: 6px 0 6px 20px;
|
||||
box-sizing: border-box;
|
||||
margin: $nav-v-padding $nav-padding;
|
||||
width: $nav-width - 30;
|
||||
outline: none;
|
||||
color: $nav-text;
|
||||
border-radius: 0; /* ios has a default border radius */
|
||||
}
|
||||
|
||||
&:before {
|
||||
position: absolute;
|
||||
top: 17px;
|
||||
left: $nav-padding;
|
||||
color: $nav-text;
|
||||
@extend %icon-search;
|
||||
}
|
||||
}
|
||||
|
||||
img+.tocify {
|
||||
margin-top: $logo-margin;
|
||||
}
|
||||
|
||||
.search-results {
|
||||
margin-top: 0;
|
||||
box-sizing: border-box;
|
||||
height: 0;
|
||||
overflow-y: auto;
|
||||
overflow-x: hidden;
|
||||
transition-property: height, margin;
|
||||
transition-duration: 180ms;
|
||||
transition-timing-function: ease-in-out;
|
||||
&.visible {
|
||||
height: 30%;
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
|
||||
@include embossed-bg;
|
||||
|
||||
li {
|
||||
margin: 1em $nav-padding;
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
a {
|
||||
color: $nav-text;
|
||||
text-decoration: none;
|
||||
|
||||
&:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.tocify-item>a, .toc-footer li {
|
||||
padding: 0 $nav-padding 0 $nav-padding;
|
||||
display: block;
|
||||
overflow-x: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
// The Table of Contents is composed of multiple nested
|
||||
// unordered lists. These styles remove the default
|
||||
// styling of an unordered list because it is ugly.
|
||||
ul, li {
|
||||
list-style: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
line-height: 28px;
|
||||
}
|
||||
|
||||
li {
|
||||
color: $nav-text;
|
||||
transition-property: background;
|
||||
transition-timing-function: linear;
|
||||
transition-duration: 230ms;
|
||||
}
|
||||
|
||||
// This is the currently selected ToC entry
|
||||
.tocify-focus {
|
||||
box-shadow: 0px 1px 0px $nav-active-shadow;
|
||||
background-color: $nav-active-bg;
|
||||
color: $nav-active-text;
|
||||
}
|
||||
|
||||
// Subheaders are the submenus that slide open
|
||||
// in the table of contents.
|
||||
.tocify-subheader {
|
||||
display: none; // tocify will override this when needed
|
||||
background-color: $nav-subitem-bg;
|
||||
font-weight: 500;
|
||||
.tocify-item>a {
|
||||
padding-left: $nav-padding + $nav-indent;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
// for embossed look:
|
||||
@include embossed-bg;
|
||||
&>li:last-child {
|
||||
box-shadow: none; // otherwise it'll overflow out of the subheader
|
||||
}
|
||||
}
|
||||
|
||||
.toc-footer {
|
||||
padding: 1em 0;
|
||||
margin-top: 1em;
|
||||
border-top: 1px dashed $nav-footer-border-color;
|
||||
|
||||
li,a {
|
||||
color: $nav-text;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
li {
|
||||
font-size: 0.8em;
|
||||
line-height: 1.7;
|
||||
text-decoration: none;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// button to show navigation on mobile devices
|
||||
#nav-button {
|
||||
span {
|
||||
display: block;
|
||||
$side-pad: $main-padding / 2 - 8px;
|
||||
padding: $side-pad $side-pad $side-pad;
|
||||
background-color: rgba($main-bg, 0.7);
|
||||
transform-origin: 0 0;
|
||||
transform: rotate(-90deg) translate(-100%, 0);
|
||||
border-radius: 0 0 0 5px;
|
||||
}
|
||||
padding: 0 1.5em 5em 0; // increase touch size area
|
||||
display: none;
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: 100;
|
||||
color: #000;
|
||||
text-decoration: none;
|
||||
font-weight: bold;
|
||||
opacity: 0.7;
|
||||
line-height: 16px;
|
||||
img {
|
||||
height: 16px;
|
||||
vertical-align: bottom;
|
||||
}
|
||||
|
||||
transition: left 0.3s ease-in-out;
|
||||
|
||||
&:hover { opacity: 1; }
|
||||
&.open {left: $nav-width}
|
||||
}
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// PAGE LAYOUT AND CODE SAMPLE BACKGROUND
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
.page-wrapper {
|
||||
margin-left: $nav-width;
|
||||
position: relative;
|
||||
z-index: 10;
|
||||
background-color: $main-bg;
|
||||
min-height: 100%;
|
||||
|
||||
padding-bottom: 1px; // prevent margin overflow
|
||||
|
||||
// The dark box is what gives the code samples their dark background.
|
||||
// It sits essentially under the actual content block, which has a
|
||||
// transparent background.
|
||||
// I know, it's hackish, but it's the simplist way to make the left
|
||||
// half of the content always this background color.
|
||||
.dark-box {
|
||||
width: $examples-width;
|
||||
background-color: $examples-bg;
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
}
|
||||
|
||||
.lang-selector {
|
||||
position: fixed;
|
||||
z-index: 50;
|
||||
border-bottom: 5px solid $lang-select-active-bg;
|
||||
}
|
||||
}
|
||||
|
||||
.lang-selector {
|
||||
background-color: $lang-select-bg;
|
||||
width: 100%;
|
||||
font-weight: bold;
|
||||
a {
|
||||
display: block;
|
||||
float:left;
|
||||
color: $lang-select-text;
|
||||
text-decoration: none;
|
||||
padding: 0 10px;
|
||||
line-height: 30px;
|
||||
outline: 0;
|
||||
|
||||
&:active, &:focus {
|
||||
background-color: $lang-select-pressed-bg;
|
||||
color: $lang-select-pressed-text;
|
||||
}
|
||||
|
||||
&.active {
|
||||
background-color: $lang-select-active-bg;
|
||||
color: $lang-select-active-text;
|
||||
}
|
||||
}
|
||||
|
||||
&:after {
|
||||
content: '';
|
||||
clear: both;
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// CONTENT STYLES
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// This is all the stuff with the light background in the left half of the page
|
||||
|
||||
.content {
|
||||
// to place content above the dark box
|
||||
position: relative;
|
||||
z-index: 30;
|
||||
|
||||
&:after {
|
||||
content: '';
|
||||
display: block;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
&>h1, &>h2, &>h3, &>h4, &>h5, &>h6, &>p, &>table, &>ul, &>ol, &>aside, &>dl {
|
||||
margin-right: $examples-width;
|
||||
padding: 0 $main-padding;
|
||||
box-sizing: border-box;
|
||||
display: block;
|
||||
@include text-shadow($main-embossed-text-shadow);
|
||||
|
||||
@extend %left-col;
|
||||
}
|
||||
|
||||
&>ul, &>ol {
|
||||
padding-left: $main-padding + 15px;
|
||||
}
|
||||
|
||||
// the div is the tocify hidden div for placeholding stuff
|
||||
&>h1, &>h2, &>div {
|
||||
clear:both;
|
||||
}
|
||||
|
||||
h1 {
|
||||
@extend %header-font;
|
||||
font-size: 30px;
|
||||
padding-top: 0.5em;
|
||||
padding-bottom: 0.5em;
|
||||
border-bottom: 1px solid #ccc;
|
||||
margin-bottom: $h1-margin-bottom;
|
||||
margin-top: 2em;
|
||||
border-top: 1px solid #ddd;
|
||||
background-image: linear-gradient(to bottom, #fff, #f9f9f9);
|
||||
}
|
||||
|
||||
h1:first-child, div:first-child + h1 {
|
||||
border-top-width: 0;
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
h2 {
|
||||
@extend %header-font;
|
||||
font-size: 20px;
|
||||
margin-top: 4em;
|
||||
margin-bottom: 0;
|
||||
border-top: 1px solid #ccc;
|
||||
padding-top: 1.2em;
|
||||
padding-bottom: 1.2em;
|
||||
background-image: linear-gradient(to bottom, rgba(#fff, 0.4), rgba(#fff, 0));
|
||||
}
|
||||
|
||||
// h2s right after h1s should bump right up
|
||||
// against the h1s.
|
||||
h1 + h2, h1 + div + h2 {
|
||||
margin-top: $h1-margin-bottom * -1;
|
||||
border-top: none;
|
||||
}
|
||||
|
||||
h3, h4, h5, h6 {
|
||||
@extend %header-font;
|
||||
font-size: 15px;
|
||||
margin-top: 2.5em;
|
||||
margin-bottom: 0.8em;
|
||||
}
|
||||
|
||||
h4, h5, h6 {
|
||||
font-size: 10px;
|
||||
}
|
||||
|
||||
hr {
|
||||
margin: 2em 0;
|
||||
border-top: 2px solid $examples-bg;
|
||||
border-bottom: 2px solid $main-bg;
|
||||
}
|
||||
|
||||
table {
|
||||
margin-bottom: 1em;
|
||||
overflow: auto;
|
||||
th,td {
|
||||
text-align: left;
|
||||
vertical-align: top;
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
th {
|
||||
padding: 5px 10px;
|
||||
border-bottom: 1px solid #ccc;
|
||||
vertical-align: bottom;
|
||||
}
|
||||
|
||||
td {
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
tr:last-child {
|
||||
border-bottom: 1px solid #ccc;
|
||||
}
|
||||
|
||||
tr:nth-child(odd)>td {
|
||||
background-color: lighten($main-bg,4.2%);
|
||||
}
|
||||
|
||||
tr:nth-child(even)>td {
|
||||
background-color: lighten($main-bg,2.4%);
|
||||
}
|
||||
}
|
||||
|
||||
dt {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
dd {
|
||||
margin-left: 15px;
|
||||
}
|
||||
|
||||
p, li, dt, dd {
|
||||
line-height: 1.6;
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
img {
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
code {
|
||||
background-color: rgba(0,0,0,0.05);
|
||||
padding: 3px;
|
||||
border-radius: 3px;
|
||||
@extend %break-words;
|
||||
@extend %code-font;
|
||||
}
|
||||
|
||||
pre>code {
|
||||
background-color: transparent;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
aside {
|
||||
padding-top: 1em;
|
||||
padding-bottom: 1em;
|
||||
@include text-shadow(0 1px 0 lighten($aside-notice-bg, 15%));
|
||||
margin-top: 1.5em;
|
||||
margin-bottom: 1.5em;
|
||||
background: $aside-notice-bg;
|
||||
line-height: 1.6;
|
||||
|
||||
&.warning {
|
||||
background-color: $aside-warning-bg;
|
||||
@include text-shadow(0 1px 0 lighten($aside-warning-bg, 15%));
|
||||
}
|
||||
|
||||
&.success {
|
||||
background-color: $aside-success-bg;
|
||||
@include text-shadow(0 1px 0 lighten($aside-success-bg, 15%));
|
||||
}
|
||||
}
|
||||
|
||||
aside:before {
|
||||
vertical-align: middle;
|
||||
padding-right: 0.5em;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
aside.notice:before {
|
||||
@extend %icon-info-sign;
|
||||
}
|
||||
|
||||
aside.warning:before {
|
||||
@extend %icon-exclamation-sign;
|
||||
}
|
||||
|
||||
aside.success:before {
|
||||
@extend %icon-ok-sign;
|
||||
}
|
||||
|
||||
.search-highlight {
|
||||
padding: 2px;
|
||||
margin: -2px;
|
||||
border-radius: 4px;
|
||||
border: 1px solid #F7E633;
|
||||
@include text-shadow(1px 1px 0 #666);
|
||||
background: linear-gradient(to top left, #F7E633 0%, #F1D32F 100%);
|
||||
}
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// CODE SAMPLE STYLES
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// This is all the stuff that appears in the right half of the page
|
||||
|
||||
.content {
|
||||
pre, blockquote {
|
||||
background-color: $code-bg;
|
||||
color: #fff;
|
||||
|
||||
padding: 2em $main-padding;
|
||||
margin: 0;
|
||||
width: $examples-width;
|
||||
|
||||
float:right;
|
||||
clear:right;
|
||||
|
||||
box-sizing: border-box;
|
||||
@include text-shadow(0px 1px 2px rgba(0,0,0,0.4));
|
||||
|
||||
@extend %right-col;
|
||||
|
||||
&>p { margin: 0; }
|
||||
|
||||
a {
|
||||
color: #fff;
|
||||
text-decoration: none;
|
||||
border-bottom: dashed 1px #ccc;
|
||||
}
|
||||
}
|
||||
|
||||
pre {
|
||||
@extend %code-font;
|
||||
}
|
||||
|
||||
blockquote {
|
||||
&>p {
|
||||
background-color: $code-annotation-bg;
|
||||
border-radius: 5px;
|
||||
padding: $code-annotation-padding;
|
||||
color: #ccc;
|
||||
border-top: 1px solid #000;
|
||||
border-bottom: 1px solid #404040;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// RESPONSIVE DESIGN
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// These are the styles for phones and tablets
|
||||
// There are also a couple styles disperesed
|
||||
|
||||
@media (max-width: $tablet-width) {
|
||||
.tocify-wrapper {
|
||||
left: -$nav-width;
|
||||
|
||||
&.open {
|
||||
left: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.page-wrapper {
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
#nav-button {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.tocify-wrapper .tocify-item > a {
|
||||
padding-top: 0.3em;
|
||||
padding-bottom: 0.3em;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: $phone-width) {
|
||||
.dark-box {
|
||||
display: none;
|
||||
}
|
||||
|
||||
%left-col {
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
.tocify-wrapper .lang-selector {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.page-wrapper .lang-selector {
|
||||
display: none;
|
||||
}
|
||||
|
||||
%right-col {
|
||||
width: auto;
|
||||
float: none;
|
||||
}
|
||||
|
||||
%right-col + %left-col {
|
||||
margin-top: $main-padding;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
#PyCharm
|
||||
*.idea
|
||||
# generated cloud-api-docs
|
||||
apidocs
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
FROM docs/base:oss
|
||||
MAINTAINER Docker Docs <docs@docker.com>
|
||||
|
||||
ENV PROJECT=docker-cloud
|
||||
# To get the git info for this repo
|
||||
COPY . /src
|
||||
RUN rm -rf /docs/content/$PROJECT/
|
||||
COPY . /docs/content/$PROJECT/
|
||||
|
||||
|
|
@ -0,0 +1,202 @@
|
|||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "{}"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright 2014 Docker Cloud, Inc.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
||||
|
|
@ -0,0 +1,42 @@
|
|||
.PHONY: all default docs docs-build docs-shell shell test
|
||||
|
||||
# to allow `make DOCSDIR=docs docs-shell` (to create a bind mount in docs)
|
||||
DOCS_MOUNT := $(if $(DOCSDIR),-v $(CURDIR)/$(DOCSDIR):/$(DOCSDIR))
|
||||
|
||||
# to allow `make DOCSPORT=9000 docs`
|
||||
DOCSPORT := 8000
|
||||
|
||||
# Get the IP ADDRESS
|
||||
DOCKER_IP=$(shell python -c "import urlparse ; print urlparse.urlparse('$(DOCKER_HOST)').hostname or ''")
|
||||
HUGO_BASE_URL=$(shell test -z "$(DOCKER_IP)" && echo localhost || echo "$(DOCKER_IP)")
|
||||
HUGO_BIND_IP=0.0.0.0
|
||||
|
||||
GIT_BRANCH := $(shell git rev-parse --abbrev-ref HEAD 2>/dev/null)
|
||||
GIT_BRANCH_CLEAN := $(shell echo $(GIT_BRANCH) | sed -e "s/[^[:alnum:]]/-/g")
|
||||
DOCKER_DOCS_IMAGE := docker-docs$(if $(GIT_BRANCH_CLEAN),:$(GIT_BRANCH_CLEAN))
|
||||
|
||||
DOCKER_RUN_DOCS := docker run --rm -it $(DOCS_MOUNT) -e AWS_S3_BUCKET -e NOCACHE
|
||||
|
||||
# for some docs workarounds (see below in "docs-build" target)
|
||||
GITCOMMIT := $(shell git rev-parse --short HEAD 2>/dev/null)
|
||||
|
||||
default: docs
|
||||
|
||||
docs: docs-build
|
||||
$(DOCKER_RUN_DOCS) -p $(if $(DOCSPORT),$(DOCSPORT):)8000 -e DOCKERHOST "$(DOCKER_DOCS_IMAGE)" hugo server -v --port=$(DOCSPORT) --baseUrl=$(HUGO_BASE_URL) --bind=$(HUGO_BIND_IP) --watch
|
||||
|
||||
docs-draft: docs-build
|
||||
$(DOCKER_RUN_DOCS) -p $(if $(DOCSPORT),$(DOCSPORT):)8000 -e DOCKERHOST "$(DOCKER_DOCS_IMAGE)" hugo server --buildDrafts="true" --port=$(DOCSPORT) --baseUrl=$(HUGO_BASE_URL) --bind=$(HUGO_BIND_IP)
|
||||
|
||||
test: docs-build
|
||||
$(DOCKER_RUN_DOCS) "$(DOCKER_DOCS_IMAGE)"
|
||||
|
||||
docs-shell: docs-build
|
||||
$(DOCKER_RUN_DOCS) -p $(if $(DOCSPORT),$(DOCSPORT):)8000 "$(DOCKER_DOCS_IMAGE)" bash
|
||||
|
||||
|
||||
docs-build:
|
||||
rm -fr apidocs/docker-cloud
|
||||
rm -fr apidocs/layouts
|
||||
cp -r ../apidocs .
|
||||
docker build -t "$(DOCKER_DOCS_IMAGE)" .
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
<!--[metadata]>
|
||||
+++
|
||||
draft=true
|
||||
+++
|
||||
<![end-metadata]-->
|
||||
|
||||
# Docker Cloud Support Documentation, Reference and Articles
|
||||
|
||||
## How to write articles
|
||||
|
||||
Use a markdown editor, we recommend Github's Atom, with the `Markdown formatter`
|
||||
plugin.
|
||||
|
||||
Set the CSS to `GitHub2`.
|
||||
|
||||
## Guidelines
|
||||
|
||||
TODO
|
||||
|
||||
## How to handle images
|
||||
|
||||
TODO
|
||||
|
||||
## How to handle links to other articles
|
||||
|
||||
TODO
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
<!--[metadata]>
|
||||
+++
|
||||
aliases = [
|
||||
"/docker-cloud/feature-reference/api-roles/"
|
||||
]
|
||||
title = "Service API Roles"
|
||||
description = "API Roles"
|
||||
keywords = ["API, Services, roles"]
|
||||
[menu.main]
|
||||
parent="apps"
|
||||
+++
|
||||
<![end-metadata]-->
|
||||
|
||||
# Service API Roles
|
||||
|
||||
You can configure a service so that it can access the Docker Cloud API. When you
|
||||
grant API access to a service, its containers receive a token through an
|
||||
environment variable, which is used to query the Docker Cloud API.
|
||||
|
||||
Docker Cloud has a "full access" role which when granted allows any operation
|
||||
to be performed on the API. You can enable this option on the **Environment variables** screen of the Service wizard, or [specify it in your service's stackfile](stack-yaml-reference.md#roles). When enabled, Docker Cloud generates an authorization token for the
|
||||
service's containers which is stored in an environment variable called
|
||||
`DOCKERCLOUD_AUTH`.
|
||||
|
||||
Use this variable to set the `Authorization` HTTP header when calling
|
||||
Docker Cloud's API:
|
||||
|
||||
```bash
|
||||
$ curl -H "Authorization: $DOCKERCLOUD_AUTH" -H "Accept: application/json" https://cloud.docker.com/api/app/v1/service/
|
||||
```
|
||||
|
||||
You can use this feature with Docker Cloud's [automatic environment variables](service-links.md), to let your application inside a container read and perform operations using Docker Cloud's API.
|
||||
|
||||
```bash
|
||||
$ curl -H "Authorization: $DOCKERCLOUD_AUTH" -H "Accept: application/json" $WEB_DOCKERCLOUD_API_URL
|
||||
```
|
||||
|
||||
For example, you can use information retrieved using the API to read the linked
|
||||
endpoints, and use them to reconfigure a proxy container.
|
||||
|
||||
See the [API documentation](/apidocs/docker-cloud.md) for more information on the different API operations available.
|
||||
|
|
@ -0,0 +1,84 @@
|
|||
<!--[metadata]>
|
||||
+++
|
||||
title = "Automatic container destroy"
|
||||
aliases = [
|
||||
"/docker-cloud/feature-reference/auto-destroy/"
|
||||
]
|
||||
description = "Autodestroy"
|
||||
keywords = ["Autodestroy, service, terminate, container"]
|
||||
[menu.main]
|
||||
parent="apps"
|
||||
+++
|
||||
<![end-metadata]-->
|
||||
|
||||
# Autodestroy
|
||||
|
||||
When enabled on a service, **Autodestroy** automatically terminates containers
|
||||
when they stop. **This destroys all data in the container on stop.** This is
|
||||
useful for one-time actions that store their results in an external system.
|
||||
|
||||
The following Autodestroy options are available:
|
||||
|
||||
- `OFF`: the container remains in the **Stopped** state regardless of exit code, and is not destroyed.
|
||||
- `ON_SUCCESS`: if the container stops with an exit code of 0 (normal shutdown), Docker Cloud automatically destroys it. If it stops with any other exit code, Docker Cloud leaves it in the **Stopped** state.
|
||||
- `ALWAYS`: if the container stops, Docker Cloud automatically terminates it regardless of the exit code.
|
||||
|
||||
If **Autorestart** is activated, Docker Cloud evaluates whether to try restarting the container or not before evaluating **Autodestroy**.
|
||||
|
||||
## Launching a service with Autodestroy
|
||||
|
||||
You can enable **Autodestroy** on the **Service configuration** step of the **Launch new service** wizard.
|
||||
|
||||

|
||||
|
||||
Autodestroy is set to `OFF` (deactivated) by default.
|
||||
|
||||
### Using the API or CLI
|
||||
|
||||
You can enable autodestroy when launching a service through the API or CLI.
|
||||
|
||||
If not provided, it will have a default value of `OFF`. Check our [API documentation](/apidocs/docker-cloud.md) for more information.
|
||||
|
||||
#### Launching with autodestroy using the API
|
||||
```
|
||||
POST /api/app/v1/service/ HTTP/1.1
|
||||
{
|
||||
"autodestroy": "ALWAYS",
|
||||
[...]
|
||||
}
|
||||
```
|
||||
|
||||
#### Launching with autodestroy using the CLI
|
||||
```
|
||||
$ docker-cloud service run --autodestroy ALWAYS [...]
|
||||
```
|
||||
|
||||
## Enabling autodestroy on an already deployed service
|
||||
|
||||
You can also activate or deactivate the **Autodestroy** setting on a service
|
||||
after it has been deployed, by editing the service.
|
||||
|
||||
1. Go to the service detail page.
|
||||
2. Click **Edit**.
|
||||
3. Select the new autodestroy setting.
|
||||
4. Click **Save**.
|
||||
|
||||
### Using the API or CLI
|
||||
|
||||
You can set the **Autodestroy** option after the service has been
|
||||
deployed, using the API or CLI.
|
||||
|
||||
Check our [API documentation](/apidocs/docker-cloud.md) for more information.
|
||||
|
||||
#### Enabling autodestroy using the API
|
||||
```
|
||||
PATCH /api/app/v1/service/(uuid)/ HTTP/1.1
|
||||
{
|
||||
"autodestroy": "ALWAYS"
|
||||
}
|
||||
```
|
||||
|
||||
#### Enabling autodestroy using the CLI
|
||||
```
|
||||
$ docker-cloud service set --autodestroy ALWAYS (name or uuid)
|
||||
```
|
||||
|
|
@ -0,0 +1,85 @@
|
|||
<!--[metadata]>
|
||||
+++
|
||||
title = "Automatic service redeploy"
|
||||
aliases = [
|
||||
"/docker-cloud/feature-reference/auto-redeploy/"
|
||||
]
|
||||
description = "Autoredeploy"
|
||||
keywords = ["Autoredeploy, image, store, service"]
|
||||
[menu.main]
|
||||
parent="apps"
|
||||
+++
|
||||
<![end-metadata]-->
|
||||
|
||||
# Autoredeploy
|
||||
|
||||
Docker Cloud's **Autoredeploy** feature allows a service that uses an image
|
||||
stored in Docker Hub to automatically redeploy whenever a new image is pushed or
|
||||
built.
|
||||
|
||||
> **Note:** To enable autoredeploy on an image stored in a third party registry,
|
||||
> you will need to use [redeploy triggers](triggers.md) instead.
|
||||
|
||||
|
||||
## Launching a new service with autoredeploy
|
||||
|
||||
You can launch a service with **autoredeploy** enabled by enabling it from the **general settings** section of the **Launch new service** wizard.
|
||||
|
||||

|
||||
|
||||
By default, autoredeploy is *deactivated*.
|
||||
|
||||
### Using the CLI or API
|
||||
|
||||
You can enable **autoredeploy** when launching a service using the CLI or API.
|
||||
|
||||
By default, autoredeploy is set to `false`. See the [API documentation](/apidocs/docker-cloud.md) for more information.
|
||||
|
||||
#### Enable autoredeploy using the CLI
|
||||
|
||||
```
|
||||
$ docker-cloud service run --autoredeploy [...]
|
||||
```
|
||||
|
||||
#### Enable autoredeploy using the API
|
||||
|
||||
```
|
||||
POST /api/app/v1/service/ HTTP/1.1
|
||||
{
|
||||
"autoredeploy": true,
|
||||
[...]
|
||||
}
|
||||
```
|
||||
|
||||
## Enabling autoredeploy to an already deployed service
|
||||
|
||||
You can activate or deactivate **autoredeploy** on a service after it has been deployed.
|
||||
|
||||
1. Click into the service detail page.
|
||||
2. Click **Edit**.
|
||||
3. Change the **autoredeploy** setting on the form to `true`
|
||||
4. Click **Save changes**.
|
||||
|
||||
|
||||
### Using the CLI or API
|
||||
|
||||
You can set the **autoredeploy** option after the service has been deployed,
|
||||
using the CLI or API.
|
||||
|
||||
Check our [API documentation](/apidocs/docker-cloud.md) for more information.
|
||||
|
||||
|
||||
#### Enabling autoredeploy using the CLI
|
||||
|
||||
```bash
|
||||
$ docker-cloud service set --autoredeploy (name or uuid)
|
||||
```
|
||||
|
||||
### Enabling autoredeploy using the API
|
||||
|
||||
```
|
||||
PATCH /api/app/v1/service/(uuid)/ HTTP/1.1
|
||||
{
|
||||
"autoredeploy": true
|
||||
}
|
||||
```
|
||||
|
|
@ -0,0 +1,95 @@
|
|||
<!--[metadata]>
|
||||
+++
|
||||
title = "Automatic container restart"
|
||||
aliases = [
|
||||
"/docker-cloud/feature-reference/autorestart/"
|
||||
]
|
||||
description = "Automatically restart a container in Docker Cloud"
|
||||
keywords = ["container, restart, automated"]
|
||||
[menu.main]
|
||||
parent="apps"
|
||||
+++
|
||||
<![end-metadata]-->
|
||||
|
||||
# Automatically restart a container
|
||||
|
||||
**Autorestart** is a service-level setting that can automatically start your
|
||||
containers if they stop or crash. You can use this setting as an automatic crash
|
||||
recovery mechanism.
|
||||
|
||||
Autorestart uses Docker's `--autorestart` flag. When called, the Docker daemon
|
||||
attempts to restart the container until it succeeds. If the first restart
|
||||
attempts fail, the daemon continues to attempt a restart, but uses an
|
||||
incremental back-off algorithm.
|
||||
|
||||
The following Autorestart options are available:
|
||||
|
||||
- `OFF`: the container will not be restarted, regardless of the exit code.
|
||||
- `ON_FAILURE`: the container will be restarted *only* if it stops with an exit code other than 0. (0 is for normal shutdown.)
|
||||
- `ALWAYS`: the container will be restarted automatically, regardless of the exit code.
|
||||
|
||||
> **Note**: If you are using **Autorestart** set to `ALWAYS`, **Autodestroy** must be set to `OFF`.
|
||||
|
||||
If the Docker daemon in a node restarts (because it was upgraded, or because the
|
||||
underlying node was restarted), the daemon will only restart containers that
|
||||
have **Autorestart** set to `ALWAYS`.
|
||||
|
||||
## Launching a Service with Autorestart
|
||||
|
||||
You can enable **Autorestart** on the **Service configuration** step of the **Launch new service wizard**.
|
||||
|
||||

|
||||
|
||||
Autorestart is set to `OFF` by default, which means that autorestart is *deactivated*.
|
||||
|
||||
### Using the API and CLI
|
||||
|
||||
You can set the **Autorestart** option when launching a service through the
|
||||
API and through the CLI. Autorestart is set to `OFF` by default.
|
||||
|
||||
#### Set autorestart using the API
|
||||
|
||||
```
|
||||
POST /api/app/v1/service/ HTTP/1.1
|
||||
{
|
||||
"autorestart": "ON_FAILURE",
|
||||
[...]
|
||||
}
|
||||
```
|
||||
|
||||
#### Set autorestart using the CLI
|
||||
|
||||
```
|
||||
$ docker-cloud service run --autorestart ON_FAILURE [...]
|
||||
```
|
||||
|
||||
See our [API documentation](/apidocs/docker-cloud.md) for more information.
|
||||
|
||||
## Enabling autorestart on an already deployed service
|
||||
|
||||
You can activate or deactivate **Autorestart** on a service after it has been deployed by editing the service.
|
||||
|
||||
1. Go to the service detail page.
|
||||
2. Click **Edit**.
|
||||
3. Choose the autorestart option to apply.
|
||||
4. Click **Save**.
|
||||
|
||||
### Using the API and CLI
|
||||
|
||||
You can change the **Autorestart** setting after the service has been deployed using the API or CLI.
|
||||
|
||||
#### Enable autorestart using the API
|
||||
```
|
||||
PATCH /api/app/v1/service/(uuid)/ HTTP/1.1
|
||||
{
|
||||
"autorestart": "ALWAYS",
|
||||
}
|
||||
```
|
||||
|
||||
#### Enable autorestart using the CLI
|
||||
|
||||
```
|
||||
$ docker-cloud service set --autorestart ALWAYS (name or uuid)
|
||||
```
|
||||
|
||||
See the [API documentation](/apidocs/docker-cloud.md) for more information.
|
||||
|
|
@ -0,0 +1,125 @@
|
|||
<!--[metadata]>
|
||||
+++
|
||||
aliases = [
|
||||
"/docker-cloud/feature-reference/deploy-tags/"
|
||||
]
|
||||
title = "Deployment tags"
|
||||
description = "Deployment tags"
|
||||
keywords = ["Deployment, tags, services"]
|
||||
[menu.main]
|
||||
parent="apps"
|
||||
+++
|
||||
<![end-metadata]-->
|
||||
|
||||
# Deployment tags
|
||||
|
||||
You can use **Deployment tags** to make sure certain services are deployed only
|
||||
to specific nodes. Tagged services only deploy to nodes that match **all** of
|
||||
the tags on that service. Docker Cloud shows an error if no nodes match all of
|
||||
the service's deployment tags. A node might have extra tags that are not
|
||||
specified on the service, but these do not prevent the service from deploying.
|
||||
|
||||
You can specify multiple tags on services, on individual nodes, and on node clusters. All nodes that are members of a node cluster inherit the tags specified on the cluster. See [Automatic deployment tags](#automatic-deployment-tags) to learn more.
|
||||
|
||||
#### Deployment tags example
|
||||
|
||||
In this example, we have five nodes. One is used for development and testing, and four are used for production. The production nodes are distributed between frontend and backend. The table below summarizes their names and tags:
|
||||
|
||||
| Node name | Tags |
|
||||
| --------- | ---- |
|
||||
| my-node-dev | `aws` `us-east-1` `development` `test` `frontend` `backend`|
|
||||
| my-node-prod-1 | `aws` `us-east-1` `production` `frontend` |
|
||||
| my-node-prod-2 | `aws` `us-east-2` `production` `frontend` |
|
||||
| my-node-prod-3 | `aws` `us-east-1` `production` `backend` |
|
||||
| my-node-prod-4 | `aws` `us-east-2` `production` `backend` |
|
||||
|
||||
Imagine that you deploy a service called **my-webapp-dev** with two tags:
|
||||
`development` and `frontend`. All containers for the service would be deployed
|
||||
to the node labeled **my-node-dev**, because the node is tagged with both
|
||||
`development` *and* `frontend`.
|
||||
|
||||
Similarly, if you deploy a production service called **my-webapp-prod** with the
|
||||
two tags `production` and `frontend`, all containers for that service
|
||||
would be deployed to the two nodes **my-node-prod-1** and **my-node-prod-2**
|
||||
because those two nodes are tagged with both `production` *and* `frontend`.
|
||||
|
||||
> **Tip**: Containers are distributed between the two nodes based on the
|
||||
[deployment strategy](../infrastructure/deployment-strategies.md) selected.
|
||||
|
||||
## Automatic deployment tags
|
||||
|
||||
When you launch a node cluster, four tags are automatically assigned to the
|
||||
node cluster and all nodes in that cluster:
|
||||
|
||||
* Provider name (for example `digitalocean`, `aws`)
|
||||
* "[Bring your own node](../infrastructure/byoh.md)" (BYON) status (for example `byon=false` or `byon=true`)
|
||||
* Region name (for example `us-east-1`, `lon1`)
|
||||
* Node cluster name (for example `my-node-cluster-dev-1`)
|
||||
|
||||
## Add tags to a node or node cluster at launch
|
||||
|
||||
A single node is considered a node cluster with a size of 1. Because of this, you create a node cluster even if you are only launching a single node.
|
||||
|
||||
1. Click **Node clusters** in the left navigation menu.
|
||||
2. Click **Create**.
|
||||
2. In the **Deploy tags** field, enter the tags to assign to the cluster and all
|
||||
of its member nodes.
|
||||
|
||||

|
||||
|
||||
When the node cluster scales up, new nodes automatically inherit the
|
||||
node cluster's tags, including the [Automatic deployment tags](#automatic-deployment-tags) described above.
|
||||
|
||||
You can see a node cluster's tags on the left side of the cluster's detail page.
|
||||
|
||||
4. Click **Launch node cluster**.
|
||||
|
||||
### Update or add tags on a node or node cluster
|
||||
|
||||
To change the tags on an existing node or node cluster:
|
||||
|
||||
1. Go to the node or node cluster's detail page.
|
||||
|
||||
2. Click the tags below the node or node cluster status line to edit them.
|
||||
|
||||

|
||||
|
||||
If there are no tags assigned to the cluster, move your cursor under the deployment status line and click the tag icon that appears.
|
||||
|
||||
3. In the dialog that appears, add or remove tags.
|
||||
|
||||
The individual nodes in a cluster inherit all tags from the cluster, including automatic tags. Each individual node can have extra tags in addition to the tags it inherits as a member of a node cluster.
|
||||
|
||||
4. Click **Save** to save your tag changes to the nodes.
|
||||
|
||||
## Add tags to a service at launch
|
||||
|
||||
To use deploy a service to a specific node using tags, you must first specify one or more tags on the service. If you don't add any tags to a service, the service is deployed to all available nodes.
|
||||
|
||||
1. Use the **Create new service** wizard to start a new service.
|
||||
|
||||

|
||||
|
||||
2. Select tags from the **deployment constraints** list to add to this service. Only tags that already exist on your nodes appear in the list.
|
||||
|
||||
Tags in a service define which nodes will be used on deployment: only nodes that match *all* tags specified in the service will be used for deployment.
|
||||
|
||||
### Update or add tags to a service
|
||||
|
||||
You can add or remove tags on a running service from the service's detail view.
|
||||
|
||||
1. From the service detail view, click **Edit**.
|
||||
|
||||
2. Select tags from the **deployment constraints** list to add to this service. Only tags that already exist on your nodes appear in the list.
|
||||
|
||||

|
||||
|
||||
3. Click **Save Changes**.
|
||||
|
||||
**If you update the tags on a service, you must redeploy the service for them to take effect.** To do this you can terminate all containers and relaunch them, or you can scale
|
||||
your service down to zero nodes and then scale it back up. New containers will
|
||||
be deployed to the nodes that match the new tags.
|
||||
|
||||
## Using deployment tags in the API and CLI
|
||||
|
||||
See the [tags API and CLI documentation](/apidocs/docker-cloud.md#tags) for more information on how to use tags with our API and CLI.
|
||||
|
|
@ -0,0 +1,70 @@
|
|||
<!--[metadata]>
|
||||
+++
|
||||
aliases = [
|
||||
"/docker-cloud/feature-reference/deploy-to-cloud/",
|
||||
"/docker-cloud/tutorials/deploy-to-cloud/"
|
||||
]
|
||||
title = "Add a Deploy to Docker Cloud button"
|
||||
description = "Deploy to Docker Cloud"
|
||||
keywords = ["deploy, docker, cloud"]
|
||||
[menu.main]
|
||||
parent="apps"
|
||||
+++
|
||||
<![end-metadata]-->
|
||||
|
||||
# Add a Deploy to Docker Cloud Button
|
||||
|
||||
The **Deploy to Docker Cloud** button allows developers to deploy stacks with one click in Docker Cloud. The button is intended to be added to `README.md` files in public GitHub repositories, although it can be used anywhere else.
|
||||
|
||||
This is an example button to deploy our <a href="https://github.com/docker/dockercloud-quickstart-python" target="_blank">python quickstart</a>:
|
||||
|
||||
<a href="https://cloud.docker.com/stack/deploy/?repo=https://github.com/docker/dockercloud-quickstart-python" target="_blank"><img src="https://files.cloud.docker.com/images/deploy-to-dockercloud.svg"></a>
|
||||
|
||||
The button redirects the user to the **Launch new Stack** wizard, with the stack definition already filled with the contents of any of the following files (which are fetched in the order shown) from the repository (taking into account branch and relative path):
|
||||
|
||||
* `docker-cloud.yml`
|
||||
* `docker-compose.yml`
|
||||
* `fig.yml`
|
||||
|
||||
The user can still modify the stack definition before deployment.
|
||||
|
||||
|
||||
## Adding the 'Deploy to Docker Cloud' button in GitHub
|
||||
|
||||
You can simply add the following snipet to your `README.md` file:
|
||||
|
||||
```md
|
||||
[](https://cloud.docker.com/stack/deploy/)
|
||||
```
|
||||
|
||||
Docker Cloud will detect the HTTP referer header and deploy the stack file found in the repository, branch and relative path where the source `README.md` file is stored.
|
||||
|
||||
|
||||
## Adding the 'Deploy to Docker Cloud' button in Docker Hub
|
||||
|
||||
If the button is displayed on the Docker Hub, Docker Cloud cannot automatically detect the source GitHub repository, branch and path. In this case, edit the repository description and add the following code:
|
||||
|
||||
```md
|
||||
[](https://cloud.docker.com/stack/deploy/?repo=<repo_url>)
|
||||
```
|
||||
|
||||
where `<repo_url>` is the path to your GitHub repository (see below).
|
||||
|
||||
|
||||
## Adding the 'Deploy to Docker Cloud' button anywhere else
|
||||
|
||||
If you want to use the button somewhere else (i.e. from external documentation, or a landing site), you just need to create a link to the following URL:
|
||||
|
||||
```html
|
||||
https://cloud.docker.com/stack/deploy/?repo=<repo_url>
|
||||
```
|
||||
|
||||
where `<repo_url>` is the path to your GitHub repository. For example:
|
||||
|
||||
* `https://github.com/docker/dockercloud-quickstart-python`
|
||||
* `https://github.com/docker/dockercloud-quickstart-python/tree/staging` to use branch `staging` instead of the default branch
|
||||
* `https://github.com/docker/dockercloud-quickstart-python/tree/master/example` to use branch `master` and the relative path `/example` inside the repository
|
||||
|
||||
You can use your own image for the link (or no image). Our **Deploy to Docker Cloud** image is available at the following URL:
|
||||
|
||||
* `https://files.cloud.docker.com/images/deploy-to-dockercloud.svg`
|
||||
|
After Width: | Height: | Size: 62 KiB |
|
After Width: | Height: | Size: 62 KiB |
|
After Width: | Height: | Size: 25 KiB |