diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 0000000000..a91de56a75 --- /dev/null +++ b/Jenkinsfile @@ -0,0 +1,7 @@ +wrappedNode(label: 'docker') { + deleteDir() + stage "checkout" + checkout scm + + documentationChecker("docs") +} diff --git a/README.md b/README.md new file mode 100644 index 0000000000..d39ab02b31 --- /dev/null +++ b/README.md @@ -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. diff --git a/apidocs/docker-cloud.md b/apidocs/docker-cloud.md new file mode 100644 index 0000000000..15449d00d7 --- /dev/null +++ b/apidocs/docker-cloud.md @@ -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. diff --git a/apidocs/docker-cloud/fonts/slate.eot b/apidocs/docker-cloud/fonts/slate.eot new file mode 100644 index 0000000000..13c4839a19 Binary files /dev/null and b/apidocs/docker-cloud/fonts/slate.eot differ diff --git a/apidocs/docker-cloud/fonts/slate.svg b/apidocs/docker-cloud/fonts/slate.svg new file mode 100644 index 0000000000..5f34982306 --- /dev/null +++ b/apidocs/docker-cloud/fonts/slate.svg @@ -0,0 +1,14 @@ + + + +Generated by IcoMoon + + + + + + + + + + diff --git a/apidocs/docker-cloud/fonts/slate.ttf b/apidocs/docker-cloud/fonts/slate.ttf new file mode 100644 index 0000000000..ace9a46a7e Binary files /dev/null and b/apidocs/docker-cloud/fonts/slate.ttf differ diff --git a/apidocs/docker-cloud/fonts/slate.woff b/apidocs/docker-cloud/fonts/slate.woff new file mode 100644 index 0000000000..1e72e0ee00 Binary files /dev/null and b/apidocs/docker-cloud/fonts/slate.woff differ diff --git a/apidocs/docker-cloud/fonts/slate.woff2 b/apidocs/docker-cloud/fonts/slate.woff2 new file mode 100644 index 0000000000..7c585a7273 Binary files /dev/null and b/apidocs/docker-cloud/fonts/slate.woff2 differ diff --git a/apidocs/docker-cloud/images/logo.png b/apidocs/docker-cloud/images/logo.png new file mode 100644 index 0000000000..2442aba6fc Binary files /dev/null and b/apidocs/docker-cloud/images/logo.png differ diff --git a/apidocs/docker-cloud/images/navbar.png b/apidocs/docker-cloud/images/navbar.png new file mode 100644 index 0000000000..df38e90d87 Binary files /dev/null and b/apidocs/docker-cloud/images/navbar.png differ diff --git a/apidocs/docker-cloud/includes/action.html b/apidocs/docker-cloud/includes/action.html new file mode 100644 index 0000000000..4717bfa2d8 --- /dev/null +++ b/apidocs/docker-cloud/includes/action.html @@ -0,0 +1,517 @@ + + + + + + + API Documentation + + + + + + + + + + + + NAV + + + +
+ +
+
+
+
+
+
+

Actions

+ +

Action

+ +
+

Example

+
+
{
+    "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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescription
resource_uriA unique API endpoint that represents the action
uuidA unique identifier for the action generated automatically on creation
objectThe API object (resource URI) to which the action applies to
actionName of the operation performed/being performed
methodHTTP method used to access the API
pathHTTP path of the API accessed
user_agentThe user agent provided by the client when accessing the API endpoint
start_dateDate and time when the API call was performed and the operation started processing
end_dateDate and time when the API call finished processing
stateState of the operation (see table below)
ipIP address of the user that performed the API call
locationGeographic location of the IP address of the user that performed the API call
is_user_actionIf the action has been triggered by the user
can_be_canceledIf the action can be canceled by the user in the middle of its execution
can_be_retriedIf the action can be retried by the user
+ +

Action states

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StateDescription
PendingThe action needed asynchronous execution and it is waiting for an in progress action
In progressThe action needed asynchronous execution and is being performed
CancelingThe action is being canceled by user request
CanceledThe action has been canceled
SuccessThe action was executed successfully
FailedThere was an issue when the action was being performed. Check the logs for more information.
+ +

List all actions

+
import dockercloud
+
+actions = dockercloud.Action.list()
+
+
import "github.com/docker/go-dockercloud/dockercloud"
+
+actionList, err := dockercloud.ListActions()
+
+if err != nil {
+  log.Println(err)
+}
+
+log.Println(actionList)
+
+
GET /api/audit/v1/action/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParameterDescription
uuidFilter by UUID.
stateFilter by state. Possible values: In progress, Success, Failed
start_dateFilter 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_dateFilter 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)
objectFilter by resource URI of the related object. This filter can only be combined with ‘include_related’ filter
include_relatedThere 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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ObjectRelationships
ContainerContainer, service, stack (if any)
ServiceAll containers in the service, service, stack (if any)
StackAll services in the stack, all containers in every service in the stack, stack
NodeNode, node cluster (if any)
Node clusterAll nodes in the cluster, node cluster
+ +

Get an action by UUID

+
import dockercloud
+
+action = dockercloud.Action.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
+
+
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)
+
+
GET /api/audit/v1/action/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
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

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the action to retrieve
+ +

Get the logs of an action

+ +
+

Example log line

+
+
{
+    "type": "log",
+    "log": "Log line from the action",
+    "timestamp": 1433779324
+}
+
+
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)
+
+
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)
+}
+
+
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
+
+
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

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the action to retrieve logs
+ +

Query Parameters

+ + + + + + + + + + + + + + + +
ParameterDescription
tailNumber of lines to show from the end of the logs (default: 300)
followWhether to stream logs or close the connection immediately (default: true)
+ +

Cancel an action

+
POST /api/audit/v1/action/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/cancel/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
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

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the action to cancel
+ +

Retry an action

+
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)
+
+
POST /api/audit/v1/action/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/retry/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
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)
+
+
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

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the action to retry
+ +
+
+
+
+
+ + + + +
+ + diff --git a/apidocs/docker-cloud/includes/availabilityzone.html b/apidocs/docker-cloud/includes/availabilityzone.html new file mode 100644 index 0000000000..50dbeb9038 --- /dev/null +++ b/apidocs/docker-cloud/includes/availabilityzone.html @@ -0,0 +1,196 @@ + + + + + + + API Documentation + + + + + + + + + + + + NAV + + + +
+ +
+
+
+
+
+
+

Availability Zones

+ +

Availability Zone

+ +
+

Example

+
+
{
+    "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

+ + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescription
availableWhether the availability zone is currently available for new node deployments
nameAn identifier for the availability zone
regionThe resource URI of the region where the availability zone is allocated
resource_uriA unique API endpoint that represents the zone
+ +

List all availability zones

+
import dockercloud
+
+az = dockercloud.AZ.list()
+
+
GET /api/infra/v1/az/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
import "github.com/docker/go-dockercloud/dockercloud"
+
+az, err := dockercloud.ListAZ()
+if err != nil {
+    log.Println(err)
+}
+
+log.Println(az)
+
+
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

+ + + + + + + + + + + + + + + +
ParameterDescription
nameFilter by availability zone name
regionFilter by resource URI of the target region
+ +

Get an individual availability zone

+
import dockercloud
+
+az = dockercloud.AZ.fetch("aws/sa-east-1/sa-east-1a")
+
+
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)
+
+
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

+ + + + + + + + + + + + + + + + + + + +
ParameterDescription
nameThe name of the availability zone to retrieve
providerThe name of the provider
regionThe name of the region
+ +
+
+
+
+
+ + + + +
+ + diff --git a/apidocs/docker-cloud/includes/container.html b/apidocs/docker-cloud/includes/container.html new file mode 100644 index 0000000000..fc1a525191 --- /dev/null +++ b/apidocs/docker-cloud/includes/container.html @@ -0,0 +1,1183 @@ + + + + + + + API Documentation + + + + + + + + + + + + NAV + + + +
+ +
+
+
+
+
+
+

Containers

+ +

Container

+ +
+

Example

+
+
{
+    "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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescription
uuidA unique identifier for the container generated automatically on creation
resource_uriA unique API endpoint that represents the container
image_nameThe Docker image name and tag of the container
bindingsA list of volume bindings that the container has mounted (see table Container Binding attributes below)
nameA user provided name for the container (inherited from the service)
nodeThe resource URI of the node where this container is running
serviceThe resource URI of the service which this container is part of
public_dnsThe external FQDN of the container
stateThe state of the container (see table Container states below)
synchronizedFlag indicating if the container is synchronized with the current service definition.
exit_codeThe numeric exit code of the container (if applicable, null otherwise)
exit_code_msgA string representation of the exit code of the container (if applicable, null otherwise)
deployed_datetimeThe date and time of the last deployment of the container (if applicable, null otherwise)
started_datetimeThe date and time of the last start operation on the container (if applicable, null otherwise)
stopped_datetimeThe date and time of the last stop operation on the container (if applicable, null otherwise)
destroyed_datetimeThe date and time of the terminate operation on the container (if applicable, null otherwise)
container_portsList of published ports of this container (see table Container Port attributes below)
container_envvarsList 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)
labelsContainer metadata in form of dictionary
working_dirWorking directory for running binaries within a container
userUser used on the container on launch
hostnameHostname used on the container on launch
domainnameDomainname used on the container on launch
mac_addressEthernet device’s MAC address used on the container on launch
cgroup_nameOptional parent cgroup for the container.
ttyIf the container has the tty enable
stdin_openIf the container has stdin opened
dnsContainer custom DNS servers
dns_searchContainer custom DNS search domain
cap_addContainer added capabilities
cap_dropContainer dropped capabilities
devicesList of container device mappings
extra_hostsList of container hostname mappings
secuirty_optLabeling scheme of this container
entrypointEntrypoint used on the container on launch
run_commandRun command used on the container on launch
cpu_sharesThe relative CPU priority of the container (see Runtime Constraints on CPU and Memory for more information)
cpusetCPUs in which execution is allowed
memoryThe memory limit of the container in MB (see Runtime Constraints on CPU and Memory for more information)
memory_swapTotal memory limit (memory + swap) of the container in MB
autorestartWhether to restart the container automatically if it stops (see Crash recovery for more information)
autodestroyWhether to terminate the container automatically if it stops (see Autodestroy for more information)
rolesList of Docker Cloud roles asigned to this container (see API roles for more information))
linked_to_containerList of IP addresses of the linked containers (see table Container Link attributes below and Service links for more information)
link_variablesList of environment variables that would be exposed in any container that is linked to this one
privilegedWhether the container has Docker’s privileged flag set or not (see Runtime privilege for more information)
read_onlyWhether the container filesystem is read-only or not
private_ipIP address of the container on the overlay network. This IP will be reachable from any other container.
netNetwork mode set on the container (see table Network Modes below, more information ../../reference/run/#network-settings)
pidPID (Process) Namespace mode for the container (more information ../../reference/run/#pid-settings-pid)
+ +

Container Binding attributes

+ + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescription
host_pathThe host path of the volume
container_pathThe container path where the volume is mounted
rewritabletrue is the volume has writable permissions
volumeThe resource URI of the volume
+ +

Container Port attributes

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescription
protocolThe protocol of the port, either tcp or udp
inner_portThe published port number inside the container
outer_portThe published port number in the node public network interface
port_nameName of the service associated to this port
uri_protocolThe protocol to be used in the endpoint for this port (i.e. http)
endpoint_uriThe URI of the endpoint for this port
publishedWhether 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

+ + + + + + + + + + + + + + + +
AttributeDescription
keyThe name of the environment variable
valueThe value of the environment variable
+ +

Container States

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StateDescription
StartingThe container is being deployed or started (from Stopped). No actions allowed in this state.
RunningThe container is deployed and running. Possible actions in this state: stop, terminate.
StoppingThe container is being stopped. No actions allowed in this state.
StoppedThe container is stopped. Possible actions in this state: start, terminate.
TerminatingThe container is being deleted. No actions allowed in this state.
TerminatedThe container has been deleted. No actions allowed in this state.
+ +

Network Modes

+ + + + + + + + + + + + + + + +
StrategyDescription
bridgeCreates a new network stack for the container on the docker bridge.
hostUses the host network stack inside the container.
+ +

Container Last Metric attributes

+ + + + + + + + + + + + + + + + + + + +
AttributeDescription
cpuCPU percentage usage
memoryMemory usage in bytes
diskDisk storage usage in bytes
+ + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescription
nameThe name given to the link
from_containerThe resource URI of the “client” container
to_containerThe resource URI of the “server” container being linked
endpointsA dictionary with the endpoints (protocol, IP and port) to be used to reach each of the “server” container exposed ports
+ +

List all containers

+
import dockercloud
+
+containers = dockercloud.Container.list()
+
+
import "github.com/docker/go-dockercloud/dockercloud"
+
+containerList, err := dockercloud.ListContainers()
+
+if err != nil {
+  log.Println(err)
+}
+
+log.Println(containerList)
+
+
GET /api/app/v1/container/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParameterDescription
uuidFilter by UUID
stateFilter by state. Possible values: Starting, Running, Stopping, Stopped, Terminating, Terminated
nameFilter by container name
serviceFilter by resource URI of the target service.
nodeFilter by resource URI of the target node.
+ +

Get an existing container

+
import dockercloud
+
+container = dockercloud.Container.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
+
+
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)
+
+
GET /api/app/v1/container/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
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

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the container to retrieve
+ +

Get the logs of a container

+ +
+

Example log line

+
+
{
+    "type": "log",
+    "log": "Log line from the container",
+    "streamType": "stdout",
+    "timestamp": 1433779324
+}
+
+
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)
+
+
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)
+    }
+
+
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
+
+
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

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the container to retrieve logs
+ +

Query Parameters

+ + + + + + + + + + + + + + + + + + + +
ParameterDescription
tailNumber of lines to show from the end of the logs (default: 300)
followWhether to stream logs or close the connection immediately (default: true)
serviceFilter by service (resource URI)
+ +

Start a container

+
import dockercloud
+
+container = dockercloud.Container.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
+container.start()
+
+
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)
+}
+
+
POST /api/app/v1/container/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/start/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
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

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the container to start
+ +

Stop a container

+
import dockercloud
+
+container = dockerlcoud.Container.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
+container.stop()
+
+
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)
+   }
+
+
POST /api/app/v1/container/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/stop/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
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

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the container to stop
+ +

Redeploy a container

+
import dockercloud
+
+container = dockercloud.Container.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
+container.redeploy()
+
+
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)
+}
+
+
POST /api/app/v1/container/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/start/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
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

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the container to redeploy
+ +

Query Parameters

+ + + + + + + + + + + +
ParameterDescription
reuse_volumesWheather to reuse container volumes for this redeploy operation or not (default: true).
+ +

Terminate a container

+
import dockercloud
+
+container = dockercloud.Container.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
+container.delete()
+
+
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)
+   }
+
+
DELETE /api/app/v1/container/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
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

+ + + + + + + + + + + +
ParameterDescription
uuidThe 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)
+
+
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)
+
+
+
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

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the container where the command will be executed
+ +

Query Parameters

+ + + + + + + + + + + +
ParameterDescription
commandCommand to be executed (default: sh)
+ +
+
+
+
+
+ + + + +
+ + diff --git a/apidocs/docker-cloud/includes/dockercloud-events.html b/apidocs/docker-cloud/includes/dockercloud-events.html new file mode 100644 index 0000000000..18de3d3ad5 --- /dev/null +++ b/apidocs/docker-cloud/includes/dockercloud-events.html @@ -0,0 +1,237 @@ + + + + + + + API Documentation + + + + + + + + + + + + NAV + + + +
+ +
+
+
+
+
+
+

Docker Cloud Events

+ +

Docker Cloud Event

+ +
+

Example

+
+
{
+    "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:

+ + + +

Attributes

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescription
typeType of object that was created or updated. For possible values, check the events types table below.
actionType of action that was executed on the object. Posible values: create, update or delete
parentsList of resource URIs (REST API) of the parents of the object, according to the “Parent-child hierarchy” table below
resource_uriResource URI (REST API) of the object that was created or updated. You can do a GET operation on this URL to fetch its details
stateThe current state of the object
uuidUnique identifier for the event
datetimeDate and time of the event in ISO 8601 format
+ +

Event types

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TypeDescription
stackWhenever a Stack is created or updated
serviceWhenever a Service is created or updated
containerWhenever a Container is created or updated
nodeclusterWhenever a Node Cluster is created or updated
nodeWhenever a Node is created or updated
actionWhenever a Action is created or updated
errorSent when an error occurs on the websocket connection or as part of the authentication process
+ +

Parent-child hierarchy

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Object typeParent types
Stack(None)
ServiceStack
ContainerService, Stack, Node, Node Cluster
Node Cluster(None)
NodeNode Cluster
Action(object to which the action applies to)
+ +

Listen to new Docker Cloud Events

+
import dockercloud
+
+def process_event(event):
+    print event
+
+events = dockercloud.Events()
+events.on_message(process_event)
+events.run_forever()
+
+
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)
+    }
+}
+
+
GET /api/audit/v1/events/ HTTP/1.1
+Host: ws.cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Connection: Upgrade
+Upgrade: websocket
+
+
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/

+ +
+
+
+
+
+ + + + +
+ + diff --git a/apidocs/docker-cloud/includes/node.html b/apidocs/docker-cloud/includes/node.html new file mode 100644 index 0000000000..97c00fa348 --- /dev/null +++ b/apidocs/docker-cloud/includes/node.html @@ -0,0 +1,560 @@ + + + + + + + API Documentation + + + + + + + + + + + + NAV + + + +
+ +
+
+
+
+
+
+

Nodes

+ +

Node

+ +
+

Example

+
+
{
+    "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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescription
availability_zoneThe resource URI of the availability zone where the node is deployed, if any
uuidA unique identifier for the node generated automatically on creation
resource_uriA unique API endpoint that represents the node
external_fqdnAn automatically generated FQDN for the node. Containers deployed on this node will inherit this FQDN.
stateThe state of the node. See the below table for a list of possible states.
node_clusterThe resource URI of the node cluster to which this node belongs to (if applicable)
node_typeThe resource URI of the node type used for the node
regionThe resource URI of the region where the node is deployed
docker_execdriverDocker’s execution driver used in the node
docker_graphdriverDocker’s storage driver used in the node
docker_versionDocker’s version used in the node
cpuNode number of CPUs
diskNode storage size in GB
memoryNode memory in MB
current_num_containersThe actual number of containers deployed in this node
last_seenDate and time of the last time the node was contacted by Docker Cloud
public_ipThe public IP allocated to the node
tunnelIf 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_datetimeThe date and time when this node cluster was deployed
destroyed_datetimeThe date and time when this node cluster was terminated (if applicable)
tagsList of tags to identify the node when deploying services (see Tags for more information)
nicknameA user-friendly name for the node (external_fqdn by default)
+ +

Node states

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StateDescription
DeployingThe node is being deployed in the cloud provider. No actions allowed in this state.
DeployedThe node is deployed and provisioned and is ready to deploy containers. Possible actions in this state: terminate, docker-upgrade.
UnreachableThe node is deployed but Docker Cloud cannot connect to the docker daemon. Possible actions in this state: health-check and terminate.
UpgradingThe node docker daemon is being upgraded. No actions allowed in this state.
TerminatingThe node is being terminated in the cloud provider. No actions allowed in this state.
TerminatedThe node has been terminated and is no longer present in the cloud provider. No actions allowed in this state.
+ +

Node Last Metric attributes

+ + + + + + + + + + + + + + + + + + + +
AttributeDescription
cpuCPU percentage usage
memoryMemory usage in bytes
diskDisk storage usage in bytes
+ +

List all nodes

+
import dockercloud
+
+nodes = dockercloud.Node.list()
+
+
import "github.com/docker/go-dockercloud/dockercloud"
+
+nodeList, err := dockercloud.ListNodes()
+
+if err != nil {
+  log.Println(err)
+}
+
+log.Println(nodeList)
+
+
GET /api/infra/v1/node/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParameterDescription
uuidFilter by UUID
stateFilter by state. Possible values: Deploying, Deployed, Unreachable, Upgrading, Terminating, Terminated
node_clusterFilter by resource URI of the target node cluster
node_typeFilter by resource URI of the target node type
regionFilter by resource URI of the target region
docker_versionFilter by Docker engine version running in the nodes
+ +

Get an existing node

+
import dockercloud
+
+node = dockercloud.Node.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
+
+
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)
+
+
GET /api/infra/v1/node/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
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

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the node to retrieve
+ +

Update a node

+
import dockercloud
+
+node = dockercloud.Node.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
+node.tags.add(["tag-1"])
+node.save()
+
+
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)
+}
+
+
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"}
+
+
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

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the node to retrieve
+ +

JSON Parameters

+ + + + + + + + + + + + + + + +
ParameterDescription
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

+
import dockercloud
+
+node = dockercloud.Node.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
+node.upgrade_docker()
+
+
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)
+   }
+
+
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
+
+
docker-cloud node upgrade 7eaf7fff
+
+ +

Upgrades the docker daemon of the node. This will restart your containers on that node. See 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

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the node to upgrade
+ +

Perform a health check of a node

+
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

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the node to perform the health check to
+ +

Terminate a node

+
import dockercloud
+
+node = dockercloud.Node.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
+node.delete()
+
+
DELETE /api/infra/v1/node/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
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)
+}
+
+
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

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the node to terminate
+ +
+
+
+
+
+ + + + +
+ + diff --git a/apidocs/docker-cloud/includes/nodecluster.html b/apidocs/docker-cloud/includes/nodecluster.html new file mode 100644 index 0000000000..0b1089efa5 --- /dev/null +++ b/apidocs/docker-cloud/includes/nodecluster.html @@ -0,0 +1,589 @@ + + + + + + + API Documentation + + + + + + + + + + + + NAV + + + +
+ +
+
+
+
+
+
+

Node Clusters

+ +

Node Cluster

+ +
+

Example

+
+
{
+    "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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescription
uuidA unique identifier for the node cluster generated automatically on creation
resource_uriA unique API endpoint that represents the node cluster
nameA user provided name for the node cluster
stateThe state of the node cluster. See the below table for a list of possible states.
node_typeThe resource URI of the node type used for the node cluster
diskThe size of the disk where images and containers are stored (in GB)
nodesA list of resource URIs of the Node objects on the node cluster
regionThe resource URI of the Region object where the node cluster is deployed
target_num_nodesThe desired number of nodes for the node cluster
current_num_nodesThe 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_datetimeThe date and time when this node cluster was deployed
destroyed_datetimeThe date and time when this node cluster was terminated (if applicable)
tagsList of tags to identify the node cluster nodes when deploying services (see Tags for more information)
provider_optionsProvider-specific extra options for the deployment of the node (see Provider options table below for more information)
nicknameA user-friendly name for the node cluster (name by default)
+ +

Node Cluster states

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StateDescription
InitThe node cluster has been created and has no deployed containers yet. Possible actions in this state: deploy, terminate.
DeployingAll nodes in the cluster are either deployed or being deployed. No actions allowed in this state.
DeployedAll nodes in the cluster are deployed and provisioned. Possible actions in this state: terminate.
Partly deployedOne or more nodes of the cluster are deployed and running. Possible actions in this state: terminate.
ScalingThe cluster is either deploying new nodes or terminating existing ones responding to a scaling request. No actions allowed in this state.
TerminatingAll nodes in the cluster are either being terminated or already terminated. No actions allowed in this state.
TerminatedThe node cluster and all its nodes have been terminated. No actions allowed in this state.
Empty clusterThere 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:

+ + + +

List all node clusters

+
import dockercloud
+
+nodeclusters = dockercloud.NodeCluster.list()
+
+
import "github.com/docker/go-dockercloud/dockercloud"
+
+nodeclusters, err := dockercloud.ListNodeClusters()
+
+if err != nil {
+  log.Println(err)
+}
+
+log.Println(nodeclusters)
+
+
GET /api/infra/v1/nodecluster/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParameterDescription
uuidFilter by UUID
stateFilter by state. Possible values: Init, Deploying, Deployed, Partly deployed, Scaling, Terminating, Terminated, Empty cluster
nameFilter by node cluster name
regionFilter by resource URI of the target region
node_typeFilter by resource URI of the target node type
+ +

Create a new node cluster

+
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()
+
+
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)
+
+
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}
+
+
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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParameterDescription
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 for more information) (default: [])
provider_optionsProvider-specific extra options for the deployment of the node (see table Provider options above for more information)
+ +

Get an existing node cluster

+
import dockercloud
+
+service = dockercloud.NodeCluster.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
+
+
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)
+
+
GET /api/infra/v1/nodecluster/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
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

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the node cluster to retrieve
+ +

Deploy a node cluster

+
import dockercloud
+
+nodecluster = dockercloud.NodeCluster.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
+nodecluster.deploy()
+
+
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)
+}
+
+
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

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the node cluster to deploy
+ +

Update an existing node cluster

+
import dockercloud
+
+nodecluster = dockercloud.NodeCluster.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
+nodecluster.target_num_nodes = 3
+nodecluster.tags.add("tag-1")
+nodecluster.save()
+
+
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)
+}
+
+
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"}]}
+
+
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

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the node cluster to update
+ +

JSON Parameters

+ + + + + + + + + + + + + + + +
ParameterDescription
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

+
import dockercloud
+
+nodecluster = dockercloud.NodeCluster.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
+nodecluster.delete()
+
+
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)
+}
+
+
DELETE /api/infra/v1/nodecluster/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
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

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the node cluster to terminate
+ +
+
+
+
+
+ + + + +
+ + diff --git a/apidocs/docker-cloud/includes/nodetype.html b/apidocs/docker-cloud/includes/nodetype.html new file mode 100644 index 0000000000..1707bc8c21 --- /dev/null +++ b/apidocs/docker-cloud/includes/nodetype.html @@ -0,0 +1,222 @@ + + + + + + + API Documentation + + + + + + + + + + + + NAV + + + +
+ +
+
+
+
+
+
+

Node Types

+ +

Node Type

+ +
+

Example

+
+
{
+    "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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescription
resource_uriA unique API endpoint that represents the node type
nameAn identifier for the node type
labelA user-friendly name for the node type
regionsA list of resource URIs of the regions to which this node type can be deployed to
availability_zonesA list of resource URIs of the availability zones to which this node type can be deployed to
providerThe resource URI of the provider of the node type
availableWhether the node type is currently available for new node deployments
+ +

List all node types

+
import dockercloud
+
+nodetypes = dockercloud.NodeType.list()
+
+
import "github.com/docker/go-dockercloud/dockercloud"
+
+nodetypeList, err := dockercloud.ListNodeTypes()
+
+if err != nil {
+  log.Println(err)
+}
+
+log.Println(nodetypeList)
+
+
GET /api/infra/v1/nodetype/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
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

+ + + + + + + + + + + + + + + + + + + +
ParameterDescription
nameFilter by node type name
regionsFilter by resource URI of the target regions
availability_zonesFilter by resource URI of the target availability zones
+ +

Get an individual node type

+
import dockercloud
+
+nodetype = dockercloud.NodeType.fetch("digitalocean/1gb")
+
+
import "github.com/docker/go-dockercloud/dockercloud"
+
+nodetype, err := dockercloud.GetNodeType("digitalocean","1gb")
+
+if err != nil {
+  log.Println(err)
+}
+
+log.Println(nodetype)
+
+
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

+ + + + + + + + + + + + + + + +
ParameterDescription
nameThe name of the node type to retrieve
provider.nameThe name of the provider of the node type
+ +
+
+
+
+
+ + + + +
+ + diff --git a/apidocs/docker-cloud/includes/provider.html b/apidocs/docker-cloud/includes/provider.html new file mode 100644 index 0000000000..391f43a01f --- /dev/null +++ b/apidocs/docker-cloud/includes/provider.html @@ -0,0 +1,201 @@ + + + + + + + API Documentation + + + + + + + + + + + + NAV + + + +
+ +
+
+
+
+
+
+

Providers

+ +

Provider

+ +
+

Example

+
+
{
+    "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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescription
resource_uriA unique API endpoint that represents the provider
nameA unique identifier for the provider
labelA user-friendly name for the provider
regionsA list of resource URIs of the regions available in this provider
availableWhether the provider is currently available for new node deployments
+ +

List all providers

+
import dockercloud
+
+providers = dockercloud.Provider.list()
+
+
GET /api/infra/v1/provider/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
import "github.com/docker/go-dockercloud/dockercloud"
+
+providerList, err := dockercloud.ListProviders()
+
+if err != nil {
+  log.Println(err)
+}
+
+log.Println(providerList)
+
+
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

+ + + + + + + + + + + +
ParameterDescription
nameFilter by provider name
+ +

Get an individual provider

+
import dockercloud
+
+provider = dockercloud.Provider.fetch("digitalocean")
+
+
import "github.com/docker/go-dockercloud/dockercloud"
+
+provider, err := dockercloud.GetProvider("digitalocean")
+
+if err != nil {
+  log.Println(err)
+}
+
+log.Println(provider)
+
+
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

+ + + + + + + + + + + +
ParameterDescription
nameThe name of the provider to retrieve
+ +
+
+
+
+
+ + + + +
+ + diff --git a/apidocs/docker-cloud/includes/region.html b/apidocs/docker-cloud/includes/region.html new file mode 100644 index 0000000000..fa42f26285 --- /dev/null +++ b/apidocs/docker-cloud/includes/region.html @@ -0,0 +1,218 @@ + + + + + + + API Documentation + + + + + + + + + + + + NAV + + + +
+ +
+
+
+
+
+
+

Regions

+ +

Region

+ +
+

Example

+
+
{
+    "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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescription
resource_uriA unique API endpoint that represents the region
nameAn identifier for the region
labelA user-friendly name for the region
node_typesA list of resource URIs of the node types available in the region
availability_zonesA list of resource URIs of the availability zones available in the region
providerThe resource URI of the provider of the region
availableWhether the region is currently available for new node deployments
+ +

List all regions

+
import dockercloud
+
+regions = dockercloud.Region.list()
+
+
GET /api/infra/v1/region/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
import "github.com/docker/go-dockercloud/dockercloud"
+
+regionList, err := dockercloud.ListRegions()
+
+if err != nil {
+  log.Println(err)
+}
+
+log.Println(regionList)
+
+
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

+ + + + + + + + + + + + + + + +
ParameterDescription
nameFilter by region name
providerFilter by resource URI of the target provider
+ +

Get an individual region

+
import dockercloud
+
+region = dockercloud.Region.fetch("digitalocean/lon1")
+
+
import "github.com/docker/go-dockercloud/dockercloud"
+
+region, err := dockercloud.GetRegion("digitalocean","lon1")
+
+if err != nil {
+  log.Println(err)
+}
+
+log.Println(region)
+
+
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

+ + + + + + + + + + + + + + + +
ParameterDescription
nameThe name of the region to retrieve
provider.nameThe name of the provider of the region
+ +
+
+
+
+
+ + + + +
+ + diff --git a/apidocs/docker-cloud/includes/registry.html b/apidocs/docker-cloud/includes/registry.html new file mode 100644 index 0000000000..93e49d2216 --- /dev/null +++ b/apidocs/docker-cloud/includes/registry.html @@ -0,0 +1,178 @@ + + + + + + + API Documentation + + + + + + + + + + + + NAV + + + +
+ +
+
+
+
+
+
+

Registries

+ +

Registry

+ +
+

Example

+
+
{
+  "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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescription
resource_uriA unique API endpoint that represents the registry
nameHuman-readable name of the registry
hostFQDN of the registry, i.e. registry-1.docker.io
is_docker_registryWhether this registry is run by Docker
is_sslWhether this registry has SSL activated or not
portThe port number where the registry is listening to
+ +

List all registries

+
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

+ + + + + + + + + + + + + + + + + + + + + + + +
ParameterDescription
uuidFilter by UUID
nameFilter by registry name
hostFilter by registry host
is_docker_registryFilter by whether the registry is run by Docker or not. Possible values: ‘true’ or 'false’
+ +

Get an existing registry

+
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

+ + + + + + + + + + + +
ParameterDescription
hostThe host of the registry to retrieve
+ +
+
+
+
+
+ + + + +
+ + diff --git a/apidocs/docker-cloud/includes/repository.html b/apidocs/docker-cloud/includes/repository.html new file mode 100644 index 0000000000..8897ac6839 --- /dev/null +++ b/apidocs/docker-cloud/includes/repository.html @@ -0,0 +1,358 @@ + + + + + + + API Documentation + + + + + + + + + + + + NAV + + + +
+ +
+
+
+
+
+
+

External Repositories

+ +

External Repository

+ +
+

Example

+
+
{
+  "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

+ + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescription
resource_uriA unique API endpoint that represents the repository
nameName of the repository, i.e. quay.io/tutum/ubuntu
in_useIf the image is being used by any of your services
registryResource URI of the registry where this image is hosted
+ +

List all external repositories

+
import dockercloud
+
+repositories = dockercloud.Repository.list()
+
+
GET /api/repo/v1/repository/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
import "github.com/docker/go-dockercloud/dockercloud"
+
+repositoriesList, err := dockercloud.ListRepositories()
+
+if err != nil {
+    log.Println(err)
+}
+
+log.Pringln(repositoriesList)
+
+
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

+ + + + + + + + + + + + + + + +
ParameterDescription
nameFilter by image name
registryFilter by resource URI of the target repository registry
+ +

Add a new external repository

+
import dockercloud
+
+repository = dockercloud.Repository.create(name="registry.local/user1/image1", username=username, password=password)
+repository.save()
+
+
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"}
+
+
import "github.com/docker/go-dockercloud/dockercloud"
+
+image, err := dockercloud.CreateImage(dockercloud.ImageCreateRequest{
+  Name: "registry.local/user1/image1",
+  Username: "username",
+  Password: "password"
+})
+
+
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

+ + + + + + + + + + + + + + + + + + + +
ParameterDescription
nameName of the repository, i.e. ‘quay.io/tutum/hello-world’
usernameUsername to authenticate with the third party registry
passwordPassword to authenticate with the third party registry
+ +

Get an external repository details

+
import dockercloud
+
+repository = dockercloud.Repository.fetch("registry.local/user1/image1")
+
+
GET /api/repo/v1/repository/registry.local/user1/image1/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
import "github.com/docker/go-dockercloud/dockercloud"
+
+repository, err = dockercloud.GetRepository("registry.local/user1/image1")
+
+if err != nil {
+    log.Println(err)
+}
+
+log.Println(repository)
+
+
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

+ + + + + + + + + + + +
ParameterDescription
nameThe name of the repository to retrieve
+ +

Update credentials of an external repository

+
import dockercloud
+
+repository = dockercloud.Repository.fetch("registry.local/user1/image1")
+repository.username = "new username"
+repository.password = "new password"
+repository.save()
+
+
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"}
+
+
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

+ + + + + + + + + + + +
ParameterDescription
nameThe name of the repository to update
+ +

JSON Parameters

+ + + + + + + + + + + + + + + +
ParameterDescription
usernameUsername to authenticate with the private registry
passwordPassword to authenticate with the private registry
+ +

Remove an external repository

+
import dockercloud
+
+repository = dockercloud.Repository.fetch("registry.local/user1/image1")
+repository.delete()
+
+
DELETE /api/repo/v1/repository/registry.local/user1/image1/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
import "github.com/docker/go-dockercloud/dockercloud"
+
+repository, err = dockercloud.GetRepository("registry.local/user1/image1")
+
+if err != nil {
+    log.Println(err)
+}
+
+repository.Remove()
+
+
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

+ + + + + + + + + + + +
ParameterDescription
nameThe name of the external repository to remove
+ +
+
+
+
+
+ + + + +
+ + diff --git a/apidocs/docker-cloud/includes/service.html b/apidocs/docker-cloud/includes/service.html new file mode 100644 index 0000000000..26a66e7c00 --- /dev/null +++ b/apidocs/docker-cloud/includes/service.html @@ -0,0 +1,1479 @@ + + + + + + + API Documentation + + + + + + + + + + + + NAV + + + +
+ +
+
+
+
+
+
+

Services

+ +

Service

+ +
+

Example

+
+
{
+  "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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescription
uuidA unique identifier for the service generated automatically on creation
resource_uriA unique API endpoint that represents the service
image_nameThe Docker image name and tag used for the service containers
nameA 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_dnsAn 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). If the service is not publishing any ports, this FQDN will fail to resolve.
stateThe state of the service (see table Service states below)
netNetwork mode to set on the containers (see table Network Modes below, more information ../../docker-cloud/apps/service-links/)
pidSet the PID (Process) Namespace mode for the containers (more information ../../reference/run/#pid-settings-pid)
synchronizedFlag indicating if the current service definition is synchronized with the current containers.
deployed_datetimeThe date and time of the last deployment of the service (if applicable, null otherwise)
started_datetimeThe date and time of the last start operation on the service (if applicable, null otherwise)
stopped_datetimeThe date and time of the last stop operation on the service (if applicable, null otherwise)
destroyed_datetimeThe date and time of the terminate operation on the service (if applicable, null otherwise)
target_num_containersThe requested number of containers to deploy for the service
current_num_containersThe actual number of containers deployed for the service
running_num_containersThe actual number of containers deployed for the service in Running state
stopped_num_containersThe actual number of containers deployed for the service in Stopped state
stackResource URIs of the stack that the service belongs to
containersList of resource URIs of the containers launched as part of the service
container_portsList of ports to be published on the containers of this service (see table Service Port attributes below)
container_envvarsList 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)
labelsMetadata in form of dictionary used for every container of this service
working_dirWorking directory for running binaries within a container of this service
userSet the user used on containers of this service (root by default)
hostnameSet the hostname used on containers of this service
domainnameSet the domainname used on containers of this service
mac_addressEthernet device’s MAC address used on containers of this service
cgroup_nameOptional parent cgroup used on containers of this service.
ttyIf the containers of this service have the tty enable (false by default)
stdin_openIf the containers of this service have stdin opened (false by default)
dnsCustom DNS servers for containers of this service
dns_searchCustom DNS search domain for containers of this service
cap_addAdded capabilities for containers of this service
cap_dropDropped capabilities for containers of this service
devicesList of device mappings for containers of this service
extra_hostsList of hostname mappings for containers of this service
secuirty_optLabeling scheme for containers of this service
entrypointEntrypoint to be set on the containers launched as part of the service, which will override the image entrypoint
run_commandRun command to be set on the containers launched as part of the service, which will override the image run command
sequential_deploymentWhether the containers for this service should be deployed in sequence, linking each of them to the previous containers (see Service scaling for more information)
cpu_sharesThe relative CPU priority of the containers of the service (see Runtime Constraints on CPU and Memory for more information)
cpusetCPUs in which to allow execution
memoryThe memory limit of the containers of the service in MB (see Runtime Constraints on CPU and Memory for more information)
memory_swapTotal memory limit (memory + swap) of the containers of the service in MB
linked_from_serviceA list of services that are linked to this one (see table Related services attributes below)
linked_to_serviceA list of services that the service is linked to (see table Related services attributes below)
bindingsA list of volume bindings that the service has mounted (see table Service binding attributes below)
autorestartWhether to restart the containers of the service automatically if they stop (see Crash recovery for more information)
autodestroyWhether to terminate the containers of the service automatically if they stop (see Autodestroy for more information)
rolesList of Docker Cloud roles assigned to this service (see Service links for more information)
link_variablesList of environment variables that would be exposed in the containers if they are linked to this service
privilegedWhether 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 for more information)
read_onlyWhether the filesystem of every service container is read-only or not (false by default)
deployment_strategyContainer distribution among nodes (see table Deployment strategies below and Deployment strategies for more information)
tagsList of tags to be used to deploy the service (see Tags for more information)
autoredeployWhether to redeploy the containers of the service when its image is updated in Docker Cloud registry (see Docker Cloud’s private registry for more information)
nicknameA user-friendly name for the service (name by default)
+ +

Service binding attributes

+ + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescription
host_pathThe host path of the volume
container_pathThe container path where the volume is mounted
rewritabletrue is the volume has writable permissions
volumes_fromThe resource URI of the service
+ +

Service Port attributes

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescription
protocolThe protocol of the port, either tcp or udp
inner_portThe published port number inside the container
outer_portThe published port number in the node public network interface
port_nameName of the service associated to this port
endpoint_uriThe URI of the service endpoint for this port
publishedWhether 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

+ + + + + + + + + + + + + + + +
AttributeDescription
keyThe name of the environment variable
valueThe value of the environment variable
+ + + + + + + + + + + + + + + + + + + + + +
AttributeDescription
nameThe link name
from_serviceThe resource URI of the origin of the link
to_serviceThe resource URI of the target of the link
+ +

Service states

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StateDescription
Not runningThe service has been created and has no deployed containers yet. Possible actions in this state: start, terminate.
StartingAll containers for the service are either starting or already running. No actions allowed in this state.
RunningAll containers for the service are deployed and running. Possible actions in this state: stop, redeploy, terminate.
Partly runningOne or more containers of the service are deployed and running. Possible actions in this state: stop, redeploy, terminate.
ScalingThe service is either deploying new containers or destroying existing ones responding to a scaling request. No actions allowed in this state.
RedeployingThe service is redeploying all its containers with the updated configuration. No actions allowed in this state.
StoppingAll containers for the service are either stopping or already stopped. No actions allowed in this state.
StoppedAll containers for the service are stopped. Possible actions in this state: start, redeploy, terminate.
TerminatingAll containers for the service are either being terminated or already terminated. No actions allowed in this state.
TerminatedThe service and all its containers have been terminated. No actions allowed in this state.
+ +

Deployment strategies

+ + + + + + + + + + + + + + + + + + + +
StrategyDescription
EMPTIEST_NODEIt will deploy containers to the node with the lower total amount of running containers (default).
HIGH_AVAILABILITYIt will deploy containers to the node with the lower amount of running containers of the same service.
EVERY_NODEIt 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

+ + + + + + + + + + + + + + + +
StrategyDescription
bridgeCreates a new network stack for the container on the docker bridge.
hostUses the host network stack inside the container.
+ +

List all services

+
import dockercloud
+
+services = dockercloud.Service.list()
+
+
import "github.com/docker/go-dockercloud/dockercloud"
+
+serviceList, err := dockercloud.ListServices()
+
+if err != nil {
+  log.Println(err)
+}
+
+log.Println(serviceList)
+
+
GET /api/app/v1/service/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
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

+ + + + + + + + + + + + + + + + + + + + + + + +
ParameterDescription
uuidFilter by UUID
stateFilter by state. Possible values: Not running, Starting, Running, Partly running, Scaling, Redeploying, Stopping, Stopped, Terminating, Terminated
nameFilter by service name
stackFilter by resource URI of the target stack.
+ +

Create a new service

+
import dockercloud
+
+service = dockercloud.Service.create(image="tutum/hello-world", name="my-new-app", target_num_containers=2)
+service.save()
+
+
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)
+
+
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}
+
+
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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParameterDescription
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 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 for more information)
sequential_deployment(optional) Whether the containers should be launched and scaled in sequence, i.e. true (default: false) (see 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 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 for more information)
deployment_strategy(optional) Container distribution among nodes (default: EMPTIEST_NODE, see table Deployment strategies above and Deployment strategies for more information)
tags(optional) A list of tags to be used to deploy the service (see 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 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)
+ + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescription
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

+ + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescription
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

+ + + + + + + + + + + + + + + +
AttributeDescription
key(required) The name of the environment variable
value(required) The value of the environment variable
+ + + + + + + + + + + + + + + + + +
AttributeDescription
to_service(required) The resource URI of the target of the link
name(optional) The link name
+ +

Get an existing service

+
import dockercloud
+
+service = dockercloud.Service.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
+
+
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)
+
+
GET /api/app/v1/service/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
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

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the service to retrieve
+ +

Get the logs of a service

+ +
+

Example log line

+
+
{
+    "type": "log",
+    "source": "wordpress-stackable-1",
+    "log": "Log line from the container indicated by 'source'",
+    "streamType": "stdout",
+    "timestamp": 1433779324
+}
+
+
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)
+
+
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)
+    }
+
+
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
+
+
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

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the service to retrieve logs
+ +

Query Parameters

+ + + + + + + + + + + + + + + +
ParameterDescription
tailNumber of lines to show from the end of the logs (default: 300)
followWhether to stream logs or close the connection immediately (default: true)
+ +

Update an existing service

+
import dockercloud
+
+service = dockercloud.Service.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
+service.target_num_containers = 3
+service.tags.append({"name":"tag-1"})
+service.save()
+
+
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)
+}
+
+
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}
+
+
+
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

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the service to update
+ +

JSON Parameters

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParameterDescription
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 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 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 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 for more information)
privileged(optional) Whether to start the containers with Docker’s privileged flag set or not, i.e. false (see Runtime privilege 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 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 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 for more information)
autoredeployWhether to redeploy the containers of the service when its image is updated in Docker Cloud registry (see Docker Cloud’s private registry 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

+
import dockercloud
+
+service = dockercloud.Service.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
+service.start()
+
+
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)
+}
+
+
POST /api/app/v1/service/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/start/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
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

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the service to start
+ +

Stop a service

+
import dockercloud
+
+service = dockercloud.Service.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
+service.stop()
+
+
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)
+}
+
+
POST /api/app/v1/service/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/stop/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
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

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the service to stop
+ +

Scale a service

+
import dockercloud
+
+service = dockercloud.Service.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
+service.target_num_containers = 3
+service.save()
+service.scale()
+
+
POST /api/app/v1/service/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/scale/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
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

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the service to scale
+ +

Redeploy a service

+
import dockercloud
+
+service = dockercloud.Service.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
+service.redeploy()
+
+
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)
+}
+
+
POST /api/app/v1/service/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/redeploy/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
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

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the service to redeploy
+ +

Query Parameters

+ + + + + + + + + + + +
ParameterDescription
reuse_volumesWheather to reuse container volumes for this redeploy operation or not (default: true).
+ +

Terminate a service

+
import dockercloud
+
+service = dockercloud.Service.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
+service.delete()
+
+
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)
+}
+
+
DELETE /api/app/v1/service/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
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

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the service to terminate
+ +
+
+
+
+
+ + + + +
+ + diff --git a/apidocs/docker-cloud/includes/stack.html b/apidocs/docker-cloud/includes/stack.html new file mode 100644 index 0000000000..e62384203f --- /dev/null +++ b/apidocs/docker-cloud/includes/stack.html @@ -0,0 +1,695 @@ + + + + + + + API Documentation + + + + + + + + + + + + NAV + + + +
+ +
+
+
+
+
+
+

Stacks

+ +

Stack

+ +
+

Example

+
+
{
+  "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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescription
uuidA unique identifier for the stack generated automatically on creation
resource_uriA unique API endpoint that represents the stack
nameA user provided name for the stack.
stateThe state of the stack (see table Stack states below)
synchronizedFlag indicating if the current stack definition is synchronized with their services.
servicesList of service resource URIs belonging to the stack
deployed_datetimeThe date and time of the last deployment of the stack (if applicable, null otherwise)
destroyed_datetimeThe date and time of the terminate operation on the stack (if applicable, null otherwise)
nicknameA user-friendly name for the stack (name by default)
+ +

Stack states

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StateDescription
Not RunningThe stack has been created and has no deployed services yet. Possible actions in this state: start, terminate.
StartingAll services for the stack are either starting or already running. No actions allowed in this state.
RunningAll services for the service are deployed and running. Possible actions in this state: redeploy, terminate.
Partly runningOne or more services of the stack are deployed and running. Possible actions in this state: redeploy, terminate.
StoppingAll services for the stack are either stopping or already stopped. No actions allowed in this state.
StoppedAll services for the service are stopped. Possible actions in this state: start, redeploy, terminate.
RedeployingThe stack is redeploying all its services with the updated configuration. No actions allowed in this state.
TerminatingAll services for the stack are either being terminated or already terminated. No actions allowed in this state.
TerminatedThe stack and all its services have been terminated. No actions allowed in this state.
+ +

List all stacks

+
import dockercloud
+
+stacks = dockercloud.Stack.list()
+
+
import "github.com/docker/go-dockercloud/dockercloud"
+
+stackList, err := dockercloud.ListStacks()
+
+if err != nil {
+  log.Println(err)
+}
+
+log.Println(stackList)
+
+
GET /api/app/v1/stack/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
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

+ + + + + + + + + + + + + + + +
ParameterDescription
uuidFilter by UUID
nameFilter by stack name
+ +

Create a new stack

+
import dockercloud
+
+stack = dockercloud.Stack.create(name="my-new-stack", services=[{"name": "hello-word", "image": "tutum/hello-world", "target_num_containers": 2}])
+stack.save()
+
+
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)
+
+
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"
+        }
+    ]
+}
+
+
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.

+ +

Endpoint Type

+ +

Available in Docker Cloud’s REST API

+ +

HTTP Request

+ +

POST /api/app/v1/stack/

+ +

JSON Parameters

+ + + + + + + + + + + + + + + + + + + +
ParameterDescription
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 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

+
import dockercloud
+
+stack = dockercloud.Stack.fetch("46aca402-2109-4a70-a378-760cfed43816")
+stack.export()
+
+
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)
+}
+
+
GET /api/app/v1/stack/46aca402-2109-4a70-a378-760cfed43816/export/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
docker-cloud stack export 46aca402
+
+ +

Get a JSON representation of the stack following the Stack YAML representation.

+ +

Endpoint Type

+ +

Available in Docker Cloud’s REST API

+ +

HTTP Request

+ +

GET /api/app/v1/stack/(uuid)/export/

+ +

Path Parameters

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the stack to retrieve
+ +

Get an existing stack

+
import dockercloud
+
+stack = dockercloud.Stack.fetch("46aca402-2109-4a70-a378-760cfed43816")
+
+
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)
+
+
GET /api/app/v1/stack/46aca402-2109-4a70-a378-760cfed43816/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
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

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the stack to retrieve
+ +

Update an existing stack

+
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()
+
+
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)
+}
+
+
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"
+        }
+    ]
+}
+
+
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

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the stack to update
+ +

JSON Parameters

+ + + + + + + + + + + +
ParameterDescription
services(optional) List of services belonging to the stack. Each service accepts the same parameters as a 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

+
import dockercloud
+
+stack = dockercloud.Stack.fetch("46aca402-2109-4a70-a378-760cfed43816")
+stack.stop()
+
+
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)
+}
+
+
POST /api/app/v1/stack/46aca402-2109-4a70-a378-760cfed43816/stop/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
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

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the stack to stop
+ +

Start a stack

+
import dockercloud
+
+stack = dockercloud.Stack.fetch()
+stack.start()
+
+
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)
+}
+
+
POST /api/app/v1/stack/46aca402-2109-4a70-a378-760cfed43816/start/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
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

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the stack to start
+ +

Redeploy a stack

+
import dockercloud
+
+stack = dockercloud.Stack.fetch("46aca402-2109-4a70-a378-760cfed43816")
+stack.redeploy()
+
+
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)
+}
+
+
POST /api/app/v1/stack/46aca402-2109-4a70-a378-760cfed43816/redeploy/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
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

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the stack to redeploy
+ +

Query Parameters

+ + + + + + + + + + + +
ParameterDescription
reuse_volumesWheather to reuse container volumes for this redeploy operation or not (default: true).
+ +

Terminate a stack

+
import dockercloud
+
+stack = dockercloud.Stack.fetch("46aca402-2109-4a70-a378-760cfed43816")
+stack.delete()
+
+
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)
+}
+
+
DELETE /api/app/v1/stack/46aca402-2109-4a70-a378-760cfed43816/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
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

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the stack to terminate
+ +
+
+
+
+
+ + + + +
+ + diff --git a/apidocs/docker-cloud/includes/tag.html b/apidocs/docker-cloud/includes/tag.html new file mode 100644 index 0000000000..c56bec4170 --- /dev/null +++ b/apidocs/docker-cloud/includes/tag.html @@ -0,0 +1,121 @@ + + + + + + + API Documentation + + + + + + + + + + + + NAV + + + +
+ +
+
+
+
+
+
+

Tags

+ +

Tag

+ +
+

Example

+
+
{
+    "name": "byon=false",
+    "origin": "tutum"
+}
+
+ +

Tags are used to target the deployment of services to a specific set of nodes. Learn more

+ +

Attributes

+ + + + + + + + + + + + + + + +
AttributeDescription
nameName of the tag
originPossible values: user, tutum
+ +

List all node tags

+
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

+ + + + + + + + + + + + + + + +
ParameterDescription
nameFilter by name
originFilter by origin. Possible values: user, tutum
+ +
+
+
+
+
+ + + + +
+ + diff --git a/apidocs/docker-cloud/includes/triggers.html b/apidocs/docker-cloud/includes/triggers.html new file mode 100644 index 0000000000..b44f4ea437 --- /dev/null +++ b/apidocs/docker-cloud/includes/triggers.html @@ -0,0 +1,389 @@ + + + + + + + API Documentation + + + + + + + + + + + + NAV + + + +
+ +
+
+
+
+
+
+

Triggers

+ +

Service triggers

+ +
+

Example

+
+
{
+  "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 for more information.

+ +

Attributes

+ + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescription
urlAddress to be used to call the trigger with a POST request
nameA user provided name for the trigger
operationThe operation that the trigger call performs (see table Operations below)
resource_uriA unique API endpoint that represents the trigger
+ +

Operations

+ + + + + + + + + + + + + + + +
OperationDescription
REDEPLOYPerforms a redeploy service operation.
SCALEUPPerforms a scale up service operation.
+ +

List all triggers

+
import dockercloud
+
+service = dockercloud.Service.fetch('61a29874-9134-48f9-b460-f37d4bec4826')
+trigger = dockercloud.Trigger.fetch(service)
+trigger.list()
+
+
GET /api/app/v1/service/61a29874-9134-48f9-b460-f37d4bec4826/trigger/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
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)
+
+
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

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the service the triggers are associated to
+ +

Create a new trigger

+
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()
+
+
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)
+
+
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"}
+
+
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

+ + + + + + + + + + + + + + + +
ParameterDescription
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

+
import dockercloud
+
+service = dockercloud.Service.fetch('61a29874-9134-48f9-b460-f37d4bec4826')
+trigger = dockercloud.Trigger.fetch(service)
+
+
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)
+
+
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

+ + + + + + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the service the triggers are associated to
trigger_uuidThe UUID of the trigger to retrieve
+ +

Delete a trigger

+
import dockercloud
+
+service = dockercloud.Service.fetch('61a29874-9134-48f9-b460-f37d4bec4826')
+trigger = dockercloud.Trigger.fetch(service)
+trigger.delete("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
+
+
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")
+
+
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
+
+
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

+ + + + + + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the associated service
trigger_uuidThe UUID of the trigger to delete
+ +

Call a trigger

+
import dockercloud
+
+service = dockercloud.Service.fetch('61a29874-9134-48f9-b460-f37d4bec4826')
+trigger = dockercloud.Trigger.fetch(service)
+trigger.call("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
+
+
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")
+
+
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

+ + + + + + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the associated service
trigger_uuidThe UUID of the trigger to call
+ +
+
+
+
+
+ + + + +
+ + diff --git a/apidocs/docker-cloud/index.html b/apidocs/docker-cloud/index.html new file mode 100644 index 0000000000..07094e54d5 --- /dev/null +++ b/apidocs/docker-cloud/index.html @@ -0,0 +1,6545 @@ + + + + + + + Docker Cloud API reference + + + + + + + + + + + + + NAV + + + +
+ +
+ http + go + python + CLI +
+ + +
+
+
+
+
+
+

Introduction

+ +

Docker Cloud currently offers a HTTP REST API and a Websocket Stream API which are used by both the Web UI and the 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 and Go SDK.

+ +

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

+
import dockercloud
+dockercloud.user = "username"
+dockercloud.apikey = "apikey"
+
+
import "github.com/docker/go-dockercloud/dockercloud"
+
+dockercloud.User = "username"
+dockercloud.ApiKey = "apikey"
+
+
GET /api/app/v1/service/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
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

+
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])
+
+
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)
+}
+
+
GET /api/audit/v1/events HTTP/1.1
+Host: ws.cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Connection: Upgrade
+Upgrade: websocket
+
+
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 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/

+ +

Actions

+ +

Action

+ +
+

Example

+
+
{
+    "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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescription
resource_uriA unique API endpoint that represents the action
uuidA unique identifier for the action generated automatically on creation
objectThe API object (resource URI) to which the action applies to
actionName of the operation performed/being performed
methodHTTP method used to access the API
pathHTTP path of the API accessed
user_agentThe user agent provided by the client when accessing the API endpoint
start_dateDate and time when the API call was performed and the operation started processing
end_dateDate and time when the API call finished processing
stateState of the operation (see table below)
ipIP address of the user that performed the API call
locationGeographic location of the IP address of the user that performed the API call
is_user_actionIf the action has been triggered by the user
can_be_canceledIf the action can be canceled by the user in the middle of its execution
can_be_retriedIf the action can be retried by the user
+ +

Action states

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StateDescription
PendingThe action needed asynchronous execution and it is waiting for an in progress action
In progressThe action needed asynchronous execution and is being performed
CancelingThe action is being canceled by user request
CanceledThe action has been canceled
SuccessThe action was executed successfully
FailedThere was an issue when the action was being performed. Check the logs for more information.
+ +

List all actions

+
import dockercloud
+
+actions = dockercloud.Action.list()
+
+
import "github.com/docker/go-dockercloud/dockercloud"
+
+actionList, err := dockercloud.ListActions()
+
+if err != nil {
+  log.Println(err)
+}
+
+log.Println(actionList)
+
+
GET /api/audit/v1/action/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParameterDescription
uuidFilter by UUID.
stateFilter by state. Possible values: In progress, Success, Failed
start_dateFilter 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_dateFilter 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)
objectFilter by resource URI of the related object. This filter can only be combined with ‘include_related’ filter
include_relatedThere 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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ObjectRelationships
ContainerContainer, service, stack (if any)
ServiceAll containers in the service, service, stack (if any)
StackAll services in the stack, all containers in every service in the stack, stack
NodeNode, node cluster (if any)
Node clusterAll nodes in the cluster, node cluster
+ +

Get an action by UUID

+
import dockercloud
+
+action = dockercloud.Action.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
+
+
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)
+
+
GET /api/audit/v1/action/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
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

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the action to retrieve
+ +

Get the logs of an action

+ +
+

Example log line

+
+
{
+    "type": "log",
+    "log": "Log line from the action",
+    "timestamp": 1433779324
+}
+
+
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)
+
+
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)
+}
+
+
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
+
+
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

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the action to retrieve logs
+ +

Query Parameters

+ + + + + + + + + + + + + + + +
ParameterDescription
tailNumber of lines to show from the end of the logs (default: 300)
followWhether to stream logs or close the connection immediately (default: true)
+ +

Cancel an action

+
POST /api/audit/v1/action/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/cancel/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
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

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the action to cancel
+ +

Retry an action

+
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)
+
+
POST /api/audit/v1/action/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/retry/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
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)
+
+
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

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the action to retry
+ +

Providers

+ +

Provider

+ +
+

Example

+
+
{
+    "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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescription
resource_uriA unique API endpoint that represents the provider
nameA unique identifier for the provider
labelA user-friendly name for the provider
regionsA list of resource URIs of the regions available in this provider
availableWhether the provider is currently available for new node deployments
+ +

List all providers

+
import dockercloud
+
+providers = dockercloud.Provider.list()
+
+
GET /api/infra/v1/provider/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
import "github.com/docker/go-dockercloud/dockercloud"
+
+providerList, err := dockercloud.ListProviders()
+
+if err != nil {
+  log.Println(err)
+}
+
+log.Println(providerList)
+
+
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

+ + + + + + + + + + + +
ParameterDescription
nameFilter by provider name
+ +

Get an individual provider

+
import dockercloud
+
+provider = dockercloud.Provider.fetch("digitalocean")
+
+
import "github.com/docker/go-dockercloud/dockercloud"
+
+provider, err := dockercloud.GetProvider("digitalocean")
+
+if err != nil {
+  log.Println(err)
+}
+
+log.Println(provider)
+
+
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

+ + + + + + + + + + + +
ParameterDescription
nameThe name of the provider to retrieve
+ +

Regions

+ +

Region

+ +
+

Example

+
+
{
+    "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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescription
resource_uriA unique API endpoint that represents the region
nameAn identifier for the region
labelA user-friendly name for the region
node_typesA list of resource URIs of the node types available in the region
availability_zonesA list of resource URIs of the availability zones available in the region
providerThe resource URI of the provider of the region
availableWhether the region is currently available for new node deployments
+ +

List all regions

+
import dockercloud
+
+regions = dockercloud.Region.list()
+
+
GET /api/infra/v1/region/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
import "github.com/docker/go-dockercloud/dockercloud"
+
+regionList, err := dockercloud.ListRegions()
+
+if err != nil {
+  log.Println(err)
+}
+
+log.Println(regionList)
+
+
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

+ + + + + + + + + + + + + + + +
ParameterDescription
nameFilter by region name
providerFilter by resource URI of the target provider
+ +

Get an individual region

+
import dockercloud
+
+region = dockercloud.Region.fetch("digitalocean/lon1")
+
+
import "github.com/docker/go-dockercloud/dockercloud"
+
+region, err := dockercloud.GetRegion("digitalocean","lon1")
+
+if err != nil {
+  log.Println(err)
+}
+
+log.Println(region)
+
+
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

+ + + + + + + + + + + + + + + +
ParameterDescription
nameThe name of the region to retrieve
provider.nameThe name of the provider of the region
+ +

Availability Zones

+ +

Availability Zone

+ +
+

Example

+
+
{
+    "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

+ + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescription
availableWhether the availability zone is currently available for new node deployments
nameAn identifier for the availability zone
regionThe resource URI of the region where the availability zone is allocated
resource_uriA unique API endpoint that represents the zone
+ +

List all availability zones

+
import dockercloud
+
+az = dockercloud.AZ.list()
+
+
GET /api/infra/v1/az/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
import "github.com/docker/go-dockercloud/dockercloud"
+
+az, err := dockercloud.ListAZ()
+if err != nil {
+    log.Println(err)
+}
+
+log.Println(az)
+
+
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

+ + + + + + + + + + + + + + + +
ParameterDescription
nameFilter by availability zone name
regionFilter by resource URI of the target region
+ +

Get an individual availability zone

+
import dockercloud
+
+az = dockercloud.AZ.fetch("aws/sa-east-1/sa-east-1a")
+
+
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)
+
+
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

+ + + + + + + + + + + + + + + + + + + +
ParameterDescription
nameThe name of the availability zone to retrieve
providerThe name of the provider
regionThe name of the region
+ +

Node Types

+ +

Node Type

+ +
+

Example

+
+
{
+    "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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescription
resource_uriA unique API endpoint that represents the node type
nameAn identifier for the node type
labelA user-friendly name for the node type
regionsA list of resource URIs of the regions to which this node type can be deployed to
availability_zonesA list of resource URIs of the availability zones to which this node type can be deployed to
providerThe resource URI of the provider of the node type
availableWhether the node type is currently available for new node deployments
+ +

List all node types

+
import dockercloud
+
+nodetypes = dockercloud.NodeType.list()
+
+
import "github.com/docker/go-dockercloud/dockercloud"
+
+nodetypeList, err := dockercloud.ListNodeTypes()
+
+if err != nil {
+  log.Println(err)
+}
+
+log.Println(nodetypeList)
+
+
GET /api/infra/v1/nodetype/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
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

+ + + + + + + + + + + + + + + + + + + +
ParameterDescription
nameFilter by node type name
regionsFilter by resource URI of the target regions
availability_zonesFilter by resource URI of the target availability zones
+ +

Get an individual node type

+
import dockercloud
+
+nodetype = dockercloud.NodeType.fetch("digitalocean/1gb")
+
+
import "github.com/docker/go-dockercloud/dockercloud"
+
+nodetype, err := dockercloud.GetNodeType("digitalocean","1gb")
+
+if err != nil {
+  log.Println(err)
+}
+
+log.Println(nodetype)
+
+
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

+ + + + + + + + + + + + + + + +
ParameterDescription
nameThe name of the node type to retrieve
provider.nameThe name of the provider of the node type
+ +

Node Clusters

+ +

Node Cluster

+ +
+

Example

+
+
{
+    "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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescription
uuidA unique identifier for the node cluster generated automatically on creation
resource_uriA unique API endpoint that represents the node cluster
nameA user provided name for the node cluster
stateThe state of the node cluster. See the below table for a list of possible states.
node_typeThe resource URI of the node type used for the node cluster
diskThe size of the disk where images and containers are stored (in GB)
nodesA list of resource URIs of the Node objects on the node cluster
regionThe resource URI of the Region object where the node cluster is deployed
target_num_nodesThe desired number of nodes for the node cluster
current_num_nodesThe 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_datetimeThe date and time when this node cluster was deployed
destroyed_datetimeThe date and time when this node cluster was terminated (if applicable)
tagsList of tags to identify the node cluster nodes when deploying services (see Tags for more information)
provider_optionsProvider-specific extra options for the deployment of the node (see Provider options table below for more information)
nicknameA user-friendly name for the node cluster (name by default)
+ +

Node Cluster states

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StateDescription
InitThe node cluster has been created and has no deployed containers yet. Possible actions in this state: deploy, terminate.
DeployingAll nodes in the cluster are either deployed or being deployed. No actions allowed in this state.
DeployedAll nodes in the cluster are deployed and provisioned. Possible actions in this state: terminate.
Partly deployedOne or more nodes of the cluster are deployed and running. Possible actions in this state: terminate.
ScalingThe cluster is either deploying new nodes or terminating existing ones responding to a scaling request. No actions allowed in this state.
TerminatingAll nodes in the cluster are either being terminated or already terminated. No actions allowed in this state.
TerminatedThe node cluster and all its nodes have been terminated. No actions allowed in this state.
Empty clusterThere 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:

+ + + +

List all node clusters

+
import dockercloud
+
+nodeclusters = dockercloud.NodeCluster.list()
+
+
import "github.com/docker/go-dockercloud/dockercloud"
+
+nodeclusters, err := dockercloud.ListNodeClusters()
+
+if err != nil {
+  log.Println(err)
+}
+
+log.Println(nodeclusters)
+
+
GET /api/infra/v1/nodecluster/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParameterDescription
uuidFilter by UUID
stateFilter by state. Possible values: Init, Deploying, Deployed, Partly deployed, Scaling, Terminating, Terminated, Empty cluster
nameFilter by node cluster name
regionFilter by resource URI of the target region
node_typeFilter by resource URI of the target node type
+ +

Create a new node cluster

+
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()
+
+
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)
+
+
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}
+
+
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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParameterDescription
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 for more information) (default: [])
provider_optionsProvider-specific extra options for the deployment of the node (see table Provider options above for more information)
+ +

Get an existing node cluster

+
import dockercloud
+
+service = dockercloud.NodeCluster.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
+
+
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)
+
+
GET /api/infra/v1/nodecluster/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
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

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the node cluster to retrieve
+ +

Deploy a node cluster

+
import dockercloud
+
+nodecluster = dockercloud.NodeCluster.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
+nodecluster.deploy()
+
+
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)
+}
+
+
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

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the node cluster to deploy
+ +

Update an existing node cluster

+
import dockercloud
+
+nodecluster = dockercloud.NodeCluster.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
+nodecluster.target_num_nodes = 3
+nodecluster.tags.add("tag-1")
+nodecluster.save()
+
+
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)
+}
+
+
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"}]}
+
+
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

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the node cluster to update
+ +

JSON Parameters

+ + + + + + + + + + + + + + + +
ParameterDescription
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

+
import dockercloud
+
+nodecluster = dockercloud.NodeCluster.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
+nodecluster.delete()
+
+
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)
+}
+
+
DELETE /api/infra/v1/nodecluster/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
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

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the node cluster to terminate
+ +

Nodes

+ +

Node

+ +
+

Example

+
+
{
+    "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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescription
availability_zoneThe resource URI of the availability zone where the node is deployed, if any
uuidA unique identifier for the node generated automatically on creation
resource_uriA unique API endpoint that represents the node
external_fqdnAn automatically generated FQDN for the node. Containers deployed on this node will inherit this FQDN.
stateThe state of the node. See the below table for a list of possible states.
node_clusterThe resource URI of the node cluster to which this node belongs to (if applicable)
node_typeThe resource URI of the node type used for the node
regionThe resource URI of the region where the node is deployed
docker_execdriverDocker’s execution driver used in the node
docker_graphdriverDocker’s storage driver used in the node
docker_versionDocker’s version used in the node
cpuNode number of CPUs
diskNode storage size in GB
memoryNode memory in MB
current_num_containersThe actual number of containers deployed in this node
last_seenDate and time of the last time the node was contacted by Docker Cloud
public_ipThe public IP allocated to the node
tunnelIf 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_datetimeThe date and time when this node cluster was deployed
destroyed_datetimeThe date and time when this node cluster was terminated (if applicable)
tagsList of tags to identify the node when deploying services (see Tags for more information)
nicknameA user-friendly name for the node (external_fqdn by default)
+ +

Node states

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StateDescription
DeployingThe node is being deployed in the cloud provider. No actions allowed in this state.
DeployedThe node is deployed and provisioned and is ready to deploy containers. Possible actions in this state: terminate, docker-upgrade.
UnreachableThe node is deployed but Docker Cloud cannot connect to the docker daemon. Possible actions in this state: health-check and terminate.
UpgradingThe node docker daemon is being upgraded. No actions allowed in this state.
TerminatingThe node is being terminated in the cloud provider. No actions allowed in this state.
TerminatedThe node has been terminated and is no longer present in the cloud provider. No actions allowed in this state.
+ +

Node Last Metric attributes

+ + + + + + + + + + + + + + + + + + + +
AttributeDescription
cpuCPU percentage usage
memoryMemory usage in bytes
diskDisk storage usage in bytes
+ +

List all nodes

+
import dockercloud
+
+nodes = dockercloud.Node.list()
+
+
import "github.com/docker/go-dockercloud/dockercloud"
+
+nodeList, err := dockercloud.ListNodes()
+
+if err != nil {
+  log.Println(err)
+}
+
+log.Println(nodeList)
+
+
GET /api/infra/v1/node/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParameterDescription
uuidFilter by UUID
stateFilter by state. Possible values: Deploying, Deployed, Unreachable, Upgrading, Terminating, Terminated
node_clusterFilter by resource URI of the target node cluster
node_typeFilter by resource URI of the target node type
regionFilter by resource URI of the target region
docker_versionFilter by Docker engine version running in the nodes
+ +

Get an existing node

+
import dockercloud
+
+node = dockercloud.Node.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
+
+
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)
+
+
GET /api/infra/v1/node/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
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

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the node to retrieve
+ +

Update a node

+
import dockercloud
+
+node = dockercloud.Node.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
+node.tags.add(["tag-1"])
+node.save()
+
+
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)
+}
+
+
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"}
+
+
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

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the node to retrieve
+ +

JSON Parameters

+ + + + + + + + + + + + + + + +
ParameterDescription
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

+
import dockercloud
+
+node = dockercloud.Node.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
+node.upgrade_docker()
+
+
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)
+   }
+
+
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
+
+
docker-cloud node upgrade 7eaf7fff
+
+ +

Upgrades the docker daemon of the node. This will restart your containers on that node. See 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

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the node to upgrade
+ +

Perform a health check of a node

+
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

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the node to perform the health check to
+ +

Terminate a node

+
import dockercloud
+
+node = dockercloud.Node.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
+node.delete()
+
+
DELETE /api/infra/v1/node/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
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)
+}
+
+
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

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the node to terminate
+ +

Registries

+ +

Registry

+ +
+

Example

+
+
{
+  "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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescription
resource_uriA unique API endpoint that represents the registry
nameHuman-readable name of the registry
hostFQDN of the registry, i.e. registry-1.docker.io
is_docker_registryWhether this registry is run by Docker
is_sslWhether this registry has SSL activated or not
portThe port number where the registry is listening to
+ +

List all registries

+
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

+ + + + + + + + + + + + + + + + + + + + + + + +
ParameterDescription
uuidFilter by UUID
nameFilter by registry name
hostFilter by registry host
is_docker_registryFilter by whether the registry is run by Docker or not. Possible values: ‘true’ or 'false’
+ +

Get an existing registry

+
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

+ + + + + + + + + + + +
ParameterDescription
hostThe host of the registry to retrieve
+ +

External Repositories

+ +

External Repository

+ +
+

Example

+
+
{
+  "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

+ + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescription
resource_uriA unique API endpoint that represents the repository
nameName of the repository, i.e. quay.io/tutum/ubuntu
in_useIf the image is being used by any of your services
registryResource URI of the registry where this image is hosted
+ +

List all external repositories

+
import dockercloud
+
+repositories = dockercloud.Repository.list()
+
+
GET /api/repo/v1/repository/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
import "github.com/docker/go-dockercloud/dockercloud"
+
+repositoriesList, err := dockercloud.ListRepositories()
+
+if err != nil {
+    log.Println(err)
+}
+
+log.Pringln(repositoriesList)
+
+
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

+ + + + + + + + + + + + + + + +
ParameterDescription
nameFilter by image name
registryFilter by resource URI of the target repository registry
+ +

Add a new external repository

+
import dockercloud
+
+repository = dockercloud.Repository.create(name="registry.local/user1/image1", username=username, password=password)
+repository.save()
+
+
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"}
+
+
import "github.com/docker/go-dockercloud/dockercloud"
+
+image, err := dockercloud.CreateImage(dockercloud.ImageCreateRequest{
+  Name: "registry.local/user1/image1",
+  Username: "username",
+  Password: "password"
+})
+
+
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

+ + + + + + + + + + + + + + + + + + + +
ParameterDescription
nameName of the repository, i.e. ‘quay.io/tutum/hello-world’
usernameUsername to authenticate with the third party registry
passwordPassword to authenticate with the third party registry
+ +

Get an external repository details

+
import dockercloud
+
+repository = dockercloud.Repository.fetch("registry.local/user1/image1")
+
+
GET /api/repo/v1/repository/registry.local/user1/image1/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
import "github.com/docker/go-dockercloud/dockercloud"
+
+repository, err = dockercloud.GetRepository("registry.local/user1/image1")
+
+if err != nil {
+    log.Println(err)
+}
+
+log.Println(repository)
+
+
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

+ + + + + + + + + + + +
ParameterDescription
nameThe name of the repository to retrieve
+ +

Update credentials of an external repository

+
import dockercloud
+
+repository = dockercloud.Repository.fetch("registry.local/user1/image1")
+repository.username = "new username"
+repository.password = "new password"
+repository.save()
+
+
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"}
+
+
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

+ + + + + + + + + + + +
ParameterDescription
nameThe name of the repository to update
+ +

JSON Parameters

+ + + + + + + + + + + + + + + +
ParameterDescription
usernameUsername to authenticate with the private registry
passwordPassword to authenticate with the private registry
+ +

Remove an external repository

+
import dockercloud
+
+repository = dockercloud.Repository.fetch("registry.local/user1/image1")
+repository.delete()
+
+
DELETE /api/repo/v1/repository/registry.local/user1/image1/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
import "github.com/docker/go-dockercloud/dockercloud"
+
+repository, err = dockercloud.GetRepository("registry.local/user1/image1")
+
+if err != nil {
+    log.Println(err)
+}
+
+repository.Remove()
+
+
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

+ + + + + + + + + + + +
ParameterDescription
nameThe name of the external repository to remove
+ +

Stacks

+ +

Stack

+ +
+

Example

+
+
{
+  "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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescription
uuidA unique identifier for the stack generated automatically on creation
resource_uriA unique API endpoint that represents the stack
nameA user provided name for the stack.
stateThe state of the stack (see table Stack states below)
synchronizedFlag indicating if the current stack definition is synchronized with their services.
servicesList of service resource URIs belonging to the stack
deployed_datetimeThe date and time of the last deployment of the stack (if applicable, null otherwise)
destroyed_datetimeThe date and time of the terminate operation on the stack (if applicable, null otherwise)
nicknameA user-friendly name for the stack (name by default)
+ +

Stack states

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StateDescription
Not RunningThe stack has been created and has no deployed services yet. Possible actions in this state: start, terminate.
StartingAll services for the stack are either starting or already running. No actions allowed in this state.
RunningAll services for the service are deployed and running. Possible actions in this state: redeploy, terminate.
Partly runningOne or more services of the stack are deployed and running. Possible actions in this state: redeploy, terminate.
StoppingAll services for the stack are either stopping or already stopped. No actions allowed in this state.
StoppedAll services for the service are stopped. Possible actions in this state: start, redeploy, terminate.
RedeployingThe stack is redeploying all its services with the updated configuration. No actions allowed in this state.
TerminatingAll services for the stack are either being terminated or already terminated. No actions allowed in this state.
TerminatedThe stack and all its services have been terminated. No actions allowed in this state.
+ +

List all stacks

+
import dockercloud
+
+stacks = dockercloud.Stack.list()
+
+
import "github.com/docker/go-dockercloud/dockercloud"
+
+stackList, err := dockercloud.ListStacks()
+
+if err != nil {
+  log.Println(err)
+}
+
+log.Println(stackList)
+
+
GET /api/app/v1/stack/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
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

+ + + + + + + + + + + + + + + +
ParameterDescription
uuidFilter by UUID
nameFilter by stack name
+ +

Create a new stack

+
import dockercloud
+
+stack = dockercloud.Stack.create(name="my-new-stack", services=[{"name": "hello-word", "image": "tutum/hello-world", "target_num_containers": 2}])
+stack.save()
+
+
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)
+
+
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"
+        }
+    ]
+}
+
+
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.

+ +

Endpoint Type

+ +

Available in Docker Cloud’s REST API

+ +

HTTP Request

+ +

POST /api/app/v1/stack/

+ +

JSON Parameters

+ + + + + + + + + + + + + + + + + + + +
ParameterDescription
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 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

+
import dockercloud
+
+stack = dockercloud.Stack.fetch("46aca402-2109-4a70-a378-760cfed43816")
+stack.export()
+
+
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)
+}
+
+
GET /api/app/v1/stack/46aca402-2109-4a70-a378-760cfed43816/export/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
docker-cloud stack export 46aca402
+
+ +

Get a JSON representation of the stack following the Stack YAML representation.

+ +

Endpoint Type

+ +

Available in Docker Cloud’s REST API

+ +

HTTP Request

+ +

GET /api/app/v1/stack/(uuid)/export/

+ +

Path Parameters

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the stack to retrieve
+ +

Get an existing stack

+
import dockercloud
+
+stack = dockercloud.Stack.fetch("46aca402-2109-4a70-a378-760cfed43816")
+
+
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)
+
+
GET /api/app/v1/stack/46aca402-2109-4a70-a378-760cfed43816/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
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

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the stack to retrieve
+ +

Update an existing stack

+
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()
+
+
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)
+}
+
+
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"
+        }
+    ]
+}
+
+
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

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the stack to update
+ +

JSON Parameters

+ + + + + + + + + + + +
ParameterDescription
services(optional) List of services belonging to the stack. Each service accepts the same parameters as a 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

+
import dockercloud
+
+stack = dockercloud.Stack.fetch("46aca402-2109-4a70-a378-760cfed43816")
+stack.stop()
+
+
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)
+}
+
+
POST /api/app/v1/stack/46aca402-2109-4a70-a378-760cfed43816/stop/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
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

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the stack to stop
+ +

Start a stack

+
import dockercloud
+
+stack = dockercloud.Stack.fetch()
+stack.start()
+
+
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)
+}
+
+
POST /api/app/v1/stack/46aca402-2109-4a70-a378-760cfed43816/start/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
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

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the stack to start
+ +

Redeploy a stack

+
import dockercloud
+
+stack = dockercloud.Stack.fetch("46aca402-2109-4a70-a378-760cfed43816")
+stack.redeploy()
+
+
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)
+}
+
+
POST /api/app/v1/stack/46aca402-2109-4a70-a378-760cfed43816/redeploy/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
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

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the stack to redeploy
+ +

Query Parameters

+ + + + + + + + + + + +
ParameterDescription
reuse_volumesWheather to reuse container volumes for this redeploy operation or not (default: true).
+ +

Terminate a stack

+
import dockercloud
+
+stack = dockercloud.Stack.fetch("46aca402-2109-4a70-a378-760cfed43816")
+stack.delete()
+
+
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)
+}
+
+
DELETE /api/app/v1/stack/46aca402-2109-4a70-a378-760cfed43816/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
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

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the stack to terminate
+ +

Services

+ +

Service

+ +
+

Example

+
+
{
+  "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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescription
uuidA unique identifier for the service generated automatically on creation
resource_uriA unique API endpoint that represents the service
image_nameThe Docker image name and tag used for the service containers
nameA 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_dnsAn 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). If the service is not publishing any ports, this FQDN will fail to resolve.
stateThe state of the service (see table Service states below)
netNetwork mode to set on the containers (see table Network Modes below, more information ../../docker-cloud/apps/service-links/)
pidSet the PID (Process) Namespace mode for the containers (more information ../../reference/run/#pid-settings-pid)
synchronizedFlag indicating if the current service definition is synchronized with the current containers.
deployed_datetimeThe date and time of the last deployment of the service (if applicable, null otherwise)
started_datetimeThe date and time of the last start operation on the service (if applicable, null otherwise)
stopped_datetimeThe date and time of the last stop operation on the service (if applicable, null otherwise)
destroyed_datetimeThe date and time of the terminate operation on the service (if applicable, null otherwise)
target_num_containersThe requested number of containers to deploy for the service
current_num_containersThe actual number of containers deployed for the service
running_num_containersThe actual number of containers deployed for the service in Running state
stopped_num_containersThe actual number of containers deployed for the service in Stopped state
stackResource URIs of the stack that the service belongs to
containersList of resource URIs of the containers launched as part of the service
container_portsList of ports to be published on the containers of this service (see table Service Port attributes below)
container_envvarsList 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)
labelsMetadata in form of dictionary used for every container of this service
working_dirWorking directory for running binaries within a container of this service
userSet the user used on containers of this service (root by default)
hostnameSet the hostname used on containers of this service
domainnameSet the domainname used on containers of this service
mac_addressEthernet device’s MAC address used on containers of this service
cgroup_nameOptional parent cgroup used on containers of this service.
ttyIf the containers of this service have the tty enable (false by default)
stdin_openIf the containers of this service have stdin opened (false by default)
dnsCustom DNS servers for containers of this service
dns_searchCustom DNS search domain for containers of this service
cap_addAdded capabilities for containers of this service
cap_dropDropped capabilities for containers of this service
devicesList of device mappings for containers of this service
extra_hostsList of hostname mappings for containers of this service
secuirty_optLabeling scheme for containers of this service
entrypointEntrypoint to be set on the containers launched as part of the service, which will override the image entrypoint
run_commandRun command to be set on the containers launched as part of the service, which will override the image run command
sequential_deploymentWhether the containers for this service should be deployed in sequence, linking each of them to the previous containers (see Service scaling for more information)
cpu_sharesThe relative CPU priority of the containers of the service (see Runtime Constraints on CPU and Memory for more information)
cpusetCPUs in which to allow execution
memoryThe memory limit of the containers of the service in MB (see Runtime Constraints on CPU and Memory for more information)
memory_swapTotal memory limit (memory + swap) of the containers of the service in MB
linked_from_serviceA list of services that are linked to this one (see table Related services attributes below)
linked_to_serviceA list of services that the service is linked to (see table Related services attributes below)
bindingsA list of volume bindings that the service has mounted (see table Service binding attributes below)
autorestartWhether to restart the containers of the service automatically if they stop (see Crash recovery for more information)
autodestroyWhether to terminate the containers of the service automatically if they stop (see Autodestroy for more information)
rolesList of Docker Cloud roles assigned to this service (see Service links for more information)
link_variablesList of environment variables that would be exposed in the containers if they are linked to this service
privilegedWhether 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 for more information)
read_onlyWhether the filesystem of every service container is read-only or not (false by default)
deployment_strategyContainer distribution among nodes (see table Deployment strategies below and Deployment strategies for more information)
tagsList of tags to be used to deploy the service (see Tags for more information)
autoredeployWhether to redeploy the containers of the service when its image is updated in Docker Cloud registry (see Docker Cloud’s private registry for more information)
nicknameA user-friendly name for the service (name by default)
+ +

Service binding attributes

+ + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescription
host_pathThe host path of the volume
container_pathThe container path where the volume is mounted
rewritabletrue is the volume has writable permissions
volumes_fromThe resource URI of the service
+ +

Service Port attributes

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescription
protocolThe protocol of the port, either tcp or udp
inner_portThe published port number inside the container
outer_portThe published port number in the node public network interface
port_nameName of the service associated to this port
endpoint_uriThe URI of the service endpoint for this port
publishedWhether 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

+ + + + + + + + + + + + + + + +
AttributeDescription
keyThe name of the environment variable
valueThe value of the environment variable
+ + + + + + + + + + + + + + + + + + + + + +
AttributeDescription
nameThe link name
from_serviceThe resource URI of the origin of the link
to_serviceThe resource URI of the target of the link
+ +

Service states

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StateDescription
Not runningThe service has been created and has no deployed containers yet. Possible actions in this state: start, terminate.
StartingAll containers for the service are either starting or already running. No actions allowed in this state.
RunningAll containers for the service are deployed and running. Possible actions in this state: stop, redeploy, terminate.
Partly runningOne or more containers of the service are deployed and running. Possible actions in this state: stop, redeploy, terminate.
ScalingThe service is either deploying new containers or destroying existing ones responding to a scaling request. No actions allowed in this state.
RedeployingThe service is redeploying all its containers with the updated configuration. No actions allowed in this state.
StoppingAll containers for the service are either stopping or already stopped. No actions allowed in this state.
StoppedAll containers for the service are stopped. Possible actions in this state: start, redeploy, terminate.
TerminatingAll containers for the service are either being terminated or already terminated. No actions allowed in this state.
TerminatedThe service and all its containers have been terminated. No actions allowed in this state.
+ +

Deployment strategies

+ + + + + + + + + + + + + + + + + + + +
StrategyDescription
EMPTIEST_NODEIt will deploy containers to the node with the lower total amount of running containers (default).
HIGH_AVAILABILITYIt will deploy containers to the node with the lower amount of running containers of the same service.
EVERY_NODEIt 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

+ + + + + + + + + + + + + + + +
StrategyDescription
bridgeCreates a new network stack for the container on the docker bridge.
hostUses the host network stack inside the container.
+ +

List all services

+
import dockercloud
+
+services = dockercloud.Service.list()
+
+
import "github.com/docker/go-dockercloud/dockercloud"
+
+serviceList, err := dockercloud.ListServices()
+
+if err != nil {
+  log.Println(err)
+}
+
+log.Println(serviceList)
+
+
GET /api/app/v1/service/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
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

+ + + + + + + + + + + + + + + + + + + + + + + +
ParameterDescription
uuidFilter by UUID
stateFilter by state. Possible values: Not running, Starting, Running, Partly running, Scaling, Redeploying, Stopping, Stopped, Terminating, Terminated
nameFilter by service name
stackFilter by resource URI of the target stack.
+ +

Create a new service

+
import dockercloud
+
+service = dockercloud.Service.create(image="tutum/hello-world", name="my-new-app", target_num_containers=2)
+service.save()
+
+
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)
+
+
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}
+
+
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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParameterDescription
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 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 for more information)
sequential_deployment(optional) Whether the containers should be launched and scaled in sequence, i.e. true (default: false) (see 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 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 for more information)
deployment_strategy(optional) Container distribution among nodes (default: EMPTIEST_NODE, see table Deployment strategies above and Deployment strategies for more information)
tags(optional) A list of tags to be used to deploy the service (see 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 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)
+ + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescription
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

+ + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescription
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

+ + + + + + + + + + + + + + + +
AttributeDescription
key(required) The name of the environment variable
value(required) The value of the environment variable
+ + + + + + + + + + + + + + + + + +
AttributeDescription
to_service(required) The resource URI of the target of the link
name(optional) The link name
+ +

Get an existing service

+
import dockercloud
+
+service = dockercloud.Service.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
+
+
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)
+
+
GET /api/app/v1/service/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
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

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the service to retrieve
+ +

Get the logs of a service

+ +
+

Example log line

+
+
{
+    "type": "log",
+    "source": "wordpress-stackable-1",
+    "log": "Log line from the container indicated by 'source'",
+    "streamType": "stdout",
+    "timestamp": 1433779324
+}
+
+
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)
+
+
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)
+    }
+
+
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
+
+
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

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the service to retrieve logs
+ +

Query Parameters

+ + + + + + + + + + + + + + + +
ParameterDescription
tailNumber of lines to show from the end of the logs (default: 300)
followWhether to stream logs or close the connection immediately (default: true)
+ +

Update an existing service

+
import dockercloud
+
+service = dockercloud.Service.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
+service.target_num_containers = 3
+service.tags.append({"name":"tag-1"})
+service.save()
+
+
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)
+}
+
+
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}
+
+
+
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

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the service to update
+ +

JSON Parameters

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParameterDescription
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 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 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 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 for more information)
privileged(optional) Whether to start the containers with Docker’s privileged flag set or not, i.e. false (see Runtime privilege 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 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 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 for more information)
autoredeployWhether to redeploy the containers of the service when its image is updated in Docker Cloud registry (see Docker Cloud’s private registry 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

+
import dockercloud
+
+service = dockercloud.Service.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
+service.start()
+
+
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)
+}
+
+
POST /api/app/v1/service/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/start/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
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

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the service to start
+ +

Stop a service

+
import dockercloud
+
+service = dockercloud.Service.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
+service.stop()
+
+
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)
+}
+
+
POST /api/app/v1/service/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/stop/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
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

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the service to stop
+ +

Scale a service

+
import dockercloud
+
+service = dockercloud.Service.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
+service.target_num_containers = 3
+service.save()
+service.scale()
+
+
POST /api/app/v1/service/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/scale/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
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

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the service to scale
+ +

Redeploy a service

+
import dockercloud
+
+service = dockercloud.Service.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
+service.redeploy()
+
+
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)
+}
+
+
POST /api/app/v1/service/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/redeploy/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
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

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the service to redeploy
+ +

Query Parameters

+ + + + + + + + + + + +
ParameterDescription
reuse_volumesWheather to reuse container volumes for this redeploy operation or not (default: true).
+ +

Terminate a service

+
import dockercloud
+
+service = dockercloud.Service.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
+service.delete()
+
+
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)
+}
+
+
DELETE /api/app/v1/service/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
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

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the service to terminate
+ +

Containers

+ +

Container

+ +
+

Example

+
+
{
+    "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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescription
uuidA unique identifier for the container generated automatically on creation
resource_uriA unique API endpoint that represents the container
image_nameThe Docker image name and tag of the container
bindingsA list of volume bindings that the container has mounted (see table Container Binding attributes below)
nameA user provided name for the container (inherited from the service)
nodeThe resource URI of the node where this container is running
serviceThe resource URI of the service which this container is part of
public_dnsThe external FQDN of the container
stateThe state of the container (see table Container states below)
synchronizedFlag indicating if the container is synchronized with the current service definition.
exit_codeThe numeric exit code of the container (if applicable, null otherwise)
exit_code_msgA string representation of the exit code of the container (if applicable, null otherwise)
deployed_datetimeThe date and time of the last deployment of the container (if applicable, null otherwise)
started_datetimeThe date and time of the last start operation on the container (if applicable, null otherwise)
stopped_datetimeThe date and time of the last stop operation on the container (if applicable, null otherwise)
destroyed_datetimeThe date and time of the terminate operation on the container (if applicable, null otherwise)
container_portsList of published ports of this container (see table Container Port attributes below)
container_envvarsList 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)
labelsContainer metadata in form of dictionary
working_dirWorking directory for running binaries within a container
userUser used on the container on launch
hostnameHostname used on the container on launch
domainnameDomainname used on the container on launch
mac_addressEthernet device’s MAC address used on the container on launch
cgroup_nameOptional parent cgroup for the container.
ttyIf the container has the tty enable
stdin_openIf the container has stdin opened
dnsContainer custom DNS servers
dns_searchContainer custom DNS search domain
cap_addContainer added capabilities
cap_dropContainer dropped capabilities
devicesList of container device mappings
extra_hostsList of container hostname mappings
secuirty_optLabeling scheme of this container
entrypointEntrypoint used on the container on launch
run_commandRun command used on the container on launch
cpu_sharesThe relative CPU priority of the container (see Runtime Constraints on CPU and Memory for more information)
cpusetCPUs in which execution is allowed
memoryThe memory limit of the container in MB (see Runtime Constraints on CPU and Memory for more information)
memory_swapTotal memory limit (memory + swap) of the container in MB
autorestartWhether to restart the container automatically if it stops (see Crash recovery for more information)
autodestroyWhether to terminate the container automatically if it stops (see Autodestroy for more information)
rolesList of Docker Cloud roles asigned to this container (see API roles for more information))
linked_to_containerList of IP addresses of the linked containers (see table Container Link attributes below and Service links for more information)
link_variablesList of environment variables that would be exposed in any container that is linked to this one
privilegedWhether the container has Docker’s privileged flag set or not (see Runtime privilege for more information)
read_onlyWhether the container filesystem is read-only or not
private_ipIP address of the container on the overlay network. This IP will be reachable from any other container.
netNetwork mode set on the container (see table Network Modes below, more information ../../reference/run/#network-settings)
pidPID (Process) Namespace mode for the container (more information ../../reference/run/#pid-settings-pid)
+ +

Container Binding attributes

+ + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescription
host_pathThe host path of the volume
container_pathThe container path where the volume is mounted
rewritabletrue is the volume has writable permissions
volumeThe resource URI of the volume
+ +

Container Port attributes

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescription
protocolThe protocol of the port, either tcp or udp
inner_portThe published port number inside the container
outer_portThe published port number in the node public network interface
port_nameName of the service associated to this port
uri_protocolThe protocol to be used in the endpoint for this port (i.e. http)
endpoint_uriThe URI of the endpoint for this port
publishedWhether 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

+ + + + + + + + + + + + + + + +
AttributeDescription
keyThe name of the environment variable
valueThe value of the environment variable
+ +

Container States

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
StateDescription
StartingThe container is being deployed or started (from Stopped). No actions allowed in this state.
RunningThe container is deployed and running. Possible actions in this state: stop, terminate.
StoppingThe container is being stopped. No actions allowed in this state.
StoppedThe container is stopped. Possible actions in this state: start, terminate.
TerminatingThe container is being deleted. No actions allowed in this state.
TerminatedThe container has been deleted. No actions allowed in this state.
+ +

Network Modes

+ + + + + + + + + + + + + + + +
StrategyDescription
bridgeCreates a new network stack for the container on the docker bridge.
hostUses the host network stack inside the container.
+ +

Container Last Metric attributes

+ + + + + + + + + + + + + + + + + + + +
AttributeDescription
cpuCPU percentage usage
memoryMemory usage in bytes
diskDisk storage usage in bytes
+ + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescription
nameThe name given to the link
from_containerThe resource URI of the “client” container
to_containerThe resource URI of the “server” container being linked
endpointsA dictionary with the endpoints (protocol, IP and port) to be used to reach each of the “server” container exposed ports
+ +

List all containers

+
import dockercloud
+
+containers = dockercloud.Container.list()
+
+
import "github.com/docker/go-dockercloud/dockercloud"
+
+containerList, err := dockercloud.ListContainers()
+
+if err != nil {
+  log.Println(err)
+}
+
+log.Println(containerList)
+
+
GET /api/app/v1/container/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParameterDescription
uuidFilter by UUID
stateFilter by state. Possible values: Starting, Running, Stopping, Stopped, Terminating, Terminated
nameFilter by container name
serviceFilter by resource URI of the target service.
nodeFilter by resource URI of the target node.
+ +

Get an existing container

+
import dockercloud
+
+container = dockercloud.Container.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
+
+
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)
+
+
GET /api/app/v1/container/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
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

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the container to retrieve
+ +

Get the logs of a container

+ +
+

Example log line

+
+
{
+    "type": "log",
+    "log": "Log line from the container",
+    "streamType": "stdout",
+    "timestamp": 1433779324
+}
+
+
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)
+
+
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)
+    }
+
+
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
+
+
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

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the container to retrieve logs
+ +

Query Parameters

+ + + + + + + + + + + + + + + + + + + +
ParameterDescription
tailNumber of lines to show from the end of the logs (default: 300)
followWhether to stream logs or close the connection immediately (default: true)
serviceFilter by service (resource URI)
+ +

Start a container

+
import dockercloud
+
+container = dockercloud.Container.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
+container.start()
+
+
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)
+}
+
+
POST /api/app/v1/container/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/start/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
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

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the container to start
+ +

Stop a container

+
import dockercloud
+
+container = dockerlcoud.Container.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
+container.stop()
+
+
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)
+   }
+
+
POST /api/app/v1/container/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/stop/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
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

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the container to stop
+ +

Redeploy a container

+
import dockercloud
+
+container = dockercloud.Container.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
+container.redeploy()
+
+
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)
+}
+
+
POST /api/app/v1/container/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/start/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
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

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the container to redeploy
+ +

Query Parameters

+ + + + + + + + + + + +
ParameterDescription
reuse_volumesWheather to reuse container volumes for this redeploy operation or not (default: true).
+ +

Terminate a container

+
import dockercloud
+
+container = dockercloud.Container.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
+container.delete()
+
+
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)
+   }
+
+
DELETE /api/app/v1/container/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
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

+ + + + + + + + + + + +
ParameterDescription
uuidThe 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)
+
+
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)
+
+
+
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

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the container where the command will be executed
+ +

Query Parameters

+ + + + + + + + + + + +
ParameterDescription
commandCommand to be executed (default: sh)
+ +

Triggers

+ +

Service triggers

+ +
+

Example

+
+
{
+  "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 for more information.

+ +

Attributes

+ + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescription
urlAddress to be used to call the trigger with a POST request
nameA user provided name for the trigger
operationThe operation that the trigger call performs (see table Operations below)
resource_uriA unique API endpoint that represents the trigger
+ +

Operations

+ + + + + + + + + + + + + + + +
OperationDescription
REDEPLOYPerforms a redeploy service operation.
SCALEUPPerforms a scale up service operation.
+ +

List all triggers

+
import dockercloud
+
+service = dockercloud.Service.fetch('61a29874-9134-48f9-b460-f37d4bec4826')
+trigger = dockercloud.Trigger.fetch(service)
+trigger.list()
+
+
GET /api/app/v1/service/61a29874-9134-48f9-b460-f37d4bec4826/trigger/ HTTP/1.1
+Host: cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Accept: application/json
+
+
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)
+
+
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

+ + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the service the triggers are associated to
+ +

Create a new trigger

+
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()
+
+
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)
+
+
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"}
+
+
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

+ + + + + + + + + + + + + + + +
ParameterDescription
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

+
import dockercloud
+
+service = dockercloud.Service.fetch('61a29874-9134-48f9-b460-f37d4bec4826')
+trigger = dockercloud.Trigger.fetch(service)
+
+
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)
+
+
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

+ + + + + + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the service the triggers are associated to
trigger_uuidThe UUID of the trigger to retrieve
+ +

Delete a trigger

+
import dockercloud
+
+service = dockercloud.Service.fetch('61a29874-9134-48f9-b460-f37d4bec4826')
+trigger = dockercloud.Trigger.fetch(service)
+trigger.delete("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
+
+
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")
+
+
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
+
+
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

+ + + + + + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the associated service
trigger_uuidThe UUID of the trigger to delete
+ +

Call a trigger

+
import dockercloud
+
+service = dockercloud.Service.fetch('61a29874-9134-48f9-b460-f37d4bec4826')
+trigger = dockercloud.Trigger.fetch(service)
+trigger.call("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
+
+
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")
+
+
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

+ + + + + + + + + + + + + + + +
ParameterDescription
uuidThe UUID of the associated service
trigger_uuidThe UUID of the trigger to call
+ +

Docker Cloud Events

+ +

Docker Cloud Event

+ +
+

Example

+
+
{
+    "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:

+ + + +

Attributes

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AttributeDescription
typeType of object that was created or updated. For possible values, check the events types table below.
actionType of action that was executed on the object. Posible values: create, update or delete
parentsList of resource URIs (REST API) of the parents of the object, according to the “Parent-child hierarchy” table below
resource_uriResource URI (REST API) of the object that was created or updated. You can do a GET operation on this URL to fetch its details
stateThe current state of the object
uuidUnique identifier for the event
datetimeDate and time of the event in ISO 8601 format
+ +

Event types

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TypeDescription
stackWhenever a Stack is created or updated
serviceWhenever a Service is created or updated
containerWhenever a Container is created or updated
nodeclusterWhenever a Node Cluster is created or updated
nodeWhenever a Node is created or updated
actionWhenever a Action is created or updated
errorSent when an error occurs on the websocket connection or as part of the authentication process
+ +

Parent-child hierarchy

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Object typeParent types
Stack(None)
ServiceStack
ContainerService, Stack, Node, Node Cluster
Node Cluster(None)
NodeNode Cluster
Action(object to which the action applies to)
+ +

Listen to new Docker Cloud Events

+
import dockercloud
+
+def process_event(event):
+    print event
+
+events = dockercloud.Events()
+events.on_message(process_event)
+events.run_forever()
+
+
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)
+    }
+}
+
+
GET /api/audit/v1/events/ HTTP/1.1
+Host: ws.cloud.docker.com
+Authorization: Basic dXNlcm5hbWU6YXBpa2V5
+Connection: Upgrade
+Upgrade: websocket
+
+
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/

+ +

Errors

+ +
+

API response structure

+
+
{
+    "error": "Descriptive error message"
+}
+
+ +

The Docker Cloud API uses the following error codes:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Error CodeMeaning
400Bad Request – There’s a problem in the content of your request. Retrying the same request will fail.
401Unauthorized – Your API key is wrong or your account has been deactivated.
402Payment Required – You need to provide billing information to perform this request.
403Forbidden – Quota limit exceeded. Please contact support to request a quota increase.
404Not Found – The requested object cannot be found.
405Method Not Allowed – The endpoint requested does not implement the method sent.
409Conflict – The object cannot be created or updated because another object exists with the same unique fields
415Unsupported 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.
429Too Many Requests – You are being throttled because of too many requests in a short period of time.
500Internal Server Error – There was a server error while processing your request. Try again later, or contact support.
503Service Unavailable – We’re temporarily offline for maintenance. Please try again later.
504Gateway Timeout – Our API servers are at full capacity. Please try again later.
+ +
+
+
+ http + go + python + CLI +
+
+
+
+ + + + +
+ + diff --git a/apidocs/docker-cloud/javascripts/all.js b/apidocs/docker-cloud/javascripts/all.js new file mode 100644 index 0000000000..a0773c13f0 --- /dev/null +++ b/apidocs/docker-cloud/javascripts/all.js @@ -0,0 +1,143 @@ +!function(){if("ontouchstart"in window){var e,t,n,i,o,r,s={};e=function(e,t){return Math.abs(e[0]-t[0])>5||Math.abs(e[1]-t[1])>5},t=function(e){this.startXY=[e.touches[0].clientX,e.touches[0].clientY],this.threshold=!1},n=function(t){return this.threshold?!1:void(this.threshold=e(this.startXY,[t.touches[0].clientX,t.touches[0].clientY]))},i=function(t){if(!this.threshold&&!e(this.startXY,[t.changedTouches[0].clientX,t.changedTouches[0].clientY])){var n=t.changedTouches[0],i=document.createEvent("MouseEvents");i.initMouseEvent("click",!0,!0,window,0,n.screenX,n.screenY,n.clientX,n.clientY,!1,!1,!1,!1,0,null),i.simulated=!0,t.target.dispatchEvent(i)}},o=function(e){var t=Date.now(),n=t-s.time,i=e.clientX,o=e.clientY,a=[Math.abs(s.x-i),Math.abs(s.y-o)],c=r(e.target,"A")||e.target,h=c.nodeName,l="A"===h,u=window.navigator.standalone&&l&&e.target.getAttribute("href");return s.time=t,s.x=i,s.y=o,(!e.simulated&&(500>n||1500>n&&a[0]<50&&a[1]<50)||u)&&(e.preventDefault(),e.stopPropagation(),!u)?!1:(u&&(window.location=c.getAttribute("href")),void(c&&c.classList&&(c.classList.add("energize-focus"),window.setTimeout(function(){c.classList.remove("energize-focus")},150))))},r=function(e,t){for(var n=e;n!==document.body;){if(!n||n.nodeName===t)return n;n=n.parentNode}return null},document.addEventListener("touchstart",t,!1),document.addEventListener("touchmove",n,!1),document.addEventListener("touchend",i,!1),document.addEventListener("click",o,!0)}}(),/* +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(e){"use strict";function t(t){if(t&&""!==t){$(".lang-selector a").removeClass("active"),$(".lang-selector a[data-language-name='"+t+"']").addClass("active");for(var n=0;n=1){var e=n(location.search).language;if(e)return e;if(-1!=jQuery.inArray(location.search.substr(1),c))return location.search.substr(1)}return!1}function r(e){var t=n(location.search);return t.language?(t.language=e,i(t)):e}function s(e){if(history){var t=window.location.hash;t&&(t=t.replace(/^#+/,"")),history.pushState({},"","?"+r(e)+"#"+t),localStorage.setItem("language",e)}}function a(e){var n=localStorage.getItem("language");c=e;var i=o();i?(t(i),localStorage.setItem("language",i)):t(null!==n&&-1!=jQuery.inArray(n,c)?n:c[0])}var c=[];e.setupLanguages=a,e.activateLanguage=t,$(function(){$(".lang-selector a").on("click",function(){var e=$(this).data("language-name");return s(e),t(e),!1}),window.onpopstate=function(){t(o())}})}(window),/** + * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 0.5.7 + * Copyright (C) 2014 Oliver Nightingale + * MIT Licensed + * @license + */ +function(){var e=function(t){var n=new e.Index;return n.pipeline.add(e.trimmer,e.stopWordFilter,e.stemmer),t&&t.call(n,n),n};e.version="0.5.7",/*! + * lunr.utils + * Copyright (C) 2014 Oliver Nightingale + */ +e.utils={},e.utils.warn=function(e){return function(t){e.console&&console.warn&&console.warn(t)}}(this),/*! + * lunr.EventEmitter + * Copyright (C) 2014 Oliver Nightingale + */ +e.EventEmitter=function(){this.events={}},e.EventEmitter.prototype.addListener=function(){var e=Array.prototype.slice.call(arguments),t=e.pop(),n=e;if("function"!=typeof t)throw new TypeError("last argument must be a function");n.forEach(function(e){this.hasHandler(e)||(this.events[e]=[]),this.events[e].push(t)},this)},e.EventEmitter.prototype.removeListener=function(e,t){if(this.hasHandler(e)){var n=this.events[e].indexOf(t);this.events[e].splice(n,1),this.events[e].length||delete this.events[e]}},e.EventEmitter.prototype.emit=function(e){if(this.hasHandler(e)){var t=Array.prototype.slice.call(arguments,1);this.events[e].forEach(function(e){e.apply(void 0,t)})}},e.EventEmitter.prototype.hasHandler=function(e){return e in this.events},/*! + * lunr.tokenizer + * Copyright (C) 2014 Oliver Nightingale + */ +e.tokenizer=function(e){if(!arguments.length||null==e||void 0==e)return[];if(Array.isArray(e))return e.map(function(e){return e.toLowerCase()});for(var t=e.toString().replace(/^\s+/,""),n=t.length-1;n>=0;n--)if(/\S/.test(t.charAt(n))){t=t.substring(0,n+1);break}return t.split(/(?:\s+|\-)/).filter(function(e){return!!e}).map(function(e){return e.toLowerCase()})},/*! + * lunr.Pipeline + * Copyright (C) 2014 Oliver Nightingale + */ +e.Pipeline=function(){this._stack=[]},e.Pipeline.registeredFunctions={},e.Pipeline.registerFunction=function(t,n){n in this.registeredFunctions&&e.utils.warn("Overwriting existing registered function: "+n),t.label=n,e.Pipeline.registeredFunctions[t.label]=t},e.Pipeline.warnIfFunctionNotRegistered=function(t){var n=t.label&&t.label in this.registeredFunctions;n||e.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",t)},e.Pipeline.load=function(t){var n=new e.Pipeline;return t.forEach(function(t){var i=e.Pipeline.registeredFunctions[t];if(!i)throw new Error("Cannot load un-registered function: "+t);n.add(i)}),n},e.Pipeline.prototype.add=function(){var t=Array.prototype.slice.call(arguments);t.forEach(function(t){e.Pipeline.warnIfFunctionNotRegistered(t),this._stack.push(t)},this)},e.Pipeline.prototype.after=function(t,n){e.Pipeline.warnIfFunctionNotRegistered(n);var i=this._stack.indexOf(t)+1;this._stack.splice(i,0,n)},e.Pipeline.prototype.before=function(t,n){e.Pipeline.warnIfFunctionNotRegistered(n);var i=this._stack.indexOf(t);this._stack.splice(i,0,n)},e.Pipeline.prototype.remove=function(e){var t=this._stack.indexOf(e);this._stack.splice(t,1)},e.Pipeline.prototype.run=function(e){for(var t=[],n=e.length,i=this._stack.length,o=0;n>o;o++){for(var r=e[o],s=0;i>s&&(r=this._stack[s](r,o,e),void 0!==r);s++);void 0!==r&&t.push(r)}return t},e.Pipeline.prototype.reset=function(){this._stack=[]},e.Pipeline.prototype.toJSON=function(){return this._stack.map(function(t){return e.Pipeline.warnIfFunctionNotRegistered(t),t.label})},/*! + * lunr.Vector + * Copyright (C) 2014 Oliver Nightingale + */ +e.Vector=function(){this._magnitude=null,this.list=void 0,this.length=0},e.Vector.Node=function(e,t,n){this.idx=e,this.val=t,this.next=n},e.Vector.prototype.insert=function(t,n){var i=this.list;if(!i)return this.list=new e.Vector.Node(t,n,i),this.length++;for(var o=i,r=i.next;void 0!=r;){if(tn.idx?n=n.next:(i+=t.val*n.val,t=t.next,n=n.next);return i},e.Vector.prototype.similarity=function(e){return this.dot(e)/(this.magnitude()*e.magnitude())},/*! + * lunr.SortedSet + * Copyright (C) 2014 Oliver Nightingale + */ +e.SortedSet=function(){this.length=0,this.elements=[]},e.SortedSet.load=function(e){var t=new this;return t.elements=e,t.length=e.length,t},e.SortedSet.prototype.add=function(){Array.prototype.slice.call(arguments).forEach(function(e){~this.indexOf(e)||this.elements.splice(this.locationFor(e),0,e)},this),this.length=this.elements.length},e.SortedSet.prototype.toArray=function(){return this.elements.slice()},e.SortedSet.prototype.map=function(e,t){return this.elements.map(e,t)},e.SortedSet.prototype.forEach=function(e,t){return this.elements.forEach(e,t)},e.SortedSet.prototype.indexOf=function(e,t,n){var t=t||0,n=n||this.elements.length,i=n-t,o=t+Math.floor(i/2),r=this.elements[o];return 1>=i?r===e?o:-1:e>r?this.indexOf(e,o,n):r>e?this.indexOf(e,t,o):r===e?o:void 0},e.SortedSet.prototype.locationFor=function(e,t,n){var t=t||0,n=n||this.elements.length,i=n-t,o=t+Math.floor(i/2),r=this.elements[o];if(1>=i){if(r>e)return o;if(e>r)return o+1}return e>r?this.locationFor(e,o,n):r>e?this.locationFor(e,t,o):void 0},e.SortedSet.prototype.intersect=function(t){for(var n=new e.SortedSet,i=0,o=0,r=this.length,s=t.length,a=this.elements,c=t.elements;;){if(i>r-1||o>s-1)break;a[i]!==c[o]?a[i]c[o]&&o++:(n.add(a[i]),i++,o++)}return n},e.SortedSet.prototype.clone=function(){var t=new e.SortedSet;return t.elements=this.toArray(),t.length=t.elements.length,t},e.SortedSet.prototype.union=function(e){var t,n,i;return this.length>=e.length?(t=this,n=e):(t=e,n=this),i=t.clone(),i.add.apply(i,n.toArray()),i},e.SortedSet.prototype.toJSON=function(){return this.toArray()},/*! + * lunr.Index + * Copyright (C) 2014 Oliver Nightingale + */ +e.Index=function(){this._fields=[],this._ref="id",this.pipeline=new e.Pipeline,this.documentStore=new e.Store,this.tokenStore=new e.TokenStore,this.corpusTokens=new e.SortedSet,this.eventEmitter=new e.EventEmitter,this._idfCache={},this.on("add","remove","update",function(){this._idfCache={}}.bind(this))},e.Index.prototype.on=function(){var e=Array.prototype.slice.call(arguments);return this.eventEmitter.addListener.apply(this.eventEmitter,e)},e.Index.prototype.off=function(e,t){return this.eventEmitter.removeListener(e,t)},e.Index.load=function(t){t.version!==e.version&&e.utils.warn("version mismatch: current "+e.version+" importing "+t.version);var n=new this;return n._fields=t.fields,n._ref=t.ref,n.documentStore=e.Store.load(t.documentStore),n.tokenStore=e.TokenStore.load(t.tokenStore),n.corpusTokens=e.SortedSet.load(t.corpusTokens),n.pipeline=e.Pipeline.load(t.pipeline),n},e.Index.prototype.field=function(e,t){var t=t||{},n={name:e,boost:t.boost||1};return this._fields.push(n),this},e.Index.prototype.ref=function(e){return this._ref=e,this},e.Index.prototype.add=function(t,n){var i={},o=new e.SortedSet,r=t[this._ref],n=void 0===n?!0:n;this._fields.forEach(function(n){var r=this.pipeline.run(e.tokenizer(t[n.name]));i[n.name]=r,e.SortedSet.prototype.add.apply(o,r)},this),this.documentStore.set(r,o),e.SortedSet.prototype.add.apply(this.corpusTokens,o.toArray());for(var s=0;s0&&(i=1+Math.log(this.tokenStore.length/n)),this._idfCache[t]=i},e.Index.prototype.search=function(t){var n=this.pipeline.run(e.tokenizer(t)),i=new e.Vector,o=[],r=this._fields.reduce(function(e,t){return e+t.boost},0),s=n.some(function(e){return this.tokenStore.has(e)},this);if(!s)return[];n.forEach(function(t,n,s){var a=1/s.length*this._fields.length*r,c=this,h=this.tokenStore.expand(t).reduce(function(n,o){var r=c.corpusTokens.indexOf(o),s=c.idf(o),h=1,l=new e.SortedSet;if(o!==t){var u=Math.max(3,o.length-t.length);h=1/Math.log(u)}return r>-1&&i.insert(r,a*s*h),Object.keys(c.tokenStore.get(o)).forEach(function(e){l.add(e)}),n.union(l)},new e.SortedSet);o.push(h)},this);var a=o.reduce(function(e,t){return e.intersect(t)});return a.map(function(e){return{ref:e,score:i.similarity(this.documentVector(e))}},this).sort(function(e,t){return t.score-e.score})},e.Index.prototype.documentVector=function(t){for(var n=this.documentStore.get(t),i=n.length,o=new e.Vector,r=0;i>r;r++){var s=n.elements[r],a=this.tokenStore.get(s)[t].tf,c=this.idf(s);o.insert(this.corpusTokens.indexOf(s),a*c)}return o},e.Index.prototype.toJSON=function(){return{version:e.version,fields:this._fields,ref:this._ref,documentStore:this.documentStore.toJSON(),tokenStore:this.tokenStore.toJSON(),corpusTokens:this.corpusTokens.toJSON(),pipeline:this.pipeline.toJSON()}},e.Index.prototype.use=function(e){var t=Array.prototype.slice.call(arguments,1);t.unshift(this),e.apply(this,t)},/*! + * lunr.Store + * Copyright (C) 2014 Oliver Nightingale + */ +e.Store=function(){this.store={},this.length=0},e.Store.load=function(t){var n=new this;return n.length=t.length,n.store=Object.keys(t.store).reduce(function(n,i){return n[i]=e.SortedSet.load(t.store[i]),n},{}),n},e.Store.prototype.set=function(e,t){this.has(e)||this.length++,this.store[e]=t},e.Store.prototype.get=function(e){return this.store[e]},e.Store.prototype.has=function(e){return e in this.store},e.Store.prototype.remove=function(e){this.has(e)&&(delete this.store[e],this.length--)},e.Store.prototype.toJSON=function(){return{store:this.store,length:this.length}},/*! + * lunr.stemmer + * Copyright (C) 2014 Oliver Nightingale + * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt + */ +e.stemmer=function(){var e={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},t={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},n="[^aeiou]",i="[aeiouy]",o=n+"[^aeiouy]*",r=i+"[aeiou]*",s="^("+o+")?"+r+o,a="^("+o+")?"+r+o+"("+r+")?$",c="^("+o+")?"+r+o+r+o,h="^("+o+")?"+i,l=new RegExp(s),u=new RegExp(c),d=new RegExp(a),f=new RegExp(h),p=/^(.+?)(ss|i)es$/,g=/^(.+?)([^s])s$/,v=/^(.+?)eed$/,m=/^(.+?)(ed|ing)$/,y=/.$/,w=/(at|bl|iz)$/,b=new RegExp("([^aeiouylsz])\\1$"),S=new RegExp("^"+o+i+"[^aeiouwxy]$"),x=/^(.+?[^aeiou])y$/,E=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,_=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,C=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,k=/^(.+?)(s|t)(ion)$/,O=/^(.+?)e$/,L=/ll$/,N=new RegExp("^"+o+i+"[^aeiouwxy]$"),A=function(n){var i,o,r,s,a,c,h;if(n.length<3)return n;if(r=n.substr(0,1),"y"==r&&(n=r.toUpperCase()+n.substr(1)),s=p,a=g,s.test(n)?n=n.replace(s,"$1$2"):a.test(n)&&(n=n.replace(a,"$1$2")),s=v,a=m,s.test(n)){var A=s.exec(n);s=l,s.test(A[1])&&(s=y,n=n.replace(s,""))}else if(a.test(n)){var A=a.exec(n);i=A[1],a=f,a.test(i)&&(n=i,a=w,c=b,h=S,a.test(n)?n+="e":c.test(n)?(s=y,n=n.replace(s,"")):h.test(n)&&(n+="e"))}if(s=x,s.test(n)){var A=s.exec(n);i=A[1],n=i+"i"}if(s=E,s.test(n)){var A=s.exec(n);i=A[1],o=A[2],s=l,s.test(i)&&(n=i+e[o])}if(s=_,s.test(n)){var A=s.exec(n);i=A[1],o=A[2],s=l,s.test(i)&&(n=i+t[o])}if(s=C,a=k,s.test(n)){var A=s.exec(n);i=A[1],s=u,s.test(i)&&(n=i)}else if(a.test(n)){var A=a.exec(n);i=A[1]+A[2],a=u,a.test(i)&&(n=i)}if(s=O,s.test(n)){var A=s.exec(n);i=A[1],s=u,a=d,c=N,(s.test(i)||a.test(i)&&!c.test(i))&&(n=i)}return s=L,a=u,s.test(n)&&a.test(n)&&(s=y,n=n.replace(s,"")),"y"==r&&(n=r.toLowerCase()+n.substr(1)),n};return A}(),e.Pipeline.registerFunction(e.stemmer,"stemmer"),/*! + * lunr.stopWordFilter + * Copyright (C) 2014 Oliver Nightingale + */ +e.stopWordFilter=function(t){return-1===e.stopWordFilter.stopWords.indexOf(t)?t:void 0},e.stopWordFilter.stopWords=new e.SortedSet,e.stopWordFilter.stopWords.length=119,e.stopWordFilter.stopWords.elements=["","a","able","about","across","after","all","almost","also","am","among","an","and","any","are","as","at","be","because","been","but","by","can","cannot","could","dear","did","do","does","either","else","ever","every","for","from","get","got","had","has","have","he","her","hers","him","his","how","however","i","if","in","into","is","it","its","just","least","let","like","likely","may","me","might","most","must","my","neither","no","nor","not","of","off","often","on","only","or","other","our","own","rather","said","say","says","she","should","since","so","some","than","that","the","their","them","then","there","these","they","this","tis","to","too","twas","us","wants","was","we","were","what","when","where","which","while","who","whom","why","will","with","would","yet","you","your"],e.Pipeline.registerFunction(e.stopWordFilter,"stopWordFilter"),/*! + * lunr.trimmer + * Copyright (C) 2014 Oliver Nightingale + */ +e.trimmer=function(e){return e.replace(/^\W+/,"").replace(/\W+$/,"")},e.Pipeline.registerFunction(e.trimmer,"trimmer"),/*! + * lunr.stemmer + * Copyright (C) 2014 Oliver Nightingale + * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt + */ +e.TokenStore=function(){this.root={docs:{}},this.length=0},e.TokenStore.load=function(e){var t=new this;return t.root=e.root,t.length=e.length,t},e.TokenStore.prototype.add=function(e,t,n){var n=n||this.root,i=e[0],o=e.slice(1);return i in n||(n[i]={docs:{}}),0===o.length?(n[i].docs[t.ref]=t,void(this.length+=1)):this.add(o,t,n[i])},e.TokenStore.prototype.has=function(e){if(!e)return!1;for(var t=this.root,n=0;n (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 + * $('#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(e,t,n,i){if(3===e.nodeType){var o=e.data.match(t);if(o){var r=document.createElement(n||"span");r.className=i||"highlight";var s=e.splitText(o.index);s.splitText(o[0].length);var a=s.cloneNode(!0);return r.appendChild(a),s.parentNode.replaceChild(r,s),1}}else if(1===e.nodeType&&e.childNodes&&!/(script|style)/i.test(e.tagName)&&(e.tagName!==n.toUpperCase()||e.className!==i))for(var c=0;c1e-4});t.length?(s.empty(),$.each(t,function(e,t){var n=document.getElementById(t.ref);s.append("
  • "+$(n).text()+"
  • ")}),i.call(this)):(s.html("
  • "),$(".search-results li").text('No Results Found for "'+this.value+'"'))}else o(),s.removeClass("visible")}function i(){this.value&&r.highlight(this.value,a)}function o(){r.unhighlight(a)}var r,s,a={element:"span",className:"search-highlight"},c=new lunr.Index;c.ref("id"),c.field("title",{boost:10}),c.field("body"),c.pipeline.add(lunr.trimmer,lunr.stopWordFilter),$(e),$(t)}(),/*! jQuery UI - v1.11.3 - 2015-02-12 + * http://jqueryui.com + * Includes: widget.js + * Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */ +function(e){"function"==typeof define&&define.amd?define(["jquery"],e):e(jQuery)}(function(e){/*! + * 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 t=0,n=Array.prototype.slice;e.cleanData=function(t){return function(n){var i,o,r;for(r=0;null!=(o=n[r]);r++)try{i=e._data(o,"events"),i&&i.remove&&e(o).triggerHandler("remove")}catch(s){}t(n)}}(e.cleanData),e.widget=function(t,n,i){var o,r,s,a,c={},h=t.split(".")[0];return t=t.split(".")[1],o=h+"-"+t,i||(i=n,n=e.Widget),e.expr[":"][o.toLowerCase()]=function(t){return!!e.data(t,o)},e[h]=e[h]||{},r=e[h][t],s=e[h][t]=function(e,t){return this._createWidget?void(arguments.length&&this._createWidget(e,t)):new s(e,t)},e.extend(s,r,{version:i.version,_proto:e.extend({},i),_childConstructors:[]}),a=new n,a.options=e.widget.extend({},a.options),e.each(i,function(t,i){return e.isFunction(i)?void(c[t]=function(){var e=function(){return n.prototype[t].apply(this,arguments)},o=function(e){return n.prototype[t].apply(this,e)};return function(){var t,n=this._super,r=this._superApply;return this._super=e,this._superApply=o,t=i.apply(this,arguments),this._super=n,this._superApply=r,t}}()):void(c[t]=i)}),s.prototype=e.widget.extend(a,{widgetEventPrefix:r?a.widgetEventPrefix||t:t},c,{constructor:s,namespace:h,widgetName:t,widgetFullName:o}),r?(e.each(r._childConstructors,function(t,n){var i=n.prototype;e.widget(i.namespace+"."+i.widgetName,s,n._proto)}),delete r._childConstructors):n._childConstructors.push(s),e.widget.bridge(t,s),s},e.widget.extend=function(t){for(var i,o,r=n.call(arguments,1),s=0,a=r.length;a>s;s++)for(i in r[s])o=r[s][i],r[s].hasOwnProperty(i)&&void 0!==o&&(t[i]=e.isPlainObject(o)?e.isPlainObject(t[i])?e.widget.extend({},t[i],o):e.widget.extend({},o):o);return t},e.widget.bridge=function(t,i){var o=i.prototype.widgetFullName||t;e.fn[t]=function(r){var s="string"==typeof r,a=n.call(arguments,1),c=this;return s?this.each(function(){var n,i=e.data(this,o);return"instance"===r?(c=i,!1):i?e.isFunction(i[r])&&"_"!==r.charAt(0)?(n=i[r].apply(i,a),n!==i&&void 0!==n?(c=n&&n.jquery?c.pushStack(n.get()):n,!1):void 0):e.error("no such method '"+r+"' for "+t+" widget instance"):e.error("cannot call methods on "+t+" prior to initialization; attempted to call method '"+r+"'")}):(a.length&&(r=e.widget.extend.apply(null,[r].concat(a))),this.each(function(){var t=e.data(this,o);t?(t.option(r||{}),t._init&&t._init()):e.data(this,o,new i(r,this))})),c}},e.Widget=function(){},e.Widget._childConstructors=[],e.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"
    ",options:{disabled:!1,create:null},_createWidget:function(n,i){i=e(i||this.defaultElement||this)[0],this.element=e(i),this.uuid=t++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=e(),this.hoverable=e(),this.focusable=e(),i!==this&&(e.data(i,this.widgetFullName,this),this._on(!0,this.element,{remove:function(e){e.target===i&&this.destroy()}}),this.document=e(i.style?i.ownerDocument:i.document||i),this.window=e(this.document[0].defaultView||this.document[0].parentWindow)),this.options=e.widget.extend({},this.options,this._getCreateOptions(),n),this._create(),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:e.noop,_getCreateEventData:e.noop,_create:e.noop,_init:e.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetFullName).removeData(e.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName+"-disabled ui-state-disabled"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")},_destroy:e.noop,widget:function(){return this.element},option:function(t,n){var i,o,r,s=t;if(0===arguments.length)return e.widget.extend({},this.options);if("string"==typeof t)if(s={},i=t.split("."),t=i.shift(),i.length){for(o=s[t]=e.widget.extend({},this.options[t]),r=0;r",{id:c+t,"class":c}).append(i._nestElements(e(this),t)),i.element.append(n),e(this).nextUntil(this.nodeName.toLowerCase()).each(function(){0===e(this).find(i.options.selectors).length?e(this).filter(i.options.selectors).each(function(){e(this).is(r)||i._appendSubheaders.call(this,i,n)}):e(this).find(i.options.selectors).each(function(){e(this).is(r)||i._appendSubheaders.call(this,i,n)})}))})):void i.element.addClass(a)},_setActiveElement:function(e){var n=this,i=t.location.hash.substring(1),o=n.element.find("li[data-unique='"+i+"']");return i.length?(n.element.find("."+n.focusClass).removeClass(n.focusClass),o.addClass(n.focusClass),n.options.showAndHide&&o.click()):(n.element.find("."+n.focusClass).removeClass(n.focusClass),!i.length&&e&&n.options.highlightDefault&&n.element.find(f).first().addClass(n.focusClass)),n},_nestElements:function(t,n){var i,o,r;return i=e.grep(this.items,function(e){return e===t.text()}),this.items.push(i.length?t.text()+n:t.text()),r=this._generateHashValue(i,t,n),o=e("
  • ",{"class":d,"data-unique":r}).append(e("",{text:t.text()})),t.before(e("
    ",{name:r,"data-unique":r})),o},_generateHashValue:function(e,t,n){var i="",o=this.options.hashGenerator;if("pretty"===o){for(i=t.text().toLowerCase().replace(/\s/g,"-"),i=i.replace(/[^\x00-\x7F]/g,"");i.indexOf("--")>-1;)i=i.replace(/--/g,"-");for(;i.indexOf(":-")>-1;)i=i.replace(/:-/g,"-")}else i="function"==typeof o?o(t.text(),t):t.text().replace(/\s/g,"");return e.length&&(i+=""+n),i},_appendSubheaders:function(t,n){var i=e(this).index(t.options.selectors),o=e(t.options.selectors).eq(i-1),r=+e(this).prop("tagName").charAt(1),s=+o.prop("tagName").charAt(1);s>r?t.element.find(u+"[data-tag="+r+"]").last().append(t._nestElements(e(this),i)):r===s?n.find(f).last().after(t._nestElements(e(this),i)):n.find(f).last().after(e("
      ",{"class":l,"data-tag":r})).next(u).append(t._nestElements(e(this),i))},_setEventHandlers:function(){var o=this;this.element.on("click.tocify","li",function(){if(o.options.history&&(t.location.hash=e(this).attr("data-unique")),o.element.find("."+o.focusClass).removeClass(o.focusClass),e(this).addClass(o.focusClass),o.options.showAndHide){var n=e('li[data-unique="'+e(this).attr("data-unique")+'"]');o._triggerShow(n)}o._scrollTo(e(this))}),this.element.find("li").on({"mouseenter.tocify":function(){e(this).addClass(o.hoverClass),e(this).css("cursor","pointer")},"mouseleave.tocify":function(){"bootstrap"!==o.options.theme&&e(this).removeClass(o.hoverClass)}}),e(t).on("resize",function(){o.calculateHeights()}),e(t).on("scroll.tocify",function(){e("html, body").promise().done(function(){var r,s,a,c,h=e(t).scrollTop(),l=e(t).height(),u=e(n).height(),d=e("body")[0].scrollHeight;if(o.options.extendPage&&(o.webkit&&h>=d-l-o.options.extendPageOffset||!o.webkit&&l+h>u-o.options.extendPageOffset)&&!e(g).length){if(s=e('div[data-unique="'+e(f).last().attr("data-unique")+'"]'),!s.length)return;a=s.offset().top,e(o.options.context).append(e("
      ",{"class":p,height:Math.abs(a-h)+"px","data-unique":p})),o.extendPageScroll&&(c=o.element.find("li.active"),o._scrollTo(e("div[data-unique="+c.attr("data-unique")+"]")))}setTimeout(function(){var s,a=null;0==o.cachedHeights.length&&o.calculateHeights();var c=e(t).scrollTop();if(o.cachedAnchors.each(function(e){return o.cachedHeights[e]-c<0?void(a=e):!1}),s=e(o.cachedAnchors[a]).attr("data-unique"),r=e('li[data-unique="'+s+'"]'),o.options.highlightOnScroll&&r.length&&!r.hasClass(o.focusClass)){o.element.find("."+o.focusClass).removeClass(o.focusClass),r.addClass(o.focusClass);var h=o.tocifyWrapper,l=e(r).closest(".tocify-header"),u=l.offset().top,d=h.offset().top,f=u-d;if(f>=e(t).height()){var p=f+h.scrollTop();h.scrollTop(p)}else 0>f&&h.scrollTop(0)}o.options.scrollHistory&&t.location.hash!=="#"+s&&s!==i&&(history.replaceState?history.replaceState({},"","#"+s):(scrollV=n.body.scrollTop,scrollH=n.body.scrollLeft,location.hash="#"+s,n.body.scrollTop=scrollV,n.body.scrollLeft=scrollH)),o.options.showAndHideOnScroll&&o.options.showAndHide&&o._triggerShow(r,!0)},0)})})},calculateHeights:function(){var t=this;t.cachedHeights=[],t.cachedAnchors=[];var n=e(t.options.context).find("div[data-unique]");n.each(function(n){var i=(e(this).next().length?e(this).next():e(this)).offset().top-t.options.highlightOffset;t.cachedHeights[n]=i}),t.cachedAnchors=n},show:function(t){var n=this;if(!t.is(":visible"))switch(t.find(u).length||t.parent().is(h)||t.parent().is(":visible")?t.children(u).length||t.parent().is(h)||(t=t.closest(u)):t=t.parents(u).add(t),n.options.showEffect){case"none":t.show();break;case"show":t.show(n.options.showEffectSpeed);break;case"slideDown":t.slideDown(n.options.showEffectSpeed);break;case"fadeIn":t.fadeIn(n.options.showEffectSpeed);break;default:t.show()}return n.hide(e(u).not(t.parent().is(h)?t:t.closest(h).find(u).not(t.siblings()))),n},hide:function(e){var t=this;switch(t.options.hideEffect){case"none":e.hide();break;case"hide":e.hide(t.options.hideEffectSpeed);break;case"slideUp":e.slideUp(t.options.hideEffectSpeed);break;case"fadeOut":e.fadeOut(t.options.hideEffectSpeed);break;default:e.hide()}return t},_triggerShow:function(e,t){var n=this;return e.parent().is(h)||e.next().is(u)?n.show(e.next(u),t):e.parent().is(u)&&n.show(e.parent(),t),n},_addCSSClasses:function(){return"jqueryui"===this.options.theme?(this.focusClass="ui-state-default",this.hoverClass="ui-state-hover",this.element.addClass("ui-widget").find(".toc-title").addClass("ui-widget-header").end().find("li").addClass("ui-widget-content")):"bootstrap"===this.options.theme?(this.element.find(h+","+u).addClass("nav nav-list"),this.focusClass="active"):(this.focusClass=r,this.hoverClass=s),this},setOption:function(){e.Widget.prototype._setOption.apply(this,arguments)},setOptions:function(){e.Widget.prototype._setOptions.apply(this,arguments)},_scrollTo:function(t){var n=this,i=n.options.smoothScroll||0,o=n.options.scrollTo;return e("html, body").promise().done(function(){e("html, body").animate({scrollTop:e('div[data-unique="'+t.attr("data-unique")+'"]').next().offset().top-(e.isFunction(o)?o.call():o)+"px"},{duration:i})}),n}})}),/*! + * imagesLoaded PACKAGED v3.1.8 + * JavaScript is all like "You images are done yet or what?" + * MIT License + */ +function(){function e(){}function t(e,t){for(var n=e.length;n--;)if(e[n].listener===t)return n;return-1}function n(e){return function(){return this[e].apply(this,arguments)}}var i=e.prototype,o=this,r=o.EventEmitter;i.getListeners=function(e){var t,n,i=this._getEvents();if("object"==typeof e){t={};for(n in i)i.hasOwnProperty(n)&&e.test(n)&&(t[n]=i[n])}else t=i[e]||(i[e]=[]);return t},i.flattenListeners=function(e){var t,n=[];for(t=0;e.length>t;t+=1)n.push(e[t].listener);return n},i.getListenersAsObject=function(e){var t,n=this.getListeners(e);return n instanceof Array&&(t={},t[e]=n),t||n},i.addListener=function(e,n){var i,o=this.getListenersAsObject(e),r="object"==typeof n;for(i in o)o.hasOwnProperty(i)&&-1===t(o[i],n)&&o[i].push(r?n:{listener:n,once:!1});return this},i.on=n("addListener"),i.addOnceListener=function(e,t){return this.addListener(e,{listener:t,once:!0})},i.once=n("addOnceListener"),i.defineEvent=function(e){return this.getListeners(e),this},i.defineEvents=function(e){for(var t=0;e.length>t;t+=1)this.defineEvent(e[t]);return this},i.removeListener=function(e,n){var i,o,r=this.getListenersAsObject(e);for(o in r)r.hasOwnProperty(o)&&(i=t(r[o],n),-1!==i&&r[o].splice(i,1));return this},i.off=n("removeListener"),i.addListeners=function(e,t){return this.manipulateListeners(!1,e,t)},i.removeListeners=function(e,t){return this.manipulateListeners(!0,e,t)},i.manipulateListeners=function(e,t,n){var i,o,r=e?this.removeListener:this.addListener,s=e?this.removeListeners:this.addListeners;if("object"!=typeof t||t instanceof RegExp)for(i=n.length;i--;)r.call(this,t,n[i]);else for(i in t)t.hasOwnProperty(i)&&(o=t[i])&&("function"==typeof o?r.call(this,i,o):s.call(this,i,o));return this},i.removeEvent=function(e){var t,n=typeof e,i=this._getEvents();if("string"===n)delete i[e];else if("object"===n)for(t in i)i.hasOwnProperty(t)&&e.test(t)&&delete i[t];else delete this._events;return this},i.removeAllListeners=n("removeEvent"),i.emitEvent=function(e,t){var n,i,o,r,s=this.getListenersAsObject(e);for(o in s)if(s.hasOwnProperty(o))for(i=s[o].length;i--;)n=s[o][i],n.once===!0&&this.removeListener(e,n.listener),r=n.listener.apply(this,t||[]),r===this._getOnceReturnValue()&&this.removeListener(e,n.listener);return this},i.trigger=n("emitEvent"),i.emit=function(e){var t=Array.prototype.slice.call(arguments,1);return this.emitEvent(e,t)},i.setOnceReturnValue=function(e){return this._onceReturnValue=e,this},i._getOnceReturnValue=function(){return this.hasOwnProperty("_onceReturnValue")?this._onceReturnValue:!0},i._getEvents=function(){return this._events||(this._events={})},e.noConflict=function(){return o.EventEmitter=r,e},"function"==typeof define&&define.amd?define("eventEmitter/EventEmitter",[],function(){return e}):"object"==typeof module&&module.exports?module.exports=e:this.EventEmitter=e}.call(this),function(e){function t(t){var n=e.event;return n.target=n.target||n.srcElement||t,n}var n=document.documentElement,i=function(){};n.addEventListener?i=function(e,t,n){e.addEventListener(t,n,!1)}:n.attachEvent&&(i=function(e,n,i){e[n+i]=i.handleEvent?function(){var n=t(e);i.handleEvent.call(i,n)}:function(){var n=t(e);i.call(e,n)},e.attachEvent("on"+n,e[n+i])});var o=function(){};n.removeEventListener?o=function(e,t,n){e.removeEventListener(t,n,!1)}:n.detachEvent&&(o=function(e,t,n){e.detachEvent("on"+t,e[t+n]);try{delete e[t+n]}catch(i){e[t+n]=void 0}});var r={bind:i,unbind:o};"function"==typeof define&&define.amd?define("eventie/eventie",r):e.eventie=r}(this),function(e,t){"function"==typeof define&&define.amd?define(["eventEmitter/EventEmitter","eventie/eventie"],function(n,i){return t(e,n,i)}):"object"==typeof exports?module.exports=t(e,require("wolfy87-eventemitter"),require("eventie")):e.imagesLoaded=t(e,e.EventEmitter,e.eventie)}(window,function(e,t,n){function i(e,t){for(var n in t)e[n]=t[n];return e}function o(e){return"[object Array]"===d.call(e)}function r(e){var t=[];if(o(e))t=e;else if("number"==typeof e.length)for(var n=0,i=e.length;i>n;n++)t.push(e[n]);else t.push(e);return t}function s(e,t,n){if(!(this instanceof s))return new s(e,t);"string"==typeof e&&(e=document.querySelectorAll(e)),this.elements=r(e),this.options=i({},this.options),"function"==typeof t?n=t:i(this.options,t),n&&this.on("always",n),this.getImages(),h&&(this.jqDeferred=new h.Deferred);var o=this;setTimeout(function(){o.check()})}function a(e){this.img=e}function c(e){this.src=e,f[e]=this}var h=e.jQuery,l=e.console,u=void 0!==l,d=Object.prototype.toString;s.prototype=new t,s.prototype.options={},s.prototype.getImages=function(){this.images=[];for(var e=0,t=this.elements.length;t>e;e++){var n=this.elements[e];"IMG"===n.nodeName&&this.addImage(n);var i=n.nodeType;if(i&&(1===i||9===i||11===i))for(var o=n.querySelectorAll("img"),r=0,s=o.length;s>r;r++){var a=o[r];this.addImage(a)}}},s.prototype.addImage=function(e){var t=new a(e);this.images.push(t)},s.prototype.check=function(){function e(e,o){return t.options.debug&&u&&l.log("confirm",e,o),t.progress(e),n++,n===i&&t.complete(),!0}var t=this,n=0,i=this.images.length;if(this.hasAnyBroken=!1,!i)return void this.complete();for(var o=0;i>o;o++){var r=this.images[o];r.on("confirm",e),r.check()}},s.prototype.progress=function(e){this.hasAnyBroken=this.hasAnyBroken||!e.isLoaded;var t=this;setTimeout(function(){t.emit("progress",t,e),t.jqDeferred&&t.jqDeferred.notify&&t.jqDeferred.notify(t,e)})},s.prototype.complete=function(){var e=this.hasAnyBroken?"fail":"done";this.isComplete=!0;var t=this;setTimeout(function(){if(t.emit(e,t),t.emit("always",t),t.jqDeferred){var n=t.hasAnyBroken?"reject":"resolve";t.jqDeferred[n](t)}})},h&&(h.fn.imagesLoaded=function(e,t){var n=new s(this,e,t);return n.jqDeferred.promise(h(this))}),a.prototype=new t,a.prototype.check=function(){var e=f[this.img.src]||new c(this.img.src);if(e.isConfirmed)return void this.confirm(e.isLoaded,"cached was confirmed");if(this.img.complete&&void 0!==this.img.naturalWidth)return void this.confirm(0!==this.img.naturalWidth,"naturalWidth");var t=this;e.on("confirm",function(e,n){return t.confirm(e.isLoaded,n),!0}),e.check()},a.prototype.confirm=function(e,t){this.isLoaded=e,this.emit("confirm",this,t)};var f={};return c.prototype=new t,c.prototype.check=function(){if(!this.isChecked){var e=new Image;n.bind(e,"load",this),n.bind(e,"error",this),e.src=this.src,this.isChecked=!0}},c.prototype.handleEvent=function(e){var t="on"+e.type;this[t]&&this[t](e)},c.prototype.onload=function(e){this.confirm(!0,"onload"),this.unbindProxyEvents(e)},c.prototype.onerror=function(e){this.confirm(!1,"onerror"),this.unbindProxyEvents(e)},c.prototype.confirm=function(e,t){this.isConfirmed=!0,this.isLoaded=e,this.emit("confirm",this,t)},c.prototype.unbindProxyEvents=function(e){n.unbind(e.target,"load",this),n.unbind(e.target,"error",this)},s}),function(e){"use strict";function t(){setTimeout(function(){toc.setOption("showEffectSpeed",180)},50)}var n=function(){$(".tocify-wrapper").removeClass("open"),$("#nav-button").removeClass("open")},i=function(){e.toc=$("#toc").tocify({selectors:"h1, h2",extendPage:!1,theme:"none",smoothScroll:!1,showEffectSpeed:0,hideEffectSpeed:180,ignoreSelector:".toc-ignore",highlightOffset:60,scrollTo:-1,scrollHistory:!0,hashGenerator:function(e,t){return t.prop("id")}}).data("toc-tocify"),$("#nav-button").click(function(){return $(".tocify-wrapper").toggleClass("open"),$("#nav-button").toggleClass("open"),!1}),$(".page-wrapper").click(n),$(".tocify-item").click(n)};$(function(){i(),t(),$(".content").imagesLoaded(function(){e.toc.calculateHeights()})})}(window); \ No newline at end of file diff --git a/apidocs/docker-cloud/javascripts/all_nosearch.js b/apidocs/docker-cloud/javascripts/all_nosearch.js new file mode 100644 index 0000000000..bb02e46b77 --- /dev/null +++ b/apidocs/docker-cloud/javascripts/all_nosearch.js @@ -0,0 +1,43 @@ +!function(){if("ontouchstart"in window){var e,t,n,i,o,s,r={};e=function(e,t){return Math.abs(e[0]-t[0])>5||Math.abs(e[1]-t[1])>5},t=function(e){this.startXY=[e.touches[0].clientX,e.touches[0].clientY],this.threshold=!1},n=function(t){return this.threshold?!1:void(this.threshold=e(this.startXY,[t.touches[0].clientX,t.touches[0].clientY]))},i=function(t){if(!this.threshold&&!e(this.startXY,[t.changedTouches[0].clientX,t.changedTouches[0].clientY])){var n=t.changedTouches[0],i=document.createEvent("MouseEvents");i.initMouseEvent("click",!0,!0,window,0,n.screenX,n.screenY,n.clientX,n.clientY,!1,!1,!1,!1,0,null),i.simulated=!0,t.target.dispatchEvent(i)}},o=function(e){var t=Date.now(),n=t-r.time,i=e.clientX,o=e.clientY,a=[Math.abs(r.x-i),Math.abs(r.y-o)],c=s(e.target,"A")||e.target,h=c.nodeName,l="A"===h,u=window.navigator.standalone&&l&&e.target.getAttribute("href");return r.time=t,r.x=i,r.y=o,(!e.simulated&&(500>n||1500>n&&a[0]<50&&a[1]<50)||u)&&(e.preventDefault(),e.stopPropagation(),!u)?!1:(u&&(window.location=c.getAttribute("href")),void(c&&c.classList&&(c.classList.add("energize-focus"),window.setTimeout(function(){c.classList.remove("energize-focus")},150))))},s=function(e,t){for(var n=e;n!==document.body;){if(!n||n.nodeName===t)return n;n=n.parentNode}return null},document.addEventListener("touchstart",t,!1),document.addEventListener("touchmove",n,!1),document.addEventListener("touchend",i,!1),document.addEventListener("click",o,!0)}}(),/* +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(e){"use strict";function t(t){if(t&&""!==t){$(".lang-selector a").removeClass("active"),$(".lang-selector a[data-language-name='"+t+"']").addClass("active");for(var n=0;n=1){var e=n(location.search).language;if(e)return e;if(-1!=jQuery.inArray(location.search.substr(1),c))return location.search.substr(1)}return!1}function s(e){var t=n(location.search);return t.language?(t.language=e,i(t)):e}function r(e){if(history){var t=window.location.hash;t&&(t=t.replace(/^#+/,"")),history.pushState({},"","?"+s(e)+"#"+t),localStorage.setItem("language",e)}}function a(e){var n=localStorage.getItem("language");c=e;var i=o();i?(t(i),localStorage.setItem("language",i)):t(null!==n&&-1!=jQuery.inArray(n,c)?n:c[0])}var c=[];e.setupLanguages=a,e.activateLanguage=t,$(function(){$(".lang-selector a").on("click",function(){var e=$(this).data("language-name");return r(e),t(e),!1}),window.onpopstate=function(){t(o())}})}(window),/*! jQuery UI - v1.11.3 - 2015-02-12 + * http://jqueryui.com + * Includes: widget.js + * Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */ +function(e){"function"==typeof define&&define.amd?define(["jquery"],e):e(jQuery)}(function(e){/*! + * 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 t=0,n=Array.prototype.slice;e.cleanData=function(t){return function(n){var i,o,s;for(s=0;null!=(o=n[s]);s++)try{i=e._data(o,"events"),i&&i.remove&&e(o).triggerHandler("remove")}catch(r){}t(n)}}(e.cleanData),e.widget=function(t,n,i){var o,s,r,a,c={},h=t.split(".")[0];return t=t.split(".")[1],o=h+"-"+t,i||(i=n,n=e.Widget),e.expr[":"][o.toLowerCase()]=function(t){return!!e.data(t,o)},e[h]=e[h]||{},s=e[h][t],r=e[h][t]=function(e,t){return this._createWidget?void(arguments.length&&this._createWidget(e,t)):new r(e,t)},e.extend(r,s,{version:i.version,_proto:e.extend({},i),_childConstructors:[]}),a=new n,a.options=e.widget.extend({},a.options),e.each(i,function(t,i){return e.isFunction(i)?void(c[t]=function(){var e=function(){return n.prototype[t].apply(this,arguments)},o=function(e){return n.prototype[t].apply(this,e)};return function(){var t,n=this._super,s=this._superApply;return this._super=e,this._superApply=o,t=i.apply(this,arguments),this._super=n,this._superApply=s,t}}()):void(c[t]=i)}),r.prototype=e.widget.extend(a,{widgetEventPrefix:s?a.widgetEventPrefix||t:t},c,{constructor:r,namespace:h,widgetName:t,widgetFullName:o}),s?(e.each(s._childConstructors,function(t,n){var i=n.prototype;e.widget(i.namespace+"."+i.widgetName,r,n._proto)}),delete s._childConstructors):n._childConstructors.push(r),e.widget.bridge(t,r),r},e.widget.extend=function(t){for(var i,o,s=n.call(arguments,1),r=0,a=s.length;a>r;r++)for(i in s[r])o=s[r][i],s[r].hasOwnProperty(i)&&void 0!==o&&(t[i]=e.isPlainObject(o)?e.isPlainObject(t[i])?e.widget.extend({},t[i],o):e.widget.extend({},o):o);return t},e.widget.bridge=function(t,i){var o=i.prototype.widgetFullName||t;e.fn[t]=function(s){var r="string"==typeof s,a=n.call(arguments,1),c=this;return r?this.each(function(){var n,i=e.data(this,o);return"instance"===s?(c=i,!1):i?e.isFunction(i[s])&&"_"!==s.charAt(0)?(n=i[s].apply(i,a),n!==i&&void 0!==n?(c=n&&n.jquery?c.pushStack(n.get()):n,!1):void 0):e.error("no such method '"+s+"' for "+t+" widget instance"):e.error("cannot call methods on "+t+" prior to initialization; attempted to call method '"+s+"'")}):(a.length&&(s=e.widget.extend.apply(null,[s].concat(a))),this.each(function(){var t=e.data(this,o);t?(t.option(s||{}),t._init&&t._init()):e.data(this,o,new i(s,this))})),c}},e.Widget=function(){},e.Widget._childConstructors=[],e.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"
      ",options:{disabled:!1,create:null},_createWidget:function(n,i){i=e(i||this.defaultElement||this)[0],this.element=e(i),this.uuid=t++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=e(),this.hoverable=e(),this.focusable=e(),i!==this&&(e.data(i,this.widgetFullName,this),this._on(!0,this.element,{remove:function(e){e.target===i&&this.destroy()}}),this.document=e(i.style?i.ownerDocument:i.document||i),this.window=e(this.document[0].defaultView||this.document[0].parentWindow)),this.options=e.widget.extend({},this.options,this._getCreateOptions(),n),this._create(),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:e.noop,_getCreateEventData:e.noop,_create:e.noop,_init:e.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetFullName).removeData(e.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName+"-disabled ui-state-disabled"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")},_destroy:e.noop,widget:function(){return this.element},option:function(t,n){var i,o,s,r=t;if(0===arguments.length)return e.widget.extend({},this.options);if("string"==typeof t)if(r={},i=t.split("."),t=i.shift(),i.length){for(o=r[t]=e.widget.extend({},this.options[t]),s=0;s",{id:c+t,"class":c}).append(i._nestElements(e(this),t)),i.element.append(n),e(this).nextUntil(this.nodeName.toLowerCase()).each(function(){0===e(this).find(i.options.selectors).length?e(this).filter(i.options.selectors).each(function(){e(this).is(s)||i._appendSubheaders.call(this,i,n)}):e(this).find(i.options.selectors).each(function(){e(this).is(s)||i._appendSubheaders.call(this,i,n)})}))})):void i.element.addClass(a)},_setActiveElement:function(e){var n=this,i=t.location.hash.substring(1),o=n.element.find("li[data-unique='"+i+"']");return i.length?(n.element.find("."+n.focusClass).removeClass(n.focusClass),o.addClass(n.focusClass),n.options.showAndHide&&o.click()):(n.element.find("."+n.focusClass).removeClass(n.focusClass),!i.length&&e&&n.options.highlightDefault&&n.element.find(f).first().addClass(n.focusClass)),n},_nestElements:function(t,n){var i,o,s;return i=e.grep(this.items,function(e){return e===t.text()}),this.items.push(i.length?t.text()+n:t.text()),s=this._generateHashValue(i,t,n),o=e("
    • ",{"class":d,"data-unique":s}).append(e("",{text:t.text()})),t.before(e("
      ",{name:s,"data-unique":s})),o},_generateHashValue:function(e,t,n){var i="",o=this.options.hashGenerator;if("pretty"===o){for(i=t.text().toLowerCase().replace(/\s/g,"-"),i=i.replace(/[^\x00-\x7F]/g,"");i.indexOf("--")>-1;)i=i.replace(/--/g,"-");for(;i.indexOf(":-")>-1;)i=i.replace(/:-/g,"-")}else i="function"==typeof o?o(t.text(),t):t.text().replace(/\s/g,"");return e.length&&(i+=""+n),i},_appendSubheaders:function(t,n){var i=e(this).index(t.options.selectors),o=e(t.options.selectors).eq(i-1),s=+e(this).prop("tagName").charAt(1),r=+o.prop("tagName").charAt(1);r>s?t.element.find(u+"[data-tag="+s+"]").last().append(t._nestElements(e(this),i)):s===r?n.find(f).last().after(t._nestElements(e(this),i)):n.find(f).last().after(e("
        ",{"class":l,"data-tag":s})).next(u).append(t._nestElements(e(this),i))},_setEventHandlers:function(){var o=this;this.element.on("click.tocify","li",function(){if(o.options.history&&(t.location.hash=e(this).attr("data-unique")),o.element.find("."+o.focusClass).removeClass(o.focusClass),e(this).addClass(o.focusClass),o.options.showAndHide){var n=e('li[data-unique="'+e(this).attr("data-unique")+'"]');o._triggerShow(n)}o._scrollTo(e(this))}),this.element.find("li").on({"mouseenter.tocify":function(){e(this).addClass(o.hoverClass),e(this).css("cursor","pointer")},"mouseleave.tocify":function(){"bootstrap"!==o.options.theme&&e(this).removeClass(o.hoverClass)}}),e(t).on("resize",function(){o.calculateHeights()}),e(t).on("scroll.tocify",function(){e("html, body").promise().done(function(){var s,r,a,c,h=e(t).scrollTop(),l=e(t).height(),u=e(n).height(),d=e("body")[0].scrollHeight;if(o.options.extendPage&&(o.webkit&&h>=d-l-o.options.extendPageOffset||!o.webkit&&l+h>u-o.options.extendPageOffset)&&!e(g).length){if(r=e('div[data-unique="'+e(f).last().attr("data-unique")+'"]'),!r.length)return;a=r.offset().top,e(o.options.context).append(e("
        ",{"class":p,height:Math.abs(a-h)+"px","data-unique":p})),o.extendPageScroll&&(c=o.element.find("li.active"),o._scrollTo(e("div[data-unique="+c.attr("data-unique")+"]")))}setTimeout(function(){var r,a=null;0==o.cachedHeights.length&&o.calculateHeights();var c=e(t).scrollTop();if(o.cachedAnchors.each(function(e){return o.cachedHeights[e]-c<0?void(a=e):!1}),r=e(o.cachedAnchors[a]).attr("data-unique"),s=e('li[data-unique="'+r+'"]'),o.options.highlightOnScroll&&s.length&&!s.hasClass(o.focusClass)){o.element.find("."+o.focusClass).removeClass(o.focusClass),s.addClass(o.focusClass);var h=o.tocifyWrapper,l=e(s).closest(".tocify-header"),u=l.offset().top,d=h.offset().top,f=u-d;if(f>=e(t).height()){var p=f+h.scrollTop();h.scrollTop(p)}else 0>f&&h.scrollTop(0)}o.options.scrollHistory&&t.location.hash!=="#"+r&&r!==i&&(history.replaceState?history.replaceState({},"","#"+r):(scrollV=n.body.scrollTop,scrollH=n.body.scrollLeft,location.hash="#"+r,n.body.scrollTop=scrollV,n.body.scrollLeft=scrollH)),o.options.showAndHideOnScroll&&o.options.showAndHide&&o._triggerShow(s,!0)},0)})})},calculateHeights:function(){var t=this;t.cachedHeights=[],t.cachedAnchors=[];var n=e(t.options.context).find("div[data-unique]");n.each(function(n){var i=(e(this).next().length?e(this).next():e(this)).offset().top-t.options.highlightOffset;t.cachedHeights[n]=i}),t.cachedAnchors=n},show:function(t){var n=this;if(!t.is(":visible"))switch(t.find(u).length||t.parent().is(h)||t.parent().is(":visible")?t.children(u).length||t.parent().is(h)||(t=t.closest(u)):t=t.parents(u).add(t),n.options.showEffect){case"none":t.show();break;case"show":t.show(n.options.showEffectSpeed);break;case"slideDown":t.slideDown(n.options.showEffectSpeed);break;case"fadeIn":t.fadeIn(n.options.showEffectSpeed);break;default:t.show()}return n.hide(e(u).not(t.parent().is(h)?t:t.closest(h).find(u).not(t.siblings()))),n},hide:function(e){var t=this;switch(t.options.hideEffect){case"none":e.hide();break;case"hide":e.hide(t.options.hideEffectSpeed);break;case"slideUp":e.slideUp(t.options.hideEffectSpeed);break;case"fadeOut":e.fadeOut(t.options.hideEffectSpeed);break;default:e.hide()}return t},_triggerShow:function(e,t){var n=this;return e.parent().is(h)||e.next().is(u)?n.show(e.next(u),t):e.parent().is(u)&&n.show(e.parent(),t),n},_addCSSClasses:function(){return"jqueryui"===this.options.theme?(this.focusClass="ui-state-default",this.hoverClass="ui-state-hover",this.element.addClass("ui-widget").find(".toc-title").addClass("ui-widget-header").end().find("li").addClass("ui-widget-content")):"bootstrap"===this.options.theme?(this.element.find(h+","+u).addClass("nav nav-list"),this.focusClass="active"):(this.focusClass=s,this.hoverClass=r),this},setOption:function(){e.Widget.prototype._setOption.apply(this,arguments)},setOptions:function(){e.Widget.prototype._setOptions.apply(this,arguments)},_scrollTo:function(t){var n=this,i=n.options.smoothScroll||0,o=n.options.scrollTo;return e("html, body").promise().done(function(){e("html, body").animate({scrollTop:e('div[data-unique="'+t.attr("data-unique")+'"]').next().offset().top-(e.isFunction(o)?o.call():o)+"px"},{duration:i})}),n}})}),/*! + * imagesLoaded PACKAGED v3.1.8 + * JavaScript is all like "You images are done yet or what?" + * MIT License + */ +function(){function e(){}function t(e,t){for(var n=e.length;n--;)if(e[n].listener===t)return n;return-1}function n(e){return function(){return this[e].apply(this,arguments)}}var i=e.prototype,o=this,s=o.EventEmitter;i.getListeners=function(e){var t,n,i=this._getEvents();if("object"==typeof e){t={};for(n in i)i.hasOwnProperty(n)&&e.test(n)&&(t[n]=i[n])}else t=i[e]||(i[e]=[]);return t},i.flattenListeners=function(e){var t,n=[];for(t=0;e.length>t;t+=1)n.push(e[t].listener);return n},i.getListenersAsObject=function(e){var t,n=this.getListeners(e);return n instanceof Array&&(t={},t[e]=n),t||n},i.addListener=function(e,n){var i,o=this.getListenersAsObject(e),s="object"==typeof n;for(i in o)o.hasOwnProperty(i)&&-1===t(o[i],n)&&o[i].push(s?n:{listener:n,once:!1});return this},i.on=n("addListener"),i.addOnceListener=function(e,t){return this.addListener(e,{listener:t,once:!0})},i.once=n("addOnceListener"),i.defineEvent=function(e){return this.getListeners(e),this},i.defineEvents=function(e){for(var t=0;e.length>t;t+=1)this.defineEvent(e[t]);return this},i.removeListener=function(e,n){var i,o,s=this.getListenersAsObject(e);for(o in s)s.hasOwnProperty(o)&&(i=t(s[o],n),-1!==i&&s[o].splice(i,1));return this},i.off=n("removeListener"),i.addListeners=function(e,t){return this.manipulateListeners(!1,e,t)},i.removeListeners=function(e,t){return this.manipulateListeners(!0,e,t)},i.manipulateListeners=function(e,t,n){var i,o,s=e?this.removeListener:this.addListener,r=e?this.removeListeners:this.addListeners;if("object"!=typeof t||t instanceof RegExp)for(i=n.length;i--;)s.call(this,t,n[i]);else for(i in t)t.hasOwnProperty(i)&&(o=t[i])&&("function"==typeof o?s.call(this,i,o):r.call(this,i,o));return this},i.removeEvent=function(e){var t,n=typeof e,i=this._getEvents();if("string"===n)delete i[e];else if("object"===n)for(t in i)i.hasOwnProperty(t)&&e.test(t)&&delete i[t];else delete this._events;return this},i.removeAllListeners=n("removeEvent"),i.emitEvent=function(e,t){var n,i,o,s,r=this.getListenersAsObject(e);for(o in r)if(r.hasOwnProperty(o))for(i=r[o].length;i--;)n=r[o][i],n.once===!0&&this.removeListener(e,n.listener),s=n.listener.apply(this,t||[]),s===this._getOnceReturnValue()&&this.removeListener(e,n.listener);return this},i.trigger=n("emitEvent"),i.emit=function(e){var t=Array.prototype.slice.call(arguments,1);return this.emitEvent(e,t)},i.setOnceReturnValue=function(e){return this._onceReturnValue=e,this},i._getOnceReturnValue=function(){return this.hasOwnProperty("_onceReturnValue")?this._onceReturnValue:!0},i._getEvents=function(){return this._events||(this._events={})},e.noConflict=function(){return o.EventEmitter=s,e},"function"==typeof define&&define.amd?define("eventEmitter/EventEmitter",[],function(){return e}):"object"==typeof module&&module.exports?module.exports=e:this.EventEmitter=e}.call(this),function(e){function t(t){var n=e.event;return n.target=n.target||n.srcElement||t,n}var n=document.documentElement,i=function(){};n.addEventListener?i=function(e,t,n){e.addEventListener(t,n,!1)}:n.attachEvent&&(i=function(e,n,i){e[n+i]=i.handleEvent?function(){var n=t(e);i.handleEvent.call(i,n)}:function(){var n=t(e);i.call(e,n)},e.attachEvent("on"+n,e[n+i])});var o=function(){};n.removeEventListener?o=function(e,t,n){e.removeEventListener(t,n,!1)}:n.detachEvent&&(o=function(e,t,n){e.detachEvent("on"+t,e[t+n]);try{delete e[t+n]}catch(i){e[t+n]=void 0}});var s={bind:i,unbind:o};"function"==typeof define&&define.amd?define("eventie/eventie",s):e.eventie=s}(this),function(e,t){"function"==typeof define&&define.amd?define(["eventEmitter/EventEmitter","eventie/eventie"],function(n,i){return t(e,n,i)}):"object"==typeof exports?module.exports=t(e,require("wolfy87-eventemitter"),require("eventie")):e.imagesLoaded=t(e,e.EventEmitter,e.eventie)}(window,function(e,t,n){function i(e,t){for(var n in t)e[n]=t[n];return e}function o(e){return"[object Array]"===d.call(e)}function s(e){var t=[];if(o(e))t=e;else if("number"==typeof e.length)for(var n=0,i=e.length;i>n;n++)t.push(e[n]);else t.push(e);return t}function r(e,t,n){if(!(this instanceof r))return new r(e,t);"string"==typeof e&&(e=document.querySelectorAll(e)),this.elements=s(e),this.options=i({},this.options),"function"==typeof t?n=t:i(this.options,t),n&&this.on("always",n),this.getImages(),h&&(this.jqDeferred=new h.Deferred);var o=this;setTimeout(function(){o.check()})}function a(e){this.img=e}function c(e){this.src=e,f[e]=this}var h=e.jQuery,l=e.console,u=void 0!==l,d=Object.prototype.toString;r.prototype=new t,r.prototype.options={},r.prototype.getImages=function(){this.images=[];for(var e=0,t=this.elements.length;t>e;e++){var n=this.elements[e];"IMG"===n.nodeName&&this.addImage(n);var i=n.nodeType;if(i&&(1===i||9===i||11===i))for(var o=n.querySelectorAll("img"),s=0,r=o.length;r>s;s++){var a=o[s];this.addImage(a)}}},r.prototype.addImage=function(e){var t=new a(e);this.images.push(t)},r.prototype.check=function(){function e(e,o){return t.options.debug&&u&&l.log("confirm",e,o),t.progress(e),n++,n===i&&t.complete(),!0}var t=this,n=0,i=this.images.length;if(this.hasAnyBroken=!1,!i)return void this.complete();for(var o=0;i>o;o++){var s=this.images[o];s.on("confirm",e),s.check()}},r.prototype.progress=function(e){this.hasAnyBroken=this.hasAnyBroken||!e.isLoaded;var t=this;setTimeout(function(){t.emit("progress",t,e),t.jqDeferred&&t.jqDeferred.notify&&t.jqDeferred.notify(t,e)})},r.prototype.complete=function(){var e=this.hasAnyBroken?"fail":"done";this.isComplete=!0;var t=this;setTimeout(function(){if(t.emit(e,t),t.emit("always",t),t.jqDeferred){var n=t.hasAnyBroken?"reject":"resolve";t.jqDeferred[n](t)}})},h&&(h.fn.imagesLoaded=function(e,t){var n=new r(this,e,t);return n.jqDeferred.promise(h(this))}),a.prototype=new t,a.prototype.check=function(){var e=f[this.img.src]||new c(this.img.src);if(e.isConfirmed)return void this.confirm(e.isLoaded,"cached was confirmed");if(this.img.complete&&void 0!==this.img.naturalWidth)return void this.confirm(0!==this.img.naturalWidth,"naturalWidth");var t=this;e.on("confirm",function(e,n){return t.confirm(e.isLoaded,n),!0}),e.check()},a.prototype.confirm=function(e,t){this.isLoaded=e,this.emit("confirm",this,t)};var f={};return c.prototype=new t,c.prototype.check=function(){if(!this.isChecked){var e=new Image;n.bind(e,"load",this),n.bind(e,"error",this),e.src=this.src,this.isChecked=!0}},c.prototype.handleEvent=function(e){var t="on"+e.type;this[t]&&this[t](e)},c.prototype.onload=function(e){this.confirm(!0,"onload"),this.unbindProxyEvents(e)},c.prototype.onerror=function(e){this.confirm(!1,"onerror"),this.unbindProxyEvents(e)},c.prototype.confirm=function(e,t){this.isConfirmed=!0,this.isLoaded=e,this.emit("confirm",this,t)},c.prototype.unbindProxyEvents=function(e){n.unbind(e.target,"load",this),n.unbind(e.target,"error",this)},r}),function(e){"use strict";function t(){setTimeout(function(){toc.setOption("showEffectSpeed",180)},50)}var n=function(){$(".tocify-wrapper").removeClass("open"),$("#nav-button").removeClass("open")},i=function(){e.toc=$("#toc").tocify({selectors:"h1, h2",extendPage:!1,theme:"none",smoothScroll:!1,showEffectSpeed:0,hideEffectSpeed:180,ignoreSelector:".toc-ignore",highlightOffset:60,scrollTo:-1,scrollHistory:!0,hashGenerator:function(e,t){return t.prop("id")}}).data("toc-tocify"),$("#nav-button").click(function(){return $(".tocify-wrapper").toggleClass("open"),$("#nav-button").toggleClass("open"),!1}),$(".page-wrapper").click(n),$(".tocify-item").click(n)};$(function(){i(),t(),$(".content").imagesLoaded(function(){e.toc.calculateHeights()})})}(window); \ No newline at end of file diff --git a/apidocs/docker-cloud/stylesheets/print.css b/apidocs/docker-cloud/stylesheets/print.css new file mode 100644 index 0000000000..7b58586abf --- /dev/null +++ b/apidocs/docker-cloud/stylesheets/print.css @@ -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} \ No newline at end of file diff --git a/apidocs/docker-cloud/stylesheets/screen.css b/apidocs/docker-cloud/stylesheets/screen.css new file mode 100644 index 0000000000..e432eaf01d --- /dev/null +++ b/apidocs/docker-cloud/stylesheets/screen.css @@ -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,.content h5,.content h6,html,body{font-family:"Helvetica Neue", Helvetica, Arial, "Microsoft Yahei","微软雅黑", STXihei, "华文细黑", sans-serif;font-size:13px}.content h1,.content h2,.content h3,.content h4,.content h5,.content h6{font-weight:bold}.content code,.content pre{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 code{word-break:break-all;word-break:break-word;-webkit-hyphens:auto;-moz-hyphens:auto;-ms-hyphens:auto;hyphens:auto}.highlight table td{padding:5px}.highlight table pre{margin:0}.highlight,.highlight .w{color:#f8f8f2;background-color:#272822}.highlight .err{color:#151515;background-color:#ac4142}.highlight .c,.highlight .cd,.highlight .cm,.highlight .c1,.highlight .cs{color:#505050}.highlight .cp{color:#f4bf75}.highlight .nt{color:#f4bf75}.highlight .o,.highlight .ow{color:#d0d0d0}.highlight .p,.highlight .pi{color:#d0d0d0}.highlight .gi{color:#90a959}.highlight .gd{color:#ac4142}.highlight .gh{color:#6a9fb5;background-color:#151515;font-weight:bold}.highlight .k,.highlight .kn,.highlight .kp,.highlight .kr,.highlight .kv{color:#aa759f}.highlight .kc{color:#d28445}.highlight .kt{color:#d28445}.highlight .kd{color:#d28445}.highlight .s,.highlight .sb,.highlight .sc,.highlight .sd,.highlight .s2,.highlight .sh,.highlight .sx,.highlight .s1{color:#90a959}.highlight .sr{color:#75b5aa}.highlight .si{color:#8f5536}.highlight .se{color:#8f5536}.highlight .nn{color:#f4bf75}.highlight .nc{color:#f4bf75}.highlight .no{color:#f4bf75}.highlight .na{color:#6a9fb5}.highlight .m,.highlight .mf,.highlight .mh,.highlight .mi,.highlight .il,.highlight .mo,.highlight .mb,.highlight .mx{color:#90a959}.highlight .ss{color:#90a959}.highlight .c,.highlight .cm,.highlight .c1,.highlight .cs{color:#909090}.highlight,.highlight .w{background-color:#292929}@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,.tocify-wrapper>.search: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-wrapper>.search:before{content:"\e607"}html,body{color:#333;padding:0;margin:0;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background-color:#eaf2f6;height:100%;-webkit-text-size-adjust:none}#toc>ul>li>a>span{float:right;background-color:#2484FF;border-radius:40px;width:20px}.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:230px;background-color:#393939;font-size:13px;font-weight:bold}.tocify-wrapper .lang-selector{display:none}.tocify-wrapper .lang-selector a{padding-top:0.5em;padding-bottom:0.5em}.tocify-wrapper>img{display:block}.tocify-wrapper>.search{position:relative}.tocify-wrapper>.search input{background:#393939;border-width:0 0 1px 0;border-color:#666;padding:6px 0 6px 20px;box-sizing:border-box;margin:10px 15px;width:200px;outline:none;color:#fff;border-radius:0}.tocify-wrapper>.search:before{position:absolute;top:17px;left:15px;color:#fff}.tocify-wrapper img+.tocify{margin-top:20px}.tocify-wrapper .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;background:linear-gradient(to bottom, rgba(0,0,0,0.2), transparent 8px),linear-gradient(to top, rgba(0,0,0,0.2), transparent 8px),linear-gradient(to bottom, #000, transparent 1.5px),linear-gradient(to top, #939393, rgba(147,147,147,0) 1.5px),#262626}.tocify-wrapper .search-results.visible{height:30%;margin-bottom:1em}.tocify-wrapper .search-results li{margin:1em 15px;line-height:1}.tocify-wrapper .search-results a{color:#fff;text-decoration:none}.tocify-wrapper .search-results a:hover{text-decoration:underline}.tocify-wrapper .tocify-item>a,.tocify-wrapper .toc-footer li{padding:0 15px 0 15px;display:block;overflow-x:hidden;white-space:nowrap;text-overflow:ellipsis}.tocify-wrapper ul,.tocify-wrapper li{list-style:none;margin:0;padding:0;line-height:28px}.tocify-wrapper li{color:#fff;transition-property:background;transition-timing-function:linear;transition-duration:230ms}.tocify-wrapper .tocify-focus{box-shadow:0px 1px 0px #000;background-color:#2467af;color:#fff}.tocify-wrapper .tocify-subheader{display:none;background-color:#262626;font-weight:500;background:linear-gradient(to bottom, rgba(0,0,0,0.2), transparent 8px),linear-gradient(to top, rgba(0,0,0,0.2), transparent 8px),linear-gradient(to bottom, #000, transparent 1.5px),linear-gradient(to top, #939393, rgba(147,147,147,0) 1.5px),#262626}.tocify-wrapper .tocify-subheader .tocify-item>a{padding-left:25px;font-size:12px}.tocify-wrapper .tocify-subheader>li:last-child{box-shadow:none}.tocify-wrapper .toc-footer{padding:1em 0;margin-top:1em;border-top:1px dashed #666}.tocify-wrapper .toc-footer li,.tocify-wrapper .toc-footer a{color:#fff;text-decoration:none}.tocify-wrapper .toc-footer a:hover{text-decoration:underline}.tocify-wrapper .toc-footer li{font-size:0.8em;line-height:1.7;text-decoration:none}#nav-button{padding:0 1.5em 5em 0;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;transition:left 0.3s ease-in-out}#nav-button span{display:block;padding:6px 6px 6px;background-color:rgba(234,242,246,0.7);-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:rotate(-90deg) translate(-100%, 0);transform:rotate(-90deg) translate(-100%, 0);border-radius:0 0 0 5px}#nav-button img{height:16px;vertical-align:bottom}#nav-button:hover{opacity:1}#nav-button.open{left:230px}.page-wrapper{margin-left:230px;position:relative;z-index:10;background-color:#eaf2f6;min-height:100%;padding-bottom:1px}.page-wrapper .dark-box{width:50%;background-color:#393939;position:absolute;right:0;top:0;bottom:0}.page-wrapper .lang-selector{position:fixed;z-index:50;border-bottom:5px solid #393939}.lang-selector{background-color:#222;width:100%;font-weight:bold}.lang-selector a{display:block;float:left;color:#fff;text-decoration:none;padding:0 10px;line-height:30px;outline:0}.lang-selector a:active,.lang-selector a:focus{background-color:#111;color:#fff}.lang-selector a.active{background-color:#393939;color:#fff}.lang-selector:after{content:'';clear:both;display:block}.content{position:relative;z-index:30}.content:after{content:'';display:block;clear:both}.content>h1,.content>h2,.content>h3,.content>h4,.content>h5,.content>h6,.content>p,.content>table,.content>ul,.content>ol,.content>aside,.content>dl{margin-right:50%;padding:0 28px;box-sizing:border-box;display:block;text-shadow:0px 1px 0px #fff}.content>ul,.content>ol{padding-left:43px}.content>h1,.content>h2,.content>div{clear:both}.content h1{font-size:30px;padding-top:0.5em;padding-bottom:0.5em;border-bottom:1px solid #ccc;margin-bottom:21px;margin-top:2em;border-top:1px solid #ddd;background-image:linear-gradient(to bottom, #fff, #f9f9f9)}.content h1:first-child,.content div:first-child+h1{border-top-width:0;margin-top:0}.content h2{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(255,255,255,0.4), rgba(255,255,255,0))}.content h1+h2,.content h1+div+h2{margin-top:-21px;border-top:none}.content h3,.content h4,.content h5,.content h6{font-size:15px;margin-top:2.5em;margin-bottom:0.8em}.content h4,.content h5,.content h6{font-size:10px}.content hr{margin:2em 0;border-top:2px solid #393939;border-bottom:2px solid #eaf2f6}.content table{margin-bottom:1em;overflow:auto}.content table th,.content table td{text-align:left;vertical-align:top;line-height:1.6}.content table th{padding:5px 10px;border-bottom:1px solid #ccc;vertical-align:bottom}.content table td{padding:10px}.content table tr:last-child{border-bottom:1px solid #ccc}.content table tr:nth-child(odd)>td{background-color:#f9fbfc}.content table tr:nth-child(even)>td{background-color:#f3f7fa}.content dt{font-weight:bold}.content dd{margin-left:15px}.content p,.content li,.content dt,.content dd{line-height:1.6;margin-top:0}.content img{max-width:100%}.content code{background-color:rgba(0,0,0,0.05);padding:3px;border-radius:3px}.content pre>code{background-color:transparent;padding:0}.content aside{padding-top:1em;padding-bottom:1em;text-shadow:0 1px 0 #c6dde9;margin-top:1.5em;margin-bottom:1.5em;background:#8fbcd4;line-height:1.6}.content aside.warning{background-color:#c97a7e;text-shadow:0 1px 0 #dfb0b3}.content aside.success{background-color:#6ac174;text-shadow:0 1px 0 #a0d7a6}.content aside:before{vertical-align:middle;padding-right:0.5em;font-size:14px}.content .search-highlight{padding:2px;margin:-2px;border-radius:4px;border:1px solid #F7E633;text-shadow:1px 1px 0 #666;background:linear-gradient(to top left, #f7e633 0%, #f1d32f 100%)}.content pre,.content blockquote{background-color:#292929;color:#fff;padding:2em 28px;margin:0;width:50%;float:right;clear:right;box-sizing:border-box;text-shadow:0px 1px 2px rgba(0,0,0,0.4)}.content pre>p,.content blockquote>p{margin:0}.content pre a,.content blockquote a{color:#fff;text-decoration:none;border-bottom:dashed 1px #ccc}.content blockquote>p{background-color:#1c1c1c;border-radius:5px;padding:13px;color:#ccc;border-top:1px solid #000;border-bottom:1px solid #404040}@media (max-width: 930px){.tocify-wrapper{left:-230px}.tocify-wrapper.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: 700px){.dark-box{display:none}.content>h1,.content>h2,.content>h3,.content>h4,.content>h5,.content>h6,.content>p,.content>table,.content>ul,.content>ol,.content>aside,.content>dl{margin-right:0}.tocify-wrapper .lang-selector{display:block}.page-wrapper .lang-selector{display:none}.content pre,.content blockquote{width:auto;float:none}.content>pre+h1,.content>blockquote+h1,.content>pre+h2,.content>blockquote+h2,.content>pre+h3,.content>blockquote+h3,.content>pre+h4,.content>blockquote+h4,.content>pre+h5,.content>blockquote+h5,.content>pre+h6,.content>blockquote+h6,.content>pre+p,.content>blockquote+p,.content>pre+table,.content>blockquote+table,.content>pre+ul,.content>blockquote+ul,.content>pre+ol,.content>blockquote+ol,.content>pre+aside,.content>blockquote+aside,.content>pre+dl,.content>blockquote+dl{margin-top:28px}} \ No newline at end of file diff --git a/apidocs/layouts/single.html b/apidocs/layouts/single.html new file mode 100644 index 0000000000..07094e54d5 --- /dev/null +++ b/apidocs/layouts/single.html @@ -0,0 +1,6545 @@ + + + + + + + Docker Cloud API reference + + + + + + + + + + + + + NAV + + + +
        + +
        + http + go + python + CLI +
        + +
          +
          +
          +
          +
          +
          +
          +

          Introduction

          + +

          Docker Cloud currently offers a HTTP REST API and a Websocket Stream API which are used by both the Web UI and the 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 and Go SDK.

          + +

          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

          +
          import dockercloud
          +dockercloud.user = "username"
          +dockercloud.apikey = "apikey"
          +
          +
          import "github.com/docker/go-dockercloud/dockercloud"
          +
          +dockercloud.User = "username"
          +dockercloud.ApiKey = "apikey"
          +
          +
          GET /api/app/v1/service/ HTTP/1.1
          +Host: cloud.docker.com
          +Authorization: Basic dXNlcm5hbWU6YXBpa2V5
          +Accept: application/json
          +
          +
          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

          +
          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])
          +
          +
          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)
          +}
          +
          +
          GET /api/audit/v1/events HTTP/1.1
          +Host: ws.cloud.docker.com
          +Authorization: Basic dXNlcm5hbWU6YXBpa2V5
          +Connection: Upgrade
          +Upgrade: websocket
          +
          +
          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 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/

          + +

          Actions

          + +

          Action

          + +
          +

          Example

          +
          +
          {
          +    "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

          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          AttributeDescription
          resource_uriA unique API endpoint that represents the action
          uuidA unique identifier for the action generated automatically on creation
          objectThe API object (resource URI) to which the action applies to
          actionName of the operation performed/being performed
          methodHTTP method used to access the API
          pathHTTP path of the API accessed
          user_agentThe user agent provided by the client when accessing the API endpoint
          start_dateDate and time when the API call was performed and the operation started processing
          end_dateDate and time when the API call finished processing
          stateState of the operation (see table below)
          ipIP address of the user that performed the API call
          locationGeographic location of the IP address of the user that performed the API call
          is_user_actionIf the action has been triggered by the user
          can_be_canceledIf the action can be canceled by the user in the middle of its execution
          can_be_retriedIf the action can be retried by the user
          + +

          Action states

          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          StateDescription
          PendingThe action needed asynchronous execution and it is waiting for an in progress action
          In progressThe action needed asynchronous execution and is being performed
          CancelingThe action is being canceled by user request
          CanceledThe action has been canceled
          SuccessThe action was executed successfully
          FailedThere was an issue when the action was being performed. Check the logs for more information.
          + +

          List all actions

          +
          import dockercloud
          +
          +actions = dockercloud.Action.list()
          +
          +
          import "github.com/docker/go-dockercloud/dockercloud"
          +
          +actionList, err := dockercloud.ListActions()
          +
          +if err != nil {
          +  log.Println(err)
          +}
          +
          +log.Println(actionList)
          +
          +
          GET /api/audit/v1/action/ HTTP/1.1
          +Host: cloud.docker.com
          +Authorization: Basic dXNlcm5hbWU6YXBpa2V5
          +Accept: application/json
          +
          +
          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

          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          ParameterDescription
          uuidFilter by UUID.
          stateFilter by state. Possible values: In progress, Success, Failed
          start_dateFilter 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_dateFilter 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)
          objectFilter by resource URI of the related object. This filter can only be combined with ‘include_related’ filter
          include_relatedThere 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

          + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          ObjectRelationships
          ContainerContainer, service, stack (if any)
          ServiceAll containers in the service, service, stack (if any)
          StackAll services in the stack, all containers in every service in the stack, stack
          NodeNode, node cluster (if any)
          Node clusterAll nodes in the cluster, node cluster
          + +

          Get an action by UUID

          +
          import dockercloud
          +
          +action = dockercloud.Action.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
          +
          +
          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)
          +
          +
          GET /api/audit/v1/action/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/ HTTP/1.1
          +Host: cloud.docker.com
          +Authorization: Basic dXNlcm5hbWU6YXBpa2V5
          +Accept: application/json
          +
          +
          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

          + + + + + + + + + + + +
          ParameterDescription
          uuidThe UUID of the action to retrieve
          + +

          Get the logs of an action

          + +
          +

          Example log line

          +
          +
          {
          +    "type": "log",
          +    "log": "Log line from the action",
          +    "timestamp": 1433779324
          +}
          +
          +
          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)
          +
          +
          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)
          +}
          +
          +
          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
          +
          +
          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

          + + + + + + + + + + + +
          ParameterDescription
          uuidThe UUID of the action to retrieve logs
          + +

          Query Parameters

          + + + + + + + + + + + + + + + +
          ParameterDescription
          tailNumber of lines to show from the end of the logs (default: 300)
          followWhether to stream logs or close the connection immediately (default: true)
          + +

          Cancel an action

          +
          POST /api/audit/v1/action/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/cancel/ HTTP/1.1
          +Host: cloud.docker.com
          +Authorization: Basic dXNlcm5hbWU6YXBpa2V5
          +Accept: application/json
          +
          +
          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

          + + + + + + + + + + + +
          ParameterDescription
          uuidThe UUID of the action to cancel
          + +

          Retry an action

          +
          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)
          +
          +
          POST /api/audit/v1/action/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/retry/ HTTP/1.1
          +Host: cloud.docker.com
          +Authorization: Basic dXNlcm5hbWU6YXBpa2V5
          +Accept: application/json
          +
          +
          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)
          +
          +
          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

          + + + + + + + + + + + +
          ParameterDescription
          uuidThe UUID of the action to retry
          + +

          Providers

          + +

          Provider

          + +
          +

          Example

          +
          +
          {
          +    "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

          + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          AttributeDescription
          resource_uriA unique API endpoint that represents the provider
          nameA unique identifier for the provider
          labelA user-friendly name for the provider
          regionsA list of resource URIs of the regions available in this provider
          availableWhether the provider is currently available for new node deployments
          + +

          List all providers

          +
          import dockercloud
          +
          +providers = dockercloud.Provider.list()
          +
          +
          GET /api/infra/v1/provider/ HTTP/1.1
          +Host: cloud.docker.com
          +Authorization: Basic dXNlcm5hbWU6YXBpa2V5
          +Accept: application/json
          +
          +
          import "github.com/docker/go-dockercloud/dockercloud"
          +
          +providerList, err := dockercloud.ListProviders()
          +
          +if err != nil {
          +  log.Println(err)
          +}
          +
          +log.Println(providerList)
          +
          +
          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

          + + + + + + + + + + + +
          ParameterDescription
          nameFilter by provider name
          + +

          Get an individual provider

          +
          import dockercloud
          +
          +provider = dockercloud.Provider.fetch("digitalocean")
          +
          +
          import "github.com/docker/go-dockercloud/dockercloud"
          +
          +provider, err := dockercloud.GetProvider("digitalocean")
          +
          +if err != nil {
          +  log.Println(err)
          +}
          +
          +log.Println(provider)
          +
          +
          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

          + + + + + + + + + + + +
          ParameterDescription
          nameThe name of the provider to retrieve
          + +

          Regions

          + +

          Region

          + +
          +

          Example

          +
          +
          {
          +    "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

          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          AttributeDescription
          resource_uriA unique API endpoint that represents the region
          nameAn identifier for the region
          labelA user-friendly name for the region
          node_typesA list of resource URIs of the node types available in the region
          availability_zonesA list of resource URIs of the availability zones available in the region
          providerThe resource URI of the provider of the region
          availableWhether the region is currently available for new node deployments
          + +

          List all regions

          +
          import dockercloud
          +
          +regions = dockercloud.Region.list()
          +
          +
          GET /api/infra/v1/region/ HTTP/1.1
          +Host: cloud.docker.com
          +Authorization: Basic dXNlcm5hbWU6YXBpa2V5
          +Accept: application/json
          +
          +
          import "github.com/docker/go-dockercloud/dockercloud"
          +
          +regionList, err := dockercloud.ListRegions()
          +
          +if err != nil {
          +  log.Println(err)
          +}
          +
          +log.Println(regionList)
          +
          +
          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

          + + + + + + + + + + + + + + + +
          ParameterDescription
          nameFilter by region name
          providerFilter by resource URI of the target provider
          + +

          Get an individual region

          +
          import dockercloud
          +
          +region = dockercloud.Region.fetch("digitalocean/lon1")
          +
          +
          import "github.com/docker/go-dockercloud/dockercloud"
          +
          +region, err := dockercloud.GetRegion("digitalocean","lon1")
          +
          +if err != nil {
          +  log.Println(err)
          +}
          +
          +log.Println(region)
          +
          +
          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

          + + + + + + + + + + + + + + + +
          ParameterDescription
          nameThe name of the region to retrieve
          provider.nameThe name of the provider of the region
          + +

          Availability Zones

          + +

          Availability Zone

          + +
          +

          Example

          +
          +
          {
          +    "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

          + + + + + + + + + + + + + + + + + + + + + + + +
          AttributeDescription
          availableWhether the availability zone is currently available for new node deployments
          nameAn identifier for the availability zone
          regionThe resource URI of the region where the availability zone is allocated
          resource_uriA unique API endpoint that represents the zone
          + +

          List all availability zones

          +
          import dockercloud
          +
          +az = dockercloud.AZ.list()
          +
          +
          GET /api/infra/v1/az/ HTTP/1.1
          +Host: cloud.docker.com
          +Authorization: Basic dXNlcm5hbWU6YXBpa2V5
          +Accept: application/json
          +
          +
          import "github.com/docker/go-dockercloud/dockercloud"
          +
          +az, err := dockercloud.ListAZ()
          +if err != nil {
          +    log.Println(err)
          +}
          +
          +log.Println(az)
          +
          +
          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

          + + + + + + + + + + + + + + + +
          ParameterDescription
          nameFilter by availability zone name
          regionFilter by resource URI of the target region
          + +

          Get an individual availability zone

          +
          import dockercloud
          +
          +az = dockercloud.AZ.fetch("aws/sa-east-1/sa-east-1a")
          +
          +
          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)
          +
          +
          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

          + + + + + + + + + + + + + + + + + + + +
          ParameterDescription
          nameThe name of the availability zone to retrieve
          providerThe name of the provider
          regionThe name of the region
          + +

          Node Types

          + +

          Node Type

          + +
          +

          Example

          +
          +
          {
          +    "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

          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          AttributeDescription
          resource_uriA unique API endpoint that represents the node type
          nameAn identifier for the node type
          labelA user-friendly name for the node type
          regionsA list of resource URIs of the regions to which this node type can be deployed to
          availability_zonesA list of resource URIs of the availability zones to which this node type can be deployed to
          providerThe resource URI of the provider of the node type
          availableWhether the node type is currently available for new node deployments
          + +

          List all node types

          +
          import dockercloud
          +
          +nodetypes = dockercloud.NodeType.list()
          +
          +
          import "github.com/docker/go-dockercloud/dockercloud"
          +
          +nodetypeList, err := dockercloud.ListNodeTypes()
          +
          +if err != nil {
          +  log.Println(err)
          +}
          +
          +log.Println(nodetypeList)
          +
          +
          GET /api/infra/v1/nodetype/ HTTP/1.1
          +Host: cloud.docker.com
          +Authorization: Basic dXNlcm5hbWU6YXBpa2V5
          +Accept: application/json
          +
          +
          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

          + + + + + + + + + + + + + + + + + + + +
          ParameterDescription
          nameFilter by node type name
          regionsFilter by resource URI of the target regions
          availability_zonesFilter by resource URI of the target availability zones
          + +

          Get an individual node type

          +
          import dockercloud
          +
          +nodetype = dockercloud.NodeType.fetch("digitalocean/1gb")
          +
          +
          import "github.com/docker/go-dockercloud/dockercloud"
          +
          +nodetype, err := dockercloud.GetNodeType("digitalocean","1gb")
          +
          +if err != nil {
          +  log.Println(err)
          +}
          +
          +log.Println(nodetype)
          +
          +
          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

          + + + + + + + + + + + + + + + +
          ParameterDescription
          nameThe name of the node type to retrieve
          provider.nameThe name of the provider of the node type
          + +

          Node Clusters

          + +

          Node Cluster

          + +
          +

          Example

          +
          +
          {
          +    "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

          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          AttributeDescription
          uuidA unique identifier for the node cluster generated automatically on creation
          resource_uriA unique API endpoint that represents the node cluster
          nameA user provided name for the node cluster
          stateThe state of the node cluster. See the below table for a list of possible states.
          node_typeThe resource URI of the node type used for the node cluster
          diskThe size of the disk where images and containers are stored (in GB)
          nodesA list of resource URIs of the Node objects on the node cluster
          regionThe resource URI of the Region object where the node cluster is deployed
          target_num_nodesThe desired number of nodes for the node cluster
          current_num_nodesThe 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_datetimeThe date and time when this node cluster was deployed
          destroyed_datetimeThe date and time when this node cluster was terminated (if applicable)
          tagsList of tags to identify the node cluster nodes when deploying services (see Tags for more information)
          provider_optionsProvider-specific extra options for the deployment of the node (see Provider options table below for more information)
          nicknameA user-friendly name for the node cluster (name by default)
          + +

          Node Cluster states

          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          StateDescription
          InitThe node cluster has been created and has no deployed containers yet. Possible actions in this state: deploy, terminate.
          DeployingAll nodes in the cluster are either deployed or being deployed. No actions allowed in this state.
          DeployedAll nodes in the cluster are deployed and provisioned. Possible actions in this state: terminate.
          Partly deployedOne or more nodes of the cluster are deployed and running. Possible actions in this state: terminate.
          ScalingThe cluster is either deploying new nodes or terminating existing ones responding to a scaling request. No actions allowed in this state.
          TerminatingAll nodes in the cluster are either being terminated or already terminated. No actions allowed in this state.
          TerminatedThe node cluster and all its nodes have been terminated. No actions allowed in this state.
          Empty clusterThere 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

          +
          import dockercloud
          +
          +nodeclusters = dockercloud.NodeCluster.list()
          +
          +
          import "github.com/docker/go-dockercloud/dockercloud"
          +
          +nodeclusters, err := dockercloud.ListNodeClusters()
          +
          +if err != nil {
          +  log.Println(err)
          +}
          +
          +log.Println(nodeclusters)
          +
          +
          GET /api/infra/v1/nodecluster/ HTTP/1.1
          +Host: cloud.docker.com
          +Authorization: Basic dXNlcm5hbWU6YXBpa2V5
          +Accept: application/json
          +
          +
          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

          + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          ParameterDescription
          uuidFilter by UUID
          stateFilter by state. Possible values: Init, Deploying, Deployed, Partly deployed, Scaling, Terminating, Terminated, Empty cluster
          nameFilter by node cluster name
          regionFilter by resource URI of the target region
          node_typeFilter by resource URI of the target node type
          + +

          Create a new node cluster

          +
          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()
          +
          +
          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)
          +
          +
          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}
          +
          +
          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

          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          ParameterDescription
          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 for more information) (default: [])
          provider_optionsProvider-specific extra options for the deployment of the node (see table Provider options above for more information)
          + +

          Get an existing node cluster

          +
          import dockercloud
          +
          +service = dockercloud.NodeCluster.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
          +
          +
          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)
          +
          +
          GET /api/infra/v1/nodecluster/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/ HTTP/1.1
          +Host: cloud.docker.com
          +Authorization: Basic dXNlcm5hbWU6YXBpa2V5
          +Accept: application/json
          +
          +
          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

          + + + + + + + + + + + +
          ParameterDescription
          uuidThe UUID of the node cluster to retrieve
          + +

          Deploy a node cluster

          +
          import dockercloud
          +
          +nodecluster = dockercloud.NodeCluster.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
          +nodecluster.deploy()
          +
          +
          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)
          +}
          +
          +
          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

          + + + + + + + + + + + +
          ParameterDescription
          uuidThe UUID of the node cluster to deploy
          + +

          Update an existing node cluster

          +
          import dockercloud
          +
          +nodecluster = dockercloud.NodeCluster.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
          +nodecluster.target_num_nodes = 3
          +nodecluster.tags.add("tag-1")
          +nodecluster.save()
          +
          +
          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)
          +}
          +
          +
          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"}]}
          +
          +
          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

          + + + + + + + + + + + +
          ParameterDescription
          uuidThe UUID of the node cluster to update
          + +

          JSON Parameters

          + + + + + + + + + + + + + + + +
          ParameterDescription
          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

          +
          import dockercloud
          +
          +nodecluster = dockercloud.NodeCluster.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
          +nodecluster.delete()
          +
          +
          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)
          +}
          +
          +
          DELETE /api/infra/v1/nodecluster/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/ HTTP/1.1
          +Host: cloud.docker.com
          +Authorization: Basic dXNlcm5hbWU6YXBpa2V5
          +Accept: application/json
          +
          +
          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

          + + + + + + + + + + + +
          ParameterDescription
          uuidThe UUID of the node cluster to terminate
          + +

          Nodes

          + +

          Node

          + +
          +

          Example

          +
          +
          {
          +    "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

          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          AttributeDescription
          availability_zoneThe resource URI of the availability zone where the node is deployed, if any
          uuidA unique identifier for the node generated automatically on creation
          resource_uriA unique API endpoint that represents the node
          external_fqdnAn automatically generated FQDN for the node. Containers deployed on this node will inherit this FQDN.
          stateThe state of the node. See the below table for a list of possible states.
          node_clusterThe resource URI of the node cluster to which this node belongs to (if applicable)
          node_typeThe resource URI of the node type used for the node
          regionThe resource URI of the region where the node is deployed
          docker_execdriverDocker’s execution driver used in the node
          docker_graphdriverDocker’s storage driver used in the node
          docker_versionDocker’s version used in the node
          cpuNode number of CPUs
          diskNode storage size in GB
          memoryNode memory in MB
          current_num_containersThe actual number of containers deployed in this node
          last_seenDate and time of the last time the node was contacted by Docker Cloud
          public_ipThe public IP allocated to the node
          tunnelIf 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_datetimeThe date and time when this node cluster was deployed
          destroyed_datetimeThe date and time when this node cluster was terminated (if applicable)
          tagsList of tags to identify the node when deploying services (see Tags for more information)
          nicknameA user-friendly name for the node (external_fqdn by default)
          + +

          Node states

          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          StateDescription
          DeployingThe node is being deployed in the cloud provider. No actions allowed in this state.
          DeployedThe node is deployed and provisioned and is ready to deploy containers. Possible actions in this state: terminate, docker-upgrade.
          UnreachableThe node is deployed but Docker Cloud cannot connect to the docker daemon. Possible actions in this state: health-check and terminate.
          UpgradingThe node docker daemon is being upgraded. No actions allowed in this state.
          TerminatingThe node is being terminated in the cloud provider. No actions allowed in this state.
          TerminatedThe node has been terminated and is no longer present in the cloud provider. No actions allowed in this state.
          + +

          Node Last Metric attributes

          + + + + + + + + + + + + + + + + + + + +
          AttributeDescription
          cpuCPU percentage usage
          memoryMemory usage in bytes
          diskDisk storage usage in bytes
          + +

          List all nodes

          +
          import dockercloud
          +
          +nodes = dockercloud.Node.list()
          +
          +
          import "github.com/docker/go-dockercloud/dockercloud"
          +
          +nodeList, err := dockercloud.ListNodes()
          +
          +if err != nil {
          +  log.Println(err)
          +}
          +
          +log.Println(nodeList)
          +
          +
          GET /api/infra/v1/node/ HTTP/1.1
          +Host: cloud.docker.com
          +Authorization: Basic dXNlcm5hbWU6YXBpa2V5
          +Accept: application/json
          +
          +
          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

          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          ParameterDescription
          uuidFilter by UUID
          stateFilter by state. Possible values: Deploying, Deployed, Unreachable, Upgrading, Terminating, Terminated
          node_clusterFilter by resource URI of the target node cluster
          node_typeFilter by resource URI of the target node type
          regionFilter by resource URI of the target region
          docker_versionFilter by Docker engine version running in the nodes
          + +

          Get an existing node

          +
          import dockercloud
          +
          +node = dockercloud.Node.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
          +
          +
          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)
          +
          +
          GET /api/infra/v1/node/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/ HTTP/1.1
          +Host: cloud.docker.com
          +Authorization: Basic dXNlcm5hbWU6YXBpa2V5
          +Accept: application/json
          +
          +
          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

          + + + + + + + + + + + +
          ParameterDescription
          uuidThe UUID of the node to retrieve
          + +

          Update a node

          +
          import dockercloud
          +
          +node = dockercloud.Node.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
          +node.tags.add(["tag-1"])
          +node.save()
          +
          +
          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)
          +}
          +
          +
          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"}
          +
          +
          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

          + + + + + + + + + + + +
          ParameterDescription
          uuidThe UUID of the node to retrieve
          + +

          JSON Parameters

          + + + + + + + + + + + + + + + +
          ParameterDescription
          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

          +
          import dockercloud
          +
          +node = dockercloud.Node.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
          +node.upgrade_docker()
          +
          +
          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)
          +   }
          +
          +
          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
          +
          +
          docker-cloud node upgrade 7eaf7fff
          +
          + +

          Upgrades the docker daemon of the node. This will restart your containers on that node. See 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

          + + + + + + + + + + + +
          ParameterDescription
          uuidThe UUID of the node to upgrade
          + +

          Perform a health check of a node

          +
          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

          + + + + + + + + + + + +
          ParameterDescription
          uuidThe UUID of the node to perform the health check to
          + +

          Terminate a node

          +
          import dockercloud
          +
          +node = dockercloud.Node.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
          +node.delete()
          +
          +
          DELETE /api/infra/v1/node/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/ HTTP/1.1
          +Host: cloud.docker.com
          +Authorization: Basic dXNlcm5hbWU6YXBpa2V5
          +Accept: application/json
          +
          +
          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)
          +}
          +
          +
          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

          + + + + + + + + + + + +
          ParameterDescription
          uuidThe UUID of the node to terminate
          + +

          Registries

          + +

          Registry

          + +
          +

          Example

          +
          +
          {
          +  "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

          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          AttributeDescription
          resource_uriA unique API endpoint that represents the registry
          nameHuman-readable name of the registry
          hostFQDN of the registry, i.e. registry-1.docker.io
          is_docker_registryWhether this registry is run by Docker
          is_sslWhether this registry has SSL activated or not
          portThe port number where the registry is listening to
          + +

          List all registries

          +
          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

          + + + + + + + + + + + + + + + + + + + + + + + +
          ParameterDescription
          uuidFilter by UUID
          nameFilter by registry name
          hostFilter by registry host
          is_docker_registryFilter by whether the registry is run by Docker or not. Possible values: ‘true’ or 'false’
          + +

          Get an existing registry

          +
          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

          + + + + + + + + + + + +
          ParameterDescription
          hostThe host of the registry to retrieve
          + +

          External Repositories

          + +

          External Repository

          + +
          +

          Example

          +
          +
          {
          +  "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

          + + + + + + + + + + + + + + + + + + + + + + + +
          AttributeDescription
          resource_uriA unique API endpoint that represents the repository
          nameName of the repository, i.e. quay.io/tutum/ubuntu
          in_useIf the image is being used by any of your services
          registryResource URI of the registry where this image is hosted
          + +

          List all external repositories

          +
          import dockercloud
          +
          +repositories = dockercloud.Repository.list()
          +
          +
          GET /api/repo/v1/repository/ HTTP/1.1
          +Host: cloud.docker.com
          +Authorization: Basic dXNlcm5hbWU6YXBpa2V5
          +Accept: application/json
          +
          +
          import "github.com/docker/go-dockercloud/dockercloud"
          +
          +repositoriesList, err := dockercloud.ListRepositories()
          +
          +if err != nil {
          +    log.Println(err)
          +}
          +
          +log.Pringln(repositoriesList)
          +
          +
          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

          + + + + + + + + + + + + + + + +
          ParameterDescription
          nameFilter by image name
          registryFilter by resource URI of the target repository registry
          + +

          Add a new external repository

          +
          import dockercloud
          +
          +repository = dockercloud.Repository.create(name="registry.local/user1/image1", username=username, password=password)
          +repository.save()
          +
          +
          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"}
          +
          +
          import "github.com/docker/go-dockercloud/dockercloud"
          +
          +image, err := dockercloud.CreateImage(dockercloud.ImageCreateRequest{
          +  Name: "registry.local/user1/image1",
          +  Username: "username",
          +  Password: "password"
          +})
          +
          +
          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

          + + + + + + + + + + + + + + + + + + + +
          ParameterDescription
          nameName of the repository, i.e. ‘quay.io/tutum/hello-world’
          usernameUsername to authenticate with the third party registry
          passwordPassword to authenticate with the third party registry
          + +

          Get an external repository details

          +
          import dockercloud
          +
          +repository = dockercloud.Repository.fetch("registry.local/user1/image1")
          +
          +
          GET /api/repo/v1/repository/registry.local/user1/image1/ HTTP/1.1
          +Host: cloud.docker.com
          +Authorization: Basic dXNlcm5hbWU6YXBpa2V5
          +Accept: application/json
          +
          +
          import "github.com/docker/go-dockercloud/dockercloud"
          +
          +repository, err = dockercloud.GetRepository("registry.local/user1/image1")
          +
          +if err != nil {
          +    log.Println(err)
          +}
          +
          +log.Println(repository)
          +
          +
          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

          + + + + + + + + + + + +
          ParameterDescription
          nameThe name of the repository to retrieve
          + +

          Update credentials of an external repository

          +
          import dockercloud
          +
          +repository = dockercloud.Repository.fetch("registry.local/user1/image1")
          +repository.username = "new username"
          +repository.password = "new password"
          +repository.save()
          +
          +
          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"}
          +
          +
          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

          + + + + + + + + + + + +
          ParameterDescription
          nameThe name of the repository to update
          + +

          JSON Parameters

          + + + + + + + + + + + + + + + +
          ParameterDescription
          usernameUsername to authenticate with the private registry
          passwordPassword to authenticate with the private registry
          + +

          Remove an external repository

          +
          import dockercloud
          +
          +repository = dockercloud.Repository.fetch("registry.local/user1/image1")
          +repository.delete()
          +
          +
          DELETE /api/repo/v1/repository/registry.local/user1/image1/ HTTP/1.1
          +Host: cloud.docker.com
          +Authorization: Basic dXNlcm5hbWU6YXBpa2V5
          +Accept: application/json
          +
          +
          import "github.com/docker/go-dockercloud/dockercloud"
          +
          +repository, err = dockercloud.GetRepository("registry.local/user1/image1")
          +
          +if err != nil {
          +    log.Println(err)
          +}
          +
          +repository.Remove()
          +
          +
          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

          + + + + + + + + + + + +
          ParameterDescription
          nameThe name of the external repository to remove
          + +

          Stacks

          + +

          Stack

          + +
          +

          Example

          +
          +
          {
          +  "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

          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          AttributeDescription
          uuidA unique identifier for the stack generated automatically on creation
          resource_uriA unique API endpoint that represents the stack
          nameA user provided name for the stack.
          stateThe state of the stack (see table Stack states below)
          synchronizedFlag indicating if the current stack definition is synchronized with their services.
          servicesList of service resource URIs belonging to the stack
          deployed_datetimeThe date and time of the last deployment of the stack (if applicable, null otherwise)
          destroyed_datetimeThe date and time of the terminate operation on the stack (if applicable, null otherwise)
          nicknameA user-friendly name for the stack (name by default)
          + +

          Stack states

          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          StateDescription
          Not RunningThe stack has been created and has no deployed services yet. Possible actions in this state: start, terminate.
          StartingAll services for the stack are either starting or already running. No actions allowed in this state.
          RunningAll services for the service are deployed and running. Possible actions in this state: redeploy, terminate.
          Partly runningOne or more services of the stack are deployed and running. Possible actions in this state: redeploy, terminate.
          StoppingAll services for the stack are either stopping or already stopped. No actions allowed in this state.
          StoppedAll services for the service are stopped. Possible actions in this state: start, redeploy, terminate.
          RedeployingThe stack is redeploying all its services with the updated configuration. No actions allowed in this state.
          TerminatingAll services for the stack are either being terminated or already terminated. No actions allowed in this state.
          TerminatedThe stack and all its services have been terminated. No actions allowed in this state.
          + +

          List all stacks

          +
          import dockercloud
          +
          +stacks = dockercloud.Stack.list()
          +
          +
          import "github.com/docker/go-dockercloud/dockercloud"
          +
          +stackList, err := dockercloud.ListStacks()
          +
          +if err != nil {
          +  log.Println(err)
          +}
          +
          +log.Println(stackList)
          +
          +
          GET /api/app/v1/stack/ HTTP/1.1
          +Host: cloud.docker.com
          +Authorization: Basic dXNlcm5hbWU6YXBpa2V5
          +Accept: application/json
          +
          +
          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

          + + + + + + + + + + + + + + + +
          ParameterDescription
          uuidFilter by UUID
          nameFilter by stack name
          + +

          Create a new stack

          +
          import dockercloud
          +
          +stack = dockercloud.Stack.create(name="my-new-stack", services=[{"name": "hello-word", "image": "tutum/hello-world", "target_num_containers": 2}])
          +stack.save()
          +
          +
          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)
          +
          +
          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"
          +        }
          +    ]
          +}
          +
          +
          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.

          + +

          Endpoint Type

          + +

          Available in Docker Cloud’s REST API

          + +

          HTTP Request

          + +

          POST /api/app/v1/stack/

          + +

          JSON Parameters

          + + + + + + + + + + + + + + + + + + + +
          ParameterDescription
          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 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

          +
          import dockercloud
          +
          +stack = dockercloud.Stack.fetch("46aca402-2109-4a70-a378-760cfed43816")
          +stack.export()
          +
          +
          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)
          +}
          +
          +
          GET /api/app/v1/stack/46aca402-2109-4a70-a378-760cfed43816/export/ HTTP/1.1
          +Host: cloud.docker.com
          +Authorization: Basic dXNlcm5hbWU6YXBpa2V5
          +Accept: application/json
          +
          +
          docker-cloud stack export 46aca402
          +
          + +

          Get a JSON representation of the stack following the Stack YAML representation.

          + +

          Endpoint Type

          + +

          Available in Docker Cloud’s REST API

          + +

          HTTP Request

          + +

          GET /api/app/v1/stack/(uuid)/export/

          + +

          Path Parameters

          + + + + + + + + + + + +
          ParameterDescription
          uuidThe UUID of the stack to retrieve
          + +

          Get an existing stack

          +
          import dockercloud
          +
          +stack = dockercloud.Stack.fetch("46aca402-2109-4a70-a378-760cfed43816")
          +
          +
          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)
          +
          +
          GET /api/app/v1/stack/46aca402-2109-4a70-a378-760cfed43816/ HTTP/1.1
          +Host: cloud.docker.com
          +Authorization: Basic dXNlcm5hbWU6YXBpa2V5
          +Accept: application/json
          +
          +
          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

          + + + + + + + + + + + +
          ParameterDescription
          uuidThe UUID of the stack to retrieve
          + +

          Update an existing stack

          +
          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()
          +
          +
          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)
          +}
          +
          +
          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"
          +        }
          +    ]
          +}
          +
          +
          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

          + + + + + + + + + + + +
          ParameterDescription
          uuidThe UUID of the stack to update
          + +

          JSON Parameters

          + + + + + + + + + + + +
          ParameterDescription
          services(optional) List of services belonging to the stack. Each service accepts the same parameters as a 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

          +
          import dockercloud
          +
          +stack = dockercloud.Stack.fetch("46aca402-2109-4a70-a378-760cfed43816")
          +stack.stop()
          +
          +
          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)
          +}
          +
          +
          POST /api/app/v1/stack/46aca402-2109-4a70-a378-760cfed43816/stop/ HTTP/1.1
          +Host: cloud.docker.com
          +Authorization: Basic dXNlcm5hbWU6YXBpa2V5
          +Accept: application/json
          +
          +
          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

          + + + + + + + + + + + +
          ParameterDescription
          uuidThe UUID of the stack to stop
          + +

          Start a stack

          +
          import dockercloud
          +
          +stack = dockercloud.Stack.fetch()
          +stack.start()
          +
          +
          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)
          +}
          +
          +
          POST /api/app/v1/stack/46aca402-2109-4a70-a378-760cfed43816/start/ HTTP/1.1
          +Host: cloud.docker.com
          +Authorization: Basic dXNlcm5hbWU6YXBpa2V5
          +Accept: application/json
          +
          +
          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

          + + + + + + + + + + + +
          ParameterDescription
          uuidThe UUID of the stack to start
          + +

          Redeploy a stack

          +
          import dockercloud
          +
          +stack = dockercloud.Stack.fetch("46aca402-2109-4a70-a378-760cfed43816")
          +stack.redeploy()
          +
          +
          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)
          +}
          +
          +
          POST /api/app/v1/stack/46aca402-2109-4a70-a378-760cfed43816/redeploy/ HTTP/1.1
          +Host: cloud.docker.com
          +Authorization: Basic dXNlcm5hbWU6YXBpa2V5
          +Accept: application/json
          +
          +
          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

          + + + + + + + + + + + +
          ParameterDescription
          uuidThe UUID of the stack to redeploy
          + +

          Query Parameters

          + + + + + + + + + + + +
          ParameterDescription
          reuse_volumesWheather to reuse container volumes for this redeploy operation or not (default: true).
          + +

          Terminate a stack

          +
          import dockercloud
          +
          +stack = dockercloud.Stack.fetch("46aca402-2109-4a70-a378-760cfed43816")
          +stack.delete()
          +
          +
          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)
          +}
          +
          +
          DELETE /api/app/v1/stack/46aca402-2109-4a70-a378-760cfed43816/ HTTP/1.1
          +Host: cloud.docker.com
          +Authorization: Basic dXNlcm5hbWU6YXBpa2V5
          +Accept: application/json
          +
          +
          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

          + + + + + + + + + + + +
          ParameterDescription
          uuidThe UUID of the stack to terminate
          + +

          Services

          + +

          Service

          + +
          +

          Example

          +
          +
          {
          +  "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

          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          AttributeDescription
          uuidA unique identifier for the service generated automatically on creation
          resource_uriA unique API endpoint that represents the service
          image_nameThe Docker image name and tag used for the service containers
          nameA 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_dnsAn 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). If the service is not publishing any ports, this FQDN will fail to resolve.
          stateThe state of the service (see table Service states below)
          netNetwork mode to set on the containers (see table Network Modes below, more information ../../docker-cloud/apps/service-links/)
          pidSet the PID (Process) Namespace mode for the containers (more information ../../reference/run/#pid-settings-pid)
          synchronizedFlag indicating if the current service definition is synchronized with the current containers.
          deployed_datetimeThe date and time of the last deployment of the service (if applicable, null otherwise)
          started_datetimeThe date and time of the last start operation on the service (if applicable, null otherwise)
          stopped_datetimeThe date and time of the last stop operation on the service (if applicable, null otherwise)
          destroyed_datetimeThe date and time of the terminate operation on the service (if applicable, null otherwise)
          target_num_containersThe requested number of containers to deploy for the service
          current_num_containersThe actual number of containers deployed for the service
          running_num_containersThe actual number of containers deployed for the service in Running state
          stopped_num_containersThe actual number of containers deployed for the service in Stopped state
          stackResource URIs of the stack that the service belongs to
          containersList of resource URIs of the containers launched as part of the service
          container_portsList of ports to be published on the containers of this service (see table Service Port attributes below)
          container_envvarsList 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)
          labelsMetadata in form of dictionary used for every container of this service
          working_dirWorking directory for running binaries within a container of this service
          userSet the user used on containers of this service (root by default)
          hostnameSet the hostname used on containers of this service
          domainnameSet the domainname used on containers of this service
          mac_addressEthernet device’s MAC address used on containers of this service
          cgroup_nameOptional parent cgroup used on containers of this service.
          ttyIf the containers of this service have the tty enable (false by default)
          stdin_openIf the containers of this service have stdin opened (false by default)
          dnsCustom DNS servers for containers of this service
          dns_searchCustom DNS search domain for containers of this service
          cap_addAdded capabilities for containers of this service
          cap_dropDropped capabilities for containers of this service
          devicesList of device mappings for containers of this service
          extra_hostsList of hostname mappings for containers of this service
          secuirty_optLabeling scheme for containers of this service
          entrypointEntrypoint to be set on the containers launched as part of the service, which will override the image entrypoint
          run_commandRun command to be set on the containers launched as part of the service, which will override the image run command
          sequential_deploymentWhether the containers for this service should be deployed in sequence, linking each of them to the previous containers (see Service scaling for more information)
          cpu_sharesThe relative CPU priority of the containers of the service (see Runtime Constraints on CPU and Memory for more information)
          cpusetCPUs in which to allow execution
          memoryThe memory limit of the containers of the service in MB (see Runtime Constraints on CPU and Memory for more information)
          memory_swapTotal memory limit (memory + swap) of the containers of the service in MB
          linked_from_serviceA list of services that are linked to this one (see table Related services attributes below)
          linked_to_serviceA list of services that the service is linked to (see table Related services attributes below)
          bindingsA list of volume bindings that the service has mounted (see table Service binding attributes below)
          autorestartWhether to restart the containers of the service automatically if they stop (see Crash recovery for more information)
          autodestroyWhether to terminate the containers of the service automatically if they stop (see Autodestroy for more information)
          rolesList of Docker Cloud roles assigned to this service (see Service links for more information)
          link_variablesList of environment variables that would be exposed in the containers if they are linked to this service
          privilegedWhether 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 for more information)
          read_onlyWhether the filesystem of every service container is read-only or not (false by default)
          deployment_strategyContainer distribution among nodes (see table Deployment strategies below and Deployment strategies for more information)
          tagsList of tags to be used to deploy the service (see Tags for more information)
          autoredeployWhether to redeploy the containers of the service when its image is updated in Docker Cloud registry (see Docker Cloud’s private registry for more information)
          nicknameA user-friendly name for the service (name by default)
          + +

          Service binding attributes

          + + + + + + + + + + + + + + + + + + + + + + + +
          AttributeDescription
          host_pathThe host path of the volume
          container_pathThe container path where the volume is mounted
          rewritabletrue is the volume has writable permissions
          volumes_fromThe resource URI of the service
          + +

          Service Port attributes

          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          AttributeDescription
          protocolThe protocol of the port, either tcp or udp
          inner_portThe published port number inside the container
          outer_portThe published port number in the node public network interface
          port_nameName of the service associated to this port
          endpoint_uriThe URI of the service endpoint for this port
          publishedWhether 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

          + + + + + + + + + + + + + + + +
          AttributeDescription
          keyThe name of the environment variable
          valueThe value of the environment variable
          + + + + + + + + + + + + + + + + + + + + + +
          AttributeDescription
          nameThe link name
          from_serviceThe resource URI of the origin of the link
          to_serviceThe resource URI of the target of the link
          + +

          Service states

          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          StateDescription
          Not runningThe service has been created and has no deployed containers yet. Possible actions in this state: start, terminate.
          StartingAll containers for the service are either starting or already running. No actions allowed in this state.
          RunningAll containers for the service are deployed and running. Possible actions in this state: stop, redeploy, terminate.
          Partly runningOne or more containers of the service are deployed and running. Possible actions in this state: stop, redeploy, terminate.
          ScalingThe service is either deploying new containers or destroying existing ones responding to a scaling request. No actions allowed in this state.
          RedeployingThe service is redeploying all its containers with the updated configuration. No actions allowed in this state.
          StoppingAll containers for the service are either stopping or already stopped. No actions allowed in this state.
          StoppedAll containers for the service are stopped. Possible actions in this state: start, redeploy, terminate.
          TerminatingAll containers for the service are either being terminated or already terminated. No actions allowed in this state.
          TerminatedThe service and all its containers have been terminated. No actions allowed in this state.
          + +

          Deployment strategies

          + + + + + + + + + + + + + + + + + + + +
          StrategyDescription
          EMPTIEST_NODEIt will deploy containers to the node with the lower total amount of running containers (default).
          HIGH_AVAILABILITYIt will deploy containers to the node with the lower amount of running containers of the same service.
          EVERY_NODEIt 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

          + + + + + + + + + + + + + + + +
          StrategyDescription
          bridgeCreates a new network stack for the container on the docker bridge.
          hostUses the host network stack inside the container.
          + +

          List all services

          +
          import dockercloud
          +
          +services = dockercloud.Service.list()
          +
          +
          import "github.com/docker/go-dockercloud/dockercloud"
          +
          +serviceList, err := dockercloud.ListServices()
          +
          +if err != nil {
          +  log.Println(err)
          +}
          +
          +log.Println(serviceList)
          +
          +
          GET /api/app/v1/service/ HTTP/1.1
          +Host: cloud.docker.com
          +Authorization: Basic dXNlcm5hbWU6YXBpa2V5
          +Accept: application/json
          +
          +
          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

          + + + + + + + + + + + + + + + + + + + + + + + +
          ParameterDescription
          uuidFilter by UUID
          stateFilter by state. Possible values: Not running, Starting, Running, Partly running, Scaling, Redeploying, Stopping, Stopped, Terminating, Terminated
          nameFilter by service name
          stackFilter by resource URI of the target stack.
          + +

          Create a new service

          +
          import dockercloud
          +
          +service = dockercloud.Service.create(image="tutum/hello-world", name="my-new-app", target_num_containers=2)
          +service.save()
          +
          +
          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)
          +
          +
          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}
          +
          +
          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

          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          ParameterDescription
          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 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 for more information)
          sequential_deployment(optional) Whether the containers should be launched and scaled in sequence, i.e. true (default: false) (see 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 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 for more information)
          deployment_strategy(optional) Container distribution among nodes (default: EMPTIEST_NODE, see table Deployment strategies above and Deployment strategies for more information)
          tags(optional) A list of tags to be used to deploy the service (see 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 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)
          + + + + + + + + + + + + + + + + + + + + + + + + + +
          AttributeDescription
          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

          + + + + + + + + + + + + + + + + + + + + + + + +
          AttributeDescription
          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

          + + + + + + + + + + + + + + + +
          AttributeDescription
          key(required) The name of the environment variable
          value(required) The value of the environment variable
          + + + + + + + + + + + + + + + + + +
          AttributeDescription
          to_service(required) The resource URI of the target of the link
          name(optional) The link name
          + +

          Get an existing service

          +
          import dockercloud
          +
          +service = dockercloud.Service.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
          +
          +
          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)
          +
          +
          GET /api/app/v1/service/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/ HTTP/1.1
          +Host: cloud.docker.com
          +Authorization: Basic dXNlcm5hbWU6YXBpa2V5
          +Accept: application/json
          +
          +
          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

          + + + + + + + + + + + +
          ParameterDescription
          uuidThe UUID of the service to retrieve
          + +

          Get the logs of a service

          + +
          +

          Example log line

          +
          +
          {
          +    "type": "log",
          +    "source": "wordpress-stackable-1",
          +    "log": "Log line from the container indicated by 'source'",
          +    "streamType": "stdout",
          +    "timestamp": 1433779324
          +}
          +
          +
          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)
          +
          +
          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)
          +    }
          +
          +
          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
          +
          +
          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

          + + + + + + + + + + + +
          ParameterDescription
          uuidThe UUID of the service to retrieve logs
          + +

          Query Parameters

          + + + + + + + + + + + + + + + +
          ParameterDescription
          tailNumber of lines to show from the end of the logs (default: 300)
          followWhether to stream logs or close the connection immediately (default: true)
          + +

          Update an existing service

          +
          import dockercloud
          +
          +service = dockercloud.Service.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
          +service.target_num_containers = 3
          +service.tags.append({"name":"tag-1"})
          +service.save()
          +
          +
          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)
          +}
          +
          +
          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}
          +
          +
          +
          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

          + + + + + + + + + + + +
          ParameterDescription
          uuidThe UUID of the service to update
          + +

          JSON Parameters

          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          ParameterDescription
          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 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 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 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 for more information)
          privileged(optional) Whether to start the containers with Docker’s privileged flag set or not, i.e. false (see Runtime privilege 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 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 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 for more information)
          autoredeployWhether to redeploy the containers of the service when its image is updated in Docker Cloud registry (see Docker Cloud’s private registry 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

          +
          import dockercloud
          +
          +service = dockercloud.Service.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
          +service.start()
          +
          +
          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)
          +}
          +
          +
          POST /api/app/v1/service/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/start/ HTTP/1.1
          +Host: cloud.docker.com
          +Authorization: Basic dXNlcm5hbWU6YXBpa2V5
          +Accept: application/json
          +
          +
          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

          + + + + + + + + + + + +
          ParameterDescription
          uuidThe UUID of the service to start
          + +

          Stop a service

          +
          import dockercloud
          +
          +service = dockercloud.Service.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
          +service.stop()
          +
          +
          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)
          +}
          +
          +
          POST /api/app/v1/service/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/stop/ HTTP/1.1
          +Host: cloud.docker.com
          +Authorization: Basic dXNlcm5hbWU6YXBpa2V5
          +Accept: application/json
          +
          +
          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

          + + + + + + + + + + + +
          ParameterDescription
          uuidThe UUID of the service to stop
          + +

          Scale a service

          +
          import dockercloud
          +
          +service = dockercloud.Service.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
          +service.target_num_containers = 3
          +service.save()
          +service.scale()
          +
          +
          POST /api/app/v1/service/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/scale/ HTTP/1.1
          +Host: cloud.docker.com
          +Authorization: Basic dXNlcm5hbWU6YXBpa2V5
          +Accept: application/json
          +
          +
          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

          + + + + + + + + + + + +
          ParameterDescription
          uuidThe UUID of the service to scale
          + +

          Redeploy a service

          +
          import dockercloud
          +
          +service = dockercloud.Service.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
          +service.redeploy()
          +
          +
          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)
          +}
          +
          +
          POST /api/app/v1/service/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/redeploy/ HTTP/1.1
          +Host: cloud.docker.com
          +Authorization: Basic dXNlcm5hbWU6YXBpa2V5
          +Accept: application/json
          +
          +
          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

          + + + + + + + + + + + +
          ParameterDescription
          uuidThe UUID of the service to redeploy
          + +

          Query Parameters

          + + + + + + + + + + + +
          ParameterDescription
          reuse_volumesWheather to reuse container volumes for this redeploy operation or not (default: true).
          + +

          Terminate a service

          +
          import dockercloud
          +
          +service = dockercloud.Service.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
          +service.delete()
          +
          +
          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)
          +}
          +
          +
          DELETE /api/app/v1/service/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/ HTTP/1.1
          +Host: cloud.docker.com
          +Authorization: Basic dXNlcm5hbWU6YXBpa2V5
          +Accept: application/json
          +
          +
          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

          + + + + + + + + + + + +
          ParameterDescription
          uuidThe UUID of the service to terminate
          + +

          Containers

          + +

          Container

          + +
          +

          Example

          +
          +
          {
          +    "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

          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          AttributeDescription
          uuidA unique identifier for the container generated automatically on creation
          resource_uriA unique API endpoint that represents the container
          image_nameThe Docker image name and tag of the container
          bindingsA list of volume bindings that the container has mounted (see table Container Binding attributes below)
          nameA user provided name for the container (inherited from the service)
          nodeThe resource URI of the node where this container is running
          serviceThe resource URI of the service which this container is part of
          public_dnsThe external FQDN of the container
          stateThe state of the container (see table Container states below)
          synchronizedFlag indicating if the container is synchronized with the current service definition.
          exit_codeThe numeric exit code of the container (if applicable, null otherwise)
          exit_code_msgA string representation of the exit code of the container (if applicable, null otherwise)
          deployed_datetimeThe date and time of the last deployment of the container (if applicable, null otherwise)
          started_datetimeThe date and time of the last start operation on the container (if applicable, null otherwise)
          stopped_datetimeThe date and time of the last stop operation on the container (if applicable, null otherwise)
          destroyed_datetimeThe date and time of the terminate operation on the container (if applicable, null otherwise)
          container_portsList of published ports of this container (see table Container Port attributes below)
          container_envvarsList 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)
          labelsContainer metadata in form of dictionary
          working_dirWorking directory for running binaries within a container
          userUser used on the container on launch
          hostnameHostname used on the container on launch
          domainnameDomainname used on the container on launch
          mac_addressEthernet device’s MAC address used on the container on launch
          cgroup_nameOptional parent cgroup for the container.
          ttyIf the container has the tty enable
          stdin_openIf the container has stdin opened
          dnsContainer custom DNS servers
          dns_searchContainer custom DNS search domain
          cap_addContainer added capabilities
          cap_dropContainer dropped capabilities
          devicesList of container device mappings
          extra_hostsList of container hostname mappings
          secuirty_optLabeling scheme of this container
          entrypointEntrypoint used on the container on launch
          run_commandRun command used on the container on launch
          cpu_sharesThe relative CPU priority of the container (see Runtime Constraints on CPU and Memory for more information)
          cpusetCPUs in which execution is allowed
          memoryThe memory limit of the container in MB (see Runtime Constraints on CPU and Memory for more information)
          memory_swapTotal memory limit (memory + swap) of the container in MB
          autorestartWhether to restart the container automatically if it stops (see Crash recovery for more information)
          autodestroyWhether to terminate the container automatically if it stops (see Autodestroy for more information)
          rolesList of Docker Cloud roles asigned to this container (see API roles for more information))
          linked_to_containerList of IP addresses of the linked containers (see table Container Link attributes below and Service links for more information)
          link_variablesList of environment variables that would be exposed in any container that is linked to this one
          privilegedWhether the container has Docker’s privileged flag set or not (see Runtime privilege for more information)
          read_onlyWhether the container filesystem is read-only or not
          private_ipIP address of the container on the overlay network. This IP will be reachable from any other container.
          netNetwork mode set on the container (see table Network Modes below, more information ../../reference/run/#network-settings)
          pidPID (Process) Namespace mode for the container (more information ../../reference/run/#pid-settings-pid)
          + +

          Container Binding attributes

          + + + + + + + + + + + + + + + + + + + + + + + +
          AttributeDescription
          host_pathThe host path of the volume
          container_pathThe container path where the volume is mounted
          rewritabletrue is the volume has writable permissions
          volumeThe resource URI of the volume
          + +

          Container Port attributes

          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          AttributeDescription
          protocolThe protocol of the port, either tcp or udp
          inner_portThe published port number inside the container
          outer_portThe published port number in the node public network interface
          port_nameName of the service associated to this port
          uri_protocolThe protocol to be used in the endpoint for this port (i.e. http)
          endpoint_uriThe URI of the endpoint for this port
          publishedWhether 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

          + + + + + + + + + + + + + + + +
          AttributeDescription
          keyThe name of the environment variable
          valueThe value of the environment variable
          + +

          Container States

          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          StateDescription
          StartingThe container is being deployed or started (from Stopped). No actions allowed in this state.
          RunningThe container is deployed and running. Possible actions in this state: stop, terminate.
          StoppingThe container is being stopped. No actions allowed in this state.
          StoppedThe container is stopped. Possible actions in this state: start, terminate.
          TerminatingThe container is being deleted. No actions allowed in this state.
          TerminatedThe container has been deleted. No actions allowed in this state.
          + +

          Network Modes

          + + + + + + + + + + + + + + + +
          StrategyDescription
          bridgeCreates a new network stack for the container on the docker bridge.
          hostUses the host network stack inside the container.
          + +

          Container Last Metric attributes

          + + + + + + + + + + + + + + + + + + + +
          AttributeDescription
          cpuCPU percentage usage
          memoryMemory usage in bytes
          diskDisk storage usage in bytes
          + + + + + + + + + + + + + + + + + + + + + + + + + +
          AttributeDescription
          nameThe name given to the link
          from_containerThe resource URI of the “client” container
          to_containerThe resource URI of the “server” container being linked
          endpointsA dictionary with the endpoints (protocol, IP and port) to be used to reach each of the “server” container exposed ports
          + +

          List all containers

          +
          import dockercloud
          +
          +containers = dockercloud.Container.list()
          +
          +
          import "github.com/docker/go-dockercloud/dockercloud"
          +
          +containerList, err := dockercloud.ListContainers()
          +
          +if err != nil {
          +  log.Println(err)
          +}
          +
          +log.Println(containerList)
          +
          +
          GET /api/app/v1/container/ HTTP/1.1
          +Host: cloud.docker.com
          +Authorization: Basic dXNlcm5hbWU6YXBpa2V5
          +Accept: application/json
          +
          +
          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

          + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          ParameterDescription
          uuidFilter by UUID
          stateFilter by state. Possible values: Starting, Running, Stopping, Stopped, Terminating, Terminated
          nameFilter by container name
          serviceFilter by resource URI of the target service.
          nodeFilter by resource URI of the target node.
          + +

          Get an existing container

          +
          import dockercloud
          +
          +container = dockercloud.Container.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
          +
          +
          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)
          +
          +
          GET /api/app/v1/container/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/ HTTP/1.1
          +Host: cloud.docker.com
          +Authorization: Basic dXNlcm5hbWU6YXBpa2V5
          +Accept: application/json
          +
          +
          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

          + + + + + + + + + + + +
          ParameterDescription
          uuidThe UUID of the container to retrieve
          + +

          Get the logs of a container

          + +
          +

          Example log line

          +
          +
          {
          +    "type": "log",
          +    "log": "Log line from the container",
          +    "streamType": "stdout",
          +    "timestamp": 1433779324
          +}
          +
          +
          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)
          +
          +
          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)
          +    }
          +
          +
          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
          +
          +
          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

          + + + + + + + + + + + +
          ParameterDescription
          uuidThe UUID of the container to retrieve logs
          + +

          Query Parameters

          + + + + + + + + + + + + + + + + + + + +
          ParameterDescription
          tailNumber of lines to show from the end of the logs (default: 300)
          followWhether to stream logs or close the connection immediately (default: true)
          serviceFilter by service (resource URI)
          + +

          Start a container

          +
          import dockercloud
          +
          +container = dockercloud.Container.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
          +container.start()
          +
          +
          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)
          +}
          +
          +
          POST /api/app/v1/container/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/start/ HTTP/1.1
          +Host: cloud.docker.com
          +Authorization: Basic dXNlcm5hbWU6YXBpa2V5
          +Accept: application/json
          +
          +
          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

          + + + + + + + + + + + +
          ParameterDescription
          uuidThe UUID of the container to start
          + +

          Stop a container

          +
          import dockercloud
          +
          +container = dockerlcoud.Container.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
          +container.stop()
          +
          +
          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)
          +   }
          +
          +
          POST /api/app/v1/container/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/stop/ HTTP/1.1
          +Host: cloud.docker.com
          +Authorization: Basic dXNlcm5hbWU6YXBpa2V5
          +Accept: application/json
          +
          +
          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

          + + + + + + + + + + + +
          ParameterDescription
          uuidThe UUID of the container to stop
          + +

          Redeploy a container

          +
          import dockercloud
          +
          +container = dockercloud.Container.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
          +container.redeploy()
          +
          +
          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)
          +}
          +
          +
          POST /api/app/v1/container/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/start/ HTTP/1.1
          +Host: cloud.docker.com
          +Authorization: Basic dXNlcm5hbWU6YXBpa2V5
          +Accept: application/json
          +
          +
          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

          + + + + + + + + + + + +
          ParameterDescription
          uuidThe UUID of the container to redeploy
          + +

          Query Parameters

          + + + + + + + + + + + +
          ParameterDescription
          reuse_volumesWheather to reuse container volumes for this redeploy operation or not (default: true).
          + +

          Terminate a container

          +
          import dockercloud
          +
          +container = dockercloud.Container.fetch("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
          +container.delete()
          +
          +
          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)
          +   }
          +
          +
          DELETE /api/app/v1/container/7eaf7fff-882c-4f3d-9a8f-a22317ac00ce/ HTTP/1.1
          +Host: cloud.docker.com
          +Authorization: Basic dXNlcm5hbWU6YXBpa2V5
          +Accept: application/json
          +
          +
          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

          + + + + + + + + + + + +
          ParameterDescription
          uuidThe 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)
          +
          +
          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)
          +
          +
          +
          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

          + + + + + + + + + + + +
          ParameterDescription
          uuidThe UUID of the container where the command will be executed
          + +

          Query Parameters

          + + + + + + + + + + + +
          ParameterDescription
          commandCommand to be executed (default: sh)
          + +

          Triggers

          + +

          Service triggers

          + +
          +

          Example

          +
          +
          {
          +  "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 for more information.

          + +

          Attributes

          + + + + + + + + + + + + + + + + + + + + + + + +
          AttributeDescription
          urlAddress to be used to call the trigger with a POST request
          nameA user provided name for the trigger
          operationThe operation that the trigger call performs (see table Operations below)
          resource_uriA unique API endpoint that represents the trigger
          + +

          Operations

          + + + + + + + + + + + + + + + +
          OperationDescription
          REDEPLOYPerforms a redeploy service operation.
          SCALEUPPerforms a scale up service operation.
          + +

          List all triggers

          +
          import dockercloud
          +
          +service = dockercloud.Service.fetch('61a29874-9134-48f9-b460-f37d4bec4826')
          +trigger = dockercloud.Trigger.fetch(service)
          +trigger.list()
          +
          +
          GET /api/app/v1/service/61a29874-9134-48f9-b460-f37d4bec4826/trigger/ HTTP/1.1
          +Host: cloud.docker.com
          +Authorization: Basic dXNlcm5hbWU6YXBpa2V5
          +Accept: application/json
          +
          +
          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)
          +
          +
          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

          + + + + + + + + + + + +
          ParameterDescription
          uuidThe UUID of the service the triggers are associated to
          + +

          Create a new trigger

          +
          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()
          +
          +
          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)
          +
          +
          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"}
          +
          +
          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

          + + + + + + + + + + + + + + + +
          ParameterDescription
          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

          +
          import dockercloud
          +
          +service = dockercloud.Service.fetch('61a29874-9134-48f9-b460-f37d4bec4826')
          +trigger = dockercloud.Trigger.fetch(service)
          +
          +
          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)
          +
          +
          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

          + + + + + + + + + + + + + + + +
          ParameterDescription
          uuidThe UUID of the service the triggers are associated to
          trigger_uuidThe UUID of the trigger to retrieve
          + +

          Delete a trigger

          +
          import dockercloud
          +
          +service = dockercloud.Service.fetch('61a29874-9134-48f9-b460-f37d4bec4826')
          +trigger = dockercloud.Trigger.fetch(service)
          +trigger.delete("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
          +
          +
          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")
          +
          +
          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
          +
          +
          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

          + + + + + + + + + + + + + + + +
          ParameterDescription
          uuidThe UUID of the associated service
          trigger_uuidThe UUID of the trigger to delete
          + +

          Call a trigger

          +
          import dockercloud
          +
          +service = dockercloud.Service.fetch('61a29874-9134-48f9-b460-f37d4bec4826')
          +trigger = dockercloud.Trigger.fetch(service)
          +trigger.call("7eaf7fff-882c-4f3d-9a8f-a22317ac00ce")
          +
          +
          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")
          +
          +
          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

          + + + + + + + + + + + + + + + +
          ParameterDescription
          uuidThe UUID of the associated service
          trigger_uuidThe UUID of the trigger to call
          + +

          Docker Cloud Events

          + +

          Docker Cloud Event

          + +
          +

          Example

          +
          +
          {
          +    "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

          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          AttributeDescription
          typeType of object that was created or updated. For possible values, check the events types table below.
          actionType of action that was executed on the object. Posible values: create, update or delete
          parentsList of resource URIs (REST API) of the parents of the object, according to the “Parent-child hierarchy” table below
          resource_uriResource URI (REST API) of the object that was created or updated. You can do a GET operation on this URL to fetch its details
          stateThe current state of the object
          uuidUnique identifier for the event
          datetimeDate and time of the event in ISO 8601 format
          + +

          Event types

          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          TypeDescription
          stackWhenever a Stack is created or updated
          serviceWhenever a Service is created or updated
          containerWhenever a Container is created or updated
          nodeclusterWhenever a Node Cluster is created or updated
          nodeWhenever a Node is created or updated
          actionWhenever a Action is created or updated
          errorSent when an error occurs on the websocket connection or as part of the authentication process
          + +

          Parent-child hierarchy

          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          Object typeParent types
          Stack(None)
          ServiceStack
          ContainerService, Stack, Node, Node Cluster
          Node Cluster(None)
          NodeNode Cluster
          Action(object to which the action applies to)
          + +

          Listen to new Docker Cloud Events

          +
          import dockercloud
          +
          +def process_event(event):
          +    print event
          +
          +events = dockercloud.Events()
          +events.on_message(process_event)
          +events.run_forever()
          +
          +
          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)
          +    }
          +}
          +
          +
          GET /api/audit/v1/events/ HTTP/1.1
          +Host: ws.cloud.docker.com
          +Authorization: Basic dXNlcm5hbWU6YXBpa2V5
          +Connection: Upgrade
          +Upgrade: websocket
          +
          +
          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/

          + +

          Errors

          + +
          +

          API response structure

          +
          +
          {
          +    "error": "Descriptive error message"
          +}
          +
          + +

          The Docker Cloud API uses the following error codes:

          + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
          Error CodeMeaning
          400Bad Request – There’s a problem in the content of your request. Retrying the same request will fail.
          401Unauthorized – Your API key is wrong or your account has been deactivated.
          402Payment Required – You need to provide billing information to perform this request.
          403Forbidden – Quota limit exceeded. Please contact support to request a quota increase.
          404Not Found – The requested object cannot be found.
          405Method Not Allowed – The endpoint requested does not implement the method sent.
          409Conflict – The object cannot be created or updated because another object exists with the same unique fields
          415Unsupported 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.
          429Too Many Requests – You are being throttled because of too many requests in a short period of time.
          500Internal Server Error – There was a server error while processing your request. Try again later, or contact support.
          503Service Unavailable – We’re temporarily offline for maintenance. Please try again later.
          504Gateway Timeout – Our API servers are at full capacity. Please try again later.
          + +
          +
          +
          + http + go + python + CLI +
          +
          +
          +
          + + + + +
          + + diff --git a/cloud-api-docs/.dockerignore b/cloud-api-docs/.dockerignore new file mode 100644 index 0000000000..567609b123 --- /dev/null +++ b/cloud-api-docs/.dockerignore @@ -0,0 +1 @@ +build/ diff --git a/cloud-api-docs/.gitignore b/cloud-api-docs/.gitignore new file mode 100644 index 0000000000..090a1f02df --- /dev/null +++ b/cloud-api-docs/.gitignore @@ -0,0 +1,2 @@ +.idea +.DS_Store diff --git a/cloud-api-docs/Dockerfile b/cloud-api-docs/Dockerfile new file mode 100644 index 0000000000..9bd11f3778 --- /dev/null +++ b/cloud-api-docs/Dockerfile @@ -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"] diff --git a/cloud-api-docs/Gemfile b/cloud-api-docs/Gemfile new file mode 100644 index 0000000000..0933b9d683 --- /dev/null +++ b/cloud-api-docs/Gemfile @@ -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 diff --git a/cloud-api-docs/Gemfile.lock b/cloud-api-docs/Gemfile.lock new file mode 100644 index 0000000000..fff5ee10cb --- /dev/null +++ b/cloud-api-docs/Gemfile.lock @@ -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) diff --git a/cloud-api-docs/LICENSE b/cloud-api-docs/LICENSE new file mode 100644 index 0000000000..5ceddf59f6 --- /dev/null +++ b/cloud-api-docs/LICENSE @@ -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. \ No newline at end of file diff --git a/cloud-api-docs/Makefile b/cloud-api-docs/Makefile new file mode 100644 index 0000000000..7707a36d64 --- /dev/null +++ b/cloud-api-docs/Makefile @@ -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) diff --git a/cloud-api-docs/README.md b/cloud-api-docs/README.md new file mode 100644 index 0000000000..09f25b77a8 --- /dev/null +++ b/cloud-api-docs/README.md @@ -0,0 +1,28 @@ +dockercloud/api-docs +==================== + +[![Deploy to Docker Cloud](https://files.cloud.docker.com/images/deploy-to-dockercloud.svg)](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`. diff --git a/cloud-api-docs/Rakefile b/cloud-api-docs/Rakefile new file mode 100644 index 0000000000..6a952e1e91 --- /dev/null +++ b/cloud-api-docs/Rakefile @@ -0,0 +1,6 @@ +require 'middleman-gh-pages' +require 'rake/clean' + +CLOBBER.include('build') + +task :default => [:build] diff --git a/cloud-api-docs/config.rb b/cloud-api-docs/config.rb new file mode 100644 index 0000000000..43bceaa5a4 --- /dev/null +++ b/cloud-api-docs/config.rb @@ -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 diff --git a/cloud-api-docs/docker-compose.yml b/cloud-api-docs/docker-compose.yml new file mode 100644 index 0000000000..dc405f6e7f --- /dev/null +++ b/cloud-api-docs/docker-compose.yml @@ -0,0 +1,4 @@ +apidocs: + image: tutum/api-docs:latest + ports: + - "4567:4567" diff --git a/cloud-api-docs/font-selection.json b/cloud-api-docs/font-selection.json new file mode 100644 index 0000000000..5e78f5d862 --- /dev/null +++ b/cloud-api-docs/font-selection.json @@ -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 + } +} diff --git a/cloud-api-docs/publish.sh b/cloud-api-docs/publish.sh new file mode 100644 index 0000000000..006e2da06b --- /dev/null +++ b/cloud-api-docs/publish.sh @@ -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 diff --git a/cloud-api-docs/source/fonts/slate.eot b/cloud-api-docs/source/fonts/slate.eot new file mode 100644 index 0000000000..13c4839a19 Binary files /dev/null and b/cloud-api-docs/source/fonts/slate.eot differ diff --git a/cloud-api-docs/source/fonts/slate.svg b/cloud-api-docs/source/fonts/slate.svg new file mode 100644 index 0000000000..5f34982306 --- /dev/null +++ b/cloud-api-docs/source/fonts/slate.svg @@ -0,0 +1,14 @@ + + + +Generated by IcoMoon + + + + + + + + + + diff --git a/cloud-api-docs/source/fonts/slate.ttf b/cloud-api-docs/source/fonts/slate.ttf new file mode 100644 index 0000000000..ace9a46a7e Binary files /dev/null and b/cloud-api-docs/source/fonts/slate.ttf differ diff --git a/cloud-api-docs/source/fonts/slate.woff b/cloud-api-docs/source/fonts/slate.woff new file mode 100644 index 0000000000..1e72e0ee00 Binary files /dev/null and b/cloud-api-docs/source/fonts/slate.woff differ diff --git a/cloud-api-docs/source/fonts/slate.woff2 b/cloud-api-docs/source/fonts/slate.woff2 new file mode 100644 index 0000000000..7c585a7273 Binary files /dev/null and b/cloud-api-docs/source/fonts/slate.woff2 differ diff --git a/cloud-api-docs/source/images/logo.png b/cloud-api-docs/source/images/logo.png new file mode 100644 index 0000000000..2442aba6fc Binary files /dev/null and b/cloud-api-docs/source/images/logo.png differ diff --git a/cloud-api-docs/source/images/navbar.png b/cloud-api-docs/source/images/navbar.png new file mode 100644 index 0000000000..df38e90d87 Binary files /dev/null and b/cloud-api-docs/source/images/navbar.png differ diff --git a/cloud-api-docs/source/includes/_errors.md b/cloud-api-docs/source/includes/_errors.md new file mode 100644 index 0000000000..12bb1e6925 --- /dev/null +++ b/cloud-api-docs/source/includes/_errors.md @@ -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. \ No newline at end of file diff --git a/cloud-api-docs/source/includes/action.md b/cloud-api-docs/source/includes/action.md new file mode 100644 index 0000000000..00d78c0dec --- /dev/null +++ b/cloud-api-docs/source/includes/action.md @@ -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 | diff --git a/cloud-api-docs/source/includes/availabilityzone.md b/cloud-api-docs/source/includes/availabilityzone.md new file mode 100644 index 0000000000..26e96960a9 --- /dev/null +++ b/cloud-api-docs/source/includes/availabilityzone.md @@ -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 diff --git a/cloud-api-docs/source/includes/container.md b/cloud-api-docs/source/includes/container.md new file mode 100644 index 0000000000..576d47ea27 --- /dev/null +++ b/cloud-api-docs/source/includes/container.md @@ -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`) diff --git a/cloud-api-docs/source/includes/dockercloud-events.md b/cloud-api-docs/source/includes/dockercloud-events.md new file mode 100644 index 0000000000..a4457097fc --- /dev/null +++ b/cloud-api-docs/source/includes/dockercloud-events.md @@ -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/` diff --git a/cloud-api-docs/source/includes/node.md b/cloud-api-docs/source/includes/node.md new file mode 100644 index 0000000000..048440930a --- /dev/null +++ b/cloud-api-docs/source/includes/node.md @@ -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 diff --git a/cloud-api-docs/source/includes/nodecluster.md b/cloud-api-docs/source/includes/nodecluster.md new file mode 100644 index 0000000000..db26bbd3fc --- /dev/null +++ b/cloud-api-docs/source/includes/nodecluster.md @@ -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 diff --git a/cloud-api-docs/source/includes/nodetype.md b/cloud-api-docs/source/includes/nodetype.md new file mode 100644 index 0000000000..fec5c7683a --- /dev/null +++ b/cloud-api-docs/source/includes/nodetype.md @@ -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 diff --git a/cloud-api-docs/source/includes/provider.md b/cloud-api-docs/source/includes/provider.md new file mode 100644 index 0000000000..44e63ab337 --- /dev/null +++ b/cloud-api-docs/source/includes/provider.md @@ -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 diff --git a/cloud-api-docs/source/includes/region.md b/cloud-api-docs/source/includes/region.md new file mode 100644 index 0000000000..4bfd58b309 --- /dev/null +++ b/cloud-api-docs/source/includes/region.md @@ -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 diff --git a/cloud-api-docs/source/includes/registry.md b/cloud-api-docs/source/includes/registry.md new file mode 100644 index 0000000000..f50007be55 --- /dev/null +++ b/cloud-api-docs/source/includes/registry.md @@ -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 diff --git a/cloud-api-docs/source/includes/repository.md b/cloud-api-docs/source/includes/repository.md new file mode 100644 index 0000000000..b4a8f6b9b6 --- /dev/null +++ b/cloud-api-docs/source/includes/repository.md @@ -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 diff --git a/cloud-api-docs/source/includes/service.md b/cloud-api-docs/source/includes/service.md new file mode 100644 index 0000000000..6afd5c4985 --- /dev/null +++ b/cloud-api-docs/source/includes/service.md @@ -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 diff --git a/cloud-api-docs/source/includes/stack.md b/cloud-api-docs/source/includes/stack.md new file mode 100644 index 0000000000..3ea9afb7c9 --- /dev/null +++ b/cloud-api-docs/source/includes/stack.md @@ -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 diff --git a/cloud-api-docs/source/includes/tag.md b/cloud-api-docs/source/includes/tag.md new file mode 100644 index 0000000000..914afaa62b --- /dev/null +++ b/cloud-api-docs/source/includes/tag.md @@ -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` diff --git a/cloud-api-docs/source/includes/triggers.md b/cloud-api-docs/source/includes/triggers.md new file mode 100644 index 0000000000..e58467075d --- /dev/null +++ b/cloud-api-docs/source/includes/triggers.md @@ -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 diff --git a/cloud-api-docs/source/index.md b/cloud-api-docs/source/index.md new file mode 100644 index 0000000000..8413b271ee --- /dev/null +++ b/cloud-api-docs/source/index.md @@ -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/` diff --git a/cloud-api-docs/source/javascripts/all.js b/cloud-api-docs/source/javascripts/all.js new file mode 100644 index 0000000000..ffaa9b0130 --- /dev/null +++ b/cloud-api-docs/source/javascripts/all.js @@ -0,0 +1,4 @@ +//= require ./lib/_energize +//= require ./app/_lang +//= require ./app/_search +//= require ./app/_toc diff --git a/cloud-api-docs/source/javascripts/all_nosearch.js b/cloud-api-docs/source/javascripts/all_nosearch.js new file mode 100644 index 0000000000..818bc4e509 --- /dev/null +++ b/cloud-api-docs/source/javascripts/all_nosearch.js @@ -0,0 +1,3 @@ +//= require ./lib/_energize +//= require ./app/_lang +//= require ./app/_toc diff --git a/cloud-api-docs/source/javascripts/app/_lang.js b/cloud-api-docs/source/javascripts/app/_lang.js new file mode 100644 index 0000000000..1a124bb68a --- /dev/null +++ b/cloud-api-docs/source/javascripts/app/_lang.js @@ -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); diff --git a/cloud-api-docs/source/javascripts/app/_search.js b/cloud-api-docs/source/javascripts/app/_search.js new file mode 100644 index 0000000000..91f38a04ed --- /dev/null +++ b/cloud-api-docs/source/javascripts/app/_search.js @@ -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("
        • " + $(elem).text() + "
        • "); + }); + highlight.call(this); + } else { + searchResults.html('
        • '); + $('.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); + } +})(); diff --git a/cloud-api-docs/source/javascripts/app/_toc.js b/cloud-api-docs/source/javascripts/app/_toc.js new file mode 100644 index 0000000000..bc2aa3e1f1 --- /dev/null +++ b/cloud-api-docs/source/javascripts/app/_toc.js @@ -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); + diff --git a/cloud-api-docs/source/javascripts/lib/_energize.js b/cloud-api-docs/source/javascripts/lib/_energize.js new file mode 100644 index 0000000000..6798f3c03f --- /dev/null +++ b/cloud-api-docs/source/javascripts/lib/_energize.js @@ -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? + +})(); \ No newline at end of file diff --git a/cloud-api-docs/source/javascripts/lib/_imagesloaded.min.js b/cloud-api-docs/source/javascripts/lib/_imagesloaded.min.js new file mode 100644 index 0000000000..d66f658937 --- /dev/null +++ b/cloud-api-docs/source/javascripts/lib/_imagesloaded.min.js @@ -0,0 +1,7 @@ +/*! + * imagesLoaded PACKAGED v3.1.8 + * JavaScript is all like "You images are done yet or what?" + * MIT License + */ + +(function(){function e(){}function t(e,t){for(var n=e.length;n--;)if(e[n].listener===t)return n;return-1}function n(e){return function(){return this[e].apply(this,arguments)}}var i=e.prototype,r=this,o=r.EventEmitter;i.getListeners=function(e){var t,n,i=this._getEvents();if("object"==typeof e){t={};for(n in i)i.hasOwnProperty(n)&&e.test(n)&&(t[n]=i[n])}else t=i[e]||(i[e]=[]);return t},i.flattenListeners=function(e){var t,n=[];for(t=0;e.length>t;t+=1)n.push(e[t].listener);return n},i.getListenersAsObject=function(e){var t,n=this.getListeners(e);return n instanceof Array&&(t={},t[e]=n),t||n},i.addListener=function(e,n){var i,r=this.getListenersAsObject(e),o="object"==typeof n;for(i in r)r.hasOwnProperty(i)&&-1===t(r[i],n)&&r[i].push(o?n:{listener:n,once:!1});return this},i.on=n("addListener"),i.addOnceListener=function(e,t){return this.addListener(e,{listener:t,once:!0})},i.once=n("addOnceListener"),i.defineEvent=function(e){return this.getListeners(e),this},i.defineEvents=function(e){for(var t=0;e.length>t;t+=1)this.defineEvent(e[t]);return this},i.removeListener=function(e,n){var i,r,o=this.getListenersAsObject(e);for(r in o)o.hasOwnProperty(r)&&(i=t(o[r],n),-1!==i&&o[r].splice(i,1));return this},i.off=n("removeListener"),i.addListeners=function(e,t){return this.manipulateListeners(!1,e,t)},i.removeListeners=function(e,t){return this.manipulateListeners(!0,e,t)},i.manipulateListeners=function(e,t,n){var i,r,o=e?this.removeListener:this.addListener,s=e?this.removeListeners:this.addListeners;if("object"!=typeof t||t instanceof RegExp)for(i=n.length;i--;)o.call(this,t,n[i]);else for(i in t)t.hasOwnProperty(i)&&(r=t[i])&&("function"==typeof r?o.call(this,i,r):s.call(this,i,r));return this},i.removeEvent=function(e){var t,n=typeof e,i=this._getEvents();if("string"===n)delete i[e];else if("object"===n)for(t in i)i.hasOwnProperty(t)&&e.test(t)&&delete i[t];else delete this._events;return this},i.removeAllListeners=n("removeEvent"),i.emitEvent=function(e,t){var n,i,r,o,s=this.getListenersAsObject(e);for(r in s)if(s.hasOwnProperty(r))for(i=s[r].length;i--;)n=s[r][i],n.once===!0&&this.removeListener(e,n.listener),o=n.listener.apply(this,t||[]),o===this._getOnceReturnValue()&&this.removeListener(e,n.listener);return this},i.trigger=n("emitEvent"),i.emit=function(e){var t=Array.prototype.slice.call(arguments,1);return this.emitEvent(e,t)},i.setOnceReturnValue=function(e){return this._onceReturnValue=e,this},i._getOnceReturnValue=function(){return this.hasOwnProperty("_onceReturnValue")?this._onceReturnValue:!0},i._getEvents=function(){return this._events||(this._events={})},e.noConflict=function(){return r.EventEmitter=o,e},"function"==typeof define&&define.amd?define("eventEmitter/EventEmitter",[],function(){return e}):"object"==typeof module&&module.exports?module.exports=e:this.EventEmitter=e}).call(this),function(e){function t(t){var n=e.event;return n.target=n.target||n.srcElement||t,n}var n=document.documentElement,i=function(){};n.addEventListener?i=function(e,t,n){e.addEventListener(t,n,!1)}:n.attachEvent&&(i=function(e,n,i){e[n+i]=i.handleEvent?function(){var n=t(e);i.handleEvent.call(i,n)}:function(){var n=t(e);i.call(e,n)},e.attachEvent("on"+n,e[n+i])});var r=function(){};n.removeEventListener?r=function(e,t,n){e.removeEventListener(t,n,!1)}:n.detachEvent&&(r=function(e,t,n){e.detachEvent("on"+t,e[t+n]);try{delete e[t+n]}catch(i){e[t+n]=void 0}});var o={bind:i,unbind:r};"function"==typeof define&&define.amd?define("eventie/eventie",o):e.eventie=o}(this),function(e,t){"function"==typeof define&&define.amd?define(["eventEmitter/EventEmitter","eventie/eventie"],function(n,i){return t(e,n,i)}):"object"==typeof exports?module.exports=t(e,require("wolfy87-eventemitter"),require("eventie")):e.imagesLoaded=t(e,e.EventEmitter,e.eventie)}(window,function(e,t,n){function i(e,t){for(var n in t)e[n]=t[n];return e}function r(e){return"[object Array]"===d.call(e)}function o(e){var t=[];if(r(e))t=e;else if("number"==typeof e.length)for(var n=0,i=e.length;i>n;n++)t.push(e[n]);else t.push(e);return t}function s(e,t,n){if(!(this instanceof s))return new s(e,t);"string"==typeof e&&(e=document.querySelectorAll(e)),this.elements=o(e),this.options=i({},this.options),"function"==typeof t?n=t:i(this.options,t),n&&this.on("always",n),this.getImages(),a&&(this.jqDeferred=new a.Deferred);var r=this;setTimeout(function(){r.check()})}function f(e){this.img=e}function c(e){this.src=e,v[e]=this}var a=e.jQuery,u=e.console,h=u!==void 0,d=Object.prototype.toString;s.prototype=new t,s.prototype.options={},s.prototype.getImages=function(){this.images=[];for(var e=0,t=this.elements.length;t>e;e++){var n=this.elements[e];"IMG"===n.nodeName&&this.addImage(n);var i=n.nodeType;if(i&&(1===i||9===i||11===i))for(var r=n.querySelectorAll("img"),o=0,s=r.length;s>o;o++){var f=r[o];this.addImage(f)}}},s.prototype.addImage=function(e){var t=new f(e);this.images.push(t)},s.prototype.check=function(){function e(e,r){return t.options.debug&&h&&u.log("confirm",e,r),t.progress(e),n++,n===i&&t.complete(),!0}var t=this,n=0,i=this.images.length;if(this.hasAnyBroken=!1,!i)return this.complete(),void 0;for(var r=0;i>r;r++){var o=this.images[r];o.on("confirm",e),o.check()}},s.prototype.progress=function(e){this.hasAnyBroken=this.hasAnyBroken||!e.isLoaded;var t=this;setTimeout(function(){t.emit("progress",t,e),t.jqDeferred&&t.jqDeferred.notify&&t.jqDeferred.notify(t,e)})},s.prototype.complete=function(){var e=this.hasAnyBroken?"fail":"done";this.isComplete=!0;var t=this;setTimeout(function(){if(t.emit(e,t),t.emit("always",t),t.jqDeferred){var n=t.hasAnyBroken?"reject":"resolve";t.jqDeferred[n](t)}})},a&&(a.fn.imagesLoaded=function(e,t){var n=new s(this,e,t);return n.jqDeferred.promise(a(this))}),f.prototype=new t,f.prototype.check=function(){var e=v[this.img.src]||new c(this.img.src);if(e.isConfirmed)return this.confirm(e.isLoaded,"cached was confirmed"),void 0;if(this.img.complete&&void 0!==this.img.naturalWidth)return this.confirm(0!==this.img.naturalWidth,"naturalWidth"),void 0;var t=this;e.on("confirm",function(e,n){return t.confirm(e.isLoaded,n),!0}),e.check()},f.prototype.confirm=function(e,t){this.isLoaded=e,this.emit("confirm",this,t)};var v={};return c.prototype=new t,c.prototype.check=function(){if(!this.isChecked){var e=new Image;n.bind(e,"load",this),n.bind(e,"error",this),e.src=this.src,this.isChecked=!0}},c.prototype.handleEvent=function(e){var t="on"+e.type;this[t]&&this[t](e)},c.prototype.onload=function(e){this.confirm(!0,"onload"),this.unbindProxyEvents(e)},c.prototype.onerror=function(e){this.confirm(!1,"onerror"),this.unbindProxyEvents(e)},c.prototype.confirm=function(e,t){this.isConfirmed=!0,this.isLoaded=e,this.emit("confirm",this,t)},c.prototype.unbindProxyEvents=function(e){n.unbind(e.target,"load",this),n.unbind(e.target,"error",this)},s}); \ No newline at end of file diff --git a/cloud-api-docs/source/javascripts/lib/_jquery.highlight.js b/cloud-api-docs/source/javascripts/lib/_jquery.highlight.js new file mode 100644 index 0000000000..9dcf3c7af3 --- /dev/null +++ b/cloud-api-docs/source/javascripts/lib/_jquery.highlight.js @@ -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 (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 + * $('#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); + }); +}; + diff --git a/cloud-api-docs/source/javascripts/lib/_jquery.tocify.js b/cloud-api-docs/source/javascripts/lib/_jquery.tocify.js new file mode 100644 index 0000000000..91cf637913 --- /dev/null +++ b/cloud-api-docs/source/javascripts/lib/_jquery.tocify.js @@ -0,0 +1,1042 @@ +/* jquery Tocify - v1.8.0 - 2013-09-16 +* http://www.gregfranko.com/jquery.tocify.js/ +* Copyright (c) 2013 Greg Franko; Licensed MIT +* Modified lightly by Robert Lord to fix a bug I found, +* and also so it adds ids to headers +* also because I want height caching, since the +* height lookup for h1s and h2s was causing serious +* lag spikes below 30 fps */ + +// Immediately-Invoked Function Expression (IIFE) [Ben Alman Blog Post](http://benalman.com/news/2010/11/immediately-invoked-function-expression/) that calls another IIFE that contains all of the plugin logic. I used this pattern so that anyone viewing this code would not have to scroll to the bottom of the page to view the local parameters that were passed to the main IIFE. +(function(tocify) { + + // ECMAScript 5 Strict Mode: [John Resig Blog Post](http://ejohn.org/blog/ecmascript-5-strict-mode-json-and-more/) + "use strict"; + + // Calls the second IIFE and locally passes in the global jQuery, window, and document objects + tocify(window.jQuery, window, document); + +} + +// Locally passes in `jQuery`, the `window` object, the `document` object, and an `undefined` variable. The `jQuery`, `window` and `document` objects are passed in locally, to improve performance, since javascript first searches for a variable match within the local variables set before searching the global variables set. All of the global variables are also passed in locally to be minifier friendly. `undefined` can be passed in locally, because it is not a reserved word in JavaScript. +(function($, window, document, undefined) { + + // ECMAScript 5 Strict Mode: [John Resig Blog Post](http://ejohn.org/blog/ecmascript-5-strict-mode-json-and-more/) + "use strict"; + + var tocClassName = "tocify", + tocClass = "." + tocClassName, + tocFocusClassName = "tocify-focus", + tocHoverClassName = "tocify-hover", + hideTocClassName = "tocify-hide", + hideTocClass = "." + hideTocClassName, + headerClassName = "tocify-header", + headerClass = "." + headerClassName, + subheaderClassName = "tocify-subheader", + subheaderClass = "." + subheaderClassName, + itemClassName = "tocify-item", + itemClass = "." + itemClassName, + extendPageClassName = "tocify-extend-page", + extendPageClass = "." + extendPageClassName; + + // Calling the jQueryUI Widget Factory Method + $.widget("toc.tocify", { + + //Plugin version + version: "1.8.0", + + // These options will be used as defaults + options: { + + // **context**: Accepts String: Any jQuery selector + // The container element that holds all of the elements used to generate the table of contents + context: "body", + + // **ignoreSelector**: Accepts String: Any jQuery selector + // A selector to any element that would be matched by selectors that you wish to be ignored + ignoreSelector: null, + + // **selectors**: Accepts an Array of Strings: Any jQuery selectors + // The element's used to generate the table of contents. The order is very important since it will determine the table of content's nesting structure + selectors: "h1, h2, h3", + + // **showAndHide**: Accepts a boolean: true or false + // Used to determine if elements should be shown and hidden + showAndHide: true, + + // **showEffect**: Accepts String: "none", "fadeIn", "show", or "slideDown" + // Used to display any of the table of contents nested items + showEffect: "slideDown", + + // **showEffectSpeed**: Accepts Number (milliseconds) or String: "slow", "medium", or "fast" + // The time duration of the show animation + showEffectSpeed: "medium", + + // **hideEffect**: Accepts String: "none", "fadeOut", "hide", or "slideUp" + // Used to hide any of the table of contents nested items + hideEffect: "slideUp", + + // **hideEffectSpeed**: Accepts Number (milliseconds) or String: "slow", "medium", or "fast" + // The time duration of the hide animation + hideEffectSpeed: "medium", + + // **smoothScroll**: Accepts a boolean: true or false + // Determines if a jQuery animation should be used to scroll to specific table of contents items on the page + smoothScroll: true, + + // **smoothScrollSpeed**: Accepts Number (milliseconds) or String: "slow", "medium", or "fast" + // The time duration of the smoothScroll animation + smoothScrollSpeed: "medium", + + // **scrollTo**: Accepts Number (pixels) + // The amount of space between the top of page and the selected table of contents item after the page has been scrolled + scrollTo: 0, + + // **showAndHideOnScroll**: Accepts a boolean: true or false + // Determines if table of contents nested items should be shown and hidden while scrolling + showAndHideOnScroll: true, + + // **highlightOnScroll**: Accepts a boolean: true or false + // Determines if table of contents nested items should be highlighted (set to a different color) while scrolling + highlightOnScroll: true, + + // **highlightOffset**: Accepts a number + // The offset distance in pixels to trigger the next active table of contents item + highlightOffset: 40, + + // **theme**: Accepts a string: "bootstrap", "jqueryui", or "none" + // Determines if Twitter Bootstrap, jQueryUI, or Tocify classes should be added to the table of contents + theme: "bootstrap", + + // **extendPage**: Accepts a boolean: true or false + // If a user scrolls to the bottom of the page and the page is not tall enough to scroll to the last table of contents item, then the page height is increased + extendPage: true, + + // **extendPageOffset**: Accepts a number: pixels + // How close to the bottom of the page a user must scroll before the page is extended + extendPageOffset: 100, + + // **history**: Accepts a boolean: true or false + // Adds a hash to the page url to maintain history + history: true, + + // **scrollHistory**: Accepts a boolean: true or false + // Adds a hash to the page url, to maintain history, when scrolling to a TOC item + scrollHistory: false, + + // **hashGenerator**: How the hash value (the anchor segment of the URL, following the + // # character) will be generated. + // + // "compact" (default) - #CompressesEverythingTogether + // "pretty" - #looks-like-a-nice-url-and-is-easily-readable + // function(text, element){} - Your own hash generation function that accepts the text as an + // argument, and returns the hash value. + hashGenerator: "compact", + + // **highlightDefault**: Accepts a boolean: true or false + // Set's the first TOC item as active if no other TOC item is active. + highlightDefault: true + + }, + + // _Create + // ------- + // Constructs the plugin. Only called once. + _create: function() { + + var self = this; + + self.tocifyWrapper = $('.tocify-wrapper'); + self.extendPageScroll = true; + + // Internal array that keeps track of all TOC items (Helps to recognize if there are duplicate TOC item strings) + self.items = []; + + // Generates the HTML for the dynamic table of contents + self._generateToc(); + + // Caches heights and anchors + self.cachedHeights = [], + self.cachedAnchors = []; + + // Adds CSS classes to the newly generated table of contents HTML + self._addCSSClasses(); + + self.webkit = (function() { + + for(var prop in window) { + + if(prop) { + + if(prop.toLowerCase().indexOf("webkit") !== -1) { + + return true; + + } + + } + + } + + return false; + + }()); + + // Adds jQuery event handlers to the newly generated table of contents + self._setEventHandlers(); + + // Binding to the Window load event to make sure the correct scrollTop is calculated + $(window).load(function() { + + // Sets the active TOC item + self._setActiveElement(true); + + // Once all animations on the page are complete, this callback function will be called + $("html, body").promise().done(function() { + + setTimeout(function() { + + self.extendPageScroll = false; + + },0); + + }); + + }); + + }, + + // _generateToc + // ------------ + // Generates the HTML for the dynamic table of contents + _generateToc: function() { + + // _Local variables_ + + // Stores the plugin context in the self variable + var self = this, + + // All of the HTML tags found within the context provided (i.e. body) that match the top level jQuery selector above + firstElem, + + // Instantiated variable that will store the top level newly created unordered list DOM element + ul, + ignoreSelector = self.options.ignoreSelector; + + // If the selectors option has a comma within the string + if(this.options.selectors.indexOf(",") !== -1) { + + // Grabs the first selector from the string + firstElem = $(this.options.context).find(this.options.selectors.replace(/ /g,"").substr(0, this.options.selectors.indexOf(","))); + + } + + // If the selectors option does not have a comman within the string + else { + + // Grabs the first selector from the string and makes sure there are no spaces + firstElem = $(this.options.context).find(this.options.selectors.replace(/ /g,"")); + + } + + if(!firstElem.length) { + + self.element.addClass(hideTocClassName); + + return; + + } + + self.element.addClass(tocClassName); + + // Loops through each top level selector + firstElem.each(function(index) { + + //If the element matches the ignoreSelector then we skip it + if($(this).is(ignoreSelector)) { + return; + } + + // Creates an unordered list HTML element and adds a dynamic ID and standard class name + ul = $("