diff --git a/Dockerfile b/Dockerfile index 63fb4211906..b133731198b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -30,8 +30,8 @@ COPY . ${SOURCE} ## To get master from svn the svn branch needs to be 'trunk'. To get a branch from svn it needs to be 'branches/branchname' # Engine -ENV ENGINE_SVN_BRANCH="branches/17.09.x" -ENV ENGINE_BRANCH="17.09.x" +ENV ENGINE_SVN_BRANCH="branches/18.09.x" +ENV ENGINE_BRANCH="18.09.x" # Distribution ENV DISTRIBUTION_SVN_BRANCH="branches/release/2.6" @@ -80,6 +80,7 @@ COPY --from=docs/docker.github.io:v17.03 ${TARGET} ${TARGET} COPY --from=docs/docker.github.io:v17.06 ${TARGET} ${TARGET} COPY --from=docs/docker.github.io:v17.09 ${TARGET} ${TARGET} COPY --from=docs/docker.github.io:v17.12 ${TARGET} ${TARGET} +COPY --from=docs/docker.github.io:v18.03 ${TARGET} ${TARGET} # Get the built docs output from the previous build stage # This ordering means all previous layers can come from cache unless an archive diff --git a/README.md b/README.md index 7e3df910cb9..c54fc728172 100644 --- a/README.md +++ b/README.md @@ -174,7 +174,7 @@ You have two options: To read the docs offline, you can use either a standalone container or a swarm service. To see all available tags, go to -[Docker Cloud](https://cloud.docker.com/app/docs/repository/docker/docs/docker.github.io/tags). +[Docker Hub](https://hub.docker.com/r/docs/docker.github.io/tags/). The following examples use the `latest` tag: - Run a single container: @@ -309,9 +309,16 @@ instance. Be sure to compress the images *before* adding them to the repository, doing it afterwards actually worsens the impact on the Git repo (but still optimizes the bandwidth during browsing). +## Beta content disclaimer +```bash +> BETA DISCLAIMER +> +> This is beta content. It is not yet complete and should be considered a work in progress. This content is subject to change without notice. +``` + ## Building archives and the live published docs -All the images described below are automatically built using Docker Cloud. To +All the images described below are automatically built using Docker Hub. To build the site manually, from scratch, including all utility and archive images, see the [README in the publish-tools branch](https://github.com/docker/docker.github.io/blob/publish-tools/README.md). diff --git a/_config.yml b/_config.yml index 7fe09df78aa..02e53045a33 100644 --- a/_config.yml +++ b/_config.yml @@ -13,26 +13,28 @@ safe: false lsi: false url: https://docs.docker.com # This needs to have all the directories you expect to be in the archives (delivered by docs-base in the Dockerfile) -keep_files: ["v1.4", "v1.5", "v1.6", "v1.7", "v1.8", "v1.9", "v1.10", "v1.11", "v1.12", "v1.13", "v17.03", "v17.06", "v17.09", "v17.12"] +keep_files: ["v1.4", "v1.5", "v1.6", "v1.7", "v1.8", "v1.9", "v1.10", "v1.11", "v1.12", "v1.13", "v17.03", "v17.06", "v17.09", "v17.12", "v18.03"] exclude: ["_scripts", "apidocs/layouts", "Gemfile", "hooks"] # Component versions -- address like site.docker_ce_stable_version # You can't have - characters in these for non-YAML reasons -latest_stable_docker_engine_api_version: "1.37" -docker_ce_stable_version: "18.03" -docker_ce_edge_version: "18.05" -docker_ee_version: "17.06" -compose_version: "1.23.0" -machine_version: "0.14.0" +latest_stable_docker_engine_api_version: "1.39" +docker_ce_stable_version: "18.09" +docker_ce_edge_version: "18.09" +docker_ee_version: "18.09" +compose_version: "1.23.1" +machine_version: "0.16.0" distribution_version: "2.6" -dtr_version: "2.5" -ucp_version: "3.0" +dtr_version: "2.6" +ucp_version: "3.1" ucp_versions: - - version: "3.0" + - version: "3.1" path: /ee/ucp/ latest: true + - version: "3.0" + path: /datacenter/ucp/3.0/guides/ - version: "2.2" path: /datacenter/ucp/2.2/guides/ - version: "2.1" @@ -43,9 +45,11 @@ ucp_versions: path: /datacenter/ucp/1.1/overview/ dtr_versions: - - version: "2.5" + - version: "2.6" path: /ee/dtr/ latest: true + - version: "2.5" + path: /datacenter/dtr/2.5/guides/ - version: "2.4" path: /datacenter/dtr/2.4/guides/ - version: "2.3" @@ -58,7 +62,7 @@ dtr_versions: path: /datacenter/dtr/2.0/ tablabels: - dee-2.0: Docker Enterprise Edition 2.0 Beta2 + dee-2.0: Docker Enterprise Edition 2.0 ucp-3.0: Universal Control Plane 3.0 ucp-2.2: Universal Control Plane 2.2 dtr-2.5: Docker Trusted Registry 2.5 @@ -80,8 +84,7 @@ plugins: - jekyll-sitemap defaults: - - - scope: + - scope: path: "" type: "pages" values: @@ -92,7 +95,7 @@ defaults: - scope: path: "install" values: - win_latest_build: "docker-17.06.2-ee-17" + win_latest_build: "docker-18.09.0" - scope: path: "datacenter" values: @@ -100,6 +103,13 @@ defaults: - scope: path: "ee/dtr" values: + dtr_org: "docker" + dtr_repo: "dtr" + dtr_version: "2.6.0" + - scope: + path: "datacenter/dtr/2.5" + values: + hide_from_sitemap: true dtr_org: "docker" dtr_repo: "dtr" dtr_version: "2.5.6" @@ -138,16 +148,23 @@ defaults: values: ucp_org: "docker" ucp_repo: "ucp" - ucp_version: "3.0.6" + ucp_version: "3.1.1" - scope: # This is a bit of a hack for the get-support.md topic. path: "ee" values: ucp_org: "docker" ucp_repo: "ucp" dtr_repo: "dtr" - ucp_version: "3.0.6" - dtr_version: "2.5.0" - dtr_latest_image: "docker/dtr:2.5.6" + ucp_version: "3.1.1" + dtr_version: "2.6.0" + dtr_latest_image: "docker/dtr:2.6.0" + - scope: + path: "datacenter/ucp/3.0" + values: + hide_from_sitemap: true + ucp_org: "docker" + ucp_repo: "ucp" + ucp_version: "3.0.7" - scope: path: "datacenter/ucp/2.2" values: diff --git a/_data/advisories.yaml b/_data/advisories.yaml index 66a1e0a50a6..f69a8b7ca1d 100644 --- a/_data/advisories.yaml +++ b/_data/advisories.yaml @@ -17,7 +17,6 @@ texts: swarm: "See [Swarm mode overview](/engine/swarm/) for the orchestration features introduced in Docker Engine 1.12. Only refer to the Docker Swarm documents below for information on the standalone Swarm product." swarm-standalone: "**You are viewing docs for legacy standalone Swarm.** These topics describe standalone Docker Swarm. In Docker 1.12 and higher, [Swarm mode](/engine/swarm/) is integrated with Docker Engine. Most users should use integrated Swarm mode — a good place to start is [Getting started with swarm mode](/engine/swarm/swarm-tutorial/), [Swarm mode CLI commands](/engine/swarm/index.md#swarm-mode-cli-commands), and the [Get started with Docker walkthrough](/get-started/)). Standalone Docker Swarm is not integrated into the Docker Engine API and CLI commands." engine: "This site contains documentation for the v1.12 release candidate version of Docker Engine. For the Docker Engine v1.11 docs, see [https://docs.docker.com/v1.11/](https://docs.docker.com/v1.11/). Docker for Mac and Docker for Windows are currently in Beta." - cloud-swarm: "**Beta Feature.** Swarm Mode for Docker Cloud is currently a public Beta." # URL based advisories diff --git a/_data/ddc_offline_files_2.yaml b/_data/ddc_offline_files_2.yaml index 3ff6d9e6fdc..dc493531a03 100644 --- a/_data/ddc_offline_files_2.yaml +++ b/_data/ddc_offline_files_2.yaml @@ -3,9 +3,36 @@ # environment that can't access the internet # Used by _includes/components/ddc_url_list_2.html +- product: "ucp" + version: "3.1" + tar-files: + - description: "3.1.1 Linux" + url: https://packages.docker.com/caas/ucp_images_3.1.1.tar.gz + - description: "3.1.1 Windows Server 2016 LTSC" + url: https://packages.docker.com/caas/ucp_images_win_2016_3.1.1.tar.gz + - description: "3.1.1 Windows Server 1709" + url: https://packages.docker.com/caas/ucp_images_win_1709_3.1.1.tar.gz + - description: "3.1.1 Windows Server 1803" + url: https://packages.docker.com/caas/ucp_images_win_1803_3.1.1.tar.gz + - description: "3.1.0 Linux" + url: https://packages.docker.com/caas/ucp_images_3.1.0.tar.gz + - description: "3.1.0 Windows Server 2016 LTSC" + url: https://packages.docker.com/caas/ucp_images_win_2016_3.1.0.tar.gz + - description: "3.1.0 Windows Server 1709" + url: https://packages.docker.com/caas/ucp_images_win_1709_3.1.0.tar.gz + - description: "3.1.0 Windows Server 1803" + url: https://packages.docker.com/caas/ucp_images_win_1803_3.1.0.tar.gz - product: "ucp" version: "3.0" tar-files: + - description: "3.0.7 Linux" + url: https://packages.docker.com/caas/ucp_images_3.0.7.tar.gz + - description: "3.0.7 Windows Server 2016 LTSC" + url: https://packages.docker.com/caas/ucp_images_win_2016_3.0.7.tar.gz + - description: "3.0.7 Windows Server 1709" + url: https://packages.docker.com/caas/ucp_images_win_1709_3.0.7.tar.gz + - description: "3.0.7 Windows Server 1803" + url: https://packages.docker.com/caas/ucp_images_win_1803_3.0.7.tar.gz - description: "3.0.6 Linux" url: https://packages.docker.com/caas/ucp_images_3.0.6.tar.gz - description: "3.0.6 IBM Z" @@ -74,19 +101,19 @@ - description: "2.2.13 IBM Z" url: https://packages.docker.com/caas/ucp_images_s390x_2.2.13.tar.gz - description: "2.2.13 Windows" - url: https://packages.docker.com/caas/ucp_images_win_2.2.13.tar.gz + url: https://packages.docker.com/caas/ucp_images_win_2.2.13.tar.gz - description: "2.2.12 Linux" url: https://packages.docker.com/caas/ucp_images_2.2.12.tar.gz - description: "2.2.12 IBM Z" url: https://packages.docker.com/caas/ucp_images_s390x_2.2.12.tar.gz - description: "2.2.12 Windows" - url: https://packages.docker.com/caas/ucp_images_win_2.2.12.tar.gz + url: https://packages.docker.com/caas/ucp_images_win_2.2.12.tar.gz - description: "2.2.11 Linux" url: https://packages.docker.com/caas/ucp_images_2.2.11.tar.gz - description: "2.2.11 IBM Z" url: https://packages.docker.com/caas/ucp_images_s390x_2.2.11.tar.gz - description: "2.2.11 Windows" - url: https://packages.docker.com/caas/ucp_images_win_2.2.11.tar.gz + url: https://packages.docker.com/caas/ucp_images_win_2.2.11.tar.gz - description: "2.2.10 Linux" url: https://packages.docker.com/caas/ucp_images_2.2.10.tar.gz - description: "2.2.10 IBM Z" @@ -141,6 +168,11 @@ url: https://packages.docker.com/caas/ucp_images_s390x_2.2.0.tar.gz - description: "2.2.0 Windows" url: https://packages.docker.com/caas/ucp_images_win_2.2.0.tar.gz +- product: "dtr" + version: "2.6" + tar-files: + - description: "DTR 2.6.0 Linux x86" + url: https://packages.docker.com/caas/dtr_images_2.6.0.tar.gz - product: "dtr" version: "2.5" tar-files: @@ -193,9 +225,9 @@ version: "2.3" tar-files: - description: "DTR 2.3.9" - url: https://packages.docker.com/caas/dtr_images_2.3.9.tar.gz + url: https://packages.docker.com/caas/dtr_images_2.3.9.tar.gz - description: "DTR 2.3.8" - url: https://packages.docker.com/caas/dtr_images_2.3.8.tar.gz + url: https://packages.docker.com/caas/dtr_images_2.3.8.tar.gz - description: "DTR 2.3.7" url: https://packages.docker.com/caas/dtr_images_2.3.7.tar.gz - description: "DTR 2.3.6" @@ -212,3 +244,4 @@ url: https://packages.docker.com/caas/dtr-2.3.1.tar.gz - description: "DTR 2.3.0" url: https://packages.docker.com/caas/dtr-2.3.0.tar.gz + diff --git a/_data/docsarchive/archives.yaml b/_data/docsarchive/archives.yaml index f51b6dcf945..3069fd3570d 100644 --- a/_data/docsarchive/archives.yaml +++ b/_data/docsarchive/archives.yaml @@ -1,5 +1,5 @@ - archive: - name: v18.03 + name: v18.09 image: docs/docker.github.io:latest current: true # When you make a new stable archive version, move the edge one to be second in @@ -7,6 +7,9 @@ - archive: name: edge image: docs/docker.github.io:latest +- archive: + name: v18.03 + image: docs/docker.github.io:v18.03 - archive: name: v17.12 image: docs/docker.github.io:v17.12 diff --git a/_data/engine-cli/docker.yaml b/_data/engine-cli/docker.yaml index cfed41624a1..959b53d912f 100644 --- a/_data/engine-cli/docker.yaml +++ b/_data/engine-cli/docker.yaml @@ -2,6 +2,7 @@ command: docker cname: - docker attach - docker build +- docker builder - docker checkpoint - docker commit - docker config @@ -10,6 +11,7 @@ cname: - docker create - docker deploy - docker diff +- docker engine - docker events - docker exec - docker export @@ -59,6 +61,7 @@ cname: clink: - docker_attach.yaml - docker_build.yaml +- docker_builder.yaml - docker_checkpoint.yaml - docker_commit.yaml - docker_config.yaml @@ -67,6 +70,7 @@ clink: - docker_create.yaml - docker_deploy.yaml - docker_diff.yaml +- docker_engine.yaml - docker_events.yaml - docker_exec.yaml - docker_export.yaml diff --git a/_data/engine-cli/docker_build.yaml b/_data/engine-cli/docker_build.yaml index 66c4c2f474d..a120fc306f8 100644 --- a/_data/engine-cli/docker_build.yaml +++ b/_data/engine-cli/docker_build.yaml @@ -293,6 +293,16 @@ options: experimentalcli: false kubernetes: false swarm: false +- option: progress + value_type: string + default_value: auto + description: | + Set type of progress output (auto, plain, tty). Use plain to show container output + deprecated: false + experimental: false + experimentalcli: false + kubernetes: false + swarm: false - option: pull value_type: bool default_value: "false" @@ -321,6 +331,17 @@ options: experimentalcli: false kubernetes: false swarm: false +- option: secret + value_type: stringArray + default_value: '[]' + description: | + Secret file to expose to the build (only if BuildKit enabled): id=mysecret,src=/local/secret + deprecated: false + min_api_version: "1.39" + experimental: false + experimentalcli: false + kubernetes: false + swarm: false - option: security-opt value_type: stringSlice default_value: '[]' @@ -349,6 +370,17 @@ options: experimentalcli: false kubernetes: false swarm: false +- option: ssh + value_type: stringArray + default_value: '[]' + description: | + SSH agent socket or keys to expose to the build (only if BuildKit enabled) (format: default|[=|[,]]) + deprecated: false + min_api_version: "1.39" + experimental: false + experimentalcli: false + kubernetes: false + swarm: false - option: stream value_type: bool default_value: "false" @@ -477,21 +509,27 @@ examples: "### Build with PATH\n\n```bash\n$ docker build .\n\nUploading context build an image on.\n\nA good example is `http_proxy` or source versions for pulling intermediate\nfiles. The `ARG` instruction lets Dockerfile authors define values that users\ncan set at build-time using the `--build-arg` flag:\n\n```bash\n$ docker - build --build-arg HTTP_PROXY=http://10.20.30.2:1234 .\n```\n\nThis flag allows you - to pass the build-time variables that are\naccessed like regular environment variables - in the `RUN` instruction of the\nDockerfile. Also, these values don't persist in - the intermediate or final images\nlike `ENV` values do.\n\nUsing this flag will - not alter the output you see when the `ARG` lines from the\nDockerfile are echoed - during the build process.\n\nFor detailed information on using `ARG` and `ENV` instructions, - see the\n[Dockerfile reference](../builder.md).\n\n### Optional security options - (--security-opt)\n\nThis flag is only supported on a daemon running on Windows, - and only supports\nthe `credentialspec` option. The `credentialspec` must be in - the format\n`file://spec.txt` or `registry://keyname`.\n\n### Specify isolation - technology for container (--isolation)\n\nThis option is useful in situations where - you are running Docker containers on\nWindows. The `--isolation=` option - sets a container's isolation\ntechnology. On Linux, the only supported is the `default` - option which uses\nLinux namespaces. On Microsoft Windows, you can specify these - values:\n\n\n| Value | Description |\n|-----------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| + build --build-arg HTTP_PROXY=http://10.20.30.2:1234 --build-arg FTP_PROXY=http://40.50.60.5:4567 + .\n```\n\nThis flag allows you to pass the build-time variables that are\naccessed + like regular environment variables in the `RUN` instruction of the\nDockerfile. + Also, these values don't persist in the intermediate or final images\nlike `ENV` + values do. You must add `--build-arg` for each build argument. \n\nUsing this + flag will not alter the output you see when the `ARG` lines from the\nDockerfile + are echoed during the build process.\n\nFor detailed information on using `ARG` + and `ENV` instructions, see the\n[Dockerfile reference](../builder.md).\n\nYou may + also use the `--build-arg` flag without a value, in which case the value\nfrom the + local environment will be propagated into the Docker container being\nbuilt:\n\n```bash\n$ + export HTTP_PROXY=http://10.20.30.2:1234\n$ docker build --build-arg HTTP_PROXY + .\n```\n\nThis is similar to how `docker run -e` works. Refer to the [`docker run` + documentation](https://docs.docker.com/engine/reference/commandline/run/#set-environment-variables--e---env---env-file)\nfor + more information.\n\n### Optional security options (--security-opt)\n\nThis flag + is only supported on a daemon running on Windows, and only supports\nthe `credentialspec` + option. The `credentialspec` must be in the format\n`file://spec.txt` or `registry://keyname`.\n\n### + Specify isolation technology for container (--isolation)\n\nThis option is useful + in situations where you are running Docker containers on\nWindows. The `--isolation=` + option sets a container's isolation\ntechnology. On Linux, the only supported is + the `default` option which uses\nLinux namespaces. On Microsoft Windows, you can + specify these values:\n\n\n| Value | Description |\n|-----------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| `default` | Use the value specified by the Docker daemon's `--exec-opt` . If the `daemon` does not specify an isolation technology, Microsoft Windows uses `process` as its default value. |\n| `process` | Namespace isolation only. |\n| @@ -519,19 +557,18 @@ examples: "### Build with PATH\n\n```bash\n$ docker build .\n\nUploading context sharing layers between\nimages (saving space).\n\nFor most use cases, multi-stage are a better alternative, as they give more\nfine-grained control over your build, and can take advantage of future\noptimizations in the builder. Refer to the [use - multi-stage builds](https://docs.docker.com/engine/userguide/eng-image/multistage-build/)\nsection + multi-stage builds](https://docs.docker.com/develop/develop-images/multistage-build/)\nsection in the userguide for more information.\n\n\n#### Known limitations\n\nThe `--squash` option has a number of known limitations:\n\n- When squashing layers, the resulting - image cannot take advantage of layer \n sharing with other images, and may use - significantly more space. Sharing the\n base image is still supported.\n- When - using this option you may see significantly more space used due to\n storing two - copies of the image, one for the build cache with all the cache\n layers in tact, - and one for the squashed version.\n- While squashing layers may produce smaller - images, it may have a negative\n impact on performance, as a single layer takes - longer to extract, and\n downloading a single layer cannot be parallelized.\n- - When attempting to squash an image that does not make changes to the\n filesystem - (for example, the Dockerfile only contains `ENV` instructions),\n the squash step - will fail (see [issue #33823](https://github.com/moby/moby/issues/33823)\n\n#### + image cannot take advantage of layer\n sharing with other images, and may use significantly + more space. Sharing the\n base image is still supported.\n- When using this option + you may see significantly more space used due to\n storing two copies of the image, + one for the build cache with all the cache\n layers in tact, and one for the squashed + version.\n- While squashing layers may produce smaller images, it may have a negative\n + \ impact on performance, as a single layer takes longer to extract, and\n downloading + a single layer cannot be parallelized.\n- When attempting to squash an image that + does not make changes to the\n filesystem (for example, the Dockerfile only contains + `ENV` instructions),\n the squash step will fail (see [issue #33823](https://github.com/moby/moby/issues/33823)\n\n#### Prerequisites\n\nThe example on this page is using experimental mode in Docker 1.13.\n\nExperimental mode can be enabled by using the `--experimental` flag when starting the Docker daemon or setting `experimental: true` in the `daemon.json` configuration file.\n\nBy @@ -551,7 +588,7 @@ examples: "### Build with PATH\n\n```bash\n$ docker build .\n\nUploading context >> /hello\nRUN touch remove_me /remove_me\nENV HELLO world\nRUN rm /remove_me\n```\n\nAn image named `test` is built with `--squash` argument.\n\n```bash\n$ docker build --squash -t test .\n\n[...]\n```\n\nIf everything is right, the history will look - like this:\n\n```bash\n$ docker history test \n\nIMAGE CREATED CREATED + like this:\n\n```bash\n$ docker history test\n\nIMAGE CREATED CREATED BY SIZE COMMENT\n4e10cb5b4cac \ 3 seconds ago 12 B \ merge sha256:88a7b0112a41826885df0e7072698006ee8f621c6ab99fca7fe9151d7b599702 diff --git a/_data/engine-cli/docker_builder.yaml b/_data/engine-cli/docker_builder.yaml new file mode 100644 index 00000000000..aa1464ce9a4 --- /dev/null +++ b/_data/engine-cli/docker_builder.yaml @@ -0,0 +1,16 @@ +command: docker builder +short: Manage builds +long: Manage builds +usage: docker builder +pname: docker +plink: docker.yaml +cname: +- docker builder prune +clink: +- docker_builder_prune.yaml +deprecated: false +experimental: false +experimentalcli: false +kubernetes: false +swarm: false + diff --git a/_data/engine-cli/docker_builder_prune.yaml b/_data/engine-cli/docker_builder_prune.yaml new file mode 100644 index 00000000000..820ed9d98a2 --- /dev/null +++ b/_data/engine-cli/docker_builder_prune.yaml @@ -0,0 +1,51 @@ +command: docker builder prune +short: Remove build cache +long: Remove build cache +usage: docker builder prune +pname: docker builder +plink: docker_builder.yaml +options: +- option: all + shorthand: a + value_type: bool + default_value: "false" + description: Remove all unused images, not just dangling ones + deprecated: false + experimental: false + experimentalcli: false + kubernetes: false + swarm: false +- option: filter + value_type: filter + description: Provide filter values (e.g. 'unused-for=24h') + deprecated: false + experimental: false + experimentalcli: false + kubernetes: false + swarm: false +- option: force + shorthand: f + value_type: bool + default_value: "false" + description: Do not prompt for confirmation + deprecated: false + experimental: false + experimentalcli: false + kubernetes: false + swarm: false +- option: keep-storage + value_type: bytes + default_value: "0" + description: Amount of disk space to keep for cache + deprecated: false + experimental: false + experimentalcli: false + kubernetes: false + swarm: false +deprecated: false +min_api_version: "1.39" +experimental: false +experimentalcli: false +kubernetes: false +swarm: false + diff --git a/_data/engine-cli/docker_checkpoint.yaml b/_data/engine-cli/docker_checkpoint.yaml index 970f8016883..d1701058914 100644 --- a/_data/engine-cli/docker_checkpoint.yaml +++ b/_data/engine-cli/docker_checkpoint.yaml @@ -18,4 +18,5 @@ experimental: true experimentalcli: false kubernetes: false swarm: false +os_type: linux diff --git a/_data/engine-cli/docker_checkpoint_create.yaml b/_data/engine-cli/docker_checkpoint_create.yaml index c21eac46c22..c45b1f52286 100644 --- a/_data/engine-cli/docker_checkpoint_create.yaml +++ b/_data/engine-cli/docker_checkpoint_create.yaml @@ -28,4 +28,5 @@ experimental: true experimentalcli: false kubernetes: false swarm: false +os_type: linux diff --git a/_data/engine-cli/docker_checkpoint_ls.yaml b/_data/engine-cli/docker_checkpoint_ls.yaml index 4f37970d31a..2d5966a347a 100644 --- a/_data/engine-cli/docker_checkpoint_ls.yaml +++ b/_data/engine-cli/docker_checkpoint_ls.yaml @@ -20,4 +20,5 @@ experimental: true experimentalcli: false kubernetes: false swarm: false +os_type: linux diff --git a/_data/engine-cli/docker_checkpoint_rm.yaml b/_data/engine-cli/docker_checkpoint_rm.yaml index 95bcadddd42..eab14820c74 100644 --- a/_data/engine-cli/docker_checkpoint_rm.yaml +++ b/_data/engine-cli/docker_checkpoint_rm.yaml @@ -20,4 +20,5 @@ experimental: true experimentalcli: false kubernetes: false swarm: false +os_type: linux diff --git a/_data/engine-cli/docker_container_create.yaml b/_data/engine-cli/docker_container_create.yaml index e3f2a6790ad..0801342d649 100644 --- a/_data/engine-cli/docker_container_create.yaml +++ b/_data/engine-cli/docker_container_create.yaml @@ -82,6 +82,7 @@ options: experimentalcli: false kubernetes: false swarm: false + os_type: windows - option: cpu-percent value_type: int64 default_value: "0" @@ -91,6 +92,7 @@ options: experimentalcli: false kubernetes: false swarm: false + os_type: windows - option: cpu-period value_type: int64 default_value: "0" @@ -394,6 +396,7 @@ options: experimentalcli: false kubernetes: false swarm: false + os_type: windows - option: io-maxiops value_type: uint64 default_value: "0" @@ -403,6 +406,7 @@ options: experimentalcli: false kubernetes: false swarm: false + os_type: windows - option: ip value_type: string description: IPv4 address (e.g., 172.30.100.104) diff --git a/_data/engine-cli/docker_container_run.yaml b/_data/engine-cli/docker_container_run.yaml index 37c5e48681f..c83b017d705 100644 --- a/_data/engine-cli/docker_container_run.yaml +++ b/_data/engine-cli/docker_container_run.yaml @@ -82,6 +82,7 @@ options: experimentalcli: false kubernetes: false swarm: false + os_type: windows - option: cpu-percent value_type: int64 default_value: "0" @@ -91,6 +92,7 @@ options: experimentalcli: false kubernetes: false swarm: false + os_type: windows - option: cpu-period value_type: int64 default_value: "0" @@ -412,6 +414,7 @@ options: experimentalcli: false kubernetes: false swarm: false + os_type: windows - option: io-maxiops value_type: uint64 default_value: "0" @@ -421,6 +424,7 @@ options: experimentalcli: false kubernetes: false swarm: false + os_type: windows - option: ip value_type: string description: IPv4 address (e.g., 172.30.100.104) diff --git a/_data/engine-cli/docker_container_start.yaml b/_data/engine-cli/docker_container_start.yaml index a14deea2972..e31d6be262e 100644 --- a/_data/engine-cli/docker_container_start.yaml +++ b/_data/engine-cli/docker_container_start.yaml @@ -23,6 +23,7 @@ options: experimentalcli: false kubernetes: false swarm: false + os_type: linux - option: checkpoint-dir value_type: string description: Use a custom checkpoint storage directory @@ -31,6 +32,7 @@ options: experimentalcli: false kubernetes: false swarm: false + os_type: linux - option: detach-keys value_type: string description: Override the key sequence for detaching a container diff --git a/_data/engine-cli/docker_create.yaml b/_data/engine-cli/docker_create.yaml index dac8c8f7f5a..713288a4255 100644 --- a/_data/engine-cli/docker_create.yaml +++ b/_data/engine-cli/docker_create.yaml @@ -93,6 +93,7 @@ options: experimentalcli: false kubernetes: false swarm: false + os_type: windows - option: cpu-percent value_type: int64 default_value: "0" @@ -102,6 +103,7 @@ options: experimentalcli: false kubernetes: false swarm: false + os_type: windows - option: cpu-period value_type: int64 default_value: "0" @@ -405,6 +407,7 @@ options: experimentalcli: false kubernetes: false swarm: false + os_type: windows - option: io-maxiops value_type: uint64 default_value: "0" @@ -414,6 +417,7 @@ options: experimentalcli: false kubernetes: false swarm: false + os_type: windows - option: ip value_type: string description: IPv4 address (e.g., 172.30.100.104) @@ -961,7 +965,7 @@ examples: |- Then, a user could ask `udev` to execute a script that would `docker exec my-container mknod newDevX c 42 ` the required device when it is added. - NOTE: initially present devices still need to be explicitely added to + NOTE: initially present devices still need to be explicitly added to the create/run command deprecated: false experimental: false diff --git a/_data/engine-cli/docker_deploy.yaml b/_data/engine-cli/docker_deploy.yaml index 0ec01f06df2..d34d90655fb 100644 --- a/_data/engine-cli/docker_deploy.yaml +++ b/_data/engine-cli/docker_deploy.yaml @@ -19,13 +19,21 @@ options: shorthand: c value_type: stringSlice default_value: '[]' - description: Path to a Compose file + description: Path to a Compose file, or "-" to read from stdin deprecated: false min_api_version: "1.25" experimental: false experimentalcli: false kubernetes: false swarm: false +- option: namespace + value_type: string + description: Kubernetes namespace to use + deprecated: false + experimental: false + experimentalcli: false + kubernetes: true + swarm: false - option: prune value_type: bool default_value: "false" @@ -122,5 +130,5 @@ min_api_version: "1.25" experimental: true experimentalcli: false kubernetes: false -swarm: true +swarm: false diff --git a/_data/engine-cli/docker_engine.yaml b/_data/engine-cli/docker_engine.yaml new file mode 100644 index 00000000000..765ab27d537 --- /dev/null +++ b/_data/engine-cli/docker_engine.yaml @@ -0,0 +1,20 @@ +command: docker engine +short: Manage the docker engine +long: Manage the docker engine +usage: docker engine COMMAND +pname: docker +plink: docker.yaml +cname: +- docker engine activate +- docker engine check +- docker engine update +clink: +- docker_engine_activate.yaml +- docker_engine_check.yaml +- docker_engine_update.yaml +deprecated: false +experimental: false +experimentalcli: false +kubernetes: false +swarm: false + diff --git a/_data/engine-cli/docker_engine_activate.yaml b/_data/engine-cli/docker_engine_activate.yaml new file mode 100644 index 00000000000..f62725866d5 --- /dev/null +++ b/_data/engine-cli/docker_engine_activate.yaml @@ -0,0 +1,95 @@ +command: docker engine activate +short: Activate Enterprise Edition +long: | + Activate Enterprise Edition. + + With this command you may apply an existing Docker enterprise license, or + interactively download one from Docker. In the interactive exchange, you can + sign up for a new trial, or download an existing license. If you are + currently running a Community Edition engine, the daemon will be updated to + the Enterprise Edition Docker engine with additional capabilities and long + term support. + + For more information about different Docker Enterprise license types visit + https://www.docker.com/licenses + + For non-interactive scriptable deployments, download your license from + https://hub.docker.com/ then specify the file with the '--license' flag. +usage: docker engine activate [OPTIONS] +pname: docker engine +plink: docker_engine.yaml +options: +- option: containerd + value_type: string + description: override default location of containerd endpoint + deprecated: false + experimental: false + experimentalcli: false + kubernetes: false + swarm: false +- option: display-only + value_type: bool + default_value: "false" + description: only display license information and exit + deprecated: false + experimental: false + experimentalcli: false + kubernetes: false + swarm: false +- option: engine-image + value_type: string + description: Specify engine image + deprecated: false + experimental: false + experimentalcli: false + kubernetes: false + swarm: false +- option: format + value_type: string + description: Pretty-print licenses using a Go template + deprecated: false + experimental: false + experimentalcli: false + kubernetes: false + swarm: false +- option: license + value_type: string + description: License File + deprecated: false + experimental: false + experimentalcli: false + kubernetes: false + swarm: false +- option: quiet + value_type: bool + default_value: "false" + description: Only display available licenses by ID + deprecated: false + experimental: false + experimentalcli: false + kubernetes: false + swarm: false +- option: registry-prefix + value_type: string + default_value: docker.io/store/docker + description: Override the default location where engine images are pulled + deprecated: false + experimental: false + experimentalcli: false + kubernetes: false + swarm: false +- option: version + value_type: string + description: | + Specify engine version (default is to use currently running version) + deprecated: false + experimental: false + experimentalcli: false + kubernetes: false + swarm: false +deprecated: false +experimental: false +experimentalcli: false +kubernetes: false +swarm: false + diff --git a/_data/engine-cli/docker_engine_check.yaml b/_data/engine-cli/docker_engine_check.yaml new file mode 100644 index 00000000000..2a4c3ca3903 --- /dev/null +++ b/_data/engine-cli/docker_engine_check.yaml @@ -0,0 +1,85 @@ +command: docker engine check +short: Check for available engine updates +long: Check for available engine updates +usage: docker engine check [OPTIONS] +pname: docker engine +plink: docker_engine.yaml +options: +- option: containerd + value_type: string + description: override default location of containerd endpoint + deprecated: false + experimental: false + experimentalcli: false + kubernetes: false + swarm: false +- option: downgrades + value_type: bool + default_value: "false" + description: Report downgrades (default omits older versions) + deprecated: false + experimental: false + experimentalcli: false + kubernetes: false + swarm: false +- option: engine-image + value_type: string + description: | + Specify engine image (default uses the same image as currently running) + deprecated: false + experimental: false + experimentalcli: false + kubernetes: false + swarm: false +- option: format + value_type: string + description: Pretty-print updates using a Go template + deprecated: false + experimental: false + experimentalcli: false + kubernetes: false + swarm: false +- option: pre-releases + value_type: bool + default_value: "false" + description: Include pre-release versions + deprecated: false + experimental: false + experimentalcli: false + kubernetes: false + swarm: false +- option: quiet + shorthand: q + value_type: bool + default_value: "false" + description: Only display available versions + deprecated: false + experimental: false + experimentalcli: false + kubernetes: false + swarm: false +- option: registry-prefix + value_type: string + default_value: docker.io/store/docker + description: | + Override the existing location where engine images are pulled + deprecated: false + experimental: false + experimentalcli: false + kubernetes: false + swarm: false +- option: upgrades + value_type: bool + default_value: "true" + description: Report available upgrades + deprecated: false + experimental: false + experimentalcli: false + kubernetes: false + swarm: false +deprecated: false +experimental: false +experimentalcli: false +kubernetes: false +swarm: false + diff --git a/_data/engine-cli/docker_engine_update.yaml b/_data/engine-cli/docker_engine_update.yaml new file mode 100644 index 00000000000..1ea2f7495fe --- /dev/null +++ b/_data/engine-cli/docker_engine_update.yaml @@ -0,0 +1,47 @@ +command: docker engine update +short: Update a local engine +long: Update a local engine +usage: docker engine update [OPTIONS] +pname: docker engine +plink: docker_engine.yaml +options: +- option: containerd + value_type: string + description: override default location of containerd endpoint + deprecated: false + experimental: false + experimentalcli: false + kubernetes: false + swarm: false +- option: engine-image + value_type: string + description: | + Specify engine image (default uses the same image as currently running) + deprecated: false + experimental: false + experimentalcli: false + kubernetes: false + swarm: false +- option: registry-prefix + value_type: string + default_value: docker.io/store/docker + description: Override the current location where engine images are pulled + deprecated: false + experimental: false + experimentalcli: false + kubernetes: false + swarm: false +- option: version + value_type: string + description: Specify engine version + deprecated: false + experimental: false + experimentalcli: false + kubernetes: false + swarm: false +deprecated: false +experimental: false +experimentalcli: false +kubernetes: false +swarm: false + diff --git a/_data/engine-cli/docker_events.yaml b/_data/engine-cli/docker_events.yaml index fd42f278c5a..080b082ca20 100644 --- a/_data/engine-cli/docker_events.yaml +++ b/_data/engine-cli/docker_events.yaml @@ -19,6 +19,7 @@ long: |- - `die` - `exec_create` - `exec_detach` + - `exec_die` - `exec_start` - `export` - `health_status` diff --git a/_data/engine-cli/docker_export.yaml b/_data/engine-cli/docker_export.yaml index 1959106442f..b75e3d580f9 100644 --- a/_data/engine-cli/docker_export.yaml +++ b/_data/engine-cli/docker_export.yaml @@ -6,7 +6,7 @@ long: |- the container, `docker export` will export the contents of the *underlying* directory, not the contents of the volume. - Refer to [Backup, restore, or migrate data volumes](https://docs.docker.com/engine/tutorials/dockervolumes/#backup-restore-or-migrate-data-volumes) + Refer to [Backup, restore, or migrate data volumes](https://docs.docker.com/v17.03/engine/tutorials/dockervolumes/#backup-restore-or-migrate-data-volumes) in the user guide for examples on exporting data in a volume. usage: docker export [OPTIONS] CONTAINER pname: docker diff --git a/_data/engine-cli/docker_history.yaml b/_data/engine-cli/docker_history.yaml index 3ef2e2dceee..316bb6b7690 100644 --- a/_data/engine-cli/docker_history.yaml +++ b/_data/engine-cli/docker_history.yaml @@ -89,19 +89,13 @@ examples: |- `table` directive, will include column headers as well. The following example uses a template without headers and outputs the - `ID` and `CreatedSince` entries separated by a colon for all images: + `ID` and `CreatedSince` entries separated by a colon for the `busybox` image: ```bash - $ docker images --format "{{.ID}}: {{.Created}} ago" + $ docker history --format "{{.ID}}: {{.CreatedSince}}" busybox - cc1b61406712: 2 weeks ago - : 2 weeks ago - : 2 weeks ago - : 2 weeks ago - : 2 weeks ago - : 3 weeks ago - : 3 weeks ago - : 3 weeks ago + f6e427c148a7: 4 weeks ago + : 4 weeks ago ``` deprecated: false experimental: false diff --git a/_data/engine-cli/docker_image_build.yaml b/_data/engine-cli/docker_image_build.yaml index 8621343da42..eee1f8a55ba 100644 --- a/_data/engine-cli/docker_image_build.yaml +++ b/_data/engine-cli/docker_image_build.yaml @@ -191,6 +191,16 @@ options: experimentalcli: false kubernetes: false swarm: false +- option: progress + value_type: string + default_value: auto + description: | + Set type of progress output (auto, plain, tty). Use plain to show container output + deprecated: false + experimental: false + experimentalcli: false + kubernetes: false + swarm: false - option: pull value_type: bool default_value: "false" @@ -219,6 +229,17 @@ options: experimentalcli: false kubernetes: false swarm: false +- option: secret + value_type: stringArray + default_value: '[]' + description: | + Secret file to expose to the build (only if BuildKit enabled): id=mysecret,src=/local/secret + deprecated: false + min_api_version: "1.39" + experimental: false + experimentalcli: false + kubernetes: false + swarm: false - option: security-opt value_type: stringSlice default_value: '[]' @@ -247,6 +268,17 @@ options: experimentalcli: false kubernetes: false swarm: false +- option: ssh + value_type: stringArray + default_value: '[]' + description: | + SSH agent socket or keys to expose to the build (only if BuildKit enabled) (format: default|[=|[,]]) + deprecated: false + min_api_version: "1.39" + experimental: false + experimentalcli: false + kubernetes: false + swarm: false - option: stream value_type: bool default_value: "false" diff --git a/_data/engine-cli/docker_image_import.yaml b/_data/engine-cli/docker_image_import.yaml index fd63cfcf510..b2a66563960 100644 --- a/_data/engine-cli/docker_image_import.yaml +++ b/_data/engine-cli/docker_image_import.yaml @@ -23,6 +23,15 @@ options: experimentalcli: false kubernetes: false swarm: false +- option: platform + value_type: string + description: Set platform if server is multi-platform capable + deprecated: false + min_api_version: "1.32" + experimental: true + experimentalcli: false + kubernetes: false + swarm: false deprecated: false experimental: false experimentalcli: false diff --git a/_data/engine-cli/docker_import.yaml b/_data/engine-cli/docker_import.yaml index b80b96792af..c8949c12735 100644 --- a/_data/engine-cli/docker_import.yaml +++ b/_data/engine-cli/docker_import.yaml @@ -35,6 +35,15 @@ options: experimentalcli: false kubernetes: false swarm: false +- option: platform + value_type: string + description: Set platform if server is multi-platform capable + deprecated: false + min_api_version: "1.32" + experimental: true + experimentalcli: false + kubernetes: false + swarm: false examples: |- ### Import from a remote location diff --git a/_data/engine-cli/docker_login.yaml b/_data/engine-cli/docker_login.yaml index c86ba0b06c2..1737fee756d 100644 --- a/_data/engine-cli/docker_login.yaml +++ b/_data/engine-cli/docker_login.yaml @@ -25,49 +25,49 @@ long: "Login to a registry.\n\n### Login to a self-hosted registry\n\nIf you wan helpers and where\nyou can download them from:\n\n- D-Bus Secret Service: https://github.com/docker/docker-credential-helpers/releases\n- Apple macOS keychain: https://github.com/docker/docker-credential-helpers/releases\n- Microsoft Windows Credential Manager: https://github.com/docker/docker-credential-helpers/releases\n- - [pass](https://www.passwordstore.org/): https://github.com/docker/docker-credential-helpers/releases\n\nYou - need to specify the credentials store in `$HOME/.docker/config.json`\nto tell the - docker engine to use it. The value of the config property should be\nthe suffix - of the program to use (i.e. everything after `docker-credential-`).\nFor example, - to use `docker-credential-osxkeychain`:\n\n```json\n{\n\t\"credsStore\": \"osxkeychain\"\n}\n```\n\nIf - you are currently logged in, run `docker logout` to remove\nthe credentials from - the file and run `docker login` again.\n\n### Default behavior\n\nBy default, Docker - looks for the native binary on each of the platforms, i.e.\n\"osxkeychain\" on macOS, - \"wincred\" on windows, and \"pass\" on Linux. A special\ncase is that on Linux, - Docker will fall back to the \"secretservice\" binary if\nit cannot find the \"pass\" - binary. If none of these binaries are present, it\nstores the credentials (i.e. - password) in base64 encoding in the config files\ndescribed above.\n\n### Credential - helper protocol\n\nCredential helpers can be any program or script that follows - a very simple protocol.\nThis protocol is heavily inspired by Git, but it differs - in the information shared.\n\nThe helpers always use the first argument in the command - to identify the action.\nThere are only three possible values for that argument: - `store`, `get`, and `erase`.\n\nThe `store` command takes a JSON payload from the - standard input. That payload carries\nthe server address, to identify the credential, - the user name, and either a password\nor an identity token.\n\n```json\n{\n\t\"ServerURL\": - \"https://index.docker.io/v1\",\n\t\"Username\": \"david\",\n\t\"Secret\": \"passw0rd1\"\n}\n```\n\nIf - the secret being stored is an identity token, the Username should be set to\n``.\n\nThe - `store` command can write error messages to `STDOUT` that the docker engine\nwill - show if there was an issue.\n\nThe `get` command takes a string payload from the - standard input. That payload carries\nthe server address that the docker engine - needs credentials for. This is\nan example of that payload: `https://index.docker.io/v1`.\n\nThe - `get` command writes a JSON payload to `STDOUT`. Docker reads the user name\nand - password from this payload:\n\n```json\n{\n\t\"Username\": \"david\",\n\t\"Secret\": - \"passw0rd1\"\n}\n```\n\nThe `erase` command takes a string payload from `STDIN`. - That payload carries\nthe server address that the docker engine wants to remove - credentials for. This is\nan example of that payload: `https://index.docker.io/v1`.\n\nThe - `erase` command can write error messages to `STDOUT` that the docker engine\nwill - show if there was an issue.\n\n### Credential helpers\n\nCredential helpers are - similar to the credential store above, but act as the\ndesignated programs to handle - credentials for *specific registries*. The default\ncredential store (`credsStore` - or the config file itself) will not be used for\noperations concerning credentials - of the specified registries.\n\n### Logging out\n\nIf you are currently logged in, - run `docker logout` to remove\nthe credentials from the default store.\n\nCredential - helpers are specified in a similar way to `credsStore`, but\nallow for multiple - helpers to be configured at a time. Keys specify the\nregistry domain, and values - specify the suffix of the program to use\n(i.e. everything after `docker-credential-`).\nFor - example:\n\n```json\n{\n \"credHelpers\": {\n \"registry.example.com\": \"registryhelper\",\n - \ \"awesomereg.example.org\": \"hip-star\",\n \"unicorn.example.io\": \"vcbait\"\n - \ }\n}\n```" + [pass](https://www.passwordstore.org/): https://github.com/docker/docker-credential-helpers/releases\n\n#### + Configure the credentials store\n\nYou need to specify the credentials store in + `$HOME/.docker/config.json`\nto tell the docker engine to use it. The value of the + config property should be\nthe suffix of the program to use (i.e. everything after + `docker-credential-`).\nFor example, to use `docker-credential-osxkeychain`:\n\n```json\n{\n\t\"credsStore\": + \"osxkeychain\"\n}\n```\n\nIf you are currently logged in, run `docker logout` to + remove\nthe credentials from the file and run `docker login` again.\n\n#### Default + behavior\n\nBy default, Docker looks for the native binary on each of the platforms, + i.e.\n\"osxkeychain\" on macOS, \"wincred\" on windows, and \"pass\" on Linux. A + special\ncase is that on Linux, Docker will fall back to the \"secretservice\" binary + if\nit cannot find the \"pass\" binary. If none of these binaries are present, it\nstores + the credentials (i.e. password) in base64 encoding in the config files\ndescribed + above.\n\n#### Credential helper protocol\n\nCredential helpers can be any program + or script that follows a very simple protocol.\nThis protocol is heavily inspired + by Git, but it differs in the information shared.\n\nThe helpers always use the + first argument in the command to identify the action.\nThere are only three possible + values for that argument: `store`, `get`, and `erase`.\n\nThe `store` command takes + a JSON payload from the standard input. That payload carries\nthe server address, + to identify the credential, the user name, and either a password\nor an identity + token.\n\n```json\n{\n\t\"ServerURL\": \"https://index.docker.io/v1\",\n\t\"Username\": + \"david\",\n\t\"Secret\": \"passw0rd1\"\n}\n```\n\nIf the secret being stored is + an identity token, the Username should be set to\n``.\n\nThe `store` command + can write error messages to `STDOUT` that the docker engine\nwill show if there + was an issue.\n\nThe `get` command takes a string payload from the standard input. + That payload carries\nthe server address that the docker engine needs credentials + for. This is\nan example of that payload: `https://index.docker.io/v1`.\n\nThe `get` + command writes a JSON payload to `STDOUT`. Docker reads the user name\nand password + from this payload:\n\n```json\n{\n\t\"Username\": \"david\",\n\t\"Secret\": \"passw0rd1\"\n}\n```\n\nThe + `erase` command takes a string payload from `STDIN`. That payload carries\nthe server + address that the docker engine wants to remove credentials for. This is\nan example + of that payload: `https://index.docker.io/v1`.\n\nThe `erase` command can write + error messages to `STDOUT` that the docker engine\nwill show if there was an issue.\n\n### + Credential helpers\n\nCredential helpers are similar to the credential store above, + but act as the\ndesignated programs to handle credentials for *specific registries*. + The default\ncredential store (`credsStore` or the config file itself) will not + be used for\noperations concerning credentials of the specified registries.\n\n#### + Configure credential helpers\n\nIf you are currently logged in, run `docker logout` + to remove\nthe credentials from the default store.\n\nCredential helpers are specified + in a similar way to `credsStore`, but\nallow for multiple helpers to be configured + at a time. Keys specify the\nregistry domain, and values specify the suffix of the + program to use\n(i.e. everything after `docker-credential-`).\nFor example:\n\n```json\n{\n + \ \"credHelpers\": {\n \"registry.example.com\": \"registryhelper\",\n \"awesomereg.example.org\": + \"hip-star\",\n \"unicorn.example.io\": \"vcbait\"\n }\n}\n```" usage: docker login [OPTIONS] [SERVER] pname: docker plink: docker.yaml diff --git a/_data/engine-cli/docker_logs.yaml b/_data/engine-cli/docker_logs.yaml index 8750eee686e..188e31543de 100644 --- a/_data/engine-cli/docker_logs.yaml +++ b/_data/engine-cli/docker_logs.yaml @@ -7,7 +7,7 @@ long: |- > the `json-file` or `journald` logging driver. For more information about selecting and configuring logging drivers, refer to - [Configure logging drivers](https://docs.docker.com/engine/admin/logging/overview/). + [Configure logging drivers](https://docs.docker.com/config/containers/logging/configure/). The `docker logs --follow` command will continue streaming the new output from the container's `STDOUT` and `STDERR`. diff --git a/_data/engine-cli/docker_manifest.yaml b/_data/engine-cli/docker_manifest.yaml index fa0fbdc177c..82249e3c7b5 100644 --- a/_data/engine-cli/docker_manifest.yaml +++ b/_data/engine-cli/docker_manifest.yaml @@ -9,25 +9,25 @@ long: "The `docker manifest` command by itself performs no action. In order to o in the same way as\nan image name in `docker pull` and `docker run` commands, for example.\n\nIdeally a manifest list is created from images that are identical in function for\ndifferent os/arch combinations. For this reason, manifest lists are - often referred to as\n\"multi-arch images.\" However, a user could create a manifest + often referred to as\n\"multi-arch images\". However, a user could create a manifest list that points\nto two images -- one for windows on amd64, and one for darwin on amd64.\n\n### manifest inspect\n\n```\nmanifest inspect --help\n\nUsage: docker - manifest inspect [OPTIONS] [MANIFEST_LIST] MANIFEST\n\nisplay an image manifest, - or manifest list\n\nOptions:\n --help Print usage\n --insecure allow + manifest inspect [OPTIONS] [MANIFEST_LIST] MANIFEST\n\nDisplay an image manifest, + or manifest list\n\nOptions:\n --help Print usage\n --insecure Allow communication with an insecure registry\n -v, --verbose Output additional info including layers and platform\n```\n\n### manifest create \n\n```bash\nUsage: docker - manifest create MANFEST_LIST MANIFEST [MANIFEST...]\n\nCreate a local manifest list - for annotating and pushing to a registry\n\nOptions:\n -a, --amend Amend an existing - manifest list\n --insecure allow communication with an insecure registry\n - \ --help Print usage\n```\n\n### manifest annotate\n```bash\nUsage: docker - manifest annotate [OPTIONS] MANIFEST_LIST MANIFEST\n\nAdd additional information + manifest create MANIFEST_LIST MANIFEST [MANIFEST...]\n\nCreate a local manifest + list for annotating and pushing to a registry\n\nOptions:\n -a, --amend Amend + an existing manifest list\n --insecure Allow communication with an insecure + registry\n --help Print usage\n```\n\n### manifest annotate\n```bash\nUsage: + \ docker manifest annotate [OPTIONS] MANIFEST_LIST MANIFEST\n\nAdd additional information to a local image manifest\n\nOptions:\n --arch string Set architecture\n \ --help Print usage\n --os string Set operating system\n --os-features stringSlice Set operating system feature\n \ --variant string Set architecture variant\n\n```\n\n### manifest push\n```bash\nUsage: docker manifest push [OPTIONS] MANIFEST_LIST\n\nPush a manifest - list to a repository\n\nOptions:\n --help Print usage\n --insecure - \ allow push to an insecure registry\n -p, --purge Remove the local manifest + list to a repository\n\nOptions:\n --help Print usage\n --insecure + \ Allow push to an insecure registry\n -p, --purge Remove the local manifest list after push\n```\n\n### Working with insecure registries\n\nThe manifest command interacts solely with a Docker registry. Because of this, it has no way to query the engine for the list of allowed insecure registries. To allow the CLI to interact @@ -51,7 +51,7 @@ clink: - docker_manifest_create.yaml - docker_manifest_inspect.yaml - docker_manifest_push.yaml -examples: "### inspect an image's manifest object\n \n```bash\n$ docker manifest inspect +examples: "### Inspect an image's manifest object\n \n```bash\n$ docker manifest inspect hello-world\n{\n \"schemaVersion\": 2,\n \"mediaType\": \"application/vnd.docker.distribution.manifest.v2+json\",\n \ \"config\": {\n \"mediaType\": \"application/vnd.docker.container.image.v1+json\",\n \ \"size\": 1520,\n \"digest\": \"sha256:1815c82652c03bfd8644afda26fb184f2ed891d921b20a0703b46768f9755c57\"\n @@ -64,7 +64,7 @@ examples: "### inspect an image's manifest object\n \n```bash\n$ docker manifest as with other docker commands that take image names, you can refer to an image with or\nwithout a tag, or by digest (e.g. hello-world@sha256:f3b3b28a45160805bb16542c9531888519430e9e6d6ffc09d72261b0d26ff74f).\n\nHere is an example of inspecting an image's manifest with the `--verbose` flag:\n\n```bash\n$ - docker manifest inspect -v hello-world\n{\n \"Ref\": \"docker.io/library/hello-world:latest\",\n + docker manifest inspect --verbose hello-world\n{\n \"Ref\": \"docker.io/library/hello-world:latest\",\n \ \"Digest\": \"sha256:f3b3b28a45160805bb16542c9531888519430e9e6d6ffc09d72261b0d26ff74f\",\n \ \"SchemaV2Manifest\": {\n \"schemaVersion\": 2,\n \"mediaType\": \"application/vnd.docker.distribution.manifest.v2+json\",\n \"config\": diff --git a/_data/engine-cli/docker_manifest_create.yaml b/_data/engine-cli/docker_manifest_create.yaml index fd49ff5614a..9bee33d6bd0 100644 --- a/_data/engine-cli/docker_manifest_create.yaml +++ b/_data/engine-cli/docker_manifest_create.yaml @@ -1,7 +1,7 @@ command: docker manifest create short: Create a local manifest list for annotating and pushing to a registry long: Create a local manifest list for annotating and pushing to a registry -usage: docker manifest create MANFEST_LIST MANIFEST [MANIFEST...] +usage: docker manifest create MANIFEST_LIST MANIFEST [MANIFEST...] pname: docker manifest plink: docker_manifest.yaml options: @@ -18,7 +18,7 @@ options: - option: insecure value_type: bool default_value: "false" - description: allow communication with an insecure registry + description: Allow communication with an insecure registry deprecated: false experimental: false experimentalcli: false diff --git a/_data/engine-cli/docker_manifest_inspect.yaml b/_data/engine-cli/docker_manifest_inspect.yaml index c0a54bd0dbd..8da0a57b6f8 100644 --- a/_data/engine-cli/docker_manifest_inspect.yaml +++ b/_data/engine-cli/docker_manifest_inspect.yaml @@ -8,7 +8,7 @@ options: - option: insecure value_type: bool default_value: "false" - description: allow communication with an insecure registry + description: Allow communication with an insecure registry deprecated: false experimental: false experimentalcli: false diff --git a/_data/engine-cli/docker_rmi.yaml b/_data/engine-cli/docker_rmi.yaml index e21b2d3d46a..0ea52232fd6 100644 --- a/_data/engine-cli/docker_rmi.yaml +++ b/_data/engine-cli/docker_rmi.yaml @@ -43,11 +43,11 @@ examples: |- Error: Conflict, cannot delete image fd484f19954f because it is tagged in multiple repositories, use -f to force 2013/12/11 05:47:16 Error: failed to remove one or more images - $ docker rmi test1 + $ docker rmi test1:latest Untagged: test1:latest - $ docker rmi test2 + $ docker rmi test2:latest Untagged: test2:latest @@ -57,7 +57,7 @@ examples: |- REPOSITORY TAG IMAGE ID CREATED SIZE test latest fd484f19954f 23 seconds ago 7 B (virtual 4.964 MB) - $ docker rmi test + $ docker rmi test:latest Untagged: test:latest Deleted: fd484f19954f4920da7ff372b5067f5b7ddb2fd3830cecd17b96ea9e286ba5b8 diff --git a/_data/engine-cli/docker_run.yaml b/_data/engine-cli/docker_run.yaml index d7b59fe2f2c..28e07ab8259 100644 --- a/_data/engine-cli/docker_run.yaml +++ b/_data/engine-cli/docker_run.yaml @@ -93,6 +93,7 @@ options: experimentalcli: false kubernetes: false swarm: false + os_type: windows - option: cpu-percent value_type: int64 default_value: "0" @@ -102,6 +103,7 @@ options: experimentalcli: false kubernetes: false swarm: false + os_type: windows - option: cpu-period value_type: int64 default_value: "0" @@ -423,6 +425,7 @@ options: experimentalcli: false kubernetes: false swarm: false + os_type: windows - option: io-maxiops value_type: uint64 default_value: "0" @@ -432,6 +435,7 @@ options: experimentalcli: false kubernetes: false swarm: false + os_type: windows - option: ip value_type: string description: IPv4 address (e.g., 172.30.100.104) @@ -1138,7 +1142,7 @@ examples: |- ``` The `my-label` key doesn't specify a value so the label defaults to an empty - string(`""`). To add multiple labels, repeat the label flag (`-l` or `--label`). + string (`""`). To add multiple labels, repeat the label flag (`-l` or `--label`). The `key=value` must be unique to avoid overwriting the label value. If you specify labels with identical keys but different values, each subsequent value @@ -1312,7 +1316,7 @@ examples: |- |:---------------------------|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | `no` | Do not automatically restart the container when it exits. This is the default. | | `on-failure[:max-retries]` | Restart only if the container exits with a non-zero exit status. Optionally, limit the number of restart retries the Docker daemon attempts. | - | `unless-stopped` | Restart the container unless it is explicitly stopped or Docker itself is stopped or restarted. | + | `unless-stopped` | Restart the container unless it is explicitly stopped or Docker itself is stopped or restarted. | | `always` | Always restart the container regardless of the exit status. When you specify always, the Docker daemon will try to restart the container indefinitely. The container will also always start on daemon startup, regardless of the current state of the container. | ```bash @@ -1323,7 +1327,7 @@ examples: |- so that if the container exits, Docker will restart it. More detailed information on restart policies can be found in the - [Restart Policies (--restart)](../run.md#restart-policies-restart) + [Restart Policies (--restart)](../run.md#restart-policies---restart) section of the Docker run reference page. ### Add entries to container hosts file (--add-host) diff --git a/_data/engine-cli/docker_secret_create.yaml b/_data/engine-cli/docker_secret_create.yaml index 374afa3b74c..cece92e2996 100644 --- a/_data/engine-cli/docker_secret_create.yaml +++ b/_data/engine-cli/docker_secret_create.yaml @@ -1,8 +1,9 @@ command: docker secret create short: Create a secret from a file or STDIN as content -long: "Creates a secret using standard input or from a file for the secret content. - You must run this command on a manager node. \n\nFor detailed information about - using secrets, refer to [manage sensitive data with Docker secrets](https://docs.docker.com/engine/swarm/secrets/)." +long: |- + Creates a secret using standard input or from a file for the secret content. You must run this command on a manager node. + + For detailed information about using secrets, refer to [manage sensitive data with Docker secrets](https://docs.docker.com/engine/swarm/secrets/). usage: docker secret create [OPTIONS] SECRET [file|-] pname: docker secret plink: docker_secret.yaml @@ -38,7 +39,7 @@ examples: |- ### Create a secret ```bash - $ echo | docker secret create my_secret - + $ printf | docker secret create my_secret - onakdyv307se2tl7nl20anokv diff --git a/_data/engine-cli/docker_service_create.yaml b/_data/engine-cli/docker_service_create.yaml index c980fd50385..3ea004eefec 100644 --- a/_data/engine-cli/docker_service_create.yaml +++ b/_data/engine-cli/docker_service_create.yaml @@ -196,6 +196,17 @@ options: experimentalcli: false kubernetes: false swarm: false +- option: init + value_type: bool + default_value: "false" + description: | + Use an init inside each service container to forward signals and reap processes + deprecated: false + min_api_version: "1.37" + experimental: false + experimentalcli: false + kubernetes: false + swarm: false - option: isolation value_type: string description: Service container isolation mode diff --git a/_data/engine-cli/docker_service_update.yaml b/_data/engine-cli/docker_service_update.yaml index 2769d0c3e2e..d311228134f 100644 --- a/_data/engine-cli/docker_service_update.yaml +++ b/_data/engine-cli/docker_service_update.yaml @@ -306,6 +306,17 @@ options: experimentalcli: false kubernetes: false swarm: false +- option: init + value_type: bool + default_value: "false" + description: | + Use an init inside each service container to forward signals and reap processes + deprecated: false + min_api_version: "1.37" + experimental: false + experimentalcli: false + kubernetes: false + swarm: false - option: isolation value_type: string description: Service container isolation mode diff --git a/_data/engine-cli/docker_stack.yaml b/_data/engine-cli/docker_stack.yaml index ed80ae25186..3c378f8ac17 100644 --- a/_data/engine-cli/docker_stack.yaml +++ b/_data/engine-cli/docker_stack.yaml @@ -1,7 +1,7 @@ command: docker stack short: Manage Docker stacks long: Manage stacks. -usage: docker stack +usage: docker stack [OPTIONS] pname: docker plink: docker.yaml cname: @@ -22,22 +22,21 @@ options: description: Kubernetes config file deprecated: false experimental: false - experimentalcli: true + experimentalcli: false kubernetes: true swarm: false -- option: namespace +- option: orchestrator value_type: string - default_value: default - description: Kubernetes namespace to use + description: Orchestrator to use (swarm|kubernetes|all) deprecated: false experimental: false - experimentalcli: true - kubernetes: true + experimentalcli: false + kubernetes: false swarm: false deprecated: false min_api_version: "1.25" experimental: false experimentalcli: false -kubernetes: true -swarm: true +kubernetes: false +swarm: false diff --git a/_data/engine-cli/docker_stack_deploy.yaml b/_data/engine-cli/docker_stack_deploy.yaml index 1ad8c25cc02..e4a3992e52a 100644 --- a/_data/engine-cli/docker_stack_deploy.yaml +++ b/_data/engine-cli/docker_stack_deploy.yaml @@ -20,13 +20,21 @@ options: shorthand: c value_type: stringSlice default_value: '[]' - description: Path to a Compose file + description: Path to a Compose file, or "-" to read from stdin deprecated: false min_api_version: "1.25" experimental: false experimentalcli: false kubernetes: false swarm: false +- option: namespace + value_type: string + description: Kubernetes namespace to use + deprecated: false + experimental: false + experimentalcli: false + kubernetes: true + swarm: false - option: prune value_type: bool default_value: "false" @@ -63,17 +71,16 @@ inherited_options: description: Kubernetes config file deprecated: false experimental: false - experimentalcli: true + experimentalcli: false kubernetes: true swarm: false -- option: namespace +- option: orchestrator value_type: string - default_value: default - description: Kubernetes namespace to use + description: Orchestrator to use (swarm|kubernetes|all) deprecated: false experimental: false - experimentalcli: true - kubernetes: true + experimentalcli: false + kubernetes: false swarm: false examples: |- ### Compose file @@ -117,7 +124,7 @@ examples: |- `--compose-file` flags. ```bash - $ docker stack deploy --compose-file docker-compose.yml -f docker-compose.prod.yml vossibility + $ docker stack deploy --compose-file docker-compose.yml -c docker-compose.prod.yml vossibility Ignoring unsupported options: links @@ -176,6 +183,6 @@ deprecated: false min_api_version: "1.25" experimental: false experimentalcli: false -kubernetes: true -swarm: true +kubernetes: false +swarm: false diff --git a/_data/engine-cli/docker_stack_ls.yaml b/_data/engine-cli/docker_stack_ls.yaml index 830b1d16a1e..6e72b6f3875 100644 --- a/_data/engine-cli/docker_stack_ls.yaml +++ b/_data/engine-cli/docker_stack_ls.yaml @@ -2,10 +2,19 @@ command: docker stack ls aliases: list short: List stacks long: Lists the stacks. -usage: docker stack ls +usage: docker stack ls [OPTIONS] pname: docker stack plink: docker_stack.yaml options: +- option: all-namespaces + value_type: bool + default_value: "false" + description: List stacks from all Kubernetes namespaces + deprecated: false + experimental: false + experimentalcli: false + kubernetes: true + swarm: false - option: format value_type: string description: Pretty-print stacks using a Go template @@ -14,23 +23,31 @@ options: experimentalcli: false kubernetes: false swarm: false +- option: namespace + value_type: stringSlice + default_value: '[]' + description: Kubernetes namespaces to use + deprecated: false + experimental: false + experimentalcli: false + kubernetes: true + swarm: false inherited_options: - option: kubeconfig value_type: string description: Kubernetes config file deprecated: false experimental: false - experimentalcli: true + experimentalcli: false kubernetes: true swarm: false -- option: namespace +- option: orchestrator value_type: string - default_value: default - description: Kubernetes namespace to use + description: Orchestrator to use (swarm|kubernetes|all) deprecated: false experimental: false - experimentalcli: true - kubernetes: true + experimentalcli: false + kubernetes: false swarm: false examples: |- The following command shows all stacks and some additional information: @@ -38,9 +55,9 @@ examples: |- ```bash $ docker stack ls - ID SERVICES - vossibility-stack 6 - myapp 2 + ID SERVICES ORCHESTRATOR + myapp 2 Kubernetes + vossibility-stack 6 Swarm ``` ### Formatting @@ -49,10 +66,12 @@ examples: |- Valid placeholders for the Go template are listed below: - | Placeholder | Description | - | ----------- | ------------------ | - | `.Name` | Stack name | - | `.Services` | Number of services | + | Placeholder | Description | + | --------------- | ------------------ | + | `.Name` | Stack name | + | `.Services` | Number of services | + | `.Orchestrator` | Orchestrator name | + | `.Namespace` | Namespace | When using the `--format` option, the `stack ls` command either outputs the data exactly as the template declares or, when using the @@ -70,6 +89,6 @@ deprecated: false min_api_version: "1.25" experimental: false experimentalcli: false -kubernetes: true -swarm: true +kubernetes: false +swarm: false diff --git a/_data/engine-cli/docker_stack_ps.yaml b/_data/engine-cli/docker_stack_ps.yaml index 843816ca781..0a07725782d 100644 --- a/_data/engine-cli/docker_stack_ps.yaml +++ b/_data/engine-cli/docker_stack_ps.yaml @@ -15,7 +15,7 @@ options: experimental: false experimentalcli: false kubernetes: false - swarm: true + swarm: false - option: format value_type: string description: Pretty-print tasks using a Go template @@ -24,6 +24,14 @@ options: experimentalcli: false kubernetes: false swarm: false +- option: namespace + value_type: string + description: Kubernetes namespace to use + deprecated: false + experimental: false + experimentalcli: false + kubernetes: true + swarm: false - option: no-resolve value_type: bool default_value: "false" @@ -58,17 +66,16 @@ inherited_options: description: Kubernetes config file deprecated: false experimental: false - experimentalcli: true + experimentalcli: false kubernetes: true swarm: false -- option: namespace +- option: orchestrator value_type: string - default_value: default - description: Kubernetes namespace to use + description: Orchestrator to use (swarm|kubernetes|all) deprecated: false experimental: false - experimentalcli: true - kubernetes: true + experimentalcli: false + kubernetes: false swarm: false examples: |- ### List the tasks that are part of a stack @@ -260,6 +267,6 @@ deprecated: false min_api_version: "1.25" experimental: false experimentalcli: false -kubernetes: true -swarm: true +kubernetes: false +swarm: false diff --git a/_data/engine-cli/docker_stack_rm.yaml b/_data/engine-cli/docker_stack_rm.yaml index 2e95860df7f..921809b5faa 100644 --- a/_data/engine-cli/docker_stack_rm.yaml +++ b/_data/engine-cli/docker_stack_rm.yaml @@ -4,26 +4,34 @@ short: Remove one or more stacks long: |- Remove the stack from the swarm. This command has to be run targeting a manager node. -usage: docker stack rm STACK [STACK...] +usage: docker stack rm [OPTIONS] STACK [STACK...] pname: docker stack plink: docker_stack.yaml +options: +- option: namespace + value_type: string + description: Kubernetes namespace to use + deprecated: false + experimental: false + experimentalcli: false + kubernetes: true + swarm: false inherited_options: - option: kubeconfig value_type: string description: Kubernetes config file deprecated: false experimental: false - experimentalcli: true + experimentalcli: false kubernetes: true swarm: false -- option: namespace +- option: orchestrator value_type: string - default_value: default - description: Kubernetes namespace to use + description: Orchestrator to use (swarm|kubernetes|all) deprecated: false experimental: false - experimentalcli: true - kubernetes: true + experimentalcli: false + kubernetes: false swarm: false examples: |- ### Remove a stack @@ -65,6 +73,6 @@ deprecated: false min_api_version: "1.25" experimental: false experimentalcli: false -kubernetes: true -swarm: true +kubernetes: false +swarm: false diff --git a/_data/engine-cli/docker_stack_services.yaml b/_data/engine-cli/docker_stack_services.yaml index 13d2741388d..3c129204442 100644 --- a/_data/engine-cli/docker_stack_services.yaml +++ b/_data/engine-cli/docker_stack_services.yaml @@ -15,7 +15,7 @@ options: experimental: false experimentalcli: false kubernetes: false - swarm: true + swarm: false - option: format value_type: string description: Pretty-print services using a Go template @@ -24,6 +24,14 @@ options: experimentalcli: false kubernetes: false swarm: false +- option: namespace + value_type: string + description: Kubernetes namespace to use + deprecated: false + experimental: false + experimentalcli: false + kubernetes: true + swarm: false - option: quiet shorthand: q value_type: bool @@ -40,17 +48,16 @@ inherited_options: description: Kubernetes config file deprecated: false experimental: false - experimentalcli: true + experimentalcli: false kubernetes: true swarm: false -- option: namespace +- option: orchestrator value_type: string - default_value: default - description: Kubernetes namespace to use + description: Orchestrator to use (swarm|kubernetes|all) deprecated: false experimental: false - experimentalcli: true - kubernetes: true + experimentalcli: false + kubernetes: false swarm: false examples: |- The following command shows all services in the `myapp` stack: @@ -82,8 +89,23 @@ examples: |- The currently supported filters are: * id / ID (`--filter id=7be5ei6sqeye`, or `--filter ID=7be5ei6sqeye`) - * name (`--filter name=myapp_web`) + * Swarm: supported + * Kubernetes: not supported * label (`--filter label=key=value`) + * Swarm: supported + * Kubernetes: supported + * mode (`--filter mode=replicated`, or `--filter mode=global`) + * Swarm: not supported + * Kubernetes: supported + * name (`--filter name=myapp_web`) + * Swarm: supported + * Kubernetes: supported + * node (`--filter node=mynode`) + * Swarm: not supported + * Kubernetes: supported + * service (`--filter service=web`) + * Swarm: not supported + * Kubernetes: supported ### Formatting @@ -117,6 +139,6 @@ deprecated: false min_api_version: "1.25" experimental: false experimentalcli: false -kubernetes: true -swarm: true +kubernetes: false +swarm: false diff --git a/_data/engine-cli/docker_start.yaml b/_data/engine-cli/docker_start.yaml index a78f25143fe..fe0567d0c93 100644 --- a/_data/engine-cli/docker_start.yaml +++ b/_data/engine-cli/docker_start.yaml @@ -23,6 +23,7 @@ options: experimentalcli: false kubernetes: false swarm: false + os_type: linux - option: checkpoint-dir value_type: string description: Use a custom checkpoint storage directory @@ -31,6 +32,7 @@ options: experimentalcli: false kubernetes: false swarm: false + os_type: linux - option: detach-keys value_type: string description: Override the key sequence for detaching a container diff --git a/_data/engine-cli/docker_stats.yaml b/_data/engine-cli/docker_stats.yaml index 8940ff9911f..0b3dd6756ba 100644 --- a/_data/engine-cli/docker_stats.yaml +++ b/_data/engine-cli/docker_stats.yaml @@ -6,6 +6,8 @@ long: |- If you want more detailed information about a container's resource usage, use the `/containers/(id)/stats` API endpoint. > **Note**: On Linux, the Docker CLI reports memory usage by subtracting page cache usage from the total memory usage. The API does not perform such a calculation but rather provides the total memory usage and the amount from the page cache so that clients can use the data as needed. + + > **Note**: The `PIDS` column contains the number of processes and kernel threads created by that container. Threads is the term used by Linux kernel. Other equivalent terms are "lightweight process" or "kernel task", etc. A large number in the `PIDS` column combined with a small number of processes (as reported by `ps` or `top`) may indicate that something in the container is creating many threads. usage: docker stats [OPTIONS] [CONTAINER...] pname: docker plink: docker.yaml diff --git a/_data/engine-cli/docker_swarm_init.yaml b/_data/engine-cli/docker_swarm_init.yaml index c1f175d0c08..450963798ba 100644 --- a/_data/engine-cli/docker_swarm_init.yaml +++ b/_data/engine-cli/docker_swarm_init.yaml @@ -48,6 +48,27 @@ options: description: | Address or interface to use for data path traffic (format: ) deprecated: false + min_api_version: "1.31" + experimental: false + experimentalcli: false + kubernetes: false + swarm: false +- option: default-addr-pool + value_type: ipNetSlice + default_value: '[]' + description: default address pool in CIDR format + deprecated: false + min_api_version: "1.39" + experimental: false + experimentalcli: false + kubernetes: false + swarm: false +- option: default-addr-pool-mask-length + value_type: uint32 + default_value: "24" + description: default address pool subnet mask length + deprecated: false + min_api_version: "1.39" experimental: false experimentalcli: false kubernetes: false @@ -202,6 +223,14 @@ examples: |- If unspecified, Docker will use the same IP address or interface that is used for the advertise address. + ### `--default-addr-pool` + This flag specifies default subnet pools for global scope networks. + Format example is `--default-addr-pool 30.30.0.0/16 --default-addr-pool 40.40.0.0/16` + + ### `--default-addr-pool-mask-length` + This flag specifies default subnet pools mask length for default-addr-pool. + Format example is `--default-addr-pool-mask-length 24` + ### `--task-history-limit` This flag sets up task history retention limit. diff --git a/_data/engine-cli/docker_swarm_join.yaml b/_data/engine-cli/docker_swarm_join.yaml index 8fdbcf5e598..83768fa2394 100644 --- a/_data/engine-cli/docker_swarm_join.yaml +++ b/_data/engine-cli/docker_swarm_join.yaml @@ -30,6 +30,7 @@ options: description: | Address or interface to use for data path traffic (format: ) deprecated: false + min_api_version: "1.31" experimental: false experimentalcli: false kubernetes: false diff --git a/_data/engine-cli/docker_trust_inspect.yaml b/_data/engine-cli/docker_trust_inspect.yaml index 8e4034ce520..58223004b9d 100644 --- a/_data/engine-cli/docker_trust_inspect.yaml +++ b/_data/engine-cli/docker_trust_inspect.yaml @@ -23,7 +23,7 @@ examples: "### Get low-level details about signatures for a single image tag\n\n trust inspect alpine:latest\n[\n {\n \"Name\": \"alpine:latest\",\n \"SignedTags\": [\n {\n \"SignedTag\": \"latest\",\n \"Digest\": \"d6bfc3baf615dc9618209a8d607ba2a8103d9c8a405b3bd8741d88b4bef36478\",\n \ \"Signers\": [\n \"Repo Admin\"\n ]\n }\n ],\n \"Signers\": - [],\n \"AdminstrativeKeys\": [\n {\n \"Name\": \"Repository\",\n + [],\n \"AdministrativeKeys\": [\n {\n \"Name\": \"Repository\",\n \ \"Keys\": [\n {\n \"ID\": \"5a46c9aaa82ff150bb7305a2d17d0c521c2d784246807b2dc611f436a69041fd\"\n \ }\n ]\n },\n {\n \"Name\": \"Root\",\n \"Keys\": [\n {\n \"ID\": \"a2489bcac7a79aa67b19b96c4a3bf0c675ffdf00c6d2fabe1a5df1115e80adce\"\n @@ -43,7 +43,7 @@ examples: "### Get low-level details about signatures for a single image tag\n\n \ }\n ]\n },\n {\n \"Name\": \"carol\",\n \"Keys\": [\n {\n \"ID\": \"d32fa8b5ca08273a2880f455fcb318da3dc80aeae1a30610815140deef8f30d9\"\n \ },\n {\n \"ID\": \"9a8bbec6ba2af88a5fad6047d428d17e6d05dbdd03d15b4fc8a9a0e8049cd606\"\n - \ }\n ]\n }\n ],\n \"AdminstrativeKeys\": [\n {\n + \ }\n ]\n }\n ],\n \"AdministrativeKeys\": [\n {\n \ \"Name\": \"Repository\",\n \"Keys\": [\n {\n \"ID\": \"27df2c8187e7543345c2e0bf3a1262e0bc63a72754e9a7395eac3f747ec23a44\"\n }\n \ ]\n },\n {\n \"Name\": \"Root\",\n \"Keys\": [\n @@ -53,7 +53,7 @@ examples: "### Get low-level details about signatures for a single image tag\n\n docker trust inspect unsigned-img\nNo signatures or cannot access unsigned-img\n```\n\nHowever, if other tags are signed in the same image repository,\n`docker trust inspect` reports relevant key information:\n\n```bash\n$ docker trust inspect alpine:unsigned\n[\n - \ {\n \"Name\": \"alpine:unsigned\",\n \"Signers\": [],\n \"AdminstrativeKeys\": + \ {\n \"Name\": \"alpine:unsigned\",\n \"Signers\": [],\n \"AdministrativeKeys\": [\n {\n \"Name\": \"Repository\",\n \"Keys\": [\n {\n \ \"ID\": \"5a46c9aaa82ff150bb7305a2d17d0c521c2d784246807b2dc611f436a69041fd\"\n \ }\n ]\n },\n {\n \"Name\": \"Root\",\n \"Keys\": @@ -72,7 +72,7 @@ examples: "### Get low-level details about signatures for a single image tag\n\n [\n \"Repo Admin\"\n ]\n },\n {\n \ \"SignedTag\": \"latest\",\n \"Digest\": \"d6bfc3baf615dc9618209a8d607ba2a8103d9c8a405b3bd8741d88b4bef36478\",\n \ \"Signers\": [\n \"Repo Admin\"\n ]\n - \ }\n ],\n \"Signers\": [],\n \"AdminstrativeKeys\": + \ }\n ],\n \"Signers\": [],\n \"AdministrativeKeys\": [\n {\n \"Name\": \"Repository\",\n \"Keys\": [\n {\n \"ID\": \"5a46c9aaa82ff150bb7305a2d17d0c521c2d784246807b2dc611f436a69041fd\"\n \ }\n ]\n },\n {\n \"Name\": @@ -95,7 +95,7 @@ examples: "### Get low-level details about signatures for a single image tag\n\n [\n \"Repo Admin\"\n ]\n },\n {\n \ \"SignedTag\": \"latest\",\n \"Digest\": \"d6bfc3baf615dc9618209a8d607ba2a8103d9c8a405b3bd8741d88b4bef36478\",\n \ \"Signers\": [\n \"Repo Admin\"\n ]\n - \ }\n ],\n \"Signers\": [],\n \"AdminstrativeKeys\": + \ }\n ],\n \"Signers\": [],\n \"AdministrativeKeys\": [\n {\n \"Name\": \"Repository\",\n \"Keys\": [\n {\n \"ID\": \"5a46c9aaa82ff150bb7305a2d17d0c521c2d784246807b2dc611f436a69041fd\"\n \ }\n ]\n },\n {\n \"Name\": @@ -108,7 +108,7 @@ examples: "### Get low-level details about signatures for a single image tag\n\n \ },\n {\n \"SignedTag\": \"signer\",\n \"Digest\": \"a6122d79b1e74f70b5dd933b18a6d1f99329a4728011079f06b245205f158fe8\",\n \"Signers\": [\n \"Repo Admin\"\n ]\n }\n ],\n - \ \"Signers\": [],\n \"AdminstrativeKeys\": [\n {\n \"Name\": + \ \"Signers\": [],\n \"AdministrativeKeys\": [\n {\n \"Name\": \"Root\",\n \"Keys\": [\n {\n \"ID\": \"8cdcdef5bd039f4ab5a029126951b5985eebf57cabdcdc4d21f5b3be8bb4ce92\"\n }\n \ ]\n },\n {\n \"Name\": \"Repository\",\n diff --git a/_data/engine-cli/docker_version.yaml b/_data/engine-cli/docker_version.yaml index b83c8675d7a..38f161dda61 100644 --- a/_data/engine-cli/docker_version.yaml +++ b/_data/engine-cli/docker_version.yaml @@ -19,6 +19,14 @@ options: experimentalcli: false kubernetes: false swarm: false +- option: kubeconfig + value_type: string + description: Kubernetes config file + deprecated: false + experimental: false + experimentalcli: false + kubernetes: true + swarm: false examples: |- ### Default output diff --git a/_data/not_edited_here.yaml b/_data/not_edited_here.yaml index 745c8348457..a793c0005ea 100644 --- a/_data/not_edited_here.yaml +++ b/_data/not_edited_here.yaml @@ -12,7 +12,7 @@ overrides: - path: /apidocs/ - description: "Auto-generated API docs for Docker Cloud, DTR, UCP. File an issue." + description: "Auto-generated API docs for DTR and UCP. File an issue." - path: /engine/api/ description: "ReDoc/Swagger API specs" diff --git a/_data/previewdocs.yaml b/_data/previewdocs.yaml deleted file mode 100644 index 37c933ccea9..00000000000 --- a/_data/previewdocs.yaml +++ /dev/null @@ -1,13 +0,0 @@ -# Define Advisory texts -# can be used in page frontmatter, e.g.: -# previewflag: cloud-swarm -# modeled on advisories - -texts: - - cloud-swarm: "**Beta Feature.** Swarm Mode for Docker Cloud is currently a public Beta." - - -# URL based previewdocs -# any URL that begins with "/engine/" will get the "engine" preview -# will be over-ridden by the `previewdocs` frontmatter in the topic diff --git a/_data/redirects.csv b/_data/redirects.csv index e7120f63cdc..3d6af48cf6e 100644 --- a/_data/redirects.csv +++ b/_data/redirects.csv @@ -48,8 +48,9 @@ source,destination /v1.9/docker-hub/,/docker-hub/ /v1.10/docker-hub/,/docker-hub/ /v1.11/docker-hub/,/docker-hub/ -/login,https://cloud.docker.com/app/login +/login,https://hub.docker.com/ /bitbucket/use-docker-images-as-build-environments-in-bitbucket-pipelines-792298897.html,https://confluence.atlassian.com/bitbucket/use-docker-images-as-build-environments-in-bitbucket-pipelines-792298897.html /blog/docker-data-science/,https://www.dataquest.io/blog/docker-data-science/ /questions/19335444/how-to-assign-a-port-mapping-to-an-existing-docker-container,http://stackoverflow.com/questions/19335444/how-to-assign-a-port-mapping-to-an-existing-docker-container /engine/examples/mongodb/,/samples/library/mongo/ + diff --git a/_data/toc.yaml b/_data/toc.yaml index 83621b755bb..d152fa91408 100644 --- a/_data/toc.yaml +++ b/_data/toc.yaml @@ -124,7 +124,7 @@ guides: - path: /toolbox/faqs/troubleshoot/ title: Troubleshooting - title: Release notes - path: /release-notes/docker-ce/ + path: /engine/release-notes/ nosync: true - sectiontitle: Docker EE section: @@ -145,10 +145,12 @@ guides: - path: /install/windows/docker-ee/ title: Microsoft Windows Server - title: Release notes - path: /ee/engine/release-notes/ + path: /engine/release-notes/ nosync: true - sectiontitle: Compatibility between Docker versions section: + - path: /engine/ce-ee-node-activate/ + title: CE-EE Node Activate - path: /engine/migration/ title: Migrate to Docker 1.10 - path: /engine/breaking_changes/ @@ -189,6 +191,8 @@ guides: title: Best practices for writing Dockerfiles - path: /develop/develop-images/baseimages/ title: Create a base image + - path: /develop/develop-images/build_enhancements/ + title: Docker build enhancements for 18.09 - path: /develop/develop-images/multistage-build/ title: Use multi-stage builds - path: /engine/reference/builder/ @@ -1297,53 +1301,53 @@ reference: nosync: true - sectiontitle: DTR CLI section: - - path: /reference/dtr/2.5/cli/ + - path: /reference/dtr/2.6/cli/ title: Overview - - path: /reference/dtr/2.5/cli/backup/ + - path: /reference/dtr/2.6/cli/backup/ title: backup - - path: /reference/dtr/2.5/cli/destroy/ + - path: /reference/dtr/2.6/cli/destroy/ title: destroy - - path: /reference/dtr/2.5/cli/emergency-repair/ + - path: /reference/dtr/2.6/cli/emergency-repair/ title: emergency-repair - - path: /reference/dtr/2.5/cli/install/ + - path: /reference/dtr/2.6/cli/install/ title: install - - path: /reference/dtr/2.5/cli/join/ + - path: /reference/dtr/2.6/cli/join/ title: join - - path: /reference/dtr/2.5/cli/reconfigure/ + - path: /reference/dtr/2.6/cli/reconfigure/ title: reconfigure - - path: /reference/dtr/2.5/cli/remove/ + - path: /reference/dtr/2.6/cli/remove/ title: remove - - path: /reference/dtr/2.5/cli/restore/ + - path: /reference/dtr/2.6/cli/restore/ title: restore - - path: /reference/dtr/2.5/cli/upgrade/ + - path: /reference/dtr/2.6/cli/upgrade/ title: upgrade - sectiontitle: UCP CLI section: - - path: /reference/ucp/3.0/cli/ + - path: /reference/ucp/3.1/cli/ title: docker/ucp overview - - path: /reference/ucp/3.0/cli/backup/ + - path: /reference/ucp/3.1/cli/backup/ title: backup - - path: /reference/ucp/3.0/cli/dump-certs/ + - path: /reference/ucp/3.1/cli/dump-certs/ title: dump-certs - - path: /reference/ucp/3.0/cli/example-config/ + - path: /reference/ucp/3.1/cli/example-config/ title: example-config - - path: /reference/ucp/3.0/cli/id/ + - path: /reference/ucp/3.1/cli/id/ title: id - - path: /reference/ucp/3.0/cli/images/ + - path: /reference/ucp/3.1/cli/images/ title: images - - path: /reference/ucp/3.0/cli/install/ + - path: /reference/ucp/3.1/cli/install/ title: install - - path: /reference/ucp/3.0/cli/restart/ + - path: /reference/ucp/3.1/cli/restart/ title: restart - - path: /reference/ucp/3.0/cli/restore/ + - path: /reference/ucp/3.1/cli/restore/ title: restore - - path: /reference/ucp/3.0/cli/stop/ + - path: /reference/ucp/3.1/cli/stop/ title: stop - - path: /reference/ucp/3.0/cli/support/ + - path: /reference/ucp/3.1/cli/support/ title: support - - path: /reference/ucp/3.0/cli/uninstall-ucp/ + - path: /reference/ucp/3.1/cli/uninstall-ucp/ title: uninstall-ucp - - path: /reference/ucp/3.0/cli/upgrade/ + - path: /reference/ucp/3.1/cli/upgrade/ title: upgrade - sectiontitle: Application Programming Interfaces (APIs) @@ -1403,15 +1407,12 @@ reference: - path: /engine/api/v1.18/ title: v1.18 reference - title: DTR API - path: /reference/dtr/2.5/api/ + path: /reference/dtr/2.6/api/ - title: UCP API - path: /reference/ucp/3.0/api/ + path: /reference/ucp/3.1/api/ - title: Registry API path: /registry/spec/api/ nosync: true - - title: Cloud API - path: /apidocs/docker-cloud/ - nosync: true - sectiontitle: Drivers and specifications section: @@ -1525,7 +1526,7 @@ manuals: title: Install Docker EE Engine nosync: true - title: Release notes - path: /ee/engine/release-notes/ + path: /engine/release-notes/ - sectiontitle: Universal Control Plane section: - path: /ee/ucp/ @@ -1560,10 +1561,18 @@ manuals: title: Add labels to cluster nodes - path: /ee/ucp/admin/configure/add-sans-to-cluster/ title: Add SANs to cluster certificates + - path: /ee/ucp/admin/configure/collect-cluster-metrics/ + title: Collect UCP cluster metrics with Prometheus + - path: /ee/ucp/admin/configure/configure-rbac-kube/ + title: Configure native Kubernetes role-based access control + - path: /ee/ucp/admin/configure/create-audit-logs/ + title: Create UCP audit logs + - path: /ee/ucp/admin/configure/enable-saml-authentication/ + title: Enable SAML authentication + - path: /ee/ucp/admin/configure/enable-helm-tiller/ + title: Enable Helm and Tiller with UCP - path: /ee/ucp/admin/configure/external-auth/ title: Integrate with LDAP - - path: /ee/ucp/admin/configure/external-auth/enable-ldap-config-file/ - title: Integrate with LDAP by using a configuration file - path: /ee/ucp/admin/configure/license-your-installation/ title: License your installation - path: /ee/ucp/admin/configure/restrict-services-to-worker-nodes/ @@ -1615,7 +1624,7 @@ manuals: - path: /ee/ucp/admin/backups-and-disaster-recovery/ title: Backups and disaster recovery - title: CLI reference - path: /reference/ucp/3.0/cli/ + path: /reference/ucp/3.1/cli/ nosync: true - sectiontitle: Authorize role-based access section: @@ -1659,6 +1668,8 @@ manuals: title: CLI-based access - path: /ee/ucp/user-access/kubectl/ title: Install the Kubernetes CLI + - path: /ee/ucp/deploy-application-package + title: Deploy an application package - sectiontitle: Deploy apps with Swarm section: - title: Deploy a single service @@ -1713,6 +1724,10 @@ manuals: path: /ee/ucp/interlock/upgrade/ - sectiontitle: Deploy apps with Kubernetes section: + - title: Access Kubernetes Resources + path: /ee/ucp/kubernetes/kube-resources/ + - title: Configure AWS EBS Storage for Kubernetes + path: /ee/ucp/kubernetes/configure-aws-storage/ - title: Deploy a workload path: /ee/ucp/kubernetes/ - title: Deploy a Compose-based app @@ -1723,13 +1738,180 @@ manuals: path: /ee/ucp/kubernetes/create-service-account/ - title: Install a CNI plugin path: /ee/ucp/kubernetes/install-cni-plugin/ + - title: Kubernetes network encryption + path: /ee/ucp/kubernetes/kubernetes-network-encryption/ - title: API reference - path: /reference/ucp/3.0/api/ + path: /reference/ucp/3.1/api/ nosync: true - path: /ee/ucp/release-notes/ title: Release notes - sectiontitle: Previous versions section: + - sectiontitle: Universal Control Plane 3.0 + section: + - path: /datacenter/ucp/3.0/guides/ + title: Universal Control Plane overview + - path: /datacenter/ucp/3.0/guides/architecture/ + title: Architecture + - sectiontitle: Administration + section: + - sectiontitle: Install + section: + - path: /datacenter/ucp/3.0/guides/admin/install/system-requirements/ + title: System requirements + - path: /datacenter/ucp/3.0/guides/admin/install/plan-installation/ + title: Plan your installation + - path: /datacenter/ucp/3.0/guides/admin/install/ + title: Install + - path: /datacenter/ucp/3.0/guides/admin/install/install-offline/ + title: Install offline + - path: /datacenter/ucp/3.0/guides/admin/install/upgrade/ + title: Upgrade + - path: /datacenter/ucp/3.0/guides/admin/install/upgrade-offline/ + title: Upgrade offline + - path: /datacenter/ucp/3.0/guides/admin/install/uninstall/ + title: Uninstall + - path: /datacenter/ucp/3.0/guides/admin/install/architecture-specific-images/ + title: Architecture-specific images + - sectiontitle: Configure + section: + - path: /datacenter/ucp/3.0/guides/admin/configure/add-labels-to-cluster-nodes/ + title: Add labels to cluster nodes + - path: /datacenter/ucp/3.0/guides/admin/configure/add-sans-to-cluster/ + title: Add SANs to cluster certificates + - path: /datacenter/ucp/3.0/guides/admin/configure/join-windows-worker-nodes/ + title: Join Windows worker nodes to a swarm + - path: /datacenter/ucp/3.0/guides/admin/configure/integrate-with-dtr/ + title: Integrate with Docker Trusted Registry + - path: /datacenter/ucp/3.0/guides/admin/configure/external-auth/ + title: Integrate with LDAP + - path: /datacenter/ucp/3.0/guides/admin/configure/external-auth/enable-ldap-config-file/ + title: Integrate with LDAP by using a configuration file + - path: /datacenter/ucp/3.0/guides/admin/configure/license-your-installation/ + title: License your installation + - path: /datacenter/ucp/3.0/guides/admin/configure/restrict-services-to-worker-nodes/ + title: Restrict services to worker nodes + - path: /datacenter/ucp/3.0/guides/admin/configure/run-only-the-images-you-trust/ + title: Run only the images you trust + - path: /datacenter/ucp/3.0/guides/admin/configure/scale-your-cluster/ + title: Scale your cluster + - path: /datacenter/ucp/3.0/guides/admin/configure/set-session-timeout/ + title: Set the user's session timeout + - path: /datacenter/ucp/3.0/guides/admin/configure/set-up-high-availability/ + title: Set up high availability + - path: /datacenter/ucp/3.0/guides/admin/configure/store-logs-in-an-external-system/ + title: Store logs in an external system + - path: /datacenter/ucp/3.0/guides/admin/configure/ucp-configuration-file/ + title: UCP configuration file + - path: /datacenter/ucp/3.0/guides/admin/configure/use-a-load-balancer/ + title: Use a load balancer + - path: /datacenter/ucp/3.0/guides/admin/configure/use-node-local-network-in-swarm/ + title: Use a local node network in a swarm + - path: /datacenter/ucp/3.0/guides/admin/configure/use-domain-names-to-access-services/ + title: Use domain names to access services + - path: /datacenter/ucp/3.0/guides/admin/configure/use-your-own-tls-certificates/ + title: Use your own TLS certificates + - sectiontitle: Monitor and troubleshoot + section: + - path: /datacenter/ucp/3.0/guides/admin/monitor-and-troubleshoot/ + title: Monitor the cluster status + - path: /datacenter/ucp/3.0/admin/monitor-and-troubleshoot/troubleshoot-node-messages/ + title: Troubleshoot node messages + - path: /datacenter/ucp/3.0/guides/admin/monitor-and-troubleshoot/troubleshoot-with-logs/ + title: Troubleshoot with logs + - path: /datacenter/ucp/3.0/guides/admin/monitor-and-troubleshoot/troubleshoot-configurations/ + title: Troubleshoot configurations + - path: /datacenter/ucp/3.0/guides/admin/backups-and-disaster-recovery/ + title: Backups and disaster recovery + - sectiontitle: CLI reference + section: + - path: /datacenter/ucp/3.0/reference/cli/ + title: docker/ucp overview + - path: /datacenter/ucp/3.0/reference/cli/backup/ + title: backup + - path: /datacenter/ucp/3.0/reference/cli/dump-certs/ + title: dump-certs + - path: /datacenter/ucp/3.0/reference/cli/example-config/ + title: example-config + - path: /datacenter/ucp/3.0/reference/cli/id/ + title: id + - path: /datacenter/ucp/3.0/reference/cli/images/ + title: images + - path: /datacenter/ucp/3.0/reference/cli/install/ + title: install + - path: /datacenter/ucp/3.0/reference/cli/restart/ + title: restart + - path: /datacenter/ucp/3.0/reference/cli/restore/ + title: restore + - path: /datacenter/ucp/3.0/reference/cli/stop/ + title: stop + - path: /datacenter/ucp/3.0/reference/cli/support/ + title: support + - path: /datacenter/ucp/3.0/reference/cli/uninstall-ucp/ + title: uninstall-ucp + - path: /datacenter/ucp/3.0/reference/cli/upgrade/ + title: upgrade + - sectiontitle: Access control + section: + - path: /datacenter/ucp/3.0/guides/access-control/ + title: Access control model + - path: /datacenter/ucp/3.0/guides/access-control/create-and-manage-users/ + title: Create and manage users + - path: /datacenter/ucp/3.0/guides/access-control/create-and-manage-teams/ + title: Create and manage teams + - path: /datacenter/ucp/3.0/guides/access-control/deploy-view-only-service/ + title: Deploy a service with view-only access across an organization + - path: /datacenter/ucp/3.0/guides/access-control/grant-permissions/ + title: Grant permissions to users based on roles + - path: /datacenter/ucp/3.0/guides/access-control/isolate-nodes-between-teams/ + title: Isolate swarm nodes to a specific team + - path: /datacenter/ucp/3.0/guides/access-control/isolate-volumes-between-teams/ + title: Isolate volumes between two different teams + - path: /datacenter/ucp/3.0/guides/access-control/manage-access-with-collections/ + title: Manage access to resources by using collections + - path: /datacenter/ucp/3.0/guides/access-control/access-control-node/ + title: Node access control + - path: /datacenter/ucp/3.0/guides/access-control/permission-levels/ + title: Permission levels + - path: /datacenter/ucp/3.0/guides/access-control/access-control-design-ee-standard/ + title: Access control design with Docker EE Standard + - path: /datacenter/ucp/3.0/guides/access-control/access-control-design-ee-advanced/ + title: Access control design with Docker EE Advanced + - path: /datacenter/ucp/3.0/guides/access-control/recover-a-user-password/ + title: Recover a user password + - sectiontitle: User guides + section: + - sectiontitle: Access UCP + section: + - path: /datacenter/ucp/3.0/guides/user/access-ucp/ + title: Web-based access + - path: /datacenter/ucp/3.0/guides/user/access-ucp/cli-based-access/ + title: CLI-based access + - sectiontitle: Deploy an application + section: + - path: /datacenter/ucp/3.0/guides/user/services/deploy-a-service/ + title: Deploy a service + - path: /datacenter/ucp/3.0/guides/user/services/use-domain-names-to-access-services/ + title: Use domain names to access services + - path: /datacenter/ucp/3.0/guides/user/services/ + title: Deploy an app from the UI + - path: /datacenter/ucp/3.0/guides/user/services/deploy-app-cli/ + title: Deploy an app from the CLI + - path: /datacenter/ucp/3.0/guides/user/services/deploy-stack-to-collection/ + title: Deploy application resources to a collection + - sectiontitle: Secrets + section: + - path: /datacenter/ucp/3.0/guides/user/secrets/ + title: Manage secrets + - path: /datacenter/ucp/3.0/guides/user/secrets/grant-revoke-access/ + title: Grant access to secrets + - path: /datacenter/ucp/3.0/reference/api/ + title: API reference + - path: /ee/ucp/release-notes/ + title: Release notes + nosync: true + - path: /datacenter/ucp/3.0/guides/get-support/ + title: Get support - sectiontitle: Universal Control Plane 2.2 section: - path: /datacenter/ucp/2.2/guides/ @@ -2331,6 +2513,16 @@ manuals: title: Create and manage organizations - path: /ee/dtr/admin/manage-users/permission-levels/ title: Permission levels + - sectiontitle: Manage jobs + section: + - path: /ee/dtr/admin/manage-jobs/job-queue/ + title: Job Queue + - path: /ee/dtr/admin/manage-jobs/audit-jobs-via-ui/ + title: Audit Jobs with the Web Interface + - path: /ee/dtr/admin/manage-jobs/audit-jobs-via-api/ + title: Audit Jobs with the API + - path: /ee/dtr/admin/manage-jobs/auto-delete-job-logs/ + title: Enable Auto-Deletion of Job Logs - sectiontitle: Monitor and troubleshoot section: - path: /ee/dtr/admin/monitor-and-troubleshoot/ @@ -2339,8 +2531,6 @@ manuals: title: Check Notary audit logs - path: /ee/dtr/admin/monitor-and-troubleshoot/troubleshoot-with-logs/ title: Troubleshoot with logs - - path: /ee/dtr/admin/monitor-and-troubleshoot/troubleshoot-batch-jobs/ - title: Troubleshoot batch jobs - sectiontitle: Disaster recovery section: - title: Overview @@ -2354,7 +2544,7 @@ manuals: - title: Restore from a backup path: /ee/dtr/admin/disaster-recovery/restore-from-backup/ - title: CLI reference - path: /reference/dtr/2.5/cli/ + path: /reference/dtr/2.6/cli/ nosync: true - sectiontitle: User guides section: @@ -2370,6 +2560,8 @@ manuals: section: - path: /ee/dtr/user/manage-images/ title: Create a repository + - path: /ee/dtr/user/manage-images/review-repository-info/ + title: Review repository info - path: /ee/dtr/user/manage-images/pull-and-push-images/ title: Pull and push images - path: /ee/dtr/user/manage-images/delete-images/ @@ -2400,17 +2592,170 @@ manuals: path: /ee/dtr/user/promotion-policies/pull-mirror/ - title: Template reference path: /ee/dtr/user/promotion-policies/templates/ + - sectiontitle: Manage repository events + section: + - title: Audit repository events + path: /ee/dtr/user/audit-repository-events/ + - title: Auto-delete repository events + path: /ee/dtr/admin/configure/auto-delete-repo-events/ - path: /ee/dtr/user/create-and-manage-webhooks/ title: Create and manage webhooks - title: Manage access tokens path: /ee/dtr/user/access-tokens/ + - title: Tag pruning + path: /ee/dtr/user/tag-pruning/ - title: API reference - path: /reference/dtr/2.5/api/ + path: /reference/dtr/2.6/api/ nosync: true - path: /ee/dtr/release-notes/ title: Release notes - sectiontitle: Previous versions section: + - sectiontitle: Docker Trusted Registry 2.5 + section: + - path: /datacenter/dtr/2.5/guides/ + title: Docker Trusted Registry overview + - path: /datacenter/dtr/2.5/guides/architecture/ + title: Architecture + - sectiontitle: Administration + section: + - sectiontitle: Install + section: + - path: /datacenter/dtr/2.5/guides/admin/install/system-requirements/ + title: System requirements + - path: /datacenter/dtr/2.5/guides/admin/install/ + title: Install + - path: /datacenter/dtr/2.5/guides/admin/install/install-offline/ + title: Install offline + - path: /datacenter/dtr/2.5/guides/admin/upgrade/ + title: Upgrade + - path: /datacenter/dtr/2.5/guides/admin/install/uninstall/ + title: Uninstall + - sectiontitle: Configure + section: + - path: /datacenter/dtr/2.5/guides/admin/configure/license-your-installation/ + title: License your installation + - path: /datacenter/dtr/2.5/guides/admin/configure/use-your-own-tls-certificates/ + title: Use your own TLS certificates + - path: /datacenter/dtr/2.5/guides/admin/configure/enable-single-sign-on/ + title: Enable single sign-on + - sectiontitle: External storage + section: + - path: /datacenter/dtr/2.5/guides/admin/configure/external-storage/ + title: Overview + - path: /datacenter/dtr/2.5/guides/admin/configure/external-storage/s3/ + title: S3 + - path: /datacenter/dtr/2.5/guides/admin/configure/external-storage/nfs/ + title: NFS + - path: /datacenter/dtr/2.5/guides/admin/configure/set-up-high-availability/ + title: Set up high availability + - path: /datacenter/dtr/2.5/guides/admin/configure/use-a-load-balancer/ + title: Use a load balancer + - path: /datacenter/dtr/2.5/guides/admin/configure/set-up-vulnerability-scans/ + title: Set up vulnerability scans + - sectiontitle: Deploy caches + section: + - path: /datacenter/dtr/2.5/guides/admin/configure/deploy-caches/ + title: Overview + - path: /datacenter/dtr/2.5/guides/admin/configure/deploy-caches/strategy/ + title: Cache deployment strategy + - path: /datacenter/dtr/2.5/guides/admin/configure/deploy-caches/simple/ + title: Deploy a DTR cache + - path: /datacenter/dtr/2.5/guides/admin/configure/deploy-caches/high-availability/ + title: Configure caches for high availability + - path: /datacenter/dtr/2.5/guides/admin/configure/deploy-caches/configuration-reference/ + title: Cache configuration reference + - path: /datacenter/dtr/2.5/guides/admin/configure/garbage-collection/ + title: Garbage collection + - path: /datacenter/dtr/2.5/guides/admin/configure/use-a-web-proxy/ + title: Use a web proxy + - sectiontitle: Manage users + section: + - path: /datacenter/dtr/2.5/guides/admin/manage-users/ + title: Authentication and authorization + - path: /datacenter/dtr/2.5/guides/admin/manage-users/create-and-manage-users/ + title: Create and manage users + - path: /datacenter/dtr/2.5/guides/admin/manage-users/create-and-manage-teams/ + title: Create and manage teams + - path: /datacenter/dtr/2.5/guides/admin/manage-users/create-and-manage-orgs/ + title: Create and manage organizations + - path: /datacenter/dtr/2.5/guides/admin/manage-users/permission-levels/ + title: Permission levels + - sectiontitle: Monitor and troubleshoot + section: + - path: /datacenter/dtr/2.5/guides/admin/monitor-and-troubleshoot/ + title: Monitor the cluster status + - path: /datacenter/dtr/2.5/guides/admin/monitor-and-troubleshoot/notary-audit-logs/ + title: Check Notary audit logs + - path: /datacenter/dtr/2.5/guides/admin/monitor-and-troubleshoot/troubleshoot-with-logs/ + title: Troubleshoot with logs + - path: /datacenter/dtr/2.5/guides/admin/monitor-and-troubleshoot/troubleshoot-batch-jobs/ + title: Troubleshoot batch jobs + - path: /datacenter/dtr/2.5/guides/admin/backups-and-disaster-recovery/ + title: Backups and disaster recovery + - sectiontitle: CLI reference + section: + - path: /datacenter/dtr/2.5/reference/cli/ + title: Overview + - path: /datacenter/dtr/2.5/reference/cli/backup/ + title: backup + - path: /datacenter/dtr/2.5/reference/cli/destroy/ + title: destroy + - path: /datacenter/dtr/2.5/reference/cli/images/ + title: images + - path: /datacenter/dtr/2.5/reference/cli/install/ + title: install + - path: /datacenter/dtr/2.5/reference/cli/join/ + title: join + - path: /datacenter/dtr/2.5/reference/cli/reconfigure/ + title: reconfigure + - path: /datacenter/dtr/2.5/reference/cli/remove/ + title: remove + - path: /datacenter/dtr/2.5/reference/cli/restore/ + title: restore + - path: /datacenter/dtr/2.5/reference/cli/upgrade/ + title: upgrade + - sectiontitle: User guides + section: + - sectiontitle: Access DTR + section: + - path: /datacenter/dtr/2.5/guides/user/access-dtr/ + title: Configure your Docker daemon + - path: /datacenter/dtr/2.5/guides/user/access-dtr/configure-your-notary-client/ + title: Configure your Notary client + - path: /datacenter/dtr/2.5/guides/user/access-dtr/use-a-cache/ + title: Use a cache + - sectiontitle: Manage images + section: + - path: /datacenter/dtr/2.5/guides/user/manage-images/ + title: Create a repository + - path: /datacenter/dtr/2.5/guides/user/manage-images/pull-and-push-images/ + title: Pull and push images + - path: /datacenter/dtr/2.5/guides/user/manage-images/delete-images/ + title: Delete images + - path: /datacenter/dtr/2.5/guides/user/manage-images/scan-images-for-vulnerabilities/ + title: Scan images for vulnerabilities + - path: /datacenter/dtr/2.5/guides/user/manage-images/prevent-tags-from-being-overwritten/ + title: Prevent tags from being overwritten + - sectiontitle: Sign images + section: + - path: /datacenter/dtr/2.5/guides/user/manage-images/sign-images/ + title: Sign an image + - path: /datacenter/dtr/2.5/guides/user/manage-images/sign-images/delegate-image-signing/ + title: Delegate image signing + - path: /datacenter/dtr/2.5/guides/user/manage-images/sign-images/manage-trusted-repositories/ + title: Manage trusted repositories + - path: /datacenter/dtr/2.5/guides/user/create-and-manage-webhooks/ + title: Create and manage webhooks + - path: /datacenter/dtr/2.5/guides/user/create-promotion-policies/ + title: Create promotion policies + - path: /datacenter/dtr/2.5/reference/api/ + title: API reference + - path: /ee/dtr/release-notes/ + title: Release notes + nosync: true + - path: /datacenter/dtr/2.5/guides/support/ + title: Get support - sectiontitle: Docker Trusted Registry 2.4 section: - path: /datacenter/dtr/2.4/guides/ @@ -3032,179 +3377,6 @@ manuals: title: Get support - title: Get support path: /ee/get-support/ -- sectiontitle: Docker Cloud - section: - - sectiontitle: Migration - section: - - path: /docker-cloud/migration/ - title: Migration overview - - path: /docker-cloud/migration/cloud-to-swarm/ - title: Migrate to Docker CE - - path: /docker-cloud/migration/cloud-to-kube-aks/ - title: Migration to AKS - - path: /docker-cloud/migration/cloud-to-kube-gke/ - title: Migrate to GKE - - path: /docker-cloud/migration/cloud-to-aws-ecs/ - title: Migrate to Amazon ECS - - path: /docker-cloud/migration/deregister-swarms/ - title: Deregister swarms - - path: /docker-cloud/migration/kube-primer/ - title: Kubernetes primer - - path: /docker-cloud/ - title: About Docker Cloud - - path: /docker-cloud/dockerid/ - title: Docker Cloud settings and Docker ID - - path: /docker-cloud/orgs/ - title: Organizations and teams - - sectiontitle: Manage builds and images - section: - - path: /docker-cloud/builds/ - title: Builds and images overview - - path: /docker-cloud/builds/repos/ - title: Docker Cloud repositories - - path: /docker-cloud/builds/link-source/ - title: Link to a source code repository - - path: /docker-cloud/builds/push-images/ - title: Push images to Docker Cloud - - path: /docker-cloud/builds/automated-build/ - title: Automated builds - - path: /docker-cloud/builds/automated-testing/ - title: Automated repository tests - - path: /docker-cloud/builds/advanced/ - title: Advanced options for autobuild and autotest - - sectiontitle: Manage swarms (beta swarm mode) - section: - - path: /docker-cloud/cloud-swarm/ - title: Overview - - path: /docker-cloud/cloud-swarm/using-swarm-mode/ - title: Using Swarm mode - - path: /docker-cloud/cloud-swarm/register-swarms/ - title: Register existing swarms - - path: /docker-cloud/cloud-swarm/create-cloud-swarm-aws/ - title: Create a new swarm on Amazon Web Services in Docker Cloud - - path: /docker-cloud/cloud-swarm/create-cloud-swarm-azure/ - title: Create a new swarm on Microsoft Azure in Docker Cloud - - path: /docker-cloud/cloud-swarm/connect-to-swarm/ - title: Connect to a swarm through Docker Cloud - - path: /docker-cloud/cloud-swarm/link-aws-swarm/ - title: Link Amazon Web Services to Docker Cloud - - path: /docker-cloud/cloud-swarm/link-azure-swarm/ - title: Link Microsoft Azure Cloud Services to Docker Cloud - - path: /docker-cloud/cloud-swarm/ssh-key-setup/ - title: Set up SSH keys - - sectiontitle: Manage Infrastructure (standard mode) - section: - - path: /docker-cloud/infrastructure/ - title: Infrastructure overview - - path: /docker-cloud/infrastructure/deployment-strategies/ - title: Container distribution strategies - - path: /docker-cloud/infrastructure/link-aws/ - title: Link to Amazon Web Services hosts - - path: /docker-cloud/infrastructure/link-do/ - title: Link to DigitalOcean hosts - - path: /docker-cloud/infrastructure/link-azure/ - title: Link to Microsoft Azure hosts - - path: /docker-cloud/infrastructure/link-packet/ - title: Link to Packet hosts - - path: /docker-cloud/infrastructure/link-softlayer/ - title: Link to SoftLayer hosts - - path: /docker-cloud/infrastructure/ssh-into-a-node/ - title: SSH into a Docker Cloud-managed node - - path: /docker-cloud/infrastructure/docker-upgrade/ - title: Upgrade Docker on a node - - path: /docker-cloud/infrastructure/byoh/ - title: Use the Docker Cloud agent - - path: /docker-cloud/infrastructure/cloud-on-packet.net-faq/ - title: Use Docker Cloud and Packet.net - - path: /docker-cloud/infrastructure/cloud-on-aws-faq/ - title: Use Docker Cloud on AWS - - sectiontitle: Manage nodes and apps (standard mode) - section: - - path: /docker-cloud/standard/ - title: Overview - - sectiontitle: Getting started - section: - - path: /docker-cloud/getting-started/ - title: Getting started with Docker Cloud - - path: /docker-cloud/getting-started/intro_cloud/ - title: Introducing Docker Cloud - - path: /docker-cloud/getting-started/connect-infra/ - title: Link to your infrastructure - - path: /docker-cloud/getting-started/your_first_node/ - title: Deploy your first node - - path: /docker-cloud/getting-started/your_first_service/ - title: Deploy your first service - - sectiontitle: Deploy an application - section: - - path: /docker-cloud/getting-started/deploy-app/1_introduction/ - title: Introduction to deploying an app in Docker Cloud - - path: /docker-cloud/getting-started/deploy-app/2_set_up/ - title: Set up your environment - - path: /docker-cloud/getting-started/deploy-app/3_prepare_the_app/ - title: Prepare the application - - path: /docker-cloud/getting-started/deploy-app/4_push_to_cloud_registry/ - title: Push the image to Docker Cloud's Registry - - path: /docker-cloud/getting-started/deploy-app/5_deploy_the_app_as_a_service/ - title: Deploy the app as a Docker Cloud service - - path: /docker-cloud/getting-started/deploy-app/6_define_environment_variables/ - title: Define environment variables - - path: /docker-cloud/getting-started/deploy-app/7_scale_the_service/ - title: Scale the service - - path: /docker-cloud/getting-started/deploy-app/8_view_logs/ - title: View service logs - - path: /docker-cloud/getting-started/deploy-app/9_load-balance_the_service/ - title: Load-balance the service - - path: /docker-cloud/getting-started/deploy-app/10_provision_a_data_backend_for_your_service/ - title: Provision a data backend for the service - - path: /docker-cloud/getting-started/deploy-app/11_service_stacks/ - title: Stackfiles for your service - - path: /docker-cloud/getting-started/deploy-app/12_data_management_with_volumes/ - title: Data management with volumes - - sectiontitle: Manage applications - section: - - path: /docker-cloud/apps/ - title: Applications in Docker Cloud - - path: /docker-cloud/apps/deploy-to-cloud-btn/ - title: Add a deploy to Docker Cloud button - - path: /docker-cloud/apps/auto-destroy/ - title: Automatic container destroy - - path: /docker-cloud/apps/autorestart/ - title: Automatic container restart - - path: /docker-cloud/apps/auto-redeploy/ - title: Automatic service redeploy - - path: /docker-cloud/apps/load-balance-hello-world/ - title: Create a proxy or load balancer - - path: /docker-cloud/apps/deploy-tags/ - title: Deployment tags - - path: /docker-cloud/apps/stacks/ - title: Manage service stacks - - path: /docker-cloud/apps/ports/ - title: Publish and expose service or container ports - - path: /docker-cloud/apps/service-redeploy/ - title: Redeploy running services - - path: /docker-cloud/apps/service-scaling/ - title: Scale your service - - path: /docker-cloud/apps/api-roles/ - title: Service API roles - - path: /docker-cloud/apps/service-links/ - title: Service discovery and links - - path: /docker-cloud/apps/triggers/ - title: Use triggers - - path: /docker-cloud/apps/volumes/ - title: Work with data volumes - - path: /docker-cloud/apps/stack-yaml-reference/ - title: Cloud stack file YAML reference - - path: /docker-cloud/slack-integration/ - title: Docker Cloud notifications in Slack - - path: /apidocs/docker-cloud/ - title: Docker Cloud API - nosync: true - - path: /docker-cloud/installing-cli/ - title: The Docker Cloud CLI - - path: /docker-cloud/docker-errors-faq/ - title: Known issues in Docker Cloud - - path: /docker-cloud/release-notes/ - title: Release notes - sectiontitle: Docker Compose section: - path: /compose/overview/ @@ -3459,48 +3631,50 @@ manuals: title: Migrate from Boot2Docker to Machine - path: /release-notes/docker-machine/ title: Docker Machine release notes -- sectiontitle: Docker Store - section: - - path: /docker-store/ - title: About Docker Store - - sectiontitle: Docker Store FAQs - section: - - path: /docker-store/customer_faq/ - title: Customer FAQs - - path: /docker-store/publisher_faq/ - title: Publisher FAQs - - sectiontitle: For Publishers - section: - - path: /docker-store/publish/ - title: Publish content on Docker Store - - path: /docker-store/certify-images/ - title: Certify Docker images - - path: /docker-store/certify-plugins-logging/ - title: Certify Docker logging plugins - - path: /docker-store/trustchain/ - title: Docker Store trust chain - - path: /docker-store/byol/ - title: Bring Your Own License (BYOL) - sectiontitle: Docker Hub section: - path: /docker-hub/ - title: Overview of Docker Hub - - path: /docker-hub/accounts/ - title: Use Docker Hub with Docker ID - - path: /docker-hub/orgs/ - title: Teams & organizations + title: Quickstart - path: /docker-hub/repos/ - title: Repositories on Docker Hub - - path: /docker-hub/builds/ - title: Automated builds + title: Repositories + - path: /docker-hub/official_images/ + title: Official Images + - path: /docker-hub/orgs/ + title: Teams & Organizations - path: /docker-hub/webhooks/ - title: Webhooks for automated builds - - path: /docker-hub/bitbucket/ - title: Automated builds with Bitbucket - - path: /docker-hub/github/ - title: Automated builds from GitHub - - path: /docker-hub/official_repos/ - title: Official repositories on Docker Hub + title: Webhooks + - path: /docker-hub/slack_integration/ + title: Slack Integration + - path: /docker-hub/upgrade/ + title: Upgrading your plan + - sectiontitle: Automated Builds + section: + - path: /docker-hub/builds/ + title: Set up Automated builds + - path: /docker-hub/builds/automated-testing/ + title: Testing in Automated Builds + - path: /docker-hub/builds/advanced/ + title: Advanced Automated Builds + - path: /docker-hub/builds/link-source/ + title: Link to GitHub and BitBucket + - path: /docker-hub/builds/classic/ + title: Classic Automated Builds + - sectiontitle: Publisher & Certified Content + section: + - path: /docker-hub/publish/ + title: Overview + - path: /docker-hub/publish/customer_faq/ + title: User FAQs + - path: /docker-hub/publish/publisher_faq/ + title: Publisher FAQs + - path: /docker-hub/publish/certify-images/ + title: Certify Images & Plugins + - path: /docker-hub/publish/certify-plugins-logging/ + title: Certify Logging Plugins + - path: /docker-hub/publish/trustchain/ + title: Trust Chain + - path: /docker-hub/publish/byol/ + title: Bring Your Own License (BYOL) - sectiontitle: Open-source projects section: - sectiontitle: Docker Notary @@ -3603,11 +3777,9 @@ manuals: section: - path: /release-notes/ title: Overview - - path: /ee/engine/release-notes/ - title: Docker EE + - path: /engine/release-notes/ + title: Docker EE and CE nosync: true - - path: /release-notes/docker-ce/ - title: Docker CE - path: /cs-engine/1.13/release-notes/ title: CS Docker Engine nosync: true @@ -3622,9 +3794,6 @@ manuals: - path: /release-notes/docker-compose/ title: Docker Compose nosync: true - - path: /docker-cloud/release-notes/ - title: Docker Cloud - nosync: true - path: /docker-for-aws/release-notes/ title: Docker for AWS nosync: true diff --git a/_includes/api-version-matrix.md b/_includes/api-version-matrix.md index 89adc111a87..28cde9838f9 100644 --- a/_includes/api-version-matrix.md +++ b/_includes/api-version-matrix.md @@ -1,6 +1,8 @@ | Docker version | Maximum API version | Change log | |:---------------|:---------------------------|:---------------------------------------------------------| +| 18.09 | [1.39](/engine/api/v1.39/) | [changes](/engine/api/version-history/#v139-api-changes) | +| 18.06 | [1.38](/engine/api/v1.38/) | [changes](/engine/api/version-history/#v138-api-changes) | | 18.05 | [1.37](/engine/api/v1.37/) | [changes](/engine/api/version-history/#v137-api-changes) | | 18.04 | [1.37](/engine/api/v1.37/) | [changes](/engine/api/version-history/#v137-api-changes) | | 18.03 | [1.37](/engine/api/v1.37/) | [changes](/engine/api/version-history/#v137-api-changes) | diff --git a/_includes/content/cloud-swarm-overview.md b/_includes/content/cloud-swarm-overview.md deleted file mode 100644 index 20179703506..00000000000 --- a/_includes/content/cloud-swarm-overview.md +++ /dev/null @@ -1,9 +0,0 @@ -You can now create _new_ Docker Swarms from within Docker Cloud as well as -register existing swarms. - -When you create a swarm, Docker Cloud connects to the Cloud provider on your -behalf, and uses the provider's APIs and a provider-specific template to launch -Docker instances. The instances are then joined to a swarm and the swarm is -configured using your input. When you access the swarm from Docker Cloud, the -system forwards your commands directly to the Docker instances running in the -swarm. diff --git a/_includes/content/ssh/ssh-add-keys-to-agent.md b/_includes/content/ssh/ssh-add-keys-to-agent.md index 82f26bea8a6..5837d5906f3 100644 --- a/_includes/content/ssh/ssh-add-keys-to-agent.md +++ b/_includes/content/ssh/ssh-add-keys-to-agent.md @@ -55,7 +55,7 @@ passphrases in your keychain. 2. Add your SSH private key to the ssh-agent. ```none - $ ssh-add -K ~/.ssh/id_rsa + $ ssh-add ~/.ssh/id_rsa ``` If you created your key with a different name or have an existing key @@ -81,7 +81,7 @@ passphrases in your keychain. 2. Add your SSH private key to the ssh-agent. ```none - $ ssh-add -K ~/.ssh/id_rsa + $ ssh-add ~/.ssh/id_rsa ``` If you created your key with a different name or have an existing key diff --git a/_includes/content/ssh/ssh-overview.md b/_includes/content/ssh/ssh-overview.md index 00f0c4f0863..4a595008b89 100644 --- a/_includes/content/ssh/ssh-overview.md +++ b/_includes/content/ssh/ssh-overview.md @@ -2,7 +2,7 @@ provides authentication and encrypts data communication over insecure networks. These topics describe how to find existing SSH keys or generate new ones, and -add the public key to your Docker Cloud account. GitHub has a good set of +add the public key to your Docker Hub account. GitHub has a good set of topics on [Connecting to GitHub with SSH](https://help.github.com/articles/connecting-to-github-with-ssh/), which you can tailor to SSH scenarios beyond GitHub, including Docker. The quick-look diff --git a/_includes/docker_ce_ee.md b/_includes/docker_ce_ee.md index a70e3da450a..7549036074f 100644 --- a/_includes/docker_ce_ee.md +++ b/_includes/docker_ce_ee.md @@ -1,9 +1,9 @@ {% assign green-check = '![yes](/install/images/green-check.svg){: style="height: 14px; margin: 0 auto"}' %} -| Capabilities | Community Edition | Enterprise Edition Basic | Enterprise Edition Standard | Enterprise Edition Advanced | -|:------------------------------------------------------------------|:------------------|:-------------------------|:----------------------------|:----------------------------| -| Container engine and built in orchestration, networking, security | {{green-check}} | {{green-check}} | {{green-check}} | {{green-check}} | -| Certified infrastructure, plugins and ISV containers | | {{green-check}} | {{green-check}} | {{green-check}} | -| Image management | | | {{green-check}} | {{green-check}} | -| Container app management | | | {{green-check}} | {{green-check}} | -| Image security scanning | | | | {{green-check}} | +| Capabilities | Docker Engine - Community | Docker Engine - Enterprise | Docker Enterprise | +|:---------------------------------------------------------------------|:------------------:|:-------------------------:|:----------------------------:| +| Container engine and built in orchestration, networking, security | {{green-check}} | {{green-check}} | {{green-check}} | +| Certified infrastructure, plugins and ISV containers | | {{green-check}} | {{green-check}} | +| Image management | | | {{green-check}} | +| Container app management | | | {{green-check}} | +| Image security scanning | | | {{green-check}} | diff --git a/_includes/ee-linux-install-reuse.md b/_includes/ee-linux-install-reuse.md index 4b075b899fb..695196bfc60 100644 --- a/_includes/ee-linux-install-reuse.md +++ b/_includes/ee-linux-install-reuse.md @@ -30,7 +30,7 @@ For Docker Community Edition on {{ linux-dist-cap }}, see [Get Docker CE for Cen To install Docker EE, you will need the URL of the Docker EE repository associated with your trial or subscription: -1. Go to [https://store.docker.com/my-content](https://store.docker.com/my-content){: target="_blank" class="_" }. All of your subscriptions and trials are listed. +1. Go to [https://hub.docker.com/my-content](https://hub.docker.com/my-content){: target="_blank" class="_" }. All of your subscriptions and trials are listed. 2. Click the **Setup** button for **Docker Enterprise Edition for {{ linux-dist-long }}**. 3. Copy the URL from **Copy and paste this URL to download your Edition** and save it for later use. @@ -137,20 +137,12 @@ You only need to set up the repository once, after which you can install Docker {% elsif section == "install-using-yum-repo" %} -There are currently two versions of Docker EE Engine available: +> ***NOTE:*** If you need to run Docker EE 2.0, please see the following instructions: +> * [18.03](https://docs.docker.com/v18.03/ee/supported-platforms/) - Older Docker EE Engine only release +> * [17.06](https://docs.docker.com/v17.06/engine/installation/) - Docker Enterprise Edition 2.0 (Docker Engine, +> UCP, and DTR). -* 18.03 - Use this version if you're only running Docker EE Engine. -* 17.06 - Use this version if you're using Docker Enterprise Edition 2.0 (Docker -Engine, UCP, and DTR). - -1. By default, Docker EE Engine 17.06 is installed. If you want to install the -18.03 version run: - - ```bash - sudo yum-config-manager --enable docker-ee-stable-18.03 - ``` - -2. Install the latest patch release, or go to the next step to install a specific version: +1. Install the latest patch release, or go to the next step to install a specific version: ```bash $ sudo yum -y install docker-ee @@ -158,27 +150,34 @@ Engine, UCP, and DTR). If prompted to accept the GPG key, verify that the fingerprint matches `{{ gpg-fingerprint }}`, and if so, accept it. -3. To install a _specific version_ of Docker EE (recommended in production), list versions and install: + +2. To install a _specific version_ of Docker EE (recommended in production), list versions and install: a. List and sort the versions available in your repo. This example sorts results by version number, highest to lowest, and is truncated: ```bash $ sudo yum list docker-ee --showduplicates | sort -r - docker-ee.x86_64 {{ site.docker_ee_version }}.ee.2-1.el7.{{ linux-dist }} docker-ee-stable-17.06 + docker-ee.x86_64 {{ site.docker_ee_version }}.ee.2-1.el7.{{ linux-dist }} docker-ee-stable-18.09 ``` The list returned depends on which repositories you enabled, and is specific to your version of {{ linux-dist-long }} (indicated by `.el7` in this example). - b. Install a specific version by its **fully qualified package name** which is the package name (`docker-ee`) plus the version string (2nd column) up to the hyphen, for example: `docker-ee-17.06.1.ee.2` + b. Install a specific version by its **fully qualified package name** which is the package name (`docker-ee`) plus the version string (2nd column) up to the hyphen, for example: `docker-ee-18.09.0` ```bash $ sudo yum -y install ``` + For example, if you want to install the 18.09 version run the following: + + ```bash + sudo yum-config-manager --enable docker-ee-stable-18.09 + ``` + Docker is installed but not started. The `docker` group is created, but no users are added to the group. -4. Start Docker: +3. Start Docker: > If using `devicemapper`, ensure it is properly configured before starting Docker, per the [storage guide](/storage/storagedriver/device-mapper-driver/){: target="_blank" class="_" }. @@ -186,7 +185,7 @@ Engine, UCP, and DTR). $ sudo systemctl start docker ``` -5. Verify that Docker EE is installed correctly by running the `hello-world` +4. Verify that Docker EE is installed correctly by running the `hello-world` image. This command downloads a test image, runs it in a container, prints an informational message, and exits: diff --git a/_includes/footer.html b/_includes/footer.html index 3f929ffe8ae..9afab2104fa 100644 --- a/_includes/footer.html +++ b/_includes/footer.html @@ -39,8 +39,7 @@
  • Community Edition
  • Enterprise Edition
  • Docker Datacenter
  • -
  • Docker Cloud
  • -
  • Docker Store
  • +
  • Docker Hub
  • diff --git a/_includes/global-header.html b/_includes/global-header.html index cf4dcbd7648..b6aaf943846 100644 --- a/_includes/global-header.html +++ b/_includes/global-header.html @@ -33,8 +33,8 @@
  • Docs
  • Community
  • -
  • Create Docker ID
  • -
  • Sign In
  • +
  • Create Docker ID
  • +
  • Sign In
  • diff --git a/_includes/install-script.md b/_includes/install-script.md index 08e24fbf637..80014f274d1 100644 --- a/_includes/install-script.md +++ b/_includes/install-script.md @@ -55,8 +55,8 @@ Remember to log out and back in for this to take effect! > **Warning**: > -> Adding a user to the "docker" group grants the ability to run containers -> which can be used to obtain root privileges on the docker host. Refer to +> Adding a user to the "docker" group grants them the ability to run containers +> which can be used to obtain root privileges on the Docker host. Refer to > [Docker Daemon Attack Surface](https://docs.docker.com/engine/security/security/#docker-daemon-attack-surface) > for more information. {:.warning} diff --git a/_samples/boilerplate.txt b/_samples/boilerplate.txt index 9366faf6f44..cab6bdcba48 100644 --- a/_samples/boilerplate.txt +++ b/_samples/boilerplate.txt @@ -2,7 +2,7 @@ > > This content is imported from > [the official Docker Library docs](https://github.com/docker-library/docs/tree/master/{{ page.repo}}/), -> and is provided by the original uploader. You can view the Docker Store page for this image at -> [https://store.docker.com/images/{{ page.repo }}](https://store.docker.com/images/{{ page.repo }}) +> and is provided by the original uploader. You can view the Docker Hub page for this image at +> [https://hub.docker.com/images/{{ page.repo }}](https://hub.docker.com/images/{{ page.repo }}) diff --git a/_scripts/fetch-upstream-resources.sh b/_scripts/fetch-upstream-resources.sh index 22569faa4d2..207fcffadea 100755 --- a/_scripts/fetch-upstream-resources.sh +++ b/_scripts/fetch-upstream-resources.sh @@ -67,9 +67,9 @@ done < <(cat ${SOURCE}/_config.yml |grep '_version:' |grep '^[a-z].*') sedi "s/{{ site.latest_stable_docker_engine_api_version }}/$latest_stable_docker_engine_api_version/g" ${SOURCE}/_data/toc.yaml # Engine stable -ENGINE_SVN_BRANCH="branches/18.03" -ENGINE_BRANCH="18.03" -ENGINE_EDGE_BRANCH="18.05" +ENGINE_SVN_BRANCH="branches/18.09" +ENGINE_BRANCH="18.09" +ENGINE_EDGE_BRANCH="18.09" # Distribution DISTRIBUTION_SVN_BRANCH="branches/release/2.6" @@ -147,6 +147,8 @@ wget -O ${SOURCE}/engine/api/v1.34/swagger.yaml https://raw.githubusercontent.co wget -O ${SOURCE}/engine/api/v1.35/swagger.yaml https://raw.githubusercontent.com/docker/docker-ce/17.12/components/engine/api/swagger.yaml || (echo "Failed 1.35 swagger download or the 1.35 directory doesn't exist" && exit -1) wget -O ${SOURCE}/engine/api/v1.36/swagger.yaml https://raw.githubusercontent.com/docker/docker-ce/18.02/components/engine/api/swagger.yaml || (echo "Failed 1.36 swagger download or the 1.36 directory doesn't exist" && exit -1) wget -O ${SOURCE}/engine/api/v1.37/swagger.yaml https://raw.githubusercontent.com/docker/docker-ce/18.03/components/engine/api/swagger.yaml || (echo "Failed 1.37 swagger download or the 1.37 directory doesn't exist" && exit -1) +wget -O ${SOURCE}/engine/api/v1.38/swagger.yaml https://raw.githubusercontent.com/docker/docker-ce/18.06/components/engine/api/swagger.yaml || (echo "Failed 1.38 swagger download or the 1.38 directory doesn't exist" && exit -1) +wget -O ${SOURCE}/engine/api/v1.39/swagger.yaml https://raw.githubusercontent.com/docker/docker-ce/18.09/components/engine/api/swagger.yaml || (echo "Failed 1.39 swagger download or the 1.39 directory doesn't exist" && exit -1) # Get dockerd.md for stable and edge, from upstream wget -O ${SOURCE}/engine/reference/commandline/dockerd.md https://raw.githubusercontent.com/docker/docker-ce/"$ENGINE_BRANCH"/components/cli/docs/reference/commandline/dockerd.md || (echo "Failed to fetch stable dockerd.md" && exit -1) diff --git a/_scripts/make-archive-branch.sh b/_scripts/make-archive-branch.sh index 31d666f5b31..7ab787292ee 100755 --- a/_scripts/make-archive-branch.sh +++ b/_scripts/make-archive-branch.sh @@ -85,9 +85,7 @@ bash _scripts/fetch-upstream-resources.sh -l # Currently, this is: # /samples/ # /docker-id/ -# /docker-cloud/ # /docker-hub/ -# /docker-store/ # These rely on _layout/archive-redirect.html only_live_contents=("samples" "docker-id" "docker-cloud" "docker-hub" "docker-store") @@ -145,5 +143,3 @@ echo " and get back to master, run the following:" echo echo " git reset --hard; git clean -fd; git checkout master; git branch -D v$version" echo - - diff --git a/_scss/_layout.scss b/_scss/_layout.scss index 5515605c207..b1894da2d66 100755 --- a/_scss/_layout.scss +++ b/_scss/_layout.scss @@ -185,6 +185,12 @@ section.section { padding-top: 20px; padding-bottom: 20px; } +/***Swagger***/ + +.swagger-section { + padding-top: 2rem; +} + /* * * global footer *********************************************************************** diff --git a/_scss/_navigation.scss b/_scss/_navigation.scss index 3047e1a4e1a..b2dceace9a1 100755 --- a/_scss/_navigation.scss +++ b/_scss/_navigation.scss @@ -155,6 +155,12 @@ padding: 0 20px 20px 0; } +/* pointer for collapsed sidebar list items */ + +.collapsed +{ + cursor:pointer; +} /* * @@ -372,3 +378,5 @@ input:checked+.slider:before { float: left; margin: 2px 0 0; } + + diff --git a/apidocs/cloud-api-source/.dockerignore b/apidocs/cloud-api-source/.dockerignore deleted file mode 100644 index 567609b1234..00000000000 --- a/apidocs/cloud-api-source/.dockerignore +++ /dev/null @@ -1 +0,0 @@ -build/ diff --git a/apidocs/cloud-api-source/.gitignore b/apidocs/cloud-api-source/.gitignore deleted file mode 100644 index 090a1f02dfe..00000000000 --- a/apidocs/cloud-api-source/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -.idea -.DS_Store diff --git a/apidocs/cloud-api-source/Dockerfile b/apidocs/cloud-api-source/Dockerfile deleted file mode 100644 index 9bd11f37789..00000000000 --- a/apidocs/cloud-api-source/Dockerfile +++ /dev/null @@ -1,15 +0,0 @@ -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/apidocs/cloud-api-source/Gemfile b/apidocs/cloud-api-source/Gemfile deleted file mode 100644 index 0933b9d6839..00000000000 --- a/apidocs/cloud-api-source/Gemfile +++ /dev/null @@ -1,12 +0,0 @@ -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/apidocs/cloud-api-source/Gemfile.lock b/apidocs/cloud-api-source/Gemfile.lock index fff5ee10cb3..98cb65030ad 100644 --- a/apidocs/cloud-api-source/Gemfile.lock +++ b/apidocs/cloud-api-source/Gemfile.lock @@ -90,7 +90,7 @@ GEM tilt (~> 1.4.1) padrino-support (0.12.5) activesupport (>= 3.1) - rack (1.6.4) + rack (1.6.11) rack-test (0.6.3) rack (>= 1.0) rake (10.4.2) diff --git a/apidocs/cloud-api-source/LICENSE b/apidocs/cloud-api-source/LICENSE deleted file mode 100644 index 5ceddf59f68..00000000000 --- a/apidocs/cloud-api-source/LICENSE +++ /dev/null @@ -1,13 +0,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. \ No newline at end of file diff --git a/apidocs/cloud-api-source/Makefile b/apidocs/cloud-api-source/Makefile deleted file mode 100644 index b3119bb4869..00000000000 --- a/apidocs/cloud-api-source/Makefile +++ /dev/null @@ -1,28 +0,0 @@ -.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 ../ - rm -r ../docker-cloud - mv ../build ../docker-cloud - cp ../docker-cloud/index.html ../layouts/single.html - # defuse text that looks like a go template - # commenting out until we know that we're not using Hugo anywhere & can remove -# grep -rl '{ {' ../docker-cloud/* | xargs sed -i~ "s/{ {/{ {/g" - #rm source/includes/node.md~ - #rm source/includes/stack.md~ - #rm ../source/index.html~ - #rm ../source/layouts/single.html~ - docker rm $(CONTAINER_NAME) diff --git a/apidocs/cloud-api-source/README.md b/apidocs/cloud-api-source/README.md deleted file mode 100644 index c636ecdb97c..00000000000 --- a/apidocs/cloud-api-source/README.md +++ /dev/null @@ -1,29 +0,0 @@ -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, send us a pull request! - - -## Usage - -To run it locally: - -```none -$ git clone --recursive https://github.com/docker/docker.github.io.git -$ make release -``` - -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 committed to this repository. - -After merging all PR's, run `make release`. This will place the updated HTML -into the `apidocs/docker-cloud` directory. - -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/apidocs/cloud-api-source/Rakefile b/apidocs/cloud-api-source/Rakefile deleted file mode 100644 index 6a952e1e914..00000000000 --- a/apidocs/cloud-api-source/Rakefile +++ /dev/null @@ -1,6 +0,0 @@ -require 'middleman-gh-pages' -require 'rake/clean' - -CLOBBER.include('build') - -task :default => [:build] diff --git a/apidocs/cloud-api-source/config.rb b/apidocs/cloud-api-source/config.rb deleted file mode 100644 index 43bceaa5a43..00000000000 --- a/apidocs/cloud-api-source/config.rb +++ /dev/null @@ -1,38 +0,0 @@ -# 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/apidocs/cloud-api-source/docker-compose.yml b/apidocs/cloud-api-source/docker-compose.yml deleted file mode 100644 index dc405f6e7f6..00000000000 --- a/apidocs/cloud-api-source/docker-compose.yml +++ /dev/null @@ -1,4 +0,0 @@ -apidocs: - image: tutum/api-docs:latest - ports: - - "4567:4567" diff --git a/apidocs/cloud-api-source/font-selection.json b/apidocs/cloud-api-source/font-selection.json deleted file mode 100644 index 5e78f5d8621..00000000000 --- a/apidocs/cloud-api-source/font-selection.json +++ /dev/null @@ -1,148 +0,0 @@ -{ - "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/apidocs/cloud-api-source/publish.sh b/apidocs/cloud-api-source/publish.sh deleted file mode 100644 index 006e2da06ba..00000000000 --- a/apidocs/cloud-api-source/publish.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/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/apidocs/cloud-api-source/source/fonts/slate.eot b/apidocs/cloud-api-source/source/fonts/slate.eot deleted file mode 100644 index 13c4839a197..00000000000 Binary files a/apidocs/cloud-api-source/source/fonts/slate.eot and /dev/null differ diff --git a/apidocs/cloud-api-source/source/fonts/slate.svg b/apidocs/cloud-api-source/source/fonts/slate.svg deleted file mode 100644 index 5f34982306b..00000000000 --- a/apidocs/cloud-api-source/source/fonts/slate.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - -Generated by IcoMoon - - - - - - - - - - diff --git a/apidocs/cloud-api-source/source/fonts/slate.ttf b/apidocs/cloud-api-source/source/fonts/slate.ttf deleted file mode 100644 index ace9a46a7e1..00000000000 Binary files a/apidocs/cloud-api-source/source/fonts/slate.ttf and /dev/null differ diff --git a/apidocs/cloud-api-source/source/fonts/slate.woff b/apidocs/cloud-api-source/source/fonts/slate.woff deleted file mode 100644 index 1e72e0ee001..00000000000 Binary files a/apidocs/cloud-api-source/source/fonts/slate.woff and /dev/null differ diff --git a/apidocs/cloud-api-source/source/fonts/slate.woff2 b/apidocs/cloud-api-source/source/fonts/slate.woff2 deleted file mode 100644 index 7c585a72737..00000000000 Binary files a/apidocs/cloud-api-source/source/fonts/slate.woff2 and /dev/null differ diff --git a/apidocs/cloud-api-source/source/images/logo.png b/apidocs/cloud-api-source/source/images/logo.png deleted file mode 100644 index 407d4cc3bf0..00000000000 Binary files a/apidocs/cloud-api-source/source/images/logo.png and /dev/null differ diff --git a/apidocs/cloud-api-source/source/images/navbar.png b/apidocs/cloud-api-source/source/images/navbar.png deleted file mode 100644 index df38e90d87e..00000000000 Binary files a/apidocs/cloud-api-source/source/images/navbar.png and /dev/null differ diff --git a/apidocs/cloud-api-source/source/includes/_errors.md b/apidocs/cloud-api-source/source/includes/_errors.md deleted file mode 100644 index 52615c126d3..00000000000 --- a/apidocs/cloud-api-source/source/includes/_errors.md +++ /dev/null @@ -1,28 +0,0 @@ -# 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. 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. Try again later. -504 | Gateway Timeout -- Our API servers are at full capacity. Try again later. \ No newline at end of file diff --git a/apidocs/cloud-api-source/source/includes/action.md b/apidocs/cloud-api-source/source/includes/action.md deleted file mode 100644 index fcbae2f329f..00000000000 --- a/apidocs/cloud-api-source/source/includes/action.md +++ /dev/null @@ -1,353 +0,0 @@ -# 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/user_namespace/cluster/eea638f4-b77a-4183-b241-22dbd7866f22/", - "path": "/api/infra/v1/user_namespace/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": "user_namespace", - "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 appropriate 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 | The user authenticated in the request that created the action | -| 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/apidocs/cloud-api-source/source/includes/availabilityzone.md b/apidocs/cloud-api-source/source/includes/availabilityzone.md deleted file mode 100644 index 26e96960a9a..00000000000 --- a/apidocs/cloud-api-source/source/includes/availabilityzone.md +++ /dev/null @@ -1,120 +0,0 @@ -# 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/apidocs/cloud-api-source/source/includes/container.md b/apidocs/cloud-api-source/source/includes/container.md deleted file mode 100644 index 0777feb23f2..00000000000 --- a/apidocs/cloud-api-source/source/includes/container.md +++ /dev/null @@ -1,827 +0,0 @@ -# Containers - -## Container - -> Example - -```json -{ - "autodestroy": "OFF", - "autorestart": "OFF", - "bindings": [ - { - "volume": "/api/infra/v1/user_namespace/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/user_namespace/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/user_namespace/container/c1dd4e1e-1356-411c-8613-e15146633640/", - "name": "DB_1", - "to_container": "/api/app/v1/user_namespace/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/user_namespace/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/user_namespace/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/user_namespace/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. - -This is a [namespaced endpoint](#namespaced-endpoints). - -### 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 assigned 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](/engine/reference/run/#network-settings)) -pid | PID (Process) Namespace mode for the container ([more information](/engine/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, such as `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 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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]container/(uuid)/redeploy/` - -### Path Parameters - -Parameter | Description ---------- | ----------- -uuid | The UUID of the container to redeploy - -### Query Parameters - -Parameter | Description ---------- | ----------- -reuse_volumes | Whether 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/[optional_namespace/]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/[optional_namespace/]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/apidocs/cloud-api-source/source/includes/dockercloud-events.md b/apidocs/cloud-api-source/source/includes/dockercloud-events.md deleted file mode 100644 index b611f9e77ca..00000000000 --- a/apidocs/cloud-api-source/source/includes/dockercloud-events.md +++ /dev/null @@ -1,135 +0,0 @@ -# Docker Cloud Events - -## Docker Cloud Event - -> Example - -```json -{ - "type": "action", - "action": "update", - "parents": [ - "/api/app/v1/user_namespace/container/0b0e3538-88df-4f07-9aed-3a3cc4175076/" - ], - "resource_uri": "/api/app/v1/user_namespace/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 - -This is a [namespaced endpoint](#namespaced-endpoints). - -### 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. Possible 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" - -// Listens for container events only -myFilter := dockercloud.NewStreamFilter(&dockercloud.EventFilter{Type: "container"}) - -stream := dockercloud.NewStream(myFilter) - -if err := stream.Connect(); err == nil { - go stream.RunForever() -} else { - log.Print("Connect err: " + err.Error()) -} - -for { - select { - case event := <-stream.MessageChan: - log.Println(event) - case err := <-stream.ErrorChan: - 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/[optional_namespace/]events/` - -### Query Parameters - -Parameter | Description ---------- | ----------- -type | Filter by type -object | Filter by object resource URI -parent | Filter by object parents diff --git a/apidocs/cloud-api-source/source/includes/node.md b/apidocs/cloud-api-source/source/includes/node.md deleted file mode 100644 index 71293c0e62f..00000000000 --- a/apidocs/cloud-api-source/source/includes/node.md +++ /dev/null @@ -1,370 +0,0 @@ -# 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/user_namespace/nodecluster/d787a4b7-d525-4061-97a0-f423e8f1d229/", - "node_type": "/api/infra/v1/user_namespace/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/user_namespace/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. - -This is a [namespaced endpoint](#namespaced-endpoints). - -### 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. - - -## 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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]node/(uuid)/` - -### Path Parameters - -Parameter | Description ---------- | ----------- -uuid | The UUID of the node to terminate diff --git a/apidocs/cloud-api-source/source/includes/nodecluster.md b/apidocs/cloud-api-source/source/includes/nodecluster.md deleted file mode 100644 index e3ed9c23086..00000000000 --- a/apidocs/cloud-api-source/source/includes/nodecluster.md +++ /dev/null @@ -1,412 +0,0 @@ -# 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/user_namespace/node/75d20367-0948-4f10-8ba4-ffb4d16ed3c6/" - ], - "region": "/api/infra/v1/region/aws/us-east-1/", - "resource_uri": "/api/infra/v1/user_namespace/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. - -This is a [namespaced endpoint](#namespaced-endpoints). - - -### 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 identifiers 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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]nodecluster/(uuid)/` - -### Path Parameters - -Parameter | Description ---------- | ----------- -uuid | The UUID of the node cluster to terminate diff --git a/apidocs/cloud-api-source/source/includes/nodetype.md b/apidocs/cloud-api-source/source/includes/nodetype.md deleted file mode 100644 index fec5c7683af..00000000000 --- a/apidocs/cloud-api-source/source/includes/nodetype.md +++ /dev/null @@ -1,137 +0,0 @@ -# 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/apidocs/cloud-api-source/source/includes/provider.md b/apidocs/cloud-api-source/source/includes/provider.md deleted file mode 100644 index 44e63ab3377..00000000000 --- a/apidocs/cloud-api-source/source/includes/provider.md +++ /dev/null @@ -1,132 +0,0 @@ -# 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/apidocs/cloud-api-source/source/includes/region.md b/apidocs/cloud-api-source/source/includes/region.md deleted file mode 100644 index 4bfd58b3092..00000000000 --- a/apidocs/cloud-api-source/source/includes/region.md +++ /dev/null @@ -1,137 +0,0 @@ -# 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/apidocs/cloud-api-source/source/includes/registry.md b/apidocs/cloud-api-source/source/includes/registry.md deleted file mode 100644 index b84c304ff05..00000000000 --- a/apidocs/cloud-api-source/source/includes/registry.md +++ /dev/null @@ -1,87 +0,0 @@ -# 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/user_namespace/registry/registry-1.docker.io/" -} -``` - -Represents a registry where repositories are hosted. - -This is a [namespaced endpoint](#namespaced-endpoints). - - -### 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, such as `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/[optional_namespace/]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/[optional_namespace/]registry/(host)/` - -### Path Parameters - -Parameter | Description ---------- | ----------- -host | The host of the registry to retrieve diff --git a/apidocs/cloud-api-source/source/includes/repository.md b/apidocs/cloud-api-source/source/includes/repository.md deleted file mode 100644 index cf96964ffe2..00000000000 --- a/apidocs/cloud-api-source/source/includes/repository.md +++ /dev/null @@ -1,275 +0,0 @@ -# External Repositories - -## External Repository - -> Example - -```json -{ - "in_use": false, - "name": "my.registry.com/myrepo", - "registry": "/api/repo/v1/user_namespace/registry/my.registry.com/", - "resource_uri": "/api/repo/v1/user_namespace/repository/my.registry.com/myrepo/", -} -``` - -The `repository` endpoint is used to add and remove existing repositories on third party registries to be used in deployments and builds. - -This is a [namespaced endpoint](#namespaced-endpoints). - -### Attributes - -Attribute | Description ---------- | ----------- -resource_uri | A unique API endpoint that represents the repository -name | Name of the repository, such as `my.registry.com/myrepo` -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/[optional_namespace/]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/[optional_namespace/]repository/` - -### JSON Parameters - -Parameter | Description ---------- | ----------- -name | Name of the repository, such as 'my.registry.com/myrepo' -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/[optional_namespace/]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/[optional_namespace/]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 doesn'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/[optional_namespace/]repository/` - -### Path Parameters - -Parameter | Description ---------- | ----------- -name | The name of the external repository to remove diff --git a/apidocs/cloud-api-source/source/includes/service.md b/apidocs/cloud-api-source/source/includes/service.md deleted file mode 100644 index 28f9e6761a3..00000000000 --- a/apidocs/cloud-api-source/source/includes/service.md +++ /dev/null @@ -1,935 +0,0 @@ -# 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/user_namespace/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/user_namespace/container/6f8ee454-9dc3-4387-80c3-57aac1be3cc6/", - "/api/app/v1/user_namespace/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/user_namespace/service/adeebc1b-1b81-4af0-b8f2-cefffc69d7fb/" - }, - "linked_from_service": [], - "linked_to_service": [ - { - "from_service": "/api/app/v1/user_namespace/service/09cbcf8d-a727-40d9-b420-c8e18b7fa55b/", - "name": "DB", - "to_service": "/api/app/v1/user_namespace/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/user_namespace/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/user_namespace/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. - -This is a [namespaced endpoint](#namespaced-endpoints). - -### 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](/engine/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 can't 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/[optional_namespace/]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/[optional_namespace/]service/` - -### JSON Parameters - -Parameter | Description ---------- | ----------- -image | (required) The image used to deploy this service in docker format, such as `tutum/hello-world` -name | (optional) A human-readable name for the service, such as `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 mounts, 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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]service/(uuid)/redeploy/` - -### Path Parameters - -Parameter | Description ---------- | ----------- -uuid | The UUID of the service to redeploy - -### Query Parameters - -Parameter | Description ---------- | ----------- -reuse_volumes | Whether 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/[optional_namespace/]service/(uuid)/` - -### Path Parameters - -Parameter | Description ---------- | ----------- -uuid | The UUID of the service to terminate diff --git a/apidocs/cloud-api-source/source/includes/stack.md b/apidocs/cloud-api-source/source/includes/stack.md deleted file mode 100644 index b25708a7824..00000000000 --- a/apidocs/cloud-api-source/source/includes/stack.md +++ /dev/null @@ -1,572 +0,0 @@ -# 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/user_namespace/stack/7fe7ec85-58be-4904-81da-de2219098d7c/", - "services": [ - "/api/app/v1/user_namespace/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. - -This is a [namespaced endpoint](#namespaced-endpoints). - -### 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/[optional_namespace/]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. The JSON syntax is abstracted to use -[Stack YAML files](/docker-cloud/apps/stack-yaml-reference/) in both -the Docker Cloud CLI and our UI, - -### Endpoint Type - -Available in Docker Cloud's **REST API** - -### HTTP Request - -`POST /api/app/v1/[optional_namespace/]stack/` - -### JSON Parameters - -Parameter | Description ---------- | ----------- -name | (required) A human-readable name for the stack, such as `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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]stack/(uuid)/redeploy/` - -### Path Parameters - -Parameter | Description ---------- | ----------- -uuid | The UUID of the stack to redeploy - -### Query Parameters - -Parameter | Description ---------- | ----------- -reuse_volumes | Whether 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/[optional_namespace/]stack/(uuid)/` - -### Path Parameters - -Parameter | Description ---------- | ----------- -uuid | The UUID of the stack to terminate diff --git a/apidocs/cloud-api-source/source/includes/tag.md b/apidocs/cloud-api-source/source/includes/tag.md deleted file mode 100644 index ccd334ede5b..00000000000 --- a/apidocs/cloud-api-source/source/includes/tag.md +++ /dev/null @@ -1,52 +0,0 @@ -# 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/apidocs/cloud-api-source/source/includes/triggers.md b/apidocs/cloud-api-source/source/includes/triggers.md deleted file mode 100644 index 768eb9ec87b..00000000000 --- a/apidocs/cloud-api-source/source/includes/triggers.md +++ /dev/null @@ -1,301 +0,0 @@ -# Triggers - -## Service triggers - -> Example - -```json -{ - "url": "/api/app/v1/user_namespace/service/82d4a246-52d8-468d-903d-9da9ef05ff28/trigger/0224815a-c156-44e4-92d7-997c69354438/call/", - "operation": "REDEPLOY", - "name": "docker_trigger", - "resource_uri": "/api/app/v1/user_namespace/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. - -This is a [namespaced endpoint](#namespaced-endpoints). - - -### 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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/apidocs/cloud-api-source/source/index.md b/apidocs/cloud-api-source/source/index.md deleted file mode 100644 index 857c6a0dca6..00000000000 --- a/apidocs/cloud-api-source/source/index.md +++ /dev/null @@ -1,170 +0,0 @@ ---- -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/moby/mobycloud-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 - -To make requests to the Docker Cloud API, you need an ApiKey for your account. -To get one: - -1. Log into Docker Cloud. -2. Click on the menu on the upper right corner of the screen. -3. Select **Account info**. -4. 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` - -### Namespaced endpoints - -Endpoints that are labeled as "namespaced" allow the users to operate over -different namespaces, for example over an individual user namespace, or the -namespace of an organization the user is a member of. A namespace identifies the -owner of the resource. - -The namespace is optional. If left blank, it defaults to the authenticated user -in the request. The namespace is set before the resource in the URL schema: -`https://cloud.docker.com/api///(optional_namespace/)/` - -Examples: - -- The user `exampleuser` wants to operate on the node cluster list endpoint in their own namespace. They can use either of the following urls: - - https://cloud.docker.com/api/infra/v1/nodecluster/ (namespace omitted, so will use the user authenticated in the request) - - https://cloud.docker.com/api/infra/v1/exampleuser/nodecluster/ -- The user wants to operate on the node cluster list endpoint in an organization called `exampleorg` (which they have permission to see): - - https://cloud.docker.com/api/infra/v1/exampleorg/nodecluster/ - -### Namespaced endpoints in the docker-cloud CLI - -If you are using namespaces with the `docker-cloud` CLI, set them by changing -the value of the `DOCKERCLOUD_NAMESPACE` environment variable. You can either -set this globally, or specify it before each CLI command. To learn more, see the -[Docker Cloud CLI README](https://github.com/moby/mobycloud-cli#namespace). - -## 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/apidocs/cloud-api-source/source/javascripts/all.js b/apidocs/cloud-api-source/source/javascripts/all.js deleted file mode 100644 index ffaa9b01307..00000000000 --- a/apidocs/cloud-api-source/source/javascripts/all.js +++ /dev/null @@ -1,4 +0,0 @@ -//= require ./lib/_energize -//= require ./app/_lang -//= require ./app/_search -//= require ./app/_toc diff --git a/apidocs/cloud-api-source/source/javascripts/all_nosearch.js b/apidocs/cloud-api-source/source/javascripts/all_nosearch.js deleted file mode 100644 index 818bc4e5095..00000000000 --- a/apidocs/cloud-api-source/source/javascripts/all_nosearch.js +++ /dev/null @@ -1,3 +0,0 @@ -//= require ./lib/_energize -//= require ./app/_lang -//= require ./app/_toc diff --git a/apidocs/cloud-api-source/source/javascripts/app/_lang.js b/apidocs/cloud-api-source/source/javascripts/app/_lang.js deleted file mode 100644 index 1a124bb68ae..00000000000 --- a/apidocs/cloud-api-source/source/javascripts/app/_lang.js +++ /dev/null @@ -1,162 +0,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 (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/apidocs/cloud-api-source/source/javascripts/app/_search.js b/apidocs/cloud-api-source/source/javascripts/app/_search.js deleted file mode 100644 index 91f38a04edf..00000000000 --- a/apidocs/cloud-api-source/source/javascripts/app/_search.js +++ /dev/null @@ -1,74 +0,0 @@ -//= 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/apidocs/cloud-api-source/source/javascripts/app/_toc.js b/apidocs/cloud-api-source/source/javascripts/app/_toc.js deleted file mode 100644 index bc2aa3e1f11..00000000000 --- a/apidocs/cloud-api-source/source/javascripts/app/_toc.js +++ /dev/null @@ -1,55 +0,0 @@ -//= 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/apidocs/cloud-api-source/source/javascripts/lib/_energize.js b/apidocs/cloud-api-source/source/javascripts/lib/_energize.js deleted file mode 100644 index 6798f3c03f3..00000000000 --- a/apidocs/cloud-api-source/source/javascripts/lib/_energize.js +++ /dev/null @@ -1,169 +0,0 @@ -/** - * 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/apidocs/cloud-api-source/source/javascripts/lib/_imagesloaded.min.js b/apidocs/cloud-api-source/source/javascripts/lib/_imagesloaded.min.js deleted file mode 100644 index d66f658937d..00000000000 --- a/apidocs/cloud-api-source/source/javascripts/lib/_imagesloaded.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * 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/apidocs/cloud-api-source/source/javascripts/lib/_jquery.highlight.js b/apidocs/cloud-api-source/source/javascripts/lib/_jquery.highlight.js deleted file mode 100644 index 9b9d3d8e4cf..00000000000 --- a/apidocs/cloud-api-source/source/javascripts/lib/_jquery.highlight.js +++ /dev/null @@ -1,108 +0,0 @@ -/* - * 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 occurrence 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 occurrence 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/apidocs/cloud-api-source/source/javascripts/lib/_jquery.tocify.js b/apidocs/cloud-api-source/source/javascripts/lib/_jquery.tocify.js deleted file mode 100644 index 037366cbeda..00000000000 --- a/apidocs/cloud-api-source/source/javascripts/lib/_jquery.tocify.js +++ /dev/null @@ -1,1042 +0,0 @@ -/* 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 = $("
      ", { - "id": headerClassName + index, - "class": headerClassName - }). - - // Appends a top level list item HTML element to the previously created HTML header - append(self._nestElements($(this), index)); - - // Add the created unordered list element to the HTML element calling the plugin - self.element.append(ul); - - // Finds all of the HTML tags between the header and subheader elements - $(this).nextUntil(this.nodeName.toLowerCase()).each(function() { - - // If there are no nested subheader elemements - if($(this).find(self.options.selectors).length === 0) { - - // Loops through all of the subheader elements - $(this).filter(self.options.selectors).each(function() { - - //If the element matches the ignoreSelector then we skip it - if($(this).is(ignoreSelector)) { - return; - } - - self._appendSubheaders.call(this, self, ul); - - }); - - } - - // If there are nested subheader elements - else { - - // Loops through all of the subheader elements - $(this).find(self.options.selectors).each(function() { - - //If the element matches the ignoreSelector then we skip it - if($(this).is(ignoreSelector)) { - return; - } - - self._appendSubheaders.call(this, self, ul); - - }); - - } - - }); - - }); - - }, - - _setActiveElement: function(pageload) { - - var self = this, - - hash = window.location.hash.substring(1), - - elem = self.element.find("li[data-unique='" + hash + "']"); - - if(hash.length) { - - // Removes highlighting from all of the list item's - self.element.find("." + self.focusClass).removeClass(self.focusClass); - - // Highlights the current list item that was clicked - elem.addClass(self.focusClass); - - // If the showAndHide option is true - if(self.options.showAndHide) { - - // Triggers the click event on the currently focused TOC item - elem.click(); - - } - - } - - else { - - // Removes highlighting from all of the list item's - self.element.find("." + self.focusClass).removeClass(self.focusClass); - - if(!hash.length && pageload && self.options.highlightDefault) { - - // Highlights the first TOC item if no other items are highlighted - self.element.find(itemClass).first().addClass(self.focusClass); - - } - - } - - return self; - - }, - - // _nestElements - // ------------- - // Helps create the table of contents list by appending nested list items - _nestElements: function(self, index) { - - var arr, item, hashValue; - - arr = $.grep(this.items, function (item) { - - return item === self.text(); - - }); - - // If there is already a duplicate TOC item - if(arr.length) { - - // Adds the current TOC item text and index (for slight randomization) to the internal array - this.items.push(self.text() + index); - - } - - // If there not a duplicate TOC item - else { - - // Adds the current TOC item text to the internal array - this.items.push(self.text()); - - } - - hashValue = this._generateHashValue(arr, self, index); - - // ADDED BY ROBERT - // actually add the hash value to the element's id - // self.attr("id", "link-" + hashValue); - - // Appends a list item HTML element to the last unordered list HTML element found within the HTML element calling the plugin - item = $("
    • ", { - - // Sets a common class name to the list item - "class": itemClassName, - - "data-unique": hashValue - - }).append($("", { - - "text": self.text() - - })); - - // Adds an HTML anchor tag before the currently traversed HTML element - self.before($("
      ", { - - // Sets a name attribute on the anchor tag to the text of the currently traversed HTML element (also making sure that all whitespace is replaced with an underscore) - "name": hashValue, - - "data-unique": hashValue - - })); - - return item; - - }, - - // _generateHashValue - // ------------------ - // Generates the hash value that will be used to refer to each item. - _generateHashValue: function(arr, self, index) { - - var hashValue = "", - hashGeneratorOption = this.options.hashGenerator; - - if (hashGeneratorOption === "pretty") { - // remove weird characters - - - // prettify the text - hashValue = self.text().toLowerCase().replace(/\s/g, "-"); - - // ADDED BY ROBERT - // remove weird characters - hashValue = hashValue.replace(/[^\x00-\x7F]/g, ""); - - // fix double hyphens - while (hashValue.indexOf("--") > -1) { - hashValue = hashValue.replace(/--/g, "-"); - } - - // fix colon-space instances - while (hashValue.indexOf(":-") > -1) { - hashValue = hashValue.replace(/:-/g, "-"); - } - - } else if (typeof hashGeneratorOption === "function") { - - // call the function - hashValue = hashGeneratorOption(self.text(), self); - - } else { - - // compact - the default - hashValue = self.text().replace(/\s/g, ""); - - } - - // add the index if we need to - if (arr.length) { hashValue += ""+index; } - - // return the value - return hashValue; - - }, - - // _appendElements - // --------------- - // Helps create the table of contents list by appending subheader elements - - _appendSubheaders: function(self, ul) { - - // The current element index - var index = $(this).index(self.options.selectors), - - // Finds the previous header DOM element - previousHeader = $(self.options.selectors).eq(index - 1), - - currentTagName = +$(this).prop("tagName").charAt(1), - - previousTagName = +previousHeader.prop("tagName").charAt(1), - - lastSubheader; - - // If the current header DOM element is smaller than the previous header DOM element or the first subheader - if(currentTagName < previousTagName) { - - // Selects the last unordered list HTML found within the HTML element calling the plugin - self.element.find(subheaderClass + "[data-tag=" + currentTagName + "]").last().append(self._nestElements($(this), index)); - - } - - // If the current header DOM element is the same type of header(eg. h4) as the previous header DOM element - else if(currentTagName === previousTagName) { - - ul.find(itemClass).last().after(self._nestElements($(this), index)); - - } - - else { - - // Selects the last unordered list HTML found within the HTML element calling the plugin - ul.find(itemClass).last(). - - // Appends an unorderedList HTML element to the dynamic `unorderedList` variable and sets a common class name - after($("
        ", { - - "class": subheaderClassName, - - "data-tag": currentTagName - - })).next(subheaderClass). - - // Appends a list item HTML element to the last unordered list HTML element found within the HTML element calling the plugin - append(self._nestElements($(this), index)); - } - - }, - - // _setEventHandlers - // ---------------- - // Adds jQuery event handlers to the newly generated table of contents - _setEventHandlers: function() { - - // _Local variables_ - - // Stores the plugin context in the self variable - var self = this, - - // Instantiates a new variable that will be used to hold a specific element's context - $self, - - // Instantiates a new variable that will be used to determine the smoothScroll animation time duration - duration; - - // Event delegation that looks for any clicks on list item elements inside of the HTML element calling the plugin - this.element.on("click.tocify", "li", function(event) { - - if(self.options.history) { - - window.location.hash = $(this).attr("data-unique"); - - } - - // Removes highlighting from all of the list item's - self.element.find("." + self.focusClass).removeClass(self.focusClass); - - // Highlights the current list item that was clicked - $(this).addClass(self.focusClass); - - // If the showAndHide option is true - if(self.options.showAndHide) { - - var elem = $('li[data-unique="' + $(this).attr("data-unique") + '"]'); - - self._triggerShow(elem); - - } - - self._scrollTo($(this)); - - }); - - // Mouseenter and Mouseleave event handlers for the list item's within the HTML element calling the plugin - this.element.find("li").on({ - - // Mouseenter event handler - "mouseenter.tocify": function() { - - // Adds a hover CSS class to the current list item - $(this).addClass(self.hoverClass); - - // Makes sure the cursor is set to the pointer icon - $(this).css("cursor", "pointer"); - - }, - - // Mouseleave event handler - "mouseleave.tocify": function() { - - if(self.options.theme !== "bootstrap") { - - // Removes the hover CSS class from the current list item - $(this).removeClass(self.hoverClass); - - } - - } - }); - - // Reset height cache on scroll - - $(window).on('resize', function() { - self.calculateHeights(); - }); - - // Window scroll event handler - $(window).on("scroll.tocify", function() { - - // Once all animations on the page are complete, this callback function will be called - $("html, body").promise().done(function() { - - // Local variables - - // Stores how far the user has scrolled - var winScrollTop = $(window).scrollTop(), - - // Stores the height of the window - winHeight = $(window).height(), - - // Stores the height of the document - docHeight = $(document).height(), - - scrollHeight = $("body")[0].scrollHeight, - - // Instantiates a variable that will be used to hold a selected HTML element - elem, - - lastElem, - - lastElemOffset, - - currentElem; - - if(self.options.extendPage) { - - // If the user has scrolled to the bottom of the page and the last toc item is not focused - if((self.webkit && winScrollTop >= scrollHeight - winHeight - self.options.extendPageOffset) || (!self.webkit && winHeight + winScrollTop > docHeight - self.options.extendPageOffset)) { - - if(!$(extendPageClass).length) { - - lastElem = $('div[data-unique="' + $(itemClass).last().attr("data-unique") + '"]'); - - if(!lastElem.length) return; - - // Gets the top offset of the page header that is linked to the last toc item - lastElemOffset = lastElem.offset().top; - - // Appends a div to the bottom of the page and sets the height to the difference of the window scrollTop and the last element's position top offset - $(self.options.context).append($("
        ", { - - "class": extendPageClassName, - - "height": Math.abs(lastElemOffset - winScrollTop) + "px", - - "data-unique": extendPageClassName - - })); - - if(self.extendPageScroll) { - - currentElem = self.element.find('li.active'); - - self._scrollTo($("div[data-unique=" + currentElem.attr("data-unique") + "]")); - - } - - } - - } - - } - - // The zero timeout ensures the following code is run after the scroll events - setTimeout(function() { - - // _Local variables_ - - // Stores the distance to the closest anchor - var // Stores the index of the closest anchor - closestAnchorIdx = null, - anchorText; - - // if never calculated before, calculate and cache the heights - if (self.cachedHeights.length == 0) { - self.calculateHeights(); - } - - var scrollTop = $(window).scrollTop(); - - // Determines the index of the closest anchor - self.cachedAnchors.each(function(idx) { - if (self.cachedHeights[idx] - scrollTop < 0) { - closestAnchorIdx = idx; - } else { - return false; - } - }); - - anchorText = $(self.cachedAnchors[closestAnchorIdx]).attr("data-unique"); - - // Stores the list item HTML element that corresponds to the currently traversed anchor tag - elem = $('li[data-unique="' + anchorText + '"]'); - - // If the `highlightOnScroll` option is true and a next element is found - if(self.options.highlightOnScroll && elem.length && !elem.hasClass(self.focusClass)) { - - // Removes highlighting from all of the list item's - self.element.find("." + self.focusClass).removeClass(self.focusClass); - - // Highlights the corresponding list item - elem.addClass(self.focusClass); - - // Scroll to highlighted element's header - var tocifyWrapper = self.tocifyWrapper; - var scrollToElem = $(elem).closest('.tocify-header'); - - var elementOffset = scrollToElem.offset().top, - wrapperOffset = tocifyWrapper.offset().top; - var offset = elementOffset - wrapperOffset; - - if (offset >= $(window).height()) { - var scrollPosition = offset + tocifyWrapper.scrollTop(); - tocifyWrapper.scrollTop(scrollPosition); - } else if (offset < 0) { - tocifyWrapper.scrollTop(0); - } - } - - if(self.options.scrollHistory) { - - // IF STATEMENT ADDED BY ROBERT - - if(window.location.hash !== "#" + anchorText && anchorText !== undefined) { - - if(history.replaceState) { - history.replaceState({}, "", "#" + anchorText); - // provide a fallback - } else { - scrollV = document.body.scrollTop; - scrollH = document.body.scrollLeft; - location.hash = "#" + anchorText; - document.body.scrollTop = scrollV; - document.body.scrollLeft = scrollH; - } - - } - - } - - // If the `showAndHideOnScroll` option is true - if(self.options.showAndHideOnScroll && self.options.showAndHide) { - - self._triggerShow(elem, true); - - } - - }, 0); - - }); - - }); - - }, - - // calculateHeights - // ---- - // ADDED BY ROBERT - calculateHeights: function() { - var self = this; - self.cachedHeights = []; - self.cachedAnchors = []; - var anchors = $(self.options.context).find("div[data-unique]"); - anchors.each(function(idx) { - var distance = (($(this).next().length ? $(this).next() : $(this)).offset().top - self.options.highlightOffset); - self.cachedHeights[idx] = distance; - }); - self.cachedAnchors = anchors; - }, - - // Show - // ---- - // Opens the current sub-header - show: function(elem, scroll) { - - // Stores the plugin context in the `self` variable - var self = this, - element = elem; - - // If the sub-header is not already visible - if (!elem.is(":visible")) { - - // If the current element does not have any nested subheaders, is not a header, and its parent is not visible - if(!elem.find(subheaderClass).length && !elem.parent().is(headerClass) && !elem.parent().is(":visible")) { - - // Sets the current element to all of the subheaders within the current header - elem = elem.parents(subheaderClass).add(elem); - - } - - // If the current element does not have any nested subheaders and is not a header - else if(!elem.children(subheaderClass).length && !elem.parent().is(headerClass)) { - - // Sets the current element to the closest subheader - elem = elem.closest(subheaderClass); - - } - - //Determines what jQuery effect to use - switch (self.options.showEffect) { - - //Uses `no effect` - case "none": - - elem.show(); - - break; - - //Uses the jQuery `show` special effect - case "show": - - elem.show(self.options.showEffectSpeed); - - break; - - //Uses the jQuery `slideDown` special effect - case "slideDown": - - elem.slideDown(self.options.showEffectSpeed); - - break; - - //Uses the jQuery `fadeIn` special effect - case "fadeIn": - - elem.fadeIn(self.options.showEffectSpeed); - - break; - - //If none of the above options were passed, then a `jQueryUI show effect` is expected - default: - - elem.show(); - - break; - - } - - } - - // If the current subheader parent element is a header - if(elem.parent().is(headerClass)) { - - // Hides all non-active sub-headers - self.hide($(subheaderClass).not(elem)); - - } - - // If the current subheader parent element is not a header - else { - - // Hides all non-active sub-headers - self.hide($(subheaderClass).not(elem.closest(headerClass).find(subheaderClass).not(elem.siblings()))); - - } - - // Maintains chainability - return self; - - }, - - // Hide - // ---- - // Closes the current sub-header - hide: function(elem) { - - // Stores the plugin context in the `self` variable - var self = this; - - //Determines what jQuery effect to use - switch (self.options.hideEffect) { - - // Uses `no effect` - case "none": - - elem.hide(); - - break; - - // Uses the jQuery `hide` special effect - case "hide": - - elem.hide(self.options.hideEffectSpeed); - - break; - - // Uses the jQuery `slideUp` special effect - case "slideUp": - - elem.slideUp(self.options.hideEffectSpeed); - - break; - - // Uses the jQuery `fadeOut` special effect - case "fadeOut": - - elem.fadeOut(self.options.hideEffectSpeed); - - break; - - // If none of the above options were passed, then a `jqueryUI hide effect` is expected - default: - - elem.hide(); - - break; - - } - - // Maintains chainability - return self; - }, - - // _triggerShow - // ------------ - // Determines what elements get shown on scroll and click - _triggerShow: function(elem, scroll) { - - var self = this; - - // If the current element's parent is a header element or the next element is a nested subheader element - if(elem.parent().is(headerClass) || elem.next().is(subheaderClass)) { - - // Shows the next sub-header element - self.show(elem.next(subheaderClass), scroll); - - } - - // If the current element's parent is a subheader element - else if(elem.parent().is(subheaderClass)) { - - // Shows the parent sub-header element - self.show(elem.parent(), scroll); - - } - - // Maintains chainability - return self; - - }, - - // _addCSSClasses - // -------------- - // Adds CSS classes to the newly generated table of contents HTML - _addCSSClasses: function() { - - // If the user wants a jqueryUI theme - if(this.options.theme === "jqueryui") { - - this.focusClass = "ui-state-default"; - - this.hoverClass = "ui-state-hover"; - - //Adds the default styling to the dropdown list - this.element.addClass("ui-widget").find(".toc-title").addClass("ui-widget-header").end().find("li").addClass("ui-widget-content"); - - } - - // If the user wants a twitterBootstrap theme - else if(this.options.theme === "bootstrap") { - - this.element.find(headerClass + "," + subheaderClass).addClass("nav nav-list"); - - this.focusClass = "active"; - - } - - // If a user does not want a prebuilt theme - else { - - // Adds more neutral classes (instead of jqueryui) - - this.focusClass = tocFocusClassName; - - this.hoverClass = tocHoverClassName; - - } - - //Maintains chainability - return this; - - }, - - // setOption - // --------- - // Sets a single Tocify option after the plugin is invoked - setOption: function() { - - // Calls the jQueryUI Widget Factory setOption method - $.Widget.prototype._setOption.apply(this, arguments); - - }, - - // setOptions - // ---------- - // Sets a single or multiple Tocify options after the plugin is invoked - setOptions: function() { - - // Calls the jQueryUI Widget Factory setOptions method - $.Widget.prototype._setOptions.apply(this, arguments); - - }, - - // _scrollTo - // --------- - // Scrolls to a specific element - _scrollTo: function(elem) { - - var self = this, - duration = self.options.smoothScroll || 0, - scrollTo = self.options.scrollTo; - - // Once all animations on the page are complete, this callback function will be called - $("html, body").promise().done(function() { - - // Animates the html and body element scrolltops - $("html, body").animate({ - - // Sets the jQuery `scrollTop` to the top offset of the HTML div tag that matches the current list item's `data-unique` tag - "scrollTop": $('div[data-unique="' + elem.attr("data-unique") + '"]').next().offset().top - ($.isFunction(scrollTo) ? scrollTo.call() : scrollTo) + "px" - - }, { - - // Sets the smoothScroll animation time duration to the smoothScrollSpeed option - "duration": duration - - }); - - }); - - // Maintains chainability - return self; - - } - - }); - -})); //end of plugin diff --git a/apidocs/cloud-api-source/source/javascripts/lib/_jquery_ui.js b/apidocs/cloud-api-source/source/javascripts/lib/_jquery_ui.js deleted file mode 100644 index 637e9c14254..00000000000 --- a/apidocs/cloud-api-source/source/javascripts/lib/_jquery_ui.js +++ /dev/null @@ -1,566 +0,0 @@ -/*! jQuery UI - v1.11.3 - 2015-02-12 - * http://jqueryui.com - * Includes: widget.js - * Copyright 2015 jQuery Foundation and other contributors; Licensed MIT */ - -(function( factory ) { - if ( typeof define === "function" && define.amd ) { - - // AMD. Register as an anonymous module. - define([ "jquery" ], factory ); - } else { - - // Browser globals - factory( jQuery ); - } -}(function( $ ) { - /*! - * jQuery UI Widget 1.11.3 - * http://jqueryui.com - * - * Copyright jQuery Foundation and other contributors - * Released under the MIT license. - * http://jquery.org/license - * - * http://api.jqueryui.com/jQuery.widget/ - */ - - - var widget_uuid = 0, - widget_slice = Array.prototype.slice; - - $.cleanData = (function( orig ) { - return function( elems ) { - var events, elem, i; - for ( i = 0; (elem = elems[i]) != null; i++ ) { - try { - - // Only trigger remove when necessary to save time - events = $._data( elem, "events" ); - if ( events && events.remove ) { - $( elem ).triggerHandler( "remove" ); - } - - // http://bugs.jquery.com/ticket/8235 - } catch ( e ) {} - } - orig( elems ); - }; - })( $.cleanData ); - - $.widget = function( name, base, prototype ) { - var fullName, existingConstructor, constructor, basePrototype, - // proxiedPrototype allows the provided prototype to remain unmodified - // so that it can be used as a mixin for multiple widgets (#8876) - proxiedPrototype = {}, - namespace = name.split( "." )[ 0 ]; - - name = name.split( "." )[ 1 ]; - fullName = namespace + "-" + name; - - if ( !prototype ) { - prototype = base; - base = $.Widget; - } - - // create selector for plugin - $.expr[ ":" ][ fullName.toLowerCase() ] = function( elem ) { - return !!$.data( elem, fullName ); - }; - - $[ namespace ] = $[ namespace ] || {}; - existingConstructor = $[ namespace ][ name ]; - constructor = $[ namespace ][ name ] = function( options, element ) { - // allow instantiation without "new" keyword - if ( !this._createWidget ) { - return new constructor( options, element ); - } - - // allow instantiation without initializing for simple inheritance - // must use "new" keyword (the code above always passes args) - if ( arguments.length ) { - this._createWidget( options, element ); - } - }; - // extend with the existing constructor to carry over any static properties - $.extend( constructor, existingConstructor, { - version: prototype.version, - // copy the object used to create the prototype in case we need to - // redefine the widget later - _proto: $.extend( {}, prototype ), - // track widgets that inherit from this widget in case this widget is - // redefined after a widget inherits from it - _childConstructors: [] - }); - - basePrototype = new base(); - // we need to make the options hash a property directly on the new instance - // otherwise we'll modify the options hash on the prototype that we're - // inheriting from - basePrototype.options = $.widget.extend( {}, basePrototype.options ); - $.each( prototype, function( prop, value ) { - if ( !$.isFunction( value ) ) { - proxiedPrototype[ prop ] = value; - return; - } - proxiedPrototype[ prop ] = (function() { - var _super = function() { - return base.prototype[ prop ].apply( this, arguments ); - }, - _superApply = function( args ) { - return base.prototype[ prop ].apply( this, args ); - }; - return function() { - var __super = this._super, - __superApply = this._superApply, - returnValue; - - this._super = _super; - this._superApply = _superApply; - - returnValue = value.apply( this, arguments ); - - this._super = __super; - this._superApply = __superApply; - - return returnValue; - }; - })(); - }); - constructor.prototype = $.widget.extend( basePrototype, { - // TODO: remove support for widgetEventPrefix - // always use the name + a colon as the prefix, e.g., draggable:start - // don't prefix for widgets that aren't DOM-based - widgetEventPrefix: existingConstructor ? (basePrototype.widgetEventPrefix || name) : name - }, proxiedPrototype, { - constructor: constructor, - namespace: namespace, - widgetName: name, - widgetFullName: fullName - }); - - // If this widget is being redefined then we need to find all widgets that - // are inheriting from it and redefine all of them so that they inherit from - // the new version of this widget. We're essentially trying to replace one - // level in the prototype chain. - if ( existingConstructor ) { - $.each( existingConstructor._childConstructors, function( i, child ) { - var childPrototype = child.prototype; - - // redefine the child widget using the same prototype that was - // originally used, but inherit from the new version of the base - $.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor, child._proto ); - }); - // remove the list of existing child constructors from the old constructor - // so the old child constructors can be garbage collected - delete existingConstructor._childConstructors; - } else { - base._childConstructors.push( constructor ); - } - - $.widget.bridge( name, constructor ); - - return constructor; - }; - - $.widget.extend = function( target ) { - var input = widget_slice.call( arguments, 1 ), - inputIndex = 0, - inputLength = input.length, - key, - value; - for ( ; inputIndex < inputLength; inputIndex++ ) { - for ( key in input[ inputIndex ] ) { - value = input[ inputIndex ][ key ]; - if ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) { - // Clone objects - if ( $.isPlainObject( value ) ) { - target[ key ] = $.isPlainObject( target[ key ] ) ? - $.widget.extend( {}, target[ key ], value ) : - // Don't extend strings, arrays, etc. with objects - $.widget.extend( {}, value ); - // Copy everything else by reference - } else { - target[ key ] = value; - } - } - } - } - return target; - }; - - $.widget.bridge = function( name, object ) { - var fullName = object.prototype.widgetFullName || name; - $.fn[ name ] = function( options ) { - var isMethodCall = typeof options === "string", - args = widget_slice.call( arguments, 1 ), - returnValue = this; - - if ( isMethodCall ) { - this.each(function() { - var methodValue, - instance = $.data( this, fullName ); - if ( options === "instance" ) { - returnValue = instance; - return false; - } - if ( !instance ) { - return $.error( "cannot call methods on " + name + " prior to initialization; " + - "attempted to call method '" + options + "'" ); - } - if ( !$.isFunction( instance[options] ) || options.charAt( 0 ) === "_" ) { - return $.error( "no such method '" + options + "' for " + name + " widget instance" ); - } - methodValue = instance[ options ].apply( instance, args ); - if ( methodValue !== instance && methodValue !== undefined ) { - returnValue = methodValue && methodValue.jquery ? - returnValue.pushStack( methodValue.get() ) : - methodValue; - return false; - } - }); - } else { - - // Allow multiple hashes to be passed on init - if ( args.length ) { - options = $.widget.extend.apply( null, [ options ].concat(args) ); - } - - this.each(function() { - var instance = $.data( this, fullName ); - if ( instance ) { - instance.option( options || {} ); - if ( instance._init ) { - instance._init(); - } - } else { - $.data( this, fullName, new object( options, this ) ); - } - }); - } - - return returnValue; - }; - }; - - $.Widget = function( /* options, element */ ) {}; - $.Widget._childConstructors = []; - - $.Widget.prototype = { - widgetName: "widget", - widgetEventPrefix: "", - defaultElement: "
        ", - options: { - disabled: false, - - // callbacks - create: null - }, - _createWidget: function( options, element ) { - element = $( element || this.defaultElement || this )[ 0 ]; - this.element = $( element ); - this.uuid = widget_uuid++; - this.eventNamespace = "." + this.widgetName + this.uuid; - - this.bindings = $(); - this.hoverable = $(); - this.focusable = $(); - - if ( element !== this ) { - $.data( element, this.widgetFullName, this ); - this._on( true, this.element, { - remove: function( event ) { - if ( event.target === element ) { - this.destroy(); - } - } - }); - this.document = $( element.style ? - // element within the document - element.ownerDocument : - // element is window or document - element.document || element ); - this.window = $( this.document[0].defaultView || this.document[0].parentWindow ); - } - - this.options = $.widget.extend( {}, - this.options, - this._getCreateOptions(), - options ); - - this._create(); - this._trigger( "create", null, this._getCreateEventData() ); - this._init(); - }, - _getCreateOptions: $.noop, - _getCreateEventData: $.noop, - _create: $.noop, - _init: $.noop, - - destroy: function() { - this._destroy(); - // we can probably remove the unbind calls in 2.0 - // all event bindings should go through this._on() - this.element - .unbind( this.eventNamespace ) - .removeData( this.widgetFullName ) - // support: jquery <1.6.3 - // http://bugs.jquery.com/ticket/9413 - .removeData( $.camelCase( this.widgetFullName ) ); - this.widget() - .unbind( this.eventNamespace ) - .removeAttr( "aria-disabled" ) - .removeClass( - this.widgetFullName + "-disabled " + - "ui-state-disabled" ); - - // clean up events and states - this.bindings.unbind( this.eventNamespace ); - this.hoverable.removeClass( "ui-state-hover" ); - this.focusable.removeClass( "ui-state-focus" ); - }, - _destroy: $.noop, - - widget: function() { - return this.element; - }, - - option: function( key, value ) { - var options = key, - parts, - curOption, - i; - - if ( arguments.length === 0 ) { - // don't return a reference to the internal hash - return $.widget.extend( {}, this.options ); - } - - if ( typeof key === "string" ) { - // handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } } - options = {}; - parts = key.split( "." ); - key = parts.shift(); - if ( parts.length ) { - curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] ); - for ( i = 0; i < parts.length - 1; i++ ) { - curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {}; - curOption = curOption[ parts[ i ] ]; - } - key = parts.pop(); - if ( arguments.length === 1 ) { - return curOption[ key ] === undefined ? null : curOption[ key ]; - } - curOption[ key ] = value; - } else { - if ( arguments.length === 1 ) { - return this.options[ key ] === undefined ? null : this.options[ key ]; - } - options[ key ] = value; - } - } - - this._setOptions( options ); - - return this; - }, - _setOptions: function( options ) { - var key; - - for ( key in options ) { - this._setOption( key, options[ key ] ); - } - - return this; - }, - _setOption: function( key, value ) { - this.options[ key ] = value; - - if ( key === "disabled" ) { - this.widget() - .toggleClass( this.widgetFullName + "-disabled", !!value ); - - // If the widget is becoming disabled, then nothing is interactive - if ( value ) { - this.hoverable.removeClass( "ui-state-hover" ); - this.focusable.removeClass( "ui-state-focus" ); - } - } - - return this; - }, - - enable: function() { - return this._setOptions({ disabled: false }); - }, - disable: function() { - return this._setOptions({ disabled: true }); - }, - - _on: function( suppressDisabledCheck, element, handlers ) { - var delegateElement, - instance = this; - - // no suppressDisabledCheck flag, shuffle arguments - if ( typeof suppressDisabledCheck !== "boolean" ) { - handlers = element; - element = suppressDisabledCheck; - suppressDisabledCheck = false; - } - - // no element argument, shuffle and use this.element - if ( !handlers ) { - handlers = element; - element = this.element; - delegateElement = this.widget(); - } else { - element = delegateElement = $( element ); - this.bindings = this.bindings.add( element ); - } - - $.each( handlers, function( event, handler ) { - function handlerProxy() { - // allow widgets to customize the disabled handling - // - disabled as an array instead of boolean - // - disabled class as method for disabling individual parts - if ( !suppressDisabledCheck && - ( instance.options.disabled === true || - $( this ).hasClass( "ui-state-disabled" ) ) ) { - return; - } - return ( typeof handler === "string" ? instance[ handler ] : handler ) - .apply( instance, arguments ); - } - - // copy the guid so direct unbinding works - if ( typeof handler !== "string" ) { - handlerProxy.guid = handler.guid = - handler.guid || handlerProxy.guid || $.guid++; - } - - var match = event.match( /^([\w:-]*)\s*(.*)$/ ), - eventName = match[1] + instance.eventNamespace, - selector = match[2]; - if ( selector ) { - delegateElement.delegate( selector, eventName, handlerProxy ); - } else { - element.bind( eventName, handlerProxy ); - } - }); - }, - - _off: function( element, eventName ) { - eventName = (eventName || "").split( " " ).join( this.eventNamespace + " " ) + - this.eventNamespace; - element.unbind( eventName ).undelegate( eventName ); - - // Clear the stack to avoid memory leaks (#10056) - this.bindings = $( this.bindings.not( element ).get() ); - this.focusable = $( this.focusable.not( element ).get() ); - this.hoverable = $( this.hoverable.not( element ).get() ); - }, - - _delay: function( handler, delay ) { - function handlerProxy() { - return ( typeof handler === "string" ? instance[ handler ] : handler ) - .apply( instance, arguments ); - } - var instance = this; - return setTimeout( handlerProxy, delay || 0 ); - }, - - _hoverable: function( element ) { - this.hoverable = this.hoverable.add( element ); - this._on( element, { - mouseenter: function( event ) { - $( event.currentTarget ).addClass( "ui-state-hover" ); - }, - mouseleave: function( event ) { - $( event.currentTarget ).removeClass( "ui-state-hover" ); - } - }); - }, - - _focusable: function( element ) { - this.focusable = this.focusable.add( element ); - this._on( element, { - focusin: function( event ) { - $( event.currentTarget ).addClass( "ui-state-focus" ); - }, - focusout: function( event ) { - $( event.currentTarget ).removeClass( "ui-state-focus" ); - } - }); - }, - - _trigger: function( type, event, data ) { - var prop, orig, - callback = this.options[ type ]; - - data = data || {}; - event = $.Event( event ); - event.type = ( type === this.widgetEventPrefix ? - type : - this.widgetEventPrefix + type ).toLowerCase(); - // the original event may come from any element - // so we need to reset the target on the new event - event.target = this.element[ 0 ]; - - // copy original event properties over to the new event - orig = event.originalEvent; - if ( orig ) { - for ( prop in orig ) { - if ( !( prop in event ) ) { - event[ prop ] = orig[ prop ]; - } - } - } - - this.element.trigger( event, data ); - return !( $.isFunction( callback ) && - callback.apply( this.element[0], [ event ].concat( data ) ) === false || - event.isDefaultPrevented() ); - } - }; - - $.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) { - $.Widget.prototype[ "_" + method ] = function( element, options, callback ) { - if ( typeof options === "string" ) { - options = { effect: options }; - } - var hasOptions, - effectName = !options ? - method : - options === true || typeof options === "number" ? - defaultEffect : - options.effect || defaultEffect; - options = options || {}; - if ( typeof options === "number" ) { - options = { duration: options }; - } - hasOptions = !$.isEmptyObject( options ); - options.complete = callback; - if ( options.delay ) { - element.delay( options.delay ); - } - if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) { - element[ method ]( options ); - } else if ( effectName !== method && element[ effectName ] ) { - element[ effectName ]( options.duration, options.easing, callback ); - } else { - element.queue(function( next ) { - $( this )[ method ](); - if ( callback ) { - callback.call( element[ 0 ] ); - } - next(); - }); - } - }; - }); - - var widget = $.widget; - - - -})); diff --git a/apidocs/cloud-api-source/source/javascripts/lib/_lunr.js b/apidocs/cloud-api-source/source/javascripts/lib/_lunr.js deleted file mode 100644 index 43d26f52a78..00000000000 --- a/apidocs/cloud-api-source/source/javascripts/lib/_lunr.js +++ /dev/null @@ -1,1910 +0,0 @@ -/** - * 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(){ - - /** - * Convenience function for instantiating a new lunr index and configuring it - * with the default pipeline functions and the passed config function. - * - * When using this convenience function a new index will be created with the - * following functions already in the pipeline: - * - * lunr.StopWordFilter - filters out any stop words before they enter the - * index - * - * lunr.stemmer - stems the tokens before entering the index. - * - * Example: - * - * var idx = lunr(function () { - * this.field('title', 10) - * this.field('tags', 100) - * this.field('body') - * - * this.ref('cid') - * - * this.pipeline.add(function () { - * // some custom pipeline function - * }) - * - * }) - * - * @param {Function} config A function that will be called with the new instance - * of the lunr.Index as both its context and first parameter. It can be used to - * customize the instance of new lunr.Index. - * @namespace - * @module - * @returns {lunr.Index} - * - */ - var lunr = function (config) { - var idx = new lunr.Index - - idx.pipeline.add( - lunr.trimmer, - lunr.stopWordFilter, - lunr.stemmer - ) - - if (config) config.call(idx, idx) - - return idx - } - - lunr.version = "0.5.7" - /*! - * lunr.utils - * Copyright (C) 2014 Oliver Nightingale - */ - - /** - * A namespace containing utils for the rest of the lunr library - */ - lunr.utils = {} - - /** - * Print a warning message to the console. - * - * @param {String} message The message to be printed. - * @memberOf Utils - */ - lunr.utils.warn = (function (global) { - return function (message) { - if (global.console && console.warn) { - console.warn(message) - } - } - })(this) - - /*! - * lunr.EventEmitter - * Copyright (C) 2014 Oliver Nightingale - */ - - /** - * lunr.EventEmitter is an event emitter for lunr. It manages adding and removing event handlers and triggering events and their handlers. - * - * @constructor - */ - lunr.EventEmitter = function () { - this.events = {} - } - - /** - * Binds a handler function to a specific event(s). - * - * Can bind a single function to many different events in one call. - * - * @param {String} [eventName] The name(s) of events to bind this function to. - * @param {Function} handler The function to call when an event is fired. - * @memberOf EventEmitter - */ - lunr.EventEmitter.prototype.addListener = function () { - var args = Array.prototype.slice.call(arguments), - fn = args.pop(), - names = args - - if (typeof fn !== "function") throw new TypeError ("last argument must be a function") - - names.forEach(function (name) { - if (!this.hasHandler(name)) this.events[name] = [] - this.events[name].push(fn) - }, this) - } - - /** - * Removes a handler function from a specific event. - * - * @param {String} eventName The name of the event to remove this function from. - * @param {Function} handler The function to remove from an event. - * @memberOf EventEmitter - */ - lunr.EventEmitter.prototype.removeListener = function (name, fn) { - if (!this.hasHandler(name)) return - - var fnIndex = this.events[name].indexOf(fn) - this.events[name].splice(fnIndex, 1) - - if (!this.events[name].length) delete this.events[name] - } - - /** - * Calls all functions bound to the given event. - * - * Additional data can be passed to the event handler as arguments to `emit` - * after the event name. - * - * @param {String} eventName The name of the event to emit. - * @memberOf EventEmitter - */ - lunr.EventEmitter.prototype.emit = function (name) { - if (!this.hasHandler(name)) return - - var args = Array.prototype.slice.call(arguments, 1) - - this.events[name].forEach(function (fn) { - fn.apply(undefined, args) - }) - } - - /** - * Checks whether a handler has ever been stored against an event. - * - * @param {String} eventName The name of the event to check. - * @private - * @memberOf EventEmitter - */ - lunr.EventEmitter.prototype.hasHandler = function (name) { - return name in this.events - } - - /*! - * lunr.tokenizer - * Copyright (C) 2014 Oliver Nightingale - */ - - /** - * A function for splitting a string into tokens ready to be inserted into - * the search index. - * - * @module - * @param {String} obj The string to convert into tokens - * @returns {Array} - */ - lunr.tokenizer = function (obj) { - if (!arguments.length || obj == null || obj == undefined) return [] - if (Array.isArray(obj)) return obj.map(function (t) { return t.toLowerCase() }) - - var str = obj.toString().replace(/^\s+/, '') - - for (var i = str.length - 1; i >= 0; i--) { - if (/\S/.test(str.charAt(i))) { - str = str.substring(0, i + 1) - break - } - } - - return str - .split(/(?:\s+|\-)/) - .filter(function (token) { - return !!token - }) - .map(function (token) { - return token.toLowerCase() - }) - } - /*! - * lunr.Pipeline - * Copyright (C) 2014 Oliver Nightingale - */ - - /** - * lunr.Pipelines maintain an ordered list of functions to be applied to all - * tokens in documents entering the search index and queries being ran against - * the index. - * - * An instance of lunr.Index created with the lunr shortcut will contain a - * pipeline with a stop word filter and an English language stemmer. Extra - * functions can be added before or after either of these functions or these - * default functions can be removed. - * - * When run the pipeline will call each function in turn, passing a token, the - * index of that token in the original list of all tokens and finally a list of - * all the original tokens. - * - * The output of functions in the pipeline will be passed to the next function - * in the pipeline. To exclude a token from entering the index the function - * should return undefined, the rest of the pipeline will not be called with - * this token. - * - * For serialisation of pipelines to work, all functions used in an instance of - * a pipeline should be registered with lunr.Pipeline. Registered functions can - * then be loaded. If trying to load a serialised pipeline that uses functions - * that are not registered an error will be thrown. - * - * If not planning on serialising the pipeline then registering pipeline functions - * is not necessary. - * - * @constructor - */ - lunr.Pipeline = function () { - this._stack = [] - } - - lunr.Pipeline.registeredFunctions = {} - - /** - * Register a function with the pipeline. - * - * Functions that are used in the pipeline should be registered if the pipeline - * needs to be serialised, or a serialised pipeline needs to be loaded. - * - * Registering a function does not add it to a pipeline, functions must still be - * added to instances of the pipeline for them to be used when running a pipeline. - * - * @param {Function} fn The function to check for. - * @param {String} label The label to register this function with - * @memberOf Pipeline - */ - lunr.Pipeline.registerFunction = function (fn, label) { - if (label in this.registeredFunctions) { - lunr.utils.warn('Overwriting existing registered function: ' + label) - } - - fn.label = label - lunr.Pipeline.registeredFunctions[fn.label] = fn - } - - /** - * Warns if the function is not registered as a Pipeline function. - * - * @param {Function} fn The function to check for. - * @private - * @memberOf Pipeline - */ - lunr.Pipeline.warnIfFunctionNotRegistered = function (fn) { - var isRegistered = fn.label && (fn.label in this.registeredFunctions) - - if (!isRegistered) { - lunr.utils.warn('Function is not registered with pipeline. This may cause problems when serialising the index.\n', fn) - } - } - - /** - * Loads a previously serialised pipeline. - * - * All functions to be loaded must already be registered with lunr.Pipeline. - * If any function from the serialised data has not been registered then an - * error will be thrown. - * - * @param {Object} serialised The serialised pipeline to load. - * @returns {lunr.Pipeline} - * @memberOf Pipeline - */ - lunr.Pipeline.load = function (serialised) { - var pipeline = new lunr.Pipeline - - serialised.forEach(function (fnName) { - var fn = lunr.Pipeline.registeredFunctions[fnName] - - if (fn) { - pipeline.add(fn) - } else { - throw new Error ('Cannot load un-registered function: ' + fnName) - } - }) - - return pipeline - } - - /** - * Adds new functions to the end of the pipeline. - * - * Logs a warning if the function has not been registered. - * - * @param {Function} functions Any number of functions to add to the pipeline. - * @memberOf Pipeline - */ - lunr.Pipeline.prototype.add = function () { - var fns = Array.prototype.slice.call(arguments) - - fns.forEach(function (fn) { - lunr.Pipeline.warnIfFunctionNotRegistered(fn) - this._stack.push(fn) - }, this) - } - - /** - * Adds a single function after a function that already exists in the - * pipeline. - * - * Logs a warning if the function has not been registered. - * - * @param {Function} existingFn A function that already exists in the pipeline. - * @param {Function} newFn The new function to add to the pipeline. - * @memberOf Pipeline - */ - lunr.Pipeline.prototype.after = function (existingFn, newFn) { - lunr.Pipeline.warnIfFunctionNotRegistered(newFn) - - var pos = this._stack.indexOf(existingFn) + 1 - this._stack.splice(pos, 0, newFn) - } - - /** - * Adds a single function before a function that already exists in the - * pipeline. - * - * Logs a warning if the function has not been registered. - * - * @param {Function} existingFn A function that already exists in the pipeline. - * @param {Function} newFn The new function to add to the pipeline. - * @memberOf Pipeline - */ - lunr.Pipeline.prototype.before = function (existingFn, newFn) { - lunr.Pipeline.warnIfFunctionNotRegistered(newFn) - - var pos = this._stack.indexOf(existingFn) - this._stack.splice(pos, 0, newFn) - } - - /** - * Removes a function from the pipeline. - * - * @param {Function} fn The function to remove from the pipeline. - * @memberOf Pipeline - */ - lunr.Pipeline.prototype.remove = function (fn) { - var pos = this._stack.indexOf(fn) - this._stack.splice(pos, 1) - } - - /** - * Runs the current list of functions that make up the pipeline against the - * passed tokens. - * - * @param {Array} tokens The tokens to run through the pipeline. - * @returns {Array} - * @memberOf Pipeline - */ - lunr.Pipeline.prototype.run = function (tokens) { - var out = [], - tokenLength = tokens.length, - stackLength = this._stack.length - - for (var i = 0; i < tokenLength; i++) { - var token = tokens[i] - - for (var j = 0; j < stackLength; j++) { - token = this._stack[j](token, i, tokens) - if (token === void 0) break - }; - - if (token !== void 0) out.push(token) - }; - - return out - } - - /** - * Resets the pipeline by removing any existing processors. - * - * @memberOf Pipeline - */ - lunr.Pipeline.prototype.reset = function () { - this._stack = [] - } - - /** - * Returns a representation of the pipeline ready for serialisation. - * - * Logs a warning if the function has not been registered. - * - * @returns {Array} - * @memberOf Pipeline - */ - lunr.Pipeline.prototype.toJSON = function () { - return this._stack.map(function (fn) { - lunr.Pipeline.warnIfFunctionNotRegistered(fn) - - return fn.label - }) - } - /*! - * lunr.Vector - * Copyright (C) 2014 Oliver Nightingale - */ - - /** - * lunr.Vectors implement vector related operations for - * a series of elements. - * - * @constructor - */ - lunr.Vector = function () { - this._magnitude = null - this.list = undefined - this.length = 0 - } - - /** - * lunr.Vector.Node is a simple struct for each node - * in a lunr.Vector. - * - * @private - * @param {Number} The index of the node in the vector. - * @param {Object} The data at this node in the vector. - * @param {lunr.Vector.Node} The node directly after this node in the vector. - * @constructor - * @memberOf Vector - */ - lunr.Vector.Node = function (idx, val, next) { - this.idx = idx - this.val = val - this.next = next - } - - /** - * Inserts a new value at a position in a vector. - * - * @param {Number} The index at which to insert a value. - * @param {Object} The object to insert in the vector. - * @memberOf Vector. - */ - lunr.Vector.prototype.insert = function (idx, val) { - var list = this.list - - if (!list) { - this.list = new lunr.Vector.Node (idx, val, list) - return this.length++ - } - - var prev = list, - next = list.next - - while (next != undefined) { - if (idx < next.idx) { - prev.next = new lunr.Vector.Node (idx, val, next) - return this.length++ - } - - prev = next, next = next.next - } - - prev.next = new lunr.Vector.Node (idx, val, next) - return this.length++ - } - - /** - * Calculates the magnitude of this vector. - * - * @returns {Number} - * @memberOf Vector - */ - lunr.Vector.prototype.magnitude = function () { - if (this._magniture) return this._magnitude - var node = this.list, - sumOfSquares = 0, - val - - while (node) { - val = node.val - sumOfSquares += val * val - node = node.next - } - - return this._magnitude = Math.sqrt(sumOfSquares) - } - - /** - * Calculates the dot product of this vector and another vector. - * - * @param {lunr.Vector} otherVector The vector to compute the dot product with. - * @returns {Number} - * @memberOf Vector - */ - lunr.Vector.prototype.dot = function (otherVector) { - var node = this.list, - otherNode = otherVector.list, - dotProduct = 0 - - while (node && otherNode) { - if (node.idx < otherNode.idx) { - node = node.next - } else if (node.idx > otherNode.idx) { - otherNode = otherNode.next - } else { - dotProduct += node.val * otherNode.val - node = node.next - otherNode = otherNode.next - } - } - - return dotProduct - } - - /** - * Calculates the cosine similarity between this vector and another - * vector. - * - * @param {lunr.Vector} otherVector The other vector to calculate the - * similarity with. - * @returns {Number} - * @memberOf Vector - */ - lunr.Vector.prototype.similarity = function (otherVector) { - return this.dot(otherVector) / (this.magnitude() * otherVector.magnitude()) - } - /*! - * lunr.SortedSet - * Copyright (C) 2014 Oliver Nightingale - */ - - /** - * lunr.SortedSets are used to maintain an array of uniq values in a sorted - * order. - * - * @constructor - */ - lunr.SortedSet = function () { - this.length = 0 - this.elements = [] - } - - /** - * Loads a previously serialised sorted set. - * - * @param {Array} serialisedData The serialised set to load. - * @returns {lunr.SortedSet} - * @memberOf SortedSet - */ - lunr.SortedSet.load = function (serialisedData) { - var set = new this - - set.elements = serialisedData - set.length = serialisedData.length - - return set - } - - /** - * Inserts new items into the set in the correct position to maintain the - * order. - * - * @param {Object} The objects to add to this set. - * @memberOf SortedSet - */ - lunr.SortedSet.prototype.add = function () { - Array.prototype.slice.call(arguments).forEach(function (element) { - if (~this.indexOf(element)) return - this.elements.splice(this.locationFor(element), 0, element) - }, this) - - this.length = this.elements.length - } - - /** - * Converts this sorted set into an array. - * - * @returns {Array} - * @memberOf SortedSet - */ - lunr.SortedSet.prototype.toArray = function () { - return this.elements.slice() - } - - /** - * Creates a new array with the results of calling a provided function on every - * element in this sorted set. - * - * Delegates to Array.prototype.map and has the same signature. - * - * @param {Function} fn The function that is called on each element of the - * set. - * @param {Object} ctx An optional object that can be used as the context - * for the function fn. - * @returns {Array} - * @memberOf SortedSet - */ - lunr.SortedSet.prototype.map = function (fn, ctx) { - return this.elements.map(fn, ctx) - } - - /** - * Executes a provided function once per sorted set element. - * - * Delegates to Array.prototype.forEach and has the same signature. - * - * @param {Function} fn The function that is called on each element of the - * set. - * @param {Object} ctx An optional object that can be used as the context - * @memberOf SortedSet - * for the function fn. - */ - lunr.SortedSet.prototype.forEach = function (fn, ctx) { - return this.elements.forEach(fn, ctx) - } - - /** - * Returns the index at which a given element can be found in the - * sorted set, or -1 if it is not present. - * - * @param {Object} elem The object to locate in the sorted set. - * @param {Number} start An optional index at which to start searching from - * within the set. - * @param {Number} end An optional index at which to stop search from within - * the set. - * @returns {Number} - * @memberOf SortedSet - */ - lunr.SortedSet.prototype.indexOf = function (elem, start, end) { - var start = start || 0, - end = end || this.elements.length, - sectionLength = end - start, - pivot = start + Math.floor(sectionLength / 2), - pivotElem = this.elements[pivot] - - if (sectionLength <= 1) { - if (pivotElem === elem) { - return pivot - } else { - return -1 - } - } - - if (pivotElem < elem) return this.indexOf(elem, pivot, end) - if (pivotElem > elem) return this.indexOf(elem, start, pivot) - if (pivotElem === elem) return pivot - } - - /** - * Returns the position within the sorted set that an element should be - * inserted at to maintain the current order of the set. - * - * This function assumes that the element to search for does not already exist - * in the sorted set. - * - * @param {Object} elem The elem to find the position for in the set - * @param {Number} start An optional index at which to start searching from - * within the set. - * @param {Number} end An optional index at which to stop search from within - * the set. - * @returns {Number} - * @memberOf SortedSet - */ - lunr.SortedSet.prototype.locationFor = function (elem, start, end) { - var start = start || 0, - end = end || this.elements.length, - sectionLength = end - start, - pivot = start + Math.floor(sectionLength / 2), - pivotElem = this.elements[pivot] - - if (sectionLength <= 1) { - if (pivotElem > elem) return pivot - if (pivotElem < elem) return pivot + 1 - } - - if (pivotElem < elem) return this.locationFor(elem, pivot, end) - if (pivotElem > elem) return this.locationFor(elem, start, pivot) - } - - /** - * Creates a new lunr.SortedSet that contains the elements in the intersection - * of this set and the passed set. - * - * @param {lunr.SortedSet} otherSet The set to intersect with this set. - * @returns {lunr.SortedSet} - * @memberOf SortedSet - */ - lunr.SortedSet.prototype.intersect = function (otherSet) { - var intersectSet = new lunr.SortedSet, - i = 0, j = 0, - a_len = this.length, b_len = otherSet.length, - a = this.elements, b = otherSet.elements - - while (true) { - if (i > a_len - 1 || j > b_len - 1) break - - if (a[i] === b[j]) { - intersectSet.add(a[i]) - i++, j++ - continue - } - - if (a[i] < b[j]) { - i++ - continue - } - - if (a[i] > b[j]) { - j++ - continue - } - }; - - return intersectSet - } - - /** - * Makes a copy of this set - * - * @returns {lunr.SortedSet} - * @memberOf SortedSet - */ - lunr.SortedSet.prototype.clone = function () { - var clone = new lunr.SortedSet - - clone.elements = this.toArray() - clone.length = clone.elements.length - - return clone - } - - /** - * Creates a new lunr.SortedSet that contains the elements in the union - * of this set and the passed set. - * - * @param {lunr.SortedSet} otherSet The set to union with this set. - * @returns {lunr.SortedSet} - * @memberOf SortedSet - */ - lunr.SortedSet.prototype.union = function (otherSet) { - var longSet, shortSet, unionSet - - if (this.length >= otherSet.length) { - longSet = this, shortSet = otherSet - } else { - longSet = otherSet, shortSet = this - } - - unionSet = longSet.clone() - - unionSet.add.apply(unionSet, shortSet.toArray()) - - return unionSet - } - - /** - * Returns a representation of the sorted set ready for serialisation. - * - * @returns {Array} - * @memberOf SortedSet - */ - lunr.SortedSet.prototype.toJSON = function () { - return this.toArray() - } - /*! - * lunr.Index - * Copyright (C) 2014 Oliver Nightingale - */ - - /** - * lunr.Index is object that manages a search index. It contains the indexes - * and stores all the tokens and document lookups. It also provides the main - * user facing API for the library. - * - * @constructor - */ - lunr.Index = function () { - this._fields = [] - this._ref = 'id' - this.pipeline = new lunr.Pipeline - this.documentStore = new lunr.Store - this.tokenStore = new lunr.TokenStore - this.corpusTokens = new lunr.SortedSet - this.eventEmitter = new lunr.EventEmitter - - this._idfCache = {} - - this.on('add', 'remove', 'update', (function () { - this._idfCache = {} - }).bind(this)) - } - - /** - * Bind a handler to events being emitted by the index. - * - * The handler can be bound to many events at the same time. - * - * @param {String} [eventName] The name(s) of events to bind the function to. - * @param {Function} handler The serialised set to load. - * @memberOf Index - */ - lunr.Index.prototype.on = function () { - var args = Array.prototype.slice.call(arguments) - return this.eventEmitter.addListener.apply(this.eventEmitter, args) - } - - /** - * Removes a handler from an event being emitted by the index. - * - * @param {String} eventName The name of events to remove the function from. - * @param {Function} handler The serialised set to load. - * @memberOf Index - */ - lunr.Index.prototype.off = function (name, fn) { - return this.eventEmitter.removeListener(name, fn) - } - - /** - * Loads a previously serialised index. - * - * Issues a warning if the index being imported was serialised - * by a different version of lunr. - * - * @param {Object} serialisedData The serialised set to load. - * @returns {lunr.Index} - * @memberOf Index - */ - lunr.Index.load = function (serialisedData) { - if (serialisedData.version !== lunr.version) { - lunr.utils.warn('version mismatch: current ' + lunr.version + ' importing ' + serialisedData.version) - } - - var idx = new this - - idx._fields = serialisedData.fields - idx._ref = serialisedData.ref - - idx.documentStore = lunr.Store.load(serialisedData.documentStore) - idx.tokenStore = lunr.TokenStore.load(serialisedData.tokenStore) - idx.corpusTokens = lunr.SortedSet.load(serialisedData.corpusTokens) - idx.pipeline = lunr.Pipeline.load(serialisedData.pipeline) - - return idx - } - - /** - * Adds a field to the list of fields that will be searchable within documents - * in the index. - * - * An optional boost param can be passed to affect how much tokens in this field - * rank in search results, by default the boost value is 1. - * - * Fields should be added before any documents are added to the index, fields - * that are added after documents are added to the index will only apply to new - * documents added to the index. - * - * @param {String} fieldName The name of the field within the document that - * should be indexed - * @param {Number} boost An optional boost that can be applied to terms in this - * field. - * @returns {lunr.Index} - * @memberOf Index - */ - lunr.Index.prototype.field = function (fieldName, opts) { - var opts = opts || {}, - field = { name: fieldName, boost: opts.boost || 1 } - - this._fields.push(field) - return this - } - - /** - * Sets the property used to uniquely identify documents added to the index, - * by default this property is 'id'. - * - * This should only be changed before adding documents to the index, changing - * the ref property without resetting the index can lead to unexpected results. - * - * @param {String} refName The property to use to uniquely identify the - * documents in the index. - * @param {Boolean} emitEvent Whether to emit add events, defaults to true - * @returns {lunr.Index} - * @memberOf Index - */ - lunr.Index.prototype.ref = function (refName) { - this._ref = refName - return this - } - - /** - * Add a document to the index. - * - * This is the way new documents enter the index, this function will run the - * fields from the document through the index's pipeline and then add it to - * the index, it will then show up in search results. - * - * An 'add' event is emitted with the document that has been added and the index - * the document has been added to. This event can be silenced by passing false - * as the second argument to add. - * - * @param {Object} doc The document to add to the index. - * @param {Boolean} emitEvent Whether or not to emit events, default true. - * @memberOf Index - */ - lunr.Index.prototype.add = function (doc, emitEvent) { - var docTokens = {}, - allDocumentTokens = new lunr.SortedSet, - docRef = doc[this._ref], - emitEvent = emitEvent === undefined ? true : emitEvent - - this._fields.forEach(function (field) { - var fieldTokens = this.pipeline.run(lunr.tokenizer(doc[field.name])) - - docTokens[field.name] = fieldTokens - lunr.SortedSet.prototype.add.apply(allDocumentTokens, fieldTokens) - }, this) - - this.documentStore.set(docRef, allDocumentTokens) - lunr.SortedSet.prototype.add.apply(this.corpusTokens, allDocumentTokens.toArray()) - - for (var i = 0; i < allDocumentTokens.length; i++) { - var token = allDocumentTokens.elements[i] - var tf = this._fields.reduce(function (memo, field) { - var fieldLength = docTokens[field.name].length - - if (!fieldLength) return memo - - var tokenCount = docTokens[field.name].filter(function (t) { return t === token }).length - - return memo + (tokenCount / fieldLength * field.boost) - }, 0) - - this.tokenStore.add(token, { ref: docRef, tf: tf }) - }; - - if (emitEvent) this.eventEmitter.emit('add', doc, this) - } - - /** - * Removes a document from the index. - * - * To make sure documents no longer show up in search results they can be - * removed from the index using this method. - * - * The document passed only needs to have the same ref property value as the - * document that was added to the index, they could be completely different - * objects. - * - * A 'remove' event is emitted with the document that has been removed and the index - * the document has been removed from. This event can be silenced by passing false - * as the second argument to remove. - * - * @param {Object} doc The document to remove from the index. - * @param {Boolean} emitEvent Whether to emit remove events, defaults to true - * @memberOf Index - */ - lunr.Index.prototype.remove = function (doc, emitEvent) { - var docRef = doc[this._ref], - emitEvent = emitEvent === undefined ? true : emitEvent - - if (!this.documentStore.has(docRef)) return - - var docTokens = this.documentStore.get(docRef) - - this.documentStore.remove(docRef) - - docTokens.forEach(function (token) { - this.tokenStore.remove(token, docRef) - }, this) - - if (emitEvent) this.eventEmitter.emit('remove', doc, this) - } - - /** - * Updates a document in the index. - * - * When a document contained within the index gets updated, fields changed, - * added or removed, to make sure it correctly matched against search queries, - * it should be updated in the index. - * - * This method is just a wrapper around `remove` and `add` - * - * An 'update' event is emitted with the document that has been updated and the index. - * This event can be silenced by passing false as the second argument to update. Only - * an update event will be fired, the 'add' and 'remove' events of the underlying calls - * are silenced. - * - * @param {Object} doc The document to update in the index. - * @param {Boolean} emitEvent Whether to emit update events, defaults to true - * @see Index.prototype.remove - * @see Index.prototype.add - * @memberOf Index - */ - lunr.Index.prototype.update = function (doc, emitEvent) { - var emitEvent = emitEvent === undefined ? true : emitEvent - - this.remove(doc, false) - this.add(doc, false) - - if (emitEvent) this.eventEmitter.emit('update', doc, this) - } - - /** - * Calculates the inverse document frequency for a token within the index. - * - * @param {String} token The token to calculate the idf of. - * @see Index.prototype.idf - * @private - * @memberOf Index - */ - lunr.Index.prototype.idf = function (term) { - var cacheKey = "@" + term - if (Object.prototype.hasOwnProperty.call(this._idfCache, cacheKey)) return this._idfCache[cacheKey] - - var documentFrequency = this.tokenStore.count(term), - idf = 1 - - if (documentFrequency > 0) { - idf = 1 + Math.log(this.tokenStore.length / documentFrequency) - } - - return this._idfCache[cacheKey] = idf - } - - /** - * Searches the index using the passed query. - * - * Queries should be a string, multiple words are allowed and will lead to an - * AND based query, e.g. `idx.search('foo bar')` will run a search for - * documents containing both 'foo' and 'bar'. - * - * All query tokens are passed through the same pipeline that document tokens - * are passed through, so any language processing involved will be run on every - * query term. - * - * Each query term is expanded, so that the term 'he' might be expanded to - * 'hello' and 'help' if those terms were already included in the index. - * - * Matching documents are returned as an array of objects, each object contains - * the matching document ref, as set for this index, and the similarity score - * for this document against the query. - * - * @param {String} query The query to search the index with. - * @returns {Object} - * @see Index.prototype.idf - * @see Index.prototype.documentVector - * @memberOf Index - */ - lunr.Index.prototype.search = function (query) { - var queryTokens = this.pipeline.run(lunr.tokenizer(query)), - queryVector = new lunr.Vector, - documentSets = [], - fieldBoosts = this._fields.reduce(function (memo, f) { return memo + f.boost }, 0) - - var hasSomeToken = queryTokens.some(function (token) { - return this.tokenStore.has(token) - }, this) - - if (!hasSomeToken) return [] - - queryTokens - .forEach(function (token, i, tokens) { - var tf = 1 / tokens.length * this._fields.length * fieldBoosts, - self = this - - var set = this.tokenStore.expand(token).reduce(function (memo, key) { - var pos = self.corpusTokens.indexOf(key), - idf = self.idf(key), - similarityBoost = 1, - set = new lunr.SortedSet - - // if the expanded key is not an exact match to the token then - // penalise the score for this key by how different the key is - // to the token. - if (key !== token) { - var diff = Math.max(3, key.length - token.length) - similarityBoost = 1 / Math.log(diff) - } - - // calculate the query tf-idf score for this token - // applying an similarityBoost to ensure exact matches - // these rank higher than expanded terms - if (pos > -1) queryVector.insert(pos, tf * idf * similarityBoost) - - // add all the documents that have this key into a set - Object.keys(self.tokenStore.get(key)).forEach(function (ref) { set.add(ref) }) - - return memo.union(set) - }, new lunr.SortedSet) - - documentSets.push(set) - }, this) - - var documentSet = documentSets.reduce(function (memo, set) { - return memo.intersect(set) - }) - - return documentSet - .map(function (ref) { - return { ref: ref, score: queryVector.similarity(this.documentVector(ref)) } - }, this) - .sort(function (a, b) { - return b.score - a.score - }) - } - - /** - * Generates a vector containing all the tokens in the document matching the - * passed documentRef. - * - * The vector contains the tf-idf score for each token contained in the - * document with the passed documentRef. The vector will contain an element - * for every token in the indexes corpus, if the document does not contain that - * token the element will be 0. - * - * @param {Object} documentRef The ref to find the document with. - * @returns {lunr.Vector} - * @private - * @memberOf Index - */ - lunr.Index.prototype.documentVector = function (documentRef) { - var documentTokens = this.documentStore.get(documentRef), - documentTokensLength = documentTokens.length, - documentVector = new lunr.Vector - - for (var i = 0; i < documentTokensLength; i++) { - var token = documentTokens.elements[i], - tf = this.tokenStore.get(token)[documentRef].tf, - idf = this.idf(token) - - documentVector.insert(this.corpusTokens.indexOf(token), tf * idf) - }; - - return documentVector - } - - /** - * Returns a representation of the index ready for serialisation. - * - * @returns {Object} - * @memberOf Index - */ - lunr.Index.prototype.toJSON = function () { - return { - version: lunr.version, - fields: this._fields, - ref: this._ref, - documentStore: this.documentStore.toJSON(), - tokenStore: this.tokenStore.toJSON(), - corpusTokens: this.corpusTokens.toJSON(), - pipeline: this.pipeline.toJSON() - } - } - - /** - * Applies a plugin to the current index. - * - * A plugin is a function that is called with the index as its context. - * Plugins can be used to customise or extend the behaviour the index - * in some way. A plugin is just a function, that encapsulated the custom - * behaviour that should be applied to the index. - * - * The plugin function will be called with the index as its argument, additional - * arguments can also be passed when calling use. The function will be called - * with the index as its context. - * - * Example: - * - * var myPlugin = function (idx, arg1, arg2) { - * // `this` is the index to be extended - * // apply any extensions etc here. - * } - * - * var idx = lunr(function () { - * this.use(myPlugin, 'arg1', 'arg2') - * }) - * - * @param {Function} plugin The plugin to apply. - * @memberOf Index - */ - lunr.Index.prototype.use = function (plugin) { - var args = Array.prototype.slice.call(arguments, 1) - args.unshift(this) - plugin.apply(this, args) - } - /*! - * lunr.Store - * Copyright (C) 2014 Oliver Nightingale - */ - - /** - * lunr.Store is a simple key-value store used for storing sets of tokens for - * documents stored in index. - * - * @constructor - * @module - */ - lunr.Store = function () { - this.store = {} - this.length = 0 - } - - /** - * Loads a previously serialised store - * - * @param {Object} serialisedData The serialised store to load. - * @returns {lunr.Store} - * @memberOf Store - */ - lunr.Store.load = function (serialisedData) { - var store = new this - - store.length = serialisedData.length - store.store = Object.keys(serialisedData.store).reduce(function (memo, key) { - memo[key] = lunr.SortedSet.load(serialisedData.store[key]) - return memo - }, {}) - - return store - } - - /** - * Stores the given tokens in the store against the given id. - * - * @param {Object} id The key used to store the tokens against. - * @param {Object} tokens The tokens to store against the key. - * @memberOf Store - */ - lunr.Store.prototype.set = function (id, tokens) { - if (!this.has(id)) this.length++ - this.store[id] = tokens - } - - /** - * Retrieves the tokens from the store for a given key. - * - * @param {Object} id The key to lookup and retrieve from the store. - * @returns {Object} - * @memberOf Store - */ - lunr.Store.prototype.get = function (id) { - return this.store[id] - } - - /** - * Checks whether the store contains a key. - * - * @param {Object} id The id to look up in the store. - * @returns {Boolean} - * @memberOf Store - */ - lunr.Store.prototype.has = function (id) { - return id in this.store - } - - /** - * Removes the value for a key in the store. - * - * @param {Object} id The id to remove from the store. - * @memberOf Store - */ - lunr.Store.prototype.remove = function (id) { - if (!this.has(id)) return - - delete this.store[id] - this.length-- - } - - /** - * Returns a representation of the store ready for serialisation. - * - * @returns {Object} - * @memberOf Store - */ - lunr.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 - */ - - /** - * lunr.stemmer is an english language stemmer, this is a JavaScript - * implementation of the PorterStemmer taken from http://tartaurs.org/~martin - * - * @module - * @param {String} str The string to stem - * @returns {String} - * @see lunr.Pipeline - */ - lunr.stemmer = (function(){ - var step2list = { - "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" - }, - - step3list = { - "icate" : "ic", - "ative" : "", - "alize" : "al", - "iciti" : "ic", - "ical" : "ic", - "ful" : "", - "ness" : "" - }, - - c = "[^aeiou]", // consonant - v = "[aeiouy]", // vowel - C = c + "[^aeiouy]*", // consonant sequence - V = v + "[aeiou]*", // vowel sequence - - mgr0 = "^(" + C + ")?" + V + C, // [C]VC... is m>0 - meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$", // [C]VC[V] is m=1 - mgr1 = "^(" + C + ")?" + V + C + V + C, // [C]VCVC... is m>1 - s_v = "^(" + C + ")?" + v; // vowel in stem - - var re_mgr0 = new RegExp(mgr0); - var re_mgr1 = new RegExp(mgr1); - var re_meq1 = new RegExp(meq1); - var re_s_v = new RegExp(s_v); - - var re_1a = /^(.+?)(ss|i)es$/; - var re2_1a = /^(.+?)([^s])s$/; - var re_1b = /^(.+?)eed$/; - var re2_1b = /^(.+?)(ed|ing)$/; - var re_1b_2 = /.$/; - var re2_1b_2 = /(at|bl|iz)$/; - var re3_1b_2 = new RegExp("([^aeiouylsz])\\1$"); - var re4_1b_2 = new RegExp("^" + C + v + "[^aeiouwxy]$"); - - var re_1c = /^(.+?[^aeiou])y$/; - var re_2 = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; - - var re_3 = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; - - var re_4 = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; - var re2_4 = /^(.+?)(s|t)(ion)$/; - - var re_5 = /^(.+?)e$/; - var re_5_1 = /ll$/; - var re3_5 = new RegExp("^" + C + v + "[^aeiouwxy]$"); - - var porterStemmer = function porterStemmer(w) { - var stem, - suffix, - firstch, - re, - re2, - re3, - re4; - - if (w.length < 3) { return w; } - - firstch = w.substr(0,1); - if (firstch == "y") { - w = firstch.toUpperCase() + w.substr(1); - } - - // Step 1a - re = re_1a - re2 = re2_1a; - - if (re.test(w)) { w = w.replace(re,"$1$2"); } - else if (re2.test(w)) { w = w.replace(re2,"$1$2"); } - - // Step 1b - re = re_1b; - re2 = re2_1b; - if (re.test(w)) { - var fp = re.exec(w); - re = re_mgr0; - if (re.test(fp[1])) { - re = re_1b_2; - w = w.replace(re,""); - } - } else if (re2.test(w)) { - var fp = re2.exec(w); - stem = fp[1]; - re2 = re_s_v; - if (re2.test(stem)) { - w = stem; - re2 = re2_1b_2; - re3 = re3_1b_2; - re4 = re4_1b_2; - if (re2.test(w)) { w = w + "e"; } - else if (re3.test(w)) { re = re_1b_2; w = w.replace(re,""); } - else if (re4.test(w)) { w = w + "e"; } - } - } - - // Step 1c - replace suffix y or Y by i if preceded by a non-vowel which is not the first letter of the word (so cry -> cri, by -> by, say -> say) - re = re_1c; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - w = stem + "i"; - } - - // Step 2 - re = re_2; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - suffix = fp[2]; - re = re_mgr0; - if (re.test(stem)) { - w = stem + step2list[suffix]; - } - } - - // Step 3 - re = re_3; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - suffix = fp[2]; - re = re_mgr0; - if (re.test(stem)) { - w = stem + step3list[suffix]; - } - } - - // Step 4 - re = re_4; - re2 = re2_4; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - re = re_mgr1; - if (re.test(stem)) { - w = stem; - } - } else if (re2.test(w)) { - var fp = re2.exec(w); - stem = fp[1] + fp[2]; - re2 = re_mgr1; - if (re2.test(stem)) { - w = stem; - } - } - - // Step 5 - re = re_5; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - re = re_mgr1; - re2 = re_meq1; - re3 = re3_5; - if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) { - w = stem; - } - } - - re = re_5_1; - re2 = re_mgr1; - if (re.test(w) && re2.test(w)) { - re = re_1b_2; - w = w.replace(re,""); - } - - // and turn initial Y back to y - - if (firstch == "y") { - w = firstch.toLowerCase() + w.substr(1); - } - - return w; - }; - - return porterStemmer; - })(); - - lunr.Pipeline.registerFunction(lunr.stemmer, 'stemmer') - /*! - * lunr.stopWordFilter - * Copyright (C) 2014 Oliver Nightingale - */ - - /** - * lunr.stopWordFilter is an English language stop word list filter, any words - * contained in the list will not be passed through the filter. - * - * This is intended to be used in the Pipeline. If the token does not pass the - * filter then undefined will be returned. - * - * @module - * @param {String} token The token to pass through the filter - * @returns {String} - * @see lunr.Pipeline - */ - lunr.stopWordFilter = function (token) { - if (lunr.stopWordFilter.stopWords.indexOf(token) === -1) return token - } - - lunr.stopWordFilter.stopWords = new lunr.SortedSet - lunr.stopWordFilter.stopWords.length = 119 - lunr.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" - ] - - lunr.Pipeline.registerFunction(lunr.stopWordFilter, 'stopWordFilter') - /*! - * lunr.trimmer - * Copyright (C) 2014 Oliver Nightingale - */ - - /** - * lunr.trimmer is a pipeline function for trimming non word - * characters from the beginning and end of tokens before they - * enter the index. - * - * This implementation may not work correctly for non latin - * characters and should either be removed or adapted for use - * with languages with non-latin characters. - * - * @module - * @param {String} token The token to pass through the filter - * @returns {String} - * @see lunr.Pipeline - */ - lunr.trimmer = function (token) { - return token - .replace(/^\W+/, '') - .replace(/\W+$/, '') - } - - lunr.Pipeline.registerFunction(lunr.trimmer, 'trimmer') - /*! - * lunr.stemmer - * Copyright (C) 2014 Oliver Nightingale - * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt - */ - - /** - * lunr.TokenStore is used for efficient storing and lookup of the reverse - * index of token to document ref. - * - * @constructor - */ - lunr.TokenStore = function () { - this.root = { docs: {} } - this.length = 0 - } - - /** - * Loads a previously serialised token store - * - * @param {Object} serialisedData The serialised token store to load. - * @returns {lunr.TokenStore} - * @memberOf TokenStore - */ - lunr.TokenStore.load = function (serialisedData) { - var store = new this - - store.root = serialisedData.root - store.length = serialisedData.length - - return store - } - - /** - * Adds a new token doc pair to the store. - * - * By default this function starts at the root of the current store, however - * it can start at any node of any token store if required. - * - * @param {String} token The token to store the doc under - * @param {Object} doc The doc to store against the token - * @param {Object} root An optional node at which to start looking for the - * correct place to enter the doc, by default the root of this lunr.TokenStore - * is used. - * @memberOf TokenStore - */ - lunr.TokenStore.prototype.add = function (token, doc, root) { - var root = root || this.root, - key = token[0], - rest = token.slice(1) - - if (!(key in root)) root[key] = {docs: {}} - - if (rest.length === 0) { - root[key].docs[doc.ref] = doc - this.length += 1 - return - } else { - return this.add(rest, doc, root[key]) - } - } - - /** - * Checks whether this key is contained within this lunr.TokenStore. - * - * By default this function starts at the root of the current store, however - * it can start at any node of any token store if required. - * - * @param {String} token The token to check for - * @param {Object} root An optional node at which to start - * @memberOf TokenStore - */ - lunr.TokenStore.prototype.has = function (token) { - if (!token) return false - - var node = this.root - - for (var i = 0; i < token.length; i++) { - if (!node[token[i]]) return false - - node = node[token[i]] - } - - return true - } - - /** - * Retrieve a node from the token store for a given token. - * - * By default this function starts at the root of the current store, however - * it can start at any node of any token store if required. - * - * @param {String} token The token to get the node for. - * @param {Object} root An optional node at which to start. - * @returns {Object} - * @see TokenStore.prototype.get - * @memberOf TokenStore - */ - lunr.TokenStore.prototype.getNode = function (token) { - if (!token) return {} - - var node = this.root - - for (var i = 0; i < token.length; i++) { - if (!node[token[i]]) return {} - - node = node[token[i]] - } - - return node - } - - /** - * Retrieve the documents for a node for the given token. - * - * By default this function starts at the root of the current store, however - * it can start at any node of any token store if required. - * - * @param {String} token The token to get the documents for. - * @param {Object} root An optional node at which to start. - * @returns {Object} - * @memberOf TokenStore - */ - lunr.TokenStore.prototype.get = function (token, root) { - return this.getNode(token, root).docs || {} - } - - lunr.TokenStore.prototype.count = function (token, root) { - return Object.keys(this.get(token, root)).length - } - - /** - * Remove the document identified by ref from the token in the store. - * - * By default this function starts at the root of the current store, however - * it can start at any node of any token store if required. - * - * @param {String} token The token to get the documents for. - * @param {String} ref The ref of the document to remove from this token. - * @param {Object} root An optional node at which to start. - * @returns {Object} - * @memberOf TokenStore - */ - lunr.TokenStore.prototype.remove = function (token, ref) { - if (!token) return - var node = this.root - - for (var i = 0; i < token.length; i++) { - if (!(token[i] in node)) return - node = node[token[i]] - } - - delete node.docs[ref] - } - - /** - * Find all the possible suffixes of the passed token using tokens - * currently in the store. - * - * @param {String} token The token to expand. - * @returns {Array} - * @memberOf TokenStore - */ - lunr.TokenStore.prototype.expand = function (token, memo) { - var root = this.getNode(token), - docs = root.docs || {}, - memo = memo || [] - - if (Object.keys(docs).length) memo.push(token) - - Object.keys(root) - .forEach(function (key) { - if (key === 'docs') return - - memo.concat(this.expand(token + key, memo)) - }, this) - - return memo - } - - /** - * Returns a representation of the token store ready for serialisation. - * - * @returns {Object} - * @memberOf TokenStore - */ - lunr.TokenStore.prototype.toJSON = function () { - return { - root: this.root, - length: this.length - } - } - - - /** - * export the module via AMD, CommonJS or as a browser global - * Export code from https://github.com/umdjs/umd/blob/master/returnExports.js - */ - ;(function (root, factory) { - if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module. - define(factory) - } else if (typeof exports === 'object') { - /** - * Node. Does not work with strict CommonJS, but - * only CommonJS-like environments that support module.exports, - * like Node. - */ - module.exports = factory() - } else { - // Browser globals (root is window) - root.lunr = factory() - } - }(this, function () { - /** - * Just return a value to define the module export. - * This example returns an object, but the module - * can return a function as the exported value. - */ - return lunr - })) -})() diff --git a/apidocs/cloud-api-source/source/layouts/layout.erb b/apidocs/cloud-api-source/source/layouts/layout.erb deleted file mode 100644 index 9f8cc27c769..00000000000 --- a/apidocs/cloud-api-source/source/layouts/layout.erb +++ /dev/null @@ -1,108 +0,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. -%> -<% language_tabs = current_page.data.language_tabs %> - - - - - - - <%= current_page.data.title || "API Documentation" %> - - <%= stylesheet_link_tag :screen, media: :screen %> - <%= stylesheet_link_tag :print, media: :print %> - - - <% if current_page.data.search %> - <%= javascript_include_tag "all" %> - <% else %> - <%= javascript_include_tag "all_nosearch" %> - <% end %> - - <% if language_tabs %> - - <% end %> - - - - - - NAV - <%= image_tag('navbar.png') %> - - -
        - <%= image_tag "logo.png" %> - <% if language_tabs %> -
        - <% language_tabs.each do |lang| %> - <% if lang.is_a? Hash %> - <%= lang.values.first %> - <% else %> - <%= lang %> - <% end %> - <% end %> -
        - <% end %> - <% if current_page.data.search %> - -
          - <% end %> -
          -
          - <% if current_page.data.toc_footers %> - - <% end %> -
          -
          -
          -
          - <%= yield %> - <% current_page.data.includes && current_page.data.includes.each do |include| %> - <%= partial "includes/#{include}" %> - <% end %> -
          -
          - <% if language_tabs %> -
          - <% language_tabs.each do |lang| %> - <% if lang.is_a? Hash %> - <%= lang.values.first %> - <% else %> - <%= lang %> - <% end %> - <% end %> -
          - <% end %> -
          -
          - - diff --git a/apidocs/cloud-api-source/source/stylesheets/_icon-font.scss b/apidocs/cloud-api-source/source/stylesheets/_icon-font.scss deleted file mode 100644 index b5994839881..00000000000 --- a/apidocs/cloud-api-source/source/stylesheets/_icon-font.scss +++ /dev/null @@ -1,38 +0,0 @@ -@font-face { - font-family: 'slate'; - src:font-url('slate.eot?-syv14m'); - src:font-url('slate.eot?#iefix-syv14m') format('embedded-opentype'), - font-url('slate.woff2?-syv14m') format('woff2'), - font-url('slate.woff?-syv14m') format('woff'), - font-url('slate.ttf?-syv14m') format('truetype'), - font-url('slate.svg?-syv14m#slate') format('svg'); - font-weight: normal; - font-style: normal; -} - -%icon { - font-family: 'slate'; - speak: none; - font-style: normal; - font-weight: normal; - font-variant: normal; - text-transform: none; - line-height: 1; -} - -%icon-exclamation-sign { - @extend %icon; - content: "\e600"; -} -%icon-info-sign { - @extend %icon; - content: "\e602"; -} -%icon-ok-sign { - @extend %icon; - content: "\e606"; -} -%icon-search { - @extend %icon; - content: "\e607"; -} diff --git a/apidocs/cloud-api-source/source/stylesheets/_normalize.css b/apidocs/cloud-api-source/source/stylesheets/_normalize.css deleted file mode 100644 index 46f646a5c00..00000000000 --- a/apidocs/cloud-api-source/source/stylesheets/_normalize.css +++ /dev/null @@ -1,427 +0,0 @@ -/*! normalize.css v3.0.2 | MIT License | git.io/normalize */ - -/** - * 1. Set default font family to sans-serif. - * 2. Prevent iOS text size adjust after orientation change, without disabling - * user zoom. - */ - -html { - font-family: sans-serif; /* 1 */ - -ms-text-size-adjust: 100%; /* 2 */ - -webkit-text-size-adjust: 100%; /* 2 */ -} - -/** - * Remove default margin. - */ - -body { - margin: 0; -} - -/* HTML5 display definitions - ========================================================================== */ - -/** - * Correct `block` display not defined for any HTML5 element in IE 8/9. - * Correct `block` display not defined for `details` or `summary` in IE 10/11 - * and Firefox. - * Correct `block` display not defined for `main` in IE 11. - */ - -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -main, -menu, -nav, -section, -summary { - display: block; -} - -/** - * 1. Correct `inline-block` display not defined in IE 8/9. - * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. - */ - -audio, -canvas, -progress, -video { - display: inline-block; /* 1 */ - vertical-align: baseline; /* 2 */ -} - -/** - * Prevent modern browsers from displaying `audio` without controls. - * Remove excess height in iOS 5 devices. - */ - -audio:not([controls]) { - display: none; - height: 0; -} - -/** - * Address `[hidden]` styling not present in IE 8/9/10. - * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22. - */ - -[hidden], -template { - display: none; -} - -/* Links - ========================================================================== */ - -/** - * Remove the gray background color from active links in IE 10. - */ - -a { - background-color: transparent; -} - -/** - * Improve readability when focused and also mouse hovered in all browsers. - */ - -a:active, -a:hover { - outline: 0; -} - -/* Text-level semantics - ========================================================================== */ - -/** - * Address styling not present in IE 8/9/10/11, Safari, and Chrome. - */ - -abbr[title] { - border-bottom: 1px dotted; -} - -/** - * Address style set to `bolder` in Firefox 4+, Safari, and Chrome. - */ - -b, -strong { - font-weight: bold; -} - -/** - * Address styling not present in Safari and Chrome. - */ - -dfn { - font-style: italic; -} - -/** - * Address variable `h1` font-size and margin within `section` and `article` - * contexts in Firefox 4+, Safari, and Chrome. - */ - -h1 { - font-size: 2em; - margin: 0.67em 0; -} - -/** - * Address styling not present in IE 8/9. - */ - -mark { - background: #ff0; - color: #000; -} - -/** - * Address inconsistent and variable font size in all browsers. - */ - -small { - font-size: 80%; -} - -/** - * Prevent `sub` and `sup` affecting `line-height` in all browsers. - */ - -sub, -sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; -} - -sup { - top: -0.5em; -} - -sub { - bottom: -0.25em; -} - -/* Embedded content - ========================================================================== */ - -/** - * Remove border when inside `a` element in IE 8/9/10. - */ - -img { - border: 0; -} - -/** - * Correct overflow not hidden in IE 9/10/11. - */ - -svg:not(:root) { - overflow: hidden; -} - -/* Grouping content - ========================================================================== */ - -/** - * Address margin not present in IE 8/9 and Safari. - */ - -figure { - margin: 1em 40px; -} - -/** - * Address differences between Firefox and other browsers. - */ - -hr { - -moz-box-sizing: content-box; - box-sizing: content-box; - height: 0; -} - -/** - * Contain overflow in all browsers. - */ - -pre { - overflow: auto; -} - -/** - * Address odd `em`-unit font size rendering in all browsers. - */ - -code, -kbd, -pre, -samp { - font-family: monospace, monospace; - font-size: 1em; -} - -/* Forms - ========================================================================== */ - -/** - * Known limitation: by default, Chrome and Safari on OS X allow very limited - * styling of `select`, unless a `border` property is set. - */ - -/** - * 1. Correct color not being inherited. - * Known issue: affects color of disabled elements. - * 2. Correct font properties not being inherited. - * 3. Address margins set differently in Firefox 4+, Safari, and Chrome. - */ - -button, -input, -optgroup, -select, -textarea { - color: inherit; /* 1 */ - font: inherit; /* 2 */ - margin: 0; /* 3 */ -} - -/** - * Address `overflow` set to `hidden` in IE 8/9/10/11. - */ - -button { - overflow: visible; -} - -/** - * Address inconsistent `text-transform` inheritance for `button` and `select`. - * All other form control elements do not inherit `text-transform` values. - * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera. - * Correct `select` style inheritance in Firefox. - */ - -button, -select { - text-transform: none; -} - -/** - * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` - * and `video` controls. - * 2. Correct inability to style clickable `input` types in iOS. - * 3. Improve usability and consistency of cursor style between image-type - * `input` and others. - */ - -button, -html input[type="button"], /* 1 */ -input[type="reset"], -input[type="submit"] { - -webkit-appearance: button; /* 2 */ - cursor: pointer; /* 3 */ -} - -/** - * Re-set default cursor for disabled elements. - */ - -button[disabled], -html input[disabled] { - cursor: default; -} - -/** - * Remove inner padding and border in Firefox 4+. - */ - -button::-moz-focus-inner, -input::-moz-focus-inner { - border: 0; - padding: 0; -} - -/** - * Address Firefox 4+ setting `line-height` on `input` using `!important` in - * the UA stylesheet. - */ - -input { - line-height: normal; -} - -/** - * It's recommended that you don't attempt to style these elements. - * Firefox's implementation doesn't respect box-sizing, padding, or width. - * - * 1. Address box sizing set to `content-box` in IE 8/9/10. - * 2. Remove excess padding in IE 8/9/10. - */ - -input[type="checkbox"], -input[type="radio"] { - box-sizing: border-box; /* 1 */ - padding: 0; /* 2 */ -} - -/** - * Fix the cursor style for Chrome's increment/decrement buttons. For certain - * `font-size` values of the `input`, it causes the cursor style of the - * decrement button to change from `default` to `text`. - */ - -input[type="number"]::-webkit-inner-spin-button, -input[type="number"]::-webkit-outer-spin-button { - height: auto; -} - -/** - * 1. Address `appearance` set to `searchfield` in Safari and Chrome. - * 2. Address `box-sizing` set to `border-box` in Safari and Chrome - * (include `-moz` to future-proof). - */ - -input[type="search"] { - -webkit-appearance: textfield; /* 1 */ - -moz-box-sizing: content-box; - -webkit-box-sizing: content-box; /* 2 */ - box-sizing: content-box; -} - -/** - * Remove inner padding and search cancel button in Safari and Chrome on OS X. - * Safari (but not Chrome) clips the cancel button when the search input has - * padding (and `textfield` appearance). - */ - -input[type="search"]::-webkit-search-cancel-button, -input[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; -} - -/** - * Define consistent border, margin, and padding. - */ - -fieldset { - border: 1px solid #c0c0c0; - margin: 0 2px; - padding: 0.35em 0.625em 0.75em; -} - -/** - * 1. Correct `color` not being inherited in IE 8/9/10/11. - * 2. Remove padding so people aren't caught out if they zero out fieldsets. - */ - -legend { - border: 0; /* 1 */ - padding: 0; /* 2 */ -} - -/** - * Remove default vertical scrollbar in IE 8/9/10/11. - */ - -textarea { - overflow: auto; -} - -/** - * Don't inherit the `font-weight` (applied by a rule above). - * NOTE: the default cannot safely be changed in Chrome and Safari on OS X. - */ - -optgroup { - font-weight: bold; -} - -/* Tables - ========================================================================== */ - -/** - * Remove most spacing between table cells. - */ - -table { - border-collapse: collapse; - border-spacing: 0; -} - -td, -th { - padding: 0; -} diff --git a/apidocs/cloud-api-source/source/stylesheets/_syntax.scss.erb b/apidocs/cloud-api-source/source/stylesheets/_syntax.scss.erb deleted file mode 100644 index dfeb0c15240..00000000000 --- a/apidocs/cloud-api-source/source/stylesheets/_syntax.scss.erb +++ /dev/null @@ -1,27 +0,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. -*/ - -@import 'variables'; - -<%= Rouge::Themes::Base16::Monokai.render(:scope => '.highlight') %> - -.highlight .c, .highlight .cm, .highlight .c1, .highlight .cs { - color: #909090; -} - -.highlight, .highlight .w { - background-color: $code-bg; -} \ No newline at end of file diff --git a/apidocs/cloud-api-source/source/stylesheets/_variables.scss b/apidocs/cloud-api-source/source/stylesheets/_variables.scss deleted file mode 100644 index 5fe64b1f302..00000000000 --- a/apidocs/cloud-api-source/source/stylesheets/_variables.scss +++ /dev/null @@ -1,109 +0,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. -*/ - - -//////////////////////////////////////////////////////////////////////////////// -// CUSTOMIZE SLATE -//////////////////////////////////////////////////////////////////////////////// -// Use these settings to help adjust the appearance of Slate - - -// BACKGROUND COLORS -//////////////////// -$nav-bg: #393939; -$examples-bg: #393939; -$code-bg: #292929; -$code-annotation-bg: #1c1c1c; -$nav-subitem-bg: #262626; -$nav-active-bg: #2467af; -$lang-select-border: #000; -$lang-select-bg: #222; -$lang-select-active-bg: $examples-bg; // feel free to change this to blue or something -$lang-select-pressed-bg: #111; // color of language tab bg when mouse is pressed -$main-bg: #eaf2f6; -$aside-notice-bg: #8fbcd4; -$aside-warning-bg: #c97a7e; -$aside-success-bg: #6ac174; -$search-notice-bg: #c97a7e; - - -// TEXT COLORS -//////////////////// -$main-text: #333; // main content text color -$nav-text: #fff; -$nav-active-text: #fff; -$lang-select-text: #fff; // color of unselected language tab text -$lang-select-active-text: #fff; // color of selected language tab text -$lang-select-pressed-text: #fff; // color of language tab text when mouse is pressed - - -// SIZES -//////////////////// -$nav-width: 230px; // width of the navbar -$examples-width: 50%; // portion of the screen taken up by code examples -$logo-margin: 20px; // margin between nav items and logo, ignored if search is active -$main-padding: 28px; // padding to left and right of content & examples -$nav-padding: 15px; // padding to left and right of navbar -$nav-v-padding: 10px; // padding used vertically around search boxes and results -$nav-indent: 10px; // extra padding for ToC subitems -$code-annotation-padding: 13px; // padding inside code annotations -$h1-margin-bottom: 21px; // padding under the largest header tags -$tablet-width: 930px; // min width before reverting to tablet size -$phone-width: $tablet-width - $nav-width; // min width before reverting to mobile size - - -// FONTS -//////////////////// -%default-font { - font-family: "Helvetica Neue", Helvetica, Arial, "Microsoft Yahei","微软雅黑", STXihei, "华文细黑", sans-serif; - font-size: 13px; -} - -%header-font { - @extend %default-font; - font-weight: bold; -} - -%code-font { - font-family: Consolas, Menlo, Monaco, "Lucida Console", "Liberation Mono", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Courier New", monospace, serif; - font-size: 12px; - line-height: 1.5; -} - - -// OTHER -//////////////////// -$nav-active-shadow: #000; -$nav-footer-border-color: #666; -$nav-embossed-border-top: #000; -$nav-embossed-border-bottom: #939393; -$main-embossed-text-shadow: 0px 1px 0px #fff; -$search-box-border-color: #666; - - -//////////////////////////////////////////////////////////////////////////////// -// INTERNAL -//////////////////////////////////////////////////////////////////////////////// -// These settings are probably best left alone. - -%break-words { - word-break: break-all; - - /* Non standard for webkit */ - word-break: break-word; - - hyphens: auto; -} diff --git a/apidocs/cloud-api-source/source/stylesheets/print.css.scss b/apidocs/cloud-api-source/source/stylesheets/print.css.scss deleted file mode 100644 index 4bda057f019..00000000000 --- a/apidocs/cloud-api-source/source/stylesheets/print.css.scss +++ /dev/null @@ -1,142 +0,0 @@ -@charset "utf-8"; -@import 'normalize'; -@import 'compass'; -@import 'variables'; -@import 'icon-font'; - -/* -Copyright 2008-2013 Concur Technologies, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); you may -not use this file except in compliance with the License. You may obtain -a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -License for the specific language governing permissions and limitations -under the License. -*/ - -$print-color: #999; -$print-color-light: #ccc; -$print-font-size: 12px; - -body { - @extend %default-font; -} - -.tocify, .toc-footer, .lang-selector, .search, #nav-button { - display: none; -} - -.tocify-wrapper>img { - margin: 0 auto; - display: block; -} - -.content { - font-size: 12px; - - pre, code { - @extend %code-font; - @extend %break-words; - border: 1px solid $print-color; - border-radius: 5px; - font-size: 0.8em; - } - - pre { - padding: 1.3em; - } - - code { - padding: 0.2em; - } - - table { - border: 1px solid $print-color; - tr { - border-bottom: 1px solid $print-color; - } - td,th { - padding: 0.7em; - } - } - - p { - line-height: 1.5; - } - - a { - text-decoration: none; - color: #000; - } - - h1 { - @extend %header-font; - font-size: 2.5em; - padding-top: 0.5em; - padding-bottom: 0.5em; - margin-top: 1em; - margin-bottom: $h1-margin-bottom; - border: 2px solid $print-color-light; - border-width: 2px 0; - text-align: center; - } - - h2 { - @extend %header-font; - font-size: 1.8em; - margin-top: 2em; - border-top: 2px solid $print-color-light; - padding-top: 0.8em; - } - - h1+h2, h1+div+h2 { - border-top: none; - padding-top: 0; - margin-top: 0; - } - - h3, h4 { - @extend %header-font; - font-size: 0.8em; - margin-top: 1.5em; - margin-bottom: 0.8em; - text-transform: uppercase; - } - - h5, h6 { - text-transform: uppercase; - } - - aside { - padding: 1em; - border: 1px solid $print-color-light; - border-radius: 5px; - margin-top: 1.5em; - margin-bottom: 1.5em; - line-height: 1.6; - } - - aside:before { - vertical-align: middle; - padding-right: 0.5em; - font-size: 14px; - } - - aside.notice:before { - @extend %icon-info-sign; - } - - aside.warning:before { - @extend %icon-exclamation-sign; - } - - aside.success:before { - @extend %icon-ok-sign; - } -} \ No newline at end of file diff --git a/apidocs/cloud-api-source/source/stylesheets/screen.css.scss b/apidocs/cloud-api-source/source/stylesheets/screen.css.scss deleted file mode 100644 index e4b3ef82b22..00000000000 --- a/apidocs/cloud-api-source/source/stylesheets/screen.css.scss +++ /dev/null @@ -1,620 +0,0 @@ -@charset "utf-8"; -@import 'normalize'; -@import 'compass'; -@import 'variables'; -@import 'syntax'; -@import 'icon-font'; - -/* -Copyright 2008-2013 Concur Technologies, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); you may -not use this file except in compliance with the License. You may obtain -a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -License for the specific language governing permissions and limitations -under the License. -*/ - -//////////////////////////////////////////////////////////////////////////////// -// GENERAL STUFF -//////////////////////////////////////////////////////////////////////////////// - -html, body { - color: $main-text; - padding: 0; - margin: 0; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - @extend %default-font; - background-color: $main-bg; - height: 100%; - -webkit-text-size-adjust: none; /* Never autoresize text */ -} - -//////////////////////////////////////////////////////////////////////////////// -// TABLE OF CONTENTS -//////////////////////////////////////////////////////////////////////////////// - -#toc > ul > li > a > span { - float: right; - background-color: #2484FF; - border-radius: 40px; - width: 20px; -} - -@mixin embossed-bg { - background: - linear-gradient(to bottom, rgba(#000, 0.2), rgba(#000, 0) 8px), - linear-gradient(to top, rgba(#000, 0.2), rgba(#000, 0) 8px), - linear-gradient(to bottom, rgba($nav-embossed-border-top, 1), rgba($nav-embossed-border-top, 0) 1.5px), - linear-gradient(to top, rgba($nav-embossed-border-bottom, 1), rgba($nav-embossed-border-bottom, 0) 1.5px), - $nav-subitem-bg; -} - -.tocify-wrapper { - transition: left 0.3s ease-in-out; - - overflow-y: auto; - overflow-x: hidden; - position: fixed; - z-index: 30; - top: 0; - left: 0; - bottom: 0; - width: $nav-width; - background-color: $nav-bg; - font-size: 13px; - font-weight: bold; - - // language selector for mobile devices - .lang-selector { - display: none; - a { - padding-top: 0.5em; - padding-bottom: 0.5em; - } - } - - // This is the logo at the top of the ToC - &>img { - display: block; - } - - &>.search { - position: relative; - - input { - background: $nav-bg; - border-width: 0 0 1px 0; - border-color: $search-box-border-color; - padding: 6px 0 6px 20px; - box-sizing: border-box; - margin: $nav-v-padding $nav-padding; - width: $nav-width - 30; - outline: none; - color: $nav-text; - border-radius: 0; /* ios has a default border radius */ - } - - &:before { - position: absolute; - top: 17px; - left: $nav-padding; - color: $nav-text; - @extend %icon-search; - } - } - - img+.tocify { - margin-top: $logo-margin; - } - - .search-results { - margin-top: 0; - box-sizing: border-box; - height: 0; - overflow-y: auto; - overflow-x: hidden; - transition-property: height, margin; - transition-duration: 180ms; - transition-timing-function: ease-in-out; - &.visible { - height: 30%; - margin-bottom: 1em; - } - - @include embossed-bg; - - li { - margin: 1em $nav-padding; - line-height: 1; - } - - a { - color: $nav-text; - text-decoration: none; - - &:hover { - text-decoration: underline; - } - } - } - - - .tocify-item>a, .toc-footer li { - padding: 0 $nav-padding 0 $nav-padding; - display: block; - overflow-x: hidden; - white-space: nowrap; - text-overflow: ellipsis; - } - - // The Table of Contents is composed of multiple nested - // unordered lists. These styles remove the default - // styling of an unordered list because it is ugly. - ul, li { - list-style: none; - margin: 0; - padding: 0; - line-height: 28px; - } - - li { - color: $nav-text; - transition-property: background; - transition-timing-function: linear; - transition-duration: 230ms; - } - - // This is the currently selected ToC entry - .tocify-focus { - box-shadow: 0px 1px 0px $nav-active-shadow; - background-color: $nav-active-bg; - color: $nav-active-text; - } - - // Subheaders are the submenus that slide open - // in the table of contents. - .tocify-subheader { - display: none; // tocify will override this when needed - background-color: $nav-subitem-bg; - font-weight: 500; - .tocify-item>a { - padding-left: $nav-padding + $nav-indent; - font-size: 12px; - } - - // for embossed look: - @include embossed-bg; - &>li:last-child { - box-shadow: none; // otherwise it'll overflow out of the subheader - } - } - - .toc-footer { - padding: 1em 0; - margin-top: 1em; - border-top: 1px dashed $nav-footer-border-color; - - li,a { - color: $nav-text; - text-decoration: none; - } - - a:hover { - text-decoration: underline; - } - - li { - font-size: 0.8em; - line-height: 1.7; - text-decoration: none; - } - } - -} - -// button to show navigation on mobile devices -#nav-button { - span { - display: block; - $side-pad: $main-padding / 2 - 8px; - padding: $side-pad $side-pad $side-pad; - background-color: rgba($main-bg, 0.7); - transform-origin: 0 0; - transform: rotate(-90deg) translate(-100%, 0); - border-radius: 0 0 0 5px; - } - padding: 0 1.5em 5em 0; // increase touch size area - display: none; - position: fixed; - top: 0; - left: 0; - z-index: 100; - color: #000; - text-decoration: none; - font-weight: bold; - opacity: 0.7; - line-height: 16px; - img { - height: 16px; - vertical-align: bottom; - } - - transition: left 0.3s ease-in-out; - - &:hover { opacity: 1; } - &.open {left: $nav-width} -} - - -//////////////////////////////////////////////////////////////////////////////// -// PAGE LAYOUT AND CODE SAMPLE BACKGROUND -//////////////////////////////////////////////////////////////////////////////// - -.page-wrapper { - margin-left: $nav-width; - position: relative; - z-index: 10; - background-color: $main-bg; - min-height: 100%; - - padding-bottom: 1px; // prevent margin overflow - - // The dark box is what gives the code samples their dark background. - // It sits essentially under the actual content block, which has a - // transparent background. - // I know, it's hackish, but it's the simplist way to make the left - // half of the content always this background color. - .dark-box { - width: $examples-width; - background-color: $examples-bg; - position: absolute; - right: 0; - top: 0; - bottom: 0; - } - - .lang-selector { - position: fixed; - z-index: 50; - border-bottom: 5px solid $lang-select-active-bg; - } -} - -.lang-selector { - background-color: $lang-select-bg; - width: 100%; - font-weight: bold; - a { - display: block; - float:left; - color: $lang-select-text; - text-decoration: none; - padding: 0 10px; - line-height: 30px; - outline: 0; - - &:active, &:focus { - background-color: $lang-select-pressed-bg; - color: $lang-select-pressed-text; - } - - &.active { - background-color: $lang-select-active-bg; - color: $lang-select-active-text; - } - } - - &:after { - content: ''; - clear: both; - display: block; - } -} - -//////////////////////////////////////////////////////////////////////////////// -// CONTENT STYLES -//////////////////////////////////////////////////////////////////////////////// -// This is all the stuff with the light background in the left half of the page - -.content { - // to place content above the dark box - position: relative; - z-index: 30; - - &:after { - content: ''; - display: block; - clear: both; - } - - &>h1, &>h2, &>h3, &>h4, &>h5, &>h6, &>p, &>table, &>ul, &>ol, &>aside, &>dl { - margin-right: $examples-width; - padding: 0 $main-padding; - box-sizing: border-box; - display: block; - @include text-shadow($main-embossed-text-shadow); - - @extend %left-col; - } - - &>ul, &>ol { - padding-left: $main-padding + 15px; - } - - // the div is the tocify hidden div for placeholding stuff - &>h1, &>h2, &>div { - clear:both; - } - - h1 { - @extend %header-font; - font-size: 30px; - padding-top: 0.5em; - padding-bottom: 0.5em; - border-bottom: 1px solid #ccc; - margin-bottom: $h1-margin-bottom; - margin-top: 2em; - border-top: 1px solid #ddd; - background-image: linear-gradient(to bottom, #fff, #f9f9f9); - } - - h1:first-child, div:first-child + h1 { - border-top-width: 0; - margin-top: 0; - } - - h2 { - @extend %header-font; - font-size: 20px; - margin-top: 4em; - margin-bottom: 0; - border-top: 1px solid #ccc; - padding-top: 1.2em; - padding-bottom: 1.2em; - background-image: linear-gradient(to bottom, rgba(#fff, 0.4), rgba(#fff, 0)); - } - - // h2s right after h1s should bump right up - // against the h1s. - h1 + h2, h1 + div + h2 { - margin-top: $h1-margin-bottom * -1; - border-top: none; - } - - h3, h4, h5, h6 { - @extend %header-font; - font-size: 15px; - margin-top: 2.5em; - margin-bottom: 0.8em; - } - - h4, h5, h6 { - font-size: 10px; - } - - hr { - margin: 2em 0; - border-top: 2px solid $examples-bg; - border-bottom: 2px solid $main-bg; - } - - table { - margin-bottom: 1em; - overflow: auto; - th,td { - text-align: left; - vertical-align: top; - line-height: 1.6; - } - - th { - padding: 5px 10px; - border-bottom: 1px solid #ccc; - vertical-align: bottom; - } - - td { - padding: 10px; - } - - tr:last-child { - border-bottom: 1px solid #ccc; - } - - tr:nth-child(odd)>td { - background-color: lighten($main-bg,4.2%); - } - - tr:nth-child(even)>td { - background-color: lighten($main-bg,2.4%); - } - } - - dt { - font-weight: bold; - } - - dd { - margin-left: 15px; - } - - p, li, dt, dd { - line-height: 1.6; - margin-top: 0; - } - - img { - max-width: 100%; - } - - code { - background-color: rgba(0,0,0,0.05); - padding: 3px; - border-radius: 3px; - @extend %break-words; - @extend %code-font; - } - - pre>code { - background-color: transparent; - padding: 0; - } - - aside { - padding-top: 1em; - padding-bottom: 1em; - @include text-shadow(0 1px 0 lighten($aside-notice-bg, 15%)); - margin-top: 1.5em; - margin-bottom: 1.5em; - background: $aside-notice-bg; - line-height: 1.6; - - &.warning { - background-color: $aside-warning-bg; - @include text-shadow(0 1px 0 lighten($aside-warning-bg, 15%)); - } - - &.success { - background-color: $aside-success-bg; - @include text-shadow(0 1px 0 lighten($aside-success-bg, 15%)); - } - } - - aside:before { - vertical-align: middle; - padding-right: 0.5em; - font-size: 14px; - } - - aside.notice:before { - @extend %icon-info-sign; - } - - aside.warning:before { - @extend %icon-exclamation-sign; - } - - aside.success:before { - @extend %icon-ok-sign; - } - - .search-highlight { - padding: 2px; - margin: -2px; - border-radius: 4px; - border: 1px solid #F7E633; - @include text-shadow(1px 1px 0 #666); - background: linear-gradient(to top left, #F7E633 0%, #F1D32F 100%); - } -} - -//////////////////////////////////////////////////////////////////////////////// -// CODE SAMPLE STYLES -//////////////////////////////////////////////////////////////////////////////// -// This is all the stuff that appears in the right half of the page - -.content { - pre, blockquote { - background-color: $code-bg; - color: #fff; - - padding: 2em $main-padding; - margin: 0; - width: $examples-width; - - float:right; - clear:right; - - box-sizing: border-box; - @include text-shadow(0px 1px 2px rgba(0,0,0,0.4)); - - @extend %right-col; - - &>p { margin: 0; } - - a { - color: #fff; - text-decoration: none; - border-bottom: dashed 1px #ccc; - } - } - - pre { - @extend %code-font; - } - - blockquote { - &>p { - background-color: $code-annotation-bg; - border-radius: 5px; - padding: $code-annotation-padding; - color: #ccc; - border-top: 1px solid #000; - border-bottom: 1px solid #404040; - } - } -} - -//////////////////////////////////////////////////////////////////////////////// -// RESPONSIVE DESIGN -//////////////////////////////////////////////////////////////////////////////// -// These are the styles for phones and tablets -// There are also a couple styles disperesed - -@media (max-width: $tablet-width) { - .tocify-wrapper { - left: -$nav-width; - - &.open { - left: 0; - } - } - - .page-wrapper { - margin-left: 0; - } - - #nav-button { - display: block; - } - - .tocify-wrapper .tocify-item > a { - padding-top: 0.3em; - padding-bottom: 0.3em; - } -} - -@media (max-width: $phone-width) { - .dark-box { - display: none; - } - - %left-col { - margin-right: 0; - } - - .tocify-wrapper .lang-selector { - display: block; - } - - .page-wrapper .lang-selector { - display: none; - } - - %right-col { - width: auto; - float: none; - } - - %right-col + %left-col { - margin-top: $main-padding; - } -} diff --git a/apidocs/docker-cloud/fonts/slate.eot b/apidocs/docker-cloud/fonts/slate.eot deleted file mode 100644 index 13c4839a197..00000000000 Binary files a/apidocs/docker-cloud/fonts/slate.eot and /dev/null differ diff --git a/apidocs/docker-cloud/fonts/slate.svg b/apidocs/docker-cloud/fonts/slate.svg deleted file mode 100644 index 5f34982306b..00000000000 --- a/apidocs/docker-cloud/fonts/slate.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - -Generated by IcoMoon - - - - - - - - - - diff --git a/apidocs/docker-cloud/fonts/slate.ttf b/apidocs/docker-cloud/fonts/slate.ttf deleted file mode 100644 index ace9a46a7e1..00000000000 Binary files a/apidocs/docker-cloud/fonts/slate.ttf and /dev/null differ diff --git a/apidocs/docker-cloud/fonts/slate.woff b/apidocs/docker-cloud/fonts/slate.woff deleted file mode 100644 index 1e72e0ee001..00000000000 Binary files a/apidocs/docker-cloud/fonts/slate.woff and /dev/null differ diff --git a/apidocs/docker-cloud/fonts/slate.woff2 b/apidocs/docker-cloud/fonts/slate.woff2 deleted file mode 100644 index 7c585a72737..00000000000 Binary files a/apidocs/docker-cloud/fonts/slate.woff2 and /dev/null differ diff --git a/apidocs/docker-cloud/images/docker-cloud.svg b/apidocs/docker-cloud/images/docker-cloud.svg deleted file mode 100644 index 49f2570958d..00000000000 --- a/apidocs/docker-cloud/images/docker-cloud.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - Cloud - Created with Sketch. - - - - - - - - - \ No newline at end of file diff --git a/apidocs/docker-cloud/images/logo.png b/apidocs/docker-cloud/images/logo.png deleted file mode 100644 index 407d4cc3bf0..00000000000 Binary files a/apidocs/docker-cloud/images/logo.png and /dev/null differ diff --git a/apidocs/docker-cloud/images/navbar.png b/apidocs/docker-cloud/images/navbar.png deleted file mode 100644 index df38e90d87e..00000000000 Binary files a/apidocs/docker-cloud/images/navbar.png and /dev/null differ diff --git a/apidocs/docker-cloud/includes/action.html b/apidocs/docker-cloud/includes/action.html deleted file mode 100644 index d3476b91357..00000000000 --- a/apidocs/docker-cloud/includes/action.html +++ /dev/null @@ -1,513 +0,0 @@ - - - - - - - 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/user_namespace/cluster/eea638f4-b77a-4183-b241-22dbd7866f22/",
          -    "path": "/api/infra/v1/user_namespace/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": "user_namespace",
          -    "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 appropriate 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
          userThe user authenticated in the request that created the action
          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 deleted file mode 100644 index 6de0c68fb45..00000000000 --- a/apidocs/docker-cloud/includes/availabilityzone.html +++ /dev/null @@ -1,187 +0,0 @@ - - - - - - - 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 deleted file mode 100644 index ce7a583627d..00000000000 --- a/apidocs/docker-cloud/includes/container.html +++ /dev/null @@ -1,1154 +0,0 @@ - - - - - - - API Documentation - - - - - - - - - - - - - NAV - - - -
          - -
          -
          -
          -
          -
          -
          -

          Containers

          - -

          Container

          - -
          -

          Example

          -
          -
          {
          -    "autodestroy": "OFF",
          -    "autorestart": "OFF",
          -    "bindings": [
          -        {
          -            "volume": "/api/infra/v1/user_namespace/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/user_namespace/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/user_namespace/container/c1dd4e1e-1356-411c-8613-e15146633640/",
          -            "name": "DB_1",
          -            "to_container": "/api/app/v1/user_namespace/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/user_namespace/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/user_namespace/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/user_namespace/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.

          - -

          This is a namespaced endpoint.

          - -

          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 assigned 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)
          pidPID (Process) Namespace mode for the container (more information)
          - -

          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.
          - - - - - - - - - - - - - - - - - - - - - - - - - -
          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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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 deleted file mode 100644 index a93d9500596..00000000000 --- a/apidocs/docker-cloud/includes/dockercloud-events.html +++ /dev/null @@ -1,258 +0,0 @@ - - - - - - - API Documentation - - - - - - - - - - - - - NAV - - - -
          - -
          -
          -
          -
          -
          -
          -

          Docker Cloud Events

          - -

          Docker Cloud Event

          - -
          -

          Example

          -
          -
          {
          -    "type": "action",
          -    "action": "update",
          -    "parents": [
          -        "/api/app/v1/user_namespace/container/0b0e3538-88df-4f07-9aed-3a3cc4175076/"
          -    ],
          -    "resource_uri": "/api/app/v1/user_namespace/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
          • -
          - -

          This is a namespaced endpoint.

          - -

          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. Possible 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"
          -
          -// Listens for container events only
          -myFilter := dockercloud.NewStreamFilter(&dockercloud.EventFilter{Type: "container"})
          -
          -stream := dockercloud.NewStream(myFilter)
          -
          -if err := stream.Connect(); err == nil {
          -    go stream.RunForever()
          -} else {
          -    log.Print("Connect err: " + err.Error())
          -}
          -
          -for {
          -    select {
          -    case event := <-stream.MessageChan:
          -        log.Println(event)
          -    case err := <-stream.ErrorChan:
          -        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/[optional_namespace/]events/

          - -

          Query Parameters

          - - - - - - - - - - - - - - - - - - - -
          ParameterDescription
          typeFilter by type
          objectFilter by object resource URI
          parentFilter by object parents
          - -
          -
          -
          -
          - - diff --git a/apidocs/docker-cloud/includes/node.html b/apidocs/docker-cloud/includes/node.html deleted file mode 100644 index 6fa50cf1352..00000000000 --- a/apidocs/docker-cloud/includes/node.html +++ /dev/null @@ -1,531 +0,0 @@ - - - - - - - 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/user_namespace/nodecluster/d787a4b7-d525-4061-97a0-f423e8f1d229/",
          -    "node_type": "/api/infra/v1/user_namespace/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/user_namespace/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.

          - -

          This is a namespaced endpoint.

          - -

          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.
          - -

          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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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 deleted file mode 100644 index cc908bc7195..00000000000 --- a/apidocs/docker-cloud/includes/nodecluster.html +++ /dev/null @@ -1,582 +0,0 @@ - - - - - - - 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/user_namespace/node/75d20367-0948-4f10-8ba4-ffb4d16ed3c6/"
          -    ],
          -    "region": "/api/infra/v1/region/aws/us-east-1/",
          -    "resource_uri": "/api/infra/v1/user_namespace/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.

          - -

          This is a namespaced endpoint.

          - -

          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 identifiers 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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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 deleted file mode 100644 index cf4262944a7..00000000000 --- a/apidocs/docker-cloud/includes/nodetype.html +++ /dev/null @@ -1,213 +0,0 @@ - - - - - - - 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 deleted file mode 100644 index 7b4368095e0..00000000000 --- a/apidocs/docker-cloud/includes/provider.html +++ /dev/null @@ -1,192 +0,0 @@ - - - - - - - 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 deleted file mode 100644 index b44659201d4..00000000000 --- a/apidocs/docker-cloud/includes/region.html +++ /dev/null @@ -1,209 +0,0 @@ - - - - - - - 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 deleted file mode 100644 index 034f780021d..00000000000 --- a/apidocs/docker-cloud/includes/registry.html +++ /dev/null @@ -1,171 +0,0 @@ - - - - - - - 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/user_namespace/registry/registry-1.docker.io/"
          -}
          -
          - -

          Represents a registry where repositories are hosted.

          - -

          This is a namespaced endpoint.

          - -

          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/[optional_namespace/]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/[optional_namespace/]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 deleted file mode 100644 index d4af17c206c..00000000000 --- a/apidocs/docker-cloud/includes/repository.html +++ /dev/null @@ -1,351 +0,0 @@ - - - - - - - API Documentation - - - - - - - - - - - - - NAV - - - -
          - -
          -
          -
          -
          -
          -
          -

          External Repositories

          - -

          External Repository

          - -
          -

          Example

          -
          -
          {
          -  "in_use": false,
          -  "name": "my.registry.com/myrepo",
          -  "registry": "/api/repo/v1/user_namespace/registry/my.registry.com/",
          -  "resource_uri": "/api/repo/v1/user_namespace/repository/my.registry.com/myrepo/",
          -}
          -
          - -

          The repository endpoint is used to add and remove existing repositories on third party registries to be used in deployments and builds.

          - -

          This is a namespaced endpoint.

          - -

          Attributes

          - - - - - - - - - - - - - - - - - - - - - - - -
          AttributeDescription
          resource_uriA unique API endpoint that represents the repository
          nameName of the repository, i.e. my.registry.com/myrepo
          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/[optional_namespace/]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/[optional_namespace/]repository/

          - -

          JSON Parameters

          - - - - - - - - - - - - - - - - - - - -
          ParameterDescription
          nameName of the repository, i.e. ‘my.registry.com/myrepo’
          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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]repository/

          - -

          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 deleted file mode 100644 index e6c0007ce7b..00000000000 --- a/apidocs/docker-cloud/includes/service.html +++ /dev/null @@ -1,1472 +0,0 @@ - - - - - - - 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/user_namespace/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/user_namespace/container/6f8ee454-9dc3-4387-80c3-57aac1be3cc6/",
          -    "/api/app/v1/user_namespace/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/user_namespace/service/adeebc1b-1b81-4af0-b8f2-cefffc69d7fb/"
          -  },
          -  "linked_from_service": [],
          -  "linked_to_service": [
          -    {
          -      "from_service": "/api/app/v1/user_namespace/service/09cbcf8d-a727-40d9-b420-c8e18b7fa55b/",
          -      "name": "DB",
          -      "to_service": "/api/app/v1/user_namespace/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/user_namespace/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/user_namespace/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.

          - -

          This is a namespaced endpoint.

          - -

          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)
          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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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 deleted file mode 100644 index a7e4b3b3acd..00000000000 --- a/apidocs/docker-cloud/includes/stack.html +++ /dev/null @@ -1,688 +0,0 @@ - - - - - - - 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/user_namespace/stack/7fe7ec85-58be-4904-81da-de2219098d7c/",
          -  "services": [
          -    "/api/app/v1/user_namespace/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.

          - -

          This is a namespaced endpoint.

          - -

          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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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 deleted file mode 100644 index fd457a5d81f..00000000000 --- a/apidocs/docker-cloud/includes/tag.html +++ /dev/null @@ -1,112 +0,0 @@ - - - - - - - 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 deleted file mode 100644 index 1cc7e500862..00000000000 --- a/apidocs/docker-cloud/includes/triggers.html +++ /dev/null @@ -1,382 +0,0 @@ - - - - - - - API Documentation - - - - - - - - - - - - - NAV - - - -
          - -
          -
          -
          -
          -
          -
          -

          Triggers

          - -

          Service triggers

          - -
          -

          Example

          -
          -
          {
          -  "url": "/api/app/v1/user_namespace/service/82d4a246-52d8-468d-903d-9da9ef05ff28/trigger/0224815a-c156-44e4-92d7-997c69354438/call/",
          -  "operation": "REDEPLOY",
          -  "name": "docker_trigger",
          -  "resource_uri": "/api/app/v1/user_namespace/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.

          - -

          This is a namespaced endpoint.

          - -

          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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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 deleted file mode 100644 index e3369babcfd..00000000000 --- a/apidocs/docker-cloud/index.html +++ /dev/null @@ -1,6579 +0,0 @@ - - - - - - - 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

            - -

            Namespaced endpoints

            - -

            Endpoints that are labeled as “namespaced” allow the users to operate over -different namespaces, for example over an individual user namespace, or the -namespace of an organization the user is a member of. A namespace identifies the -owner of the resource.

            - -

            The namespace is optional. If left blank, it defaults to the authenticated user -in the request. The namespace is set before the resource in the URL schema: -https://cloud.docker.com/api/<subsystem>/<version>/(optional_namespace/)<resource>/

            - -

            Examples:

            - -
              -
            • The user exampleuser wants to operate on the node cluster list endpoint in their own namespace. They can use either of the following urls: - -
                -
              • https://cloud.docker.com/api/infra/v1/nodecluster/ (namespace omitted, so will use the user authenticated in the request)
              • -
              • https://cloud.docker.com/api/infra/v1/exampleuser/nodecluster/
              • -
            • -
            • The user wants to operate on the node cluster list endpoint in an organization called exampleorg (which they have permission to see): - -
                -
              • https://cloud.docker.com/api/infra/v1/exampleorg/nodecluster/
              • -
            • -
            - -

            Namespaced endpoints in the docker-cloud CLI

            - -

            If you are using namespaces with the docker-cloud CLI, set them by changing -the value of the DOCKERCLOUD_NAMESPACE environment variable. You can either -set this globally, or specify it before each CLI command. To learn more, see the -Docker Cloud CLI README.

            - -

            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/user_namespace/cluster/eea638f4-b77a-4183-b241-22dbd7866f22/",
            -    "path": "/api/infra/v1/user_namespace/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": "user_namespace",
            -    "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 appropriate 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
            userThe user authenticated in the request that created the action
            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/user_namespace/node/75d20367-0948-4f10-8ba4-ffb4d16ed3c6/"
            -    ],
            -    "region": "/api/infra/v1/region/aws/us-east-1/",
            -    "resource_uri": "/api/infra/v1/user_namespace/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.

            - -

            This is a namespaced endpoint.

            - -

            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 identifiers 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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/user_namespace/nodecluster/d787a4b7-d525-4061-97a0-f423e8f1d229/",
            -    "node_type": "/api/infra/v1/user_namespace/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/user_namespace/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.

            - -

            This is a namespaced endpoint.

            - -

            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.
            - -

            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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/user_namespace/registry/registry-1.docker.io/"
            -}
            -
            - -

            Represents a registry where repositories are hosted.

            - -

            This is a namespaced endpoint.

            - -

            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/[optional_namespace/]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/[optional_namespace/]registry/(host)/

            - -

            Path Parameters

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

            External Repositories

            - -

            External Repository

            - -
            -

            Example

            -
            -
            {
            -  "in_use": false,
            -  "name": "my.registry.com/myrepo",
            -  "registry": "/api/repo/v1/user_namespace/registry/my.registry.com/",
            -  "resource_uri": "/api/repo/v1/user_namespace/repository/my.registry.com/myrepo/",
            -}
            -
            - -

            The repository endpoint is used to add and remove existing repositories on third party registries to be used in deployments and builds.

            - -

            This is a namespaced endpoint.

            - -

            Attributes

            - - - - - - - - - - - - - - - - - - - - - - - -
            AttributeDescription
            resource_uriA unique API endpoint that represents the repository
            nameName of the repository, i.e. my.registry.com/myrepo
            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/[optional_namespace/]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/[optional_namespace/]repository/

            - -

            JSON Parameters

            - - - - - - - - - - - - - - - - - - - -
            ParameterDescription
            nameName of the repository, i.e. ‘my.registry.com/myrepo’
            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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]repository/

            - -

            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/user_namespace/stack/7fe7ec85-58be-4904-81da-de2219098d7c/",
            -  "services": [
            -    "/api/app/v1/user_namespace/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.

            - -

            This is a namespaced endpoint.

            - -

            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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/user_namespace/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/user_namespace/container/6f8ee454-9dc3-4387-80c3-57aac1be3cc6/",
            -    "/api/app/v1/user_namespace/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/user_namespace/service/adeebc1b-1b81-4af0-b8f2-cefffc69d7fb/"
            -  },
            -  "linked_from_service": [],
            -  "linked_to_service": [
            -    {
            -      "from_service": "/api/app/v1/user_namespace/service/09cbcf8d-a727-40d9-b420-c8e18b7fa55b/",
            -      "name": "DB",
            -      "to_service": "/api/app/v1/user_namespace/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/user_namespace/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/user_namespace/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.

            - -

            This is a namespaced endpoint.

            - -

            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)
            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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]service/(uuid)/

            - -

            Path Parameters

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

            Containers

            - -

            Container

            - -
            -

            Example

            -
            -
            {
            -    "autodestroy": "OFF",
            -    "autorestart": "OFF",
            -    "bindings": [
            -        {
            -            "volume": "/api/infra/v1/user_namespace/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/user_namespace/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/user_namespace/container/c1dd4e1e-1356-411c-8613-e15146633640/",
            -            "name": "DB_1",
            -            "to_container": "/api/app/v1/user_namespace/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/user_namespace/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/user_namespace/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/user_namespace/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.

            - -

            This is a namespaced endpoint.

            - -

            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 assigned 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)
            pidPID (Process) Namespace mode for the container (more information)
            - -

            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.
            - - - - - - - - - - - - - - - - - - - - - - - - - -
            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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/user_namespace/service/82d4a246-52d8-468d-903d-9da9ef05ff28/trigger/0224815a-c156-44e4-92d7-997c69354438/call/",
            -  "operation": "REDEPLOY",
            -  "name": "docker_trigger",
            -  "resource_uri": "/api/app/v1/user_namespace/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.

            - -

            This is a namespaced endpoint.

            - -

            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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/user_namespace/container/0b0e3538-88df-4f07-9aed-3a3cc4175076/"
            -    ],
            -    "resource_uri": "/api/app/v1/user_namespace/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
            • -
            - -

            This is a namespaced endpoint.

            - -

            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. Possible 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"
            -
            -// Listens for container events only
            -myFilter := dockercloud.NewStreamFilter(&dockercloud.EventFilter{Type: "container"})
            -
            -stream := dockercloud.NewStream(myFilter)
            -
            -if err := stream.Connect(); err == nil {
            -    go stream.RunForever()
            -} else {
            -    log.Print("Connect err: " + err.Error())
            -}
            -
            -for {
            -    select {
            -    case event := <-stream.MessageChan:
            -        log.Println(event)
            -    case err := <-stream.ErrorChan:
            -        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/[optional_namespace/]events/

            - -

            Query Parameters

            - - - - - - - - - - - - - - - - - - - -
            ParameterDescription
            typeFilter by type
            objectFilter by object resource URI
            parentFilter by object parents
            - -

            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 deleted file mode 100644 index 10e6f3d4836..00000000000 --- a/apidocs/docker-cloud/javascripts/all.js +++ /dev/null @@ -1,143 +0,0 @@ -!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),/** - * 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 s=e[o],r=0;i>r&&(s=this._stack[r](s,o,e),void 0!==s);r++);void 0!==s&&t.push(s)}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,s=i.next;void 0!=s;){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),s=this.elements[o];return 1>=i?s===e?o:-1:e>s?this.indexOf(e,o,n):s>e?this.indexOf(e,t,o):s===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),s=this.elements[o];if(1>=i){if(s>e)return o;if(e>s)return o+1}return e>s?this.locationFor(e,o,n):s>e?this.locationFor(e,t,o):void 0},e.SortedSet.prototype.intersect=function(t){for(var n=new e.SortedSet,i=0,o=0,s=this.length,r=t.length,a=this.elements,c=t.elements;;){if(i>s-1||o>r-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,s=t[this._ref],n=void 0===n?!0:n;this._fields.forEach(function(n){var s=this.pipeline.run(e.tokenizer(t[n.name]));i[n.name]=s,e.SortedSet.prototype.add.apply(o,s)},this),this.documentStore.set(s,o),e.SortedSet.prototype.add.apply(this.corpusTokens,o.toArray());for(var r=0;r0&&(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=[],s=this._fields.reduce(function(e,t){return e+t.boost},0),r=n.some(function(e){return this.tokenStore.has(e)},this);if(!r)return[];n.forEach(function(t,n,r){var a=1/r.length*this._fields.length*s,c=this,h=this.tokenStore.expand(t).reduce(function(n,o){var s=c.corpusTokens.indexOf(o),r=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 s>-1&&i.insert(s,a*r*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,s=0;i>s;s++){var r=n.elements[s],a=this.tokenStore.get(r)[t].tf,c=this.idf(r);o.insert(this.corpusTokens.indexOf(r),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]*",s=i+"[aeiou]*",r="^("+o+")?"+s+o,a="^("+o+")?"+s+o+"("+s+")?$",c="^("+o+")?"+s+o+s+o,h="^("+o+")?"+i,l=new RegExp(r),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$"),E=new RegExp("^"+o+i+"[^aeiouwxy]$"),x=/^(.+?[^aeiou])y$/,_=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,S=/^(.+?)(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)$/,O=/^(.+?)(s|t)(ion)$/,k=/^(.+?)e$/,L=/ll$/,A=new RegExp("^"+o+i+"[^aeiouwxy]$"),T=function(n){var i,o,s,r,a,c,h;if(n.length<3)return n;if(s=n.substr(0,1),"y"==s&&(n=s.toUpperCase()+n.substr(1)),r=p,a=g,r.test(n)?n=n.replace(r,"$1$2"):a.test(n)&&(n=n.replace(a,"$1$2")),r=v,a=m,r.test(n)){var T=r.exec(n);r=l,r.test(T[1])&&(r=y,n=n.replace(r,""))}else if(a.test(n)){var T=a.exec(n);i=T[1],a=f,a.test(i)&&(n=i,a=w,c=b,h=E,a.test(n)?n+="e":c.test(n)?(r=y,n=n.replace(r,"")):h.test(n)&&(n+="e"))}if(r=x,r.test(n)){var T=r.exec(n);i=T[1],n=i+"i"}if(r=_,r.test(n)){var T=r.exec(n);i=T[1],o=T[2],r=l,r.test(i)&&(n=i+e[o])}if(r=S,r.test(n)){var T=r.exec(n);i=T[1],o=T[2],r=l,r.test(i)&&(n=i+t[o])}if(r=C,a=O,r.test(n)){var T=r.exec(n);i=T[1],r=u,r.test(i)&&(n=i)}else if(a.test(n)){var T=a.exec(n);i=T[1]+T[2],a=u,a.test(i)&&(n=i)}if(r=k,r.test(n)){var T=r.exec(n);i=T[1],r=u,a=d,c=A,(r.test(i)||a.test(i)&&!c.test(i))&&(n=i)}return r=L,a=u,r.test(n)&&a.test(n)&&(r=y,n=n.replace(r,"")),"y"==s&&(n=s.toLowerCase()+n.substr(1)),n};return T}(),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 occurrence 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 s=document.createElement(n||"span");s.className=i||"highlight";var r=e.splitText(o.index);r.splitText(o[0].length);var a=r.cloneNode(!0);return s.appendChild(a),r.parentNode.replaceChild(s,r),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?(r.empty(),$.each(t,function(e,t){var n=document.getElementById(t.ref);r.append("
          • "+$(n).text()+"
          • ")}),i.call(this)):(r.html("
          • "),$(".search-results li").text('No Results Found for "'+this.value+'"'))}else o(),r.removeClass("visible")}function i(){this.value&&s.highlight(this.value,a)}function o(){s.unhighlight(a)}var s,r,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,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/javascripts/all_nosearch.js b/apidocs/docker-cloud/javascripts/all_nosearch.js deleted file mode 100644 index 816537543f8..00000000000 --- a/apidocs/docker-cloud/javascripts/all_nosearch.js +++ /dev/null @@ -1,43 +0,0 @@ -!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,u="A"===h,l=window.navigator.standalone&&u&&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)||l)&&(e.preventDefault(),e.stopPropagation(),!l)?!1:(l&&(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(l+"[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":u,"data-tag":s})).next(l).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(),u=e(t).height(),l=e(n).height(),d=e("body")[0].scrollHeight;if(o.options.extendPage&&(o.webkit&&h>=d-u-o.options.extendPageOffset||!o.webkit&&u+h>l-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,u=e(s).closest(".tocify-header"),l=u.offset().top,d=h.offset().top,f=l-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(l).length||t.parent().is(h)||t.parent().is(":visible")?t.children(l).length||t.parent().is(h)||(t=t.closest(l)):t=t.parents(l).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(l).not(t.parent().is(h)?t:t.closest(h).find(l).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(l)?n.show(e.next(l),t):e.parent().is(l)&&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+","+l).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,u=e.console,l=void 0!==u,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&&l&&u.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 deleted file mode 100644 index 7b58586abfa..00000000000 --- a/apidocs/docker-cloud/stylesheets/print.css +++ /dev/null @@ -1 +0,0 @@ -/*! 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 deleted file mode 100644 index 5cb708361df..00000000000 --- a/apidocs/docker-cloud/stylesheets/screen.css +++ /dev/null @@ -1,12 +0,0 @@ -/*! 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}} - -/** overrides **/ -.logo { - padding: 10px 0 0 15px; -} -// .tocify-wrapper { -// background-color: rgb(16, 28, 41) -// } - .tocify-wrapper>.search:before { - left: 19px; -} \ No newline at end of file diff --git a/apidocs/layouts/single.html b/apidocs/layouts/single.html deleted file mode 100644 index be239550b4f..00000000000 --- a/apidocs/layouts/single.html +++ /dev/null @@ -1,6577 +0,0 @@ - - - - - - - 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

                  - -

                  Namespaced endpoints

                  - -

                  Endpoints that are labeled as “namespaced” allow the users to operate over -different namespaces, for example over an individual user namespace, or the -namespace of an organization the user is a member of. A namespace identifies the -owner of the resource.

                  - -

                  The namespace is optional. If left blank, it defaults to the authenticated user -in the request. The namespace is set before the resource in the URL schema: -https://cloud.docker.com/api/<subsystem>/<version>/(optional_namespace/)<resource>/

                  - -

                  Examples:

                  - -
                    -
                  • The user exampleuser wants to operate on the node cluster list endpoint in their own namespace. They can use either of the following urls: - -
                      -
                    • https://cloud.docker.com/api/infra/v1/nodecluster/ (namespace omitted, so will use the user authenticated in the request)
                    • -
                    • https://cloud.docker.com/api/infra/v1/exampleuser/nodecluster/
                    • -
                  • -
                  • The user wants to operate on the node cluster list endpoint in an organization called exampleorg (which they have permission to see): - -
                      -
                    • https://cloud.docker.com/api/infra/v1/exampleorg/nodecluster/
                    • -
                  • -
                  - -

                  Namespaced endpoints in the docker-cloud CLI

                  - -

                  If you are using namespaces with the docker-cloud CLI, set them by changing -the value of the DOCKERCLOUD_NAMESPACE environment variable. You can either -set this globally, or specify it before each CLI command. To learn more, see the -Docker Cloud CLI README.

                  - -

                  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/user_namespace/cluster/eea638f4-b77a-4183-b241-22dbd7866f22/",
                  -    "path": "/api/infra/v1/user_namespace/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": "user_namespace",
                  -    "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 appropriate 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
                  userThe user authenticated in the request that created the action
                  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/user_namespace/node/75d20367-0948-4f10-8ba4-ffb4d16ed3c6/"
                  -    ],
                  -    "region": "/api/infra/v1/region/aws/us-east-1/",
                  -    "resource_uri": "/api/infra/v1/user_namespace/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.

                  - -

                  This is a namespaced endpoint.

                  - -

                  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 identifiers 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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/user_namespace/nodecluster/d787a4b7-d525-4061-97a0-f423e8f1d229/",
                  -    "node_type": "/api/infra/v1/user_namespace/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/user_namespace/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.

                  - -

                  This is a namespaced endpoint.

                  - -

                  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.
                  - -

                  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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/user_namespace/registry/registry-1.docker.io/"
                  -}
                  -
                  - -

                  Represents a registry where repositories are hosted.

                  - -

                  This is a namespaced endpoint.

                  - -

                  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/[optional_namespace/]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/[optional_namespace/]registry/(host)/

                  - -

                  Path Parameters

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

                  External Repositories

                  - -

                  External Repository

                  - -
                  -

                  Example

                  -
                  -
                  {
                  -  "in_use": false,
                  -  "name": "my.registry.com/myrepo",
                  -  "registry": "/api/repo/v1/user_namespace/registry/my.registry.com/",
                  -  "resource_uri": "/api/repo/v1/user_namespace/repository/my.registry.com/myrepo/",
                  -}
                  -
                  - -

                  The repository endpoint is used to add and remove existing repositories on third party registries to be used in deployments and builds.

                  - -

                  This is a namespaced endpoint.

                  - -

                  Attributes

                  - - - - - - - - - - - - - - - - - - - - - - - -
                  AttributeDescription
                  resource_uriA unique API endpoint that represents the repository
                  nameName of the repository, i.e. my.registry.com/myrepo
                  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/[optional_namespace/]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/[optional_namespace/]repository/

                  - -

                  JSON Parameters

                  - - - - - - - - - - - - - - - - - - - -
                  ParameterDescription
                  nameName of the repository, i.e. ‘my.registry.com/myrepo’
                  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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]repository/

                  - -

                  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/user_namespace/stack/7fe7ec85-58be-4904-81da-de2219098d7c/",
                  -  "services": [
                  -    "/api/app/v1/user_namespace/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.

                  - -

                  This is a namespaced endpoint.

                  - -

                  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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/user_namespace/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/user_namespace/container/6f8ee454-9dc3-4387-80c3-57aac1be3cc6/",
                  -    "/api/app/v1/user_namespace/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/user_namespace/service/adeebc1b-1b81-4af0-b8f2-cefffc69d7fb/"
                  -  },
                  -  "linked_from_service": [],
                  -  "linked_to_service": [
                  -    {
                  -      "from_service": "/api/app/v1/user_namespace/service/09cbcf8d-a727-40d9-b420-c8e18b7fa55b/",
                  -      "name": "DB",
                  -      "to_service": "/api/app/v1/user_namespace/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/user_namespace/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/user_namespace/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.

                  - -

                  This is a namespaced endpoint.

                  - -

                  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)
                  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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]service/(uuid)/

                  - -

                  Path Parameters

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

                  Containers

                  - -

                  Container

                  - -
                  -

                  Example

                  -
                  -
                  {
                  -    "autodestroy": "OFF",
                  -    "autorestart": "OFF",
                  -    "bindings": [
                  -        {
                  -            "volume": "/api/infra/v1/user_namespace/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/user_namespace/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/user_namespace/container/c1dd4e1e-1356-411c-8613-e15146633640/",
                  -            "name": "DB_1",
                  -            "to_container": "/api/app/v1/user_namespace/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/user_namespace/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/user_namespace/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/user_namespace/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.

                  - -

                  This is a namespaced endpoint.

                  - -

                  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 assigned 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)
                  pidPID (Process) Namespace mode for the container (more information)
                  - -

                  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.
                  - - - - - - - - - - - - - - - - - - - - - - - - - -
                  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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/user_namespace/service/82d4a246-52d8-468d-903d-9da9ef05ff28/trigger/0224815a-c156-44e4-92d7-997c69354438/call/",
                  -  "operation": "REDEPLOY",
                  -  "name": "docker_trigger",
                  -  "resource_uri": "/api/app/v1/user_namespace/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.

                  - -

                  This is a namespaced endpoint.

                  - -

                  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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/[optional_namespace/]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/user_namespace/container/0b0e3538-88df-4f07-9aed-3a3cc4175076/"
                  -    ],
                  -    "resource_uri": "/api/app/v1/user_namespace/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
                  • -
                  - -

                  This is a namespaced endpoint.

                  - -

                  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. Possible 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"
                  -
                  -// Listens for container events only
                  -myFilter := dockercloud.NewStreamFilter(&dockercloud.EventFilter{Type: "container"})
                  -
                  -stream := dockercloud.NewStream(myFilter)
                  -
                  -if err := stream.Connect(); err == nil {
                  -    go stream.RunForever()
                  -} else {
                  -    log.Print("Connect err: " + err.Error())
                  -}
                  -
                  -for {
                  -    select {
                  -    case event := <-stream.MessageChan:
                  -        log.Println(event)
                  -    case err := <-stream.ErrorChan:
                  -        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/[optional_namespace/]events/

                  - -

                  Query Parameters

                  - - - - - - - - - - - - - - - - - - - -
                  ParameterDescription
                  typeFilter by type
                  objectFilter by object resource URI
                  parentFilter by object parents
                  - -

                  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/v1.3.3/lang/en.js b/apidocs/v1.3.3/lang/en.js index 72427df316f..4ba5c718ead 100644 --- a/apidocs/v1.3.3/lang/en.js +++ b/apidocs/v1.3.3/lang/en.js @@ -2,7 +2,7 @@ 'use strict'; -/* jshint quotmark: double */ +/* jshint quotemark: double */ window.SwaggerTranslator.learn({ "Warning: Deprecated":"Warning: Deprecated", "Implementation Notes":"Implementation Notes", diff --git a/apidocs/v1.3.3/lang/es.js b/apidocs/v1.3.3/lang/es.js index d3e024ed279..f2b2a76881e 100644 --- a/apidocs/v1.3.3/lang/es.js +++ b/apidocs/v1.3.3/lang/es.js @@ -2,7 +2,7 @@ 'use strict'; -/* jshint quotmark: double */ +/* jshint quotemark: double */ window.SwaggerTranslator.learn({ "Warning: Deprecated":"Advertencia: Obsoleto", "Implementation Notes":"Notas de implementación", diff --git a/apidocs/v1.3.3/lang/pt.js b/apidocs/v1.3.3/lang/pt.js index ecceb8b7658..824be8ba278 100644 --- a/apidocs/v1.3.3/lang/pt.js +++ b/apidocs/v1.3.3/lang/pt.js @@ -2,7 +2,7 @@ 'use strict'; -/* jshint quotmark: double */ +/* jshint quotemark: double */ window.SwaggerTranslator.learn({ "Warning: Deprecated":"Aviso: Depreciado", "Implementation Notes":"Notas de Implementação", diff --git a/apidocs/v1.3.3/lang/ru.js b/apidocs/v1.3.3/lang/ru.js index 453a0304485..2b993ff784d 100644 --- a/apidocs/v1.3.3/lang/ru.js +++ b/apidocs/v1.3.3/lang/ru.js @@ -2,7 +2,7 @@ 'use strict'; -/* jshint quotmark: double */ +/* jshint quotemark: double */ window.SwaggerTranslator.learn({ "Warning: Deprecated":"Ворнинг: Депрекейтед", "Implementation Notes":"Заметки", diff --git a/apidocs/v1.3.3/lang/tr.js b/apidocs/v1.3.3/lang/tr.js index ea14bccb74f..27aab3eda75 100644 --- a/apidocs/v1.3.3/lang/tr.js +++ b/apidocs/v1.3.3/lang/tr.js @@ -2,7 +2,7 @@ 'use strict'; -/* jshint quotmark: double */ +/* jshint quotemark: double */ window.SwaggerTranslator.learn({ "Warning: Deprecated":"Uyarı: Deprecated", "Implementation Notes":"Gerçekleştirim Notları", diff --git a/apidocs/v1.3.3/lang/translator.js b/apidocs/v1.3.3/lang/translator.js index 77fde610fc6..862a23f1027 100644 --- a/apidocs/v1.3.3/lang/translator.js +++ b/apidocs/v1.3.3/lang/translator.js @@ -9,7 +9,7 @@ * after . * For example - * - * If you wish to translate some new texsts you should do two things: + * If you wish to translate some new texts you should do two things: * 1. Add a new phrase pair ("New Phrase": "New Translation") into your language file (for example lang/ru.js). It will be great if you add it in other language files too. * 2. Mark that text it templates this way New Phrase or . * The main thing here is attribute data-sw-translate. Only inner html, title-attribute and value-attribute are going to translate. diff --git a/apidocs/v1.4.0/lang/en.js b/apidocs/v1.4.0/lang/en.js index 72427df316f..4ba5c718ead 100644 --- a/apidocs/v1.4.0/lang/en.js +++ b/apidocs/v1.4.0/lang/en.js @@ -2,7 +2,7 @@ 'use strict'; -/* jshint quotmark: double */ +/* jshint quotemark: double */ window.SwaggerTranslator.learn({ "Warning: Deprecated":"Warning: Deprecated", "Implementation Notes":"Implementation Notes", diff --git a/apidocs/v1.4.0/lang/es.js b/apidocs/v1.4.0/lang/es.js index d3e024ed279..f2b2a76881e 100644 --- a/apidocs/v1.4.0/lang/es.js +++ b/apidocs/v1.4.0/lang/es.js @@ -2,7 +2,7 @@ 'use strict'; -/* jshint quotmark: double */ +/* jshint quotemark: double */ window.SwaggerTranslator.learn({ "Warning: Deprecated":"Advertencia: Obsoleto", "Implementation Notes":"Notas de implementación", diff --git a/apidocs/v1.4.0/lang/pt.js b/apidocs/v1.4.0/lang/pt.js index ecceb8b7658..824be8ba278 100644 --- a/apidocs/v1.4.0/lang/pt.js +++ b/apidocs/v1.4.0/lang/pt.js @@ -2,7 +2,7 @@ 'use strict'; -/* jshint quotmark: double */ +/* jshint quotemark: double */ window.SwaggerTranslator.learn({ "Warning: Deprecated":"Aviso: Depreciado", "Implementation Notes":"Notas de Implementação", diff --git a/apidocs/v1.4.0/lang/ru.js b/apidocs/v1.4.0/lang/ru.js index 453a0304485..2b993ff784d 100644 --- a/apidocs/v1.4.0/lang/ru.js +++ b/apidocs/v1.4.0/lang/ru.js @@ -2,7 +2,7 @@ 'use strict'; -/* jshint quotmark: double */ +/* jshint quotemark: double */ window.SwaggerTranslator.learn({ "Warning: Deprecated":"Ворнинг: Депрекейтед", "Implementation Notes":"Заметки", diff --git a/apidocs/v1.4.0/lang/tr.js b/apidocs/v1.4.0/lang/tr.js index ea14bccb74f..27aab3eda75 100644 --- a/apidocs/v1.4.0/lang/tr.js +++ b/apidocs/v1.4.0/lang/tr.js @@ -2,7 +2,7 @@ 'use strict'; -/* jshint quotmark: double */ +/* jshint quotemark: double */ window.SwaggerTranslator.learn({ "Warning: Deprecated":"Uyarı: Deprecated", "Implementation Notes":"Gerçekleştirim Notları", diff --git a/apidocs/v1.4.0/lang/translator.js b/apidocs/v1.4.0/lang/translator.js index 77fde610fc6..862a23f1027 100644 --- a/apidocs/v1.4.0/lang/translator.js +++ b/apidocs/v1.4.0/lang/translator.js @@ -9,7 +9,7 @@ * after . * For example - * - * If you wish to translate some new texsts you should do two things: + * If you wish to translate some new texts you should do two things: * 1. Add a new phrase pair ("New Phrase": "New Translation") into your language file (for example lang/ru.js). It will be great if you add it in other language files too. * 2. Mark that text it templates this way New Phrase or . * The main thing here is attribute data-sw-translate. Only inner html, title-attribute and value-attribute are going to translate. diff --git a/apidocs/v2.0.0/lang/en.js b/apidocs/v2.0.0/lang/en.js index 72427df316f..4ba5c718ead 100644 --- a/apidocs/v2.0.0/lang/en.js +++ b/apidocs/v2.0.0/lang/en.js @@ -2,7 +2,7 @@ 'use strict'; -/* jshint quotmark: double */ +/* jshint quotemark: double */ window.SwaggerTranslator.learn({ "Warning: Deprecated":"Warning: Deprecated", "Implementation Notes":"Implementation Notes", diff --git a/apidocs/v2.0.0/lang/es.js b/apidocs/v2.0.0/lang/es.js index d3e024ed279..f2b2a76881e 100644 --- a/apidocs/v2.0.0/lang/es.js +++ b/apidocs/v2.0.0/lang/es.js @@ -2,7 +2,7 @@ 'use strict'; -/* jshint quotmark: double */ +/* jshint quotemark: double */ window.SwaggerTranslator.learn({ "Warning: Deprecated":"Advertencia: Obsoleto", "Implementation Notes":"Notas de implementación", diff --git a/apidocs/v2.0.0/lang/pt.js b/apidocs/v2.0.0/lang/pt.js index ecceb8b7658..824be8ba278 100644 --- a/apidocs/v2.0.0/lang/pt.js +++ b/apidocs/v2.0.0/lang/pt.js @@ -2,7 +2,7 @@ 'use strict'; -/* jshint quotmark: double */ +/* jshint quotemark: double */ window.SwaggerTranslator.learn({ "Warning: Deprecated":"Aviso: Depreciado", "Implementation Notes":"Notas de Implementação", diff --git a/apidocs/v2.0.0/lang/ru.js b/apidocs/v2.0.0/lang/ru.js index 453a0304485..2b993ff784d 100644 --- a/apidocs/v2.0.0/lang/ru.js +++ b/apidocs/v2.0.0/lang/ru.js @@ -2,7 +2,7 @@ 'use strict'; -/* jshint quotmark: double */ +/* jshint quotemark: double */ window.SwaggerTranslator.learn({ "Warning: Deprecated":"Ворнинг: Депрекейтед", "Implementation Notes":"Заметки", diff --git a/apidocs/v2.0.0/lang/tr.js b/apidocs/v2.0.0/lang/tr.js index ea14bccb74f..27aab3eda75 100644 --- a/apidocs/v2.0.0/lang/tr.js +++ b/apidocs/v2.0.0/lang/tr.js @@ -2,7 +2,7 @@ 'use strict'; -/* jshint quotmark: double */ +/* jshint quotemark: double */ window.SwaggerTranslator.learn({ "Warning: Deprecated":"Uyarı: Deprecated", "Implementation Notes":"Gerçekleştirim Notları", diff --git a/apidocs/v2.0.0/lang/translator.js b/apidocs/v2.0.0/lang/translator.js index 77fde610fc6..862a23f1027 100644 --- a/apidocs/v2.0.0/lang/translator.js +++ b/apidocs/v2.0.0/lang/translator.js @@ -9,7 +9,7 @@ * after . * For example - * - * If you wish to translate some new texsts you should do two things: + * If you wish to translate some new texts you should do two things: * 1. Add a new phrase pair ("New Phrase": "New Translation") into your language file (for example lang/ru.js). It will be great if you add it in other language files too. * 2. Mark that text it templates this way New Phrase or . * The main thing here is attribute data-sw-translate. Only inner html, title-attribute and value-attribute are going to translate. diff --git a/apidocs/v2.0.1/lang/en.js b/apidocs/v2.0.1/lang/en.js index 72427df316f..4ba5c718ead 100644 --- a/apidocs/v2.0.1/lang/en.js +++ b/apidocs/v2.0.1/lang/en.js @@ -2,7 +2,7 @@ 'use strict'; -/* jshint quotmark: double */ +/* jshint quotemark: double */ window.SwaggerTranslator.learn({ "Warning: Deprecated":"Warning: Deprecated", "Implementation Notes":"Implementation Notes", diff --git a/apidocs/v2.0.1/lang/es.js b/apidocs/v2.0.1/lang/es.js index d3e024ed279..f2b2a76881e 100644 --- a/apidocs/v2.0.1/lang/es.js +++ b/apidocs/v2.0.1/lang/es.js @@ -2,7 +2,7 @@ 'use strict'; -/* jshint quotmark: double */ +/* jshint quotemark: double */ window.SwaggerTranslator.learn({ "Warning: Deprecated":"Advertencia: Obsoleto", "Implementation Notes":"Notas de implementación", diff --git a/apidocs/v2.0.1/lang/pt.js b/apidocs/v2.0.1/lang/pt.js index ecceb8b7658..824be8ba278 100644 --- a/apidocs/v2.0.1/lang/pt.js +++ b/apidocs/v2.0.1/lang/pt.js @@ -2,7 +2,7 @@ 'use strict'; -/* jshint quotmark: double */ +/* jshint quotemark: double */ window.SwaggerTranslator.learn({ "Warning: Deprecated":"Aviso: Depreciado", "Implementation Notes":"Notas de Implementação", diff --git a/apidocs/v2.0.1/lang/ru.js b/apidocs/v2.0.1/lang/ru.js index 453a0304485..2b993ff784d 100644 --- a/apidocs/v2.0.1/lang/ru.js +++ b/apidocs/v2.0.1/lang/ru.js @@ -2,7 +2,7 @@ 'use strict'; -/* jshint quotmark: double */ +/* jshint quotemark: double */ window.SwaggerTranslator.learn({ "Warning: Deprecated":"Ворнинг: Депрекейтед", "Implementation Notes":"Заметки", diff --git a/apidocs/v2.0.1/lang/tr.js b/apidocs/v2.0.1/lang/tr.js index ea14bccb74f..27aab3eda75 100644 --- a/apidocs/v2.0.1/lang/tr.js +++ b/apidocs/v2.0.1/lang/tr.js @@ -2,7 +2,7 @@ 'use strict'; -/* jshint quotmark: double */ +/* jshint quotemark: double */ window.SwaggerTranslator.learn({ "Warning: Deprecated":"Uyarı: Deprecated", "Implementation Notes":"Gerçekleştirim Notları", diff --git a/apidocs/v2.0.1/lang/translator.js b/apidocs/v2.0.1/lang/translator.js index 77fde610fc6..862a23f1027 100644 --- a/apidocs/v2.0.1/lang/translator.js +++ b/apidocs/v2.0.1/lang/translator.js @@ -9,7 +9,7 @@ * after . * For example - * - * If you wish to translate some new texsts you should do two things: + * If you wish to translate some new texts you should do two things: * 1. Add a new phrase pair ("New Phrase": "New Translation") into your language file (for example lang/ru.js). It will be great if you add it in other language files too. * 2. Mark that text it templates this way New Phrase or . * The main thing here is attribute data-sw-translate. Only inner html, title-attribute and value-attribute are going to translate. diff --git a/compose/compose-file/compose-file-v2.md b/compose/compose-file/compose-file-v2.md index 4585410da3b..cf59a2a446d 100644 --- a/compose/compose-file/compose-file-v2.md +++ b/compose/compose-file/compose-file-v2.md @@ -1420,8 +1420,10 @@ If set to `true`, specifies that this volume has been created outside of Compose. `docker-compose up` does not attempt to create it, and raises an error if it doesn't exist. -`external` cannot be used in conjunction with other volume configuration keys -(`driver`, `driver_opts`). +For version 2.0 of the format, `external` cannot be used in +conjunction with other volume configuration keys (`driver`, `driver_opts`, +`labels`). This limitation no longer exists for +[version 2.1](compose-versioning.md#version-21) and above. In the example below, instead of attempting to create a volume called `[projectname]_data`, Compose looks for an existing volume simply @@ -1593,8 +1595,10 @@ If set to `true`, specifies that this network has been created outside of Compose. `docker-compose up` does not attempt to create it, and raises an error if it doesn't exist. -`external` cannot be used in conjunction with other network configuration keys -(`driver`, `driver_opts`, `group_add`, `ipam`, `internal`). +For version 2.0 of the format, `external` cannot be used in conjunction with +other network configuration keys (`driver`, `driver_opts`, `ipam`, `internal`). +This limitation no longer exists for +[version 2.1](compose-versioning.md#version-21) and above. In the example below, `proxy` is the gateway to the outside world. Instead of attempting to create a network called `[projectname]_outside`, Compose diff --git a/compose/compose-file/index.md b/compose/compose-file/index.md index c34bd24b680..7aadd715481 100644 --- a/compose/compose-file/index.md +++ b/compose/compose-file/index.md @@ -852,6 +852,9 @@ behaviors: - `docker-compose up SERVICE` automatically includes `SERVICE`'s dependencies. In the following example, `docker-compose up web` also creates and starts `db` and `redis`. + +- `docker-compose stop` stops services in dependency order. In the following + example, `web` is stopped before `db` and `redis`. Simple example: @@ -1727,6 +1730,7 @@ expressed in the short form. created - `tmpfs`: configure additional tmpfs options - `size`: the size for the tmpfs mount in bytes +- `consistency`: the consistency requirements of the mount, one of `consistent` (host and container have identical view), `cached` (read cache, host view is authoritative) or `delegated` (read-write cache, container's view is authoritative) ```none version: "3.2" @@ -1956,14 +1960,16 @@ If set to `true`, specifies that this volume has been created outside of Compose. `docker-compose up` does not attempt to create it, and raises an error if it doesn't exist. -`external` cannot be used in conjunction with other volume configuration keys -(`driver`, `driver_opts`). +For version 3.3 and below of the format, `external` cannot be used in +conjunction with other volume configuration keys (`driver`, `driver_opts`, +`labels`). This limitation no longer exists for +[version 3.4](compose-versioning.md#version-34) and above. In the example below, instead of attempting to create a volume called `[projectname]_data`, Compose looks for an existing volume simply called `data` and mount it into the `db` service's containers. - version: '2' + version: '3' services: db: @@ -2207,15 +2213,17 @@ If set to `true`, specifies that this network has been created outside of Compose. `docker-compose up` does not attempt to create it, and raises an error if it doesn't exist. -`external` cannot be used in conjunction with other network configuration keys -(`driver`, `driver_opts`, `ipam`, `internal`). +For version 3.3 and below of the format, `external` cannot be used in +conjunction with other network configuration keys (`driver`, `driver_opts`, +`ipam`, `internal`). This limitation no longer exists for +[version 3.4](compose-versioning.md#version-34) and above. In the example below, `proxy` is the gateway to the outside world. Instead of attempting to create a network called `[projectname]_outside`, Compose looks for an existing network simply called `outside` and connect the `proxy` service's containers to it. - version: '2' + version: '3' services: proxy: diff --git a/compose/django.md b/compose/django.md index 8c1ffaa34d8..794abb10790 100644 --- a/compose/django.md +++ b/compose/django.md @@ -152,7 +152,7 @@ In this section, you set up the database connection for Django. } These settings are determined by the - [postgres](https://store.docker.com/images/postgres) Docker image + [postgres](https://hub.docker.com/images/postgres) Docker image specified in `docker-compose.yml`. 3. Save and close the file. diff --git a/compose/rails.md b/compose/rails.md index 19d96dd112c..d3f071f78ae 100644 --- a/compose/rails.md +++ b/compose/rails.md @@ -9,10 +9,7 @@ a Rails/PostgreSQL app. Before starting, [install Compose](install.md). ### Define the project -Start by setting up the four files needed to build the app. First, since -your app is going to run inside a Docker container containing all of its -dependencies, define exactly what needs to be included in the -container. This is done using a file called `Dockerfile`. To begin with, the +Start by setting up the four files needed to build the app. App will run inside a Docker container containing its dependencies. Defining dependencies is done using a file called `Dockerfile`. To begin with, the Dockerfile consists of: FROM ruby:2.5 diff --git a/compose/startup-order.md b/compose/startup-order.md index 88477929e24..aef9acfcafe 100644 --- a/compose/startup-order.md +++ b/compose/startup-order.md @@ -1,16 +1,16 @@ --- -description: How to control service startup order in Docker Compose -keywords: documentation, docs, docker, compose, startup, order -title: Control startup order in Compose +description: How to control service startup and shutdown order in Docker Compose +keywords: documentation, docs, docker, compose, startup, shutdown, order +title: Control startup and shutdown order in Compose notoc: true --- -You can control the order of service startup with the -[depends_on](compose-file.md#depends_on) option. Compose always starts +You can control the order of service startup and shutdown with the +[depends_on](compose-file.md#depends-on) option. Compose always starts and stops containers in dependency order, where dependencies are determined by `depends_on`, `links`, `volumes_from`, and `network_mode: "service:..."`. -However, Compose does not wait until a container is "ready" (whatever that means +However, for startup Compose does not wait until a container is "ready" (whatever that means for your particular application) - only until it's running. There's a good reason for this. diff --git a/compose/wordpress.md b/compose/wordpress.md index 0c2113faaed..77868adbb14 100644 --- a/compose/wordpress.md +++ b/compose/wordpress.md @@ -60,7 +60,7 @@ Compose to set up and run WordPress. Before starting, make sure you have WORDPRESS_DB_USER: wordpress WORDPRESS_DB_PASSWORD: wordpress volumes: - db_data: + db_data: {} ``` > **Notes**: diff --git a/config/containers/logging/configure.md b/config/containers/logging/configure.md index 80c24e5cb50..cad9544e088 100644 --- a/config/containers/logging/configure.md +++ b/config/containers/logging/configure.md @@ -18,7 +18,6 @@ unless you configure it to use a different logging driver. In addition to using the logging drivers included with Docker, you can also implement and use [logging driver plugins](/engine/admin/logging/plugins.md). -Logging driver plugins are available in Docker 17.05 and higher. ## Configure the default logging driver @@ -44,25 +43,32 @@ example sets two configurable options on the `json-file` logging driver: { "log-driver": "json-file", "log-opts": { + "max-size": "10m", + "max-file": "3", "labels": "production_status", "env": "os,customer" } } ``` +> **Note**: `log-opt` configuration options in the `daemon.json` configuration +> file must be provided as strings. Boolean and numeric values (such as the value +> for `max-file` in the example above) must therefore be enclosed in quotes (`"`). If you do not specify a logging driver, the default is `json-file`. Thus, the default output for commands such as `docker inspect ` is JSON. To find the current default logging driver for the Docker daemon, run `docker info` and search for `Logging Driver`. You can use the following -command on Linux, macOS, or PowerShell on Windows: +command: +{% raw %} ```bash -$ docker info | grep 'Logging Driver' +$ docker info --format '{{.LoggingDriver}}' -Logging Driver: json-file +json-file ``` +{% endraw %} ## Configure the logging driver for a container diff --git a/config/containers/logging/fluentd.md b/config/containers/logging/fluentd.md index 93c5032a4a4..575824e2bc6 100644 --- a/config/containers/logging/fluentd.md +++ b/config/containers/logging/fluentd.md @@ -53,7 +53,12 @@ The following example sets the log driver to `fluentd` and sets the } ``` - Restart Docker for the changes to take effect. +Restart Docker for the changes to take effect. + +> **Note**: `log-opt` configuration options in the `daemon.json` configuration +> file must be provided as strings. Boolean and numeric values (such as the value +> for `fluentd-async-connect` or `fluentd-max-retries`) must therefore be enclosed +> in quotes (`"`). To set the logging driver for a specific container, pass the `--log-driver` option to `docker run`: diff --git a/config/containers/logging/gelf.md b/config/containers/logging/gelf.md index 55a7462830a..c5be667ae5e 100644 --- a/config/containers/logging/gelf.md +++ b/config/containers/logging/gelf.md @@ -60,6 +60,10 @@ To make the configuration permanent, you can configure it in `/etc/docker/daemon } ``` +> **Note**: `log-opt` configuration options in the `daemon.json` configuration +> file must be provided as strings. Boolean and numeric values (such as the value +> for `gelf-tcp-max-reconnect`) must therefore be enclosed in quotes (`"`). + You can set the logging driver for a specific container by setting the `--log-driver` flag when using `docker container create` or `docker run`: diff --git a/config/containers/logging/json-file.md b/config/containers/logging/json-file.md index 79810568b9f..6e397885f68 100644 --- a/config/containers/logging/json-file.md +++ b/config/containers/logging/json-file.md @@ -23,17 +23,22 @@ configuring Docker using `daemon.json`, see [daemon.json](/engine/reference/commandline/dockerd.md#daemon-configuration-file). The following example sets the log driver to `json-file` and sets the `max-size` -option. +and `max-file` options. ```json { "log-driver": "json-file", "log-opts": { - "max-size": "10m" + "max-size": "10m", + "max-file": "3" } } ``` +> **Note**: `log-opt` configuration options in the `daemon.json` configuration +> file must be provided as strings. Boolean and numeric values (such as the value +> for `max-file` in the example above) must therefore be enclosed in quotes (`"`). + Restart Docker for the changes to take effect for newly created containers. Existing containers do not use the new logging configuration. You can set the logging driver for a specific container by using the diff --git a/config/containers/logging/plugins.md b/config/containers/logging/plugins.md index ebe799a724c..f49e537f7ed 100644 --- a/config/containers/logging/plugins.md +++ b/config/containers/logging/plugins.md @@ -10,7 +10,7 @@ Docker logging plugins allow you to extend and customize Docker's logging capabilities beyond those of the [built-in logging drivers](configure.md). A logging service provider can [implement their own plugins](/engine/extend/plugins_logging.md) and make them -available on Docker Hub, Docker Store, or a private registry. This topic shows +available on Docker Hub, or a private registry. This topic shows how a user of that logging service can configure Docker to use the plugin. ## Install the logging driver plugin @@ -39,5 +39,3 @@ detailed in the If the logging driver supports additional options, you can specify them using one or more `--log-opt` flags with the option name as the key and the option value as the value. - - diff --git a/config/containers/logging/splunk.md b/config/containers/logging/splunk.md index c279c819ff7..1e110448ab8 100644 --- a/config/containers/logging/splunk.md +++ b/config/containers/logging/splunk.md @@ -36,6 +36,11 @@ The daemon.json file is located in `/etc/docker/` on Linux hosts or configuring Docker using `daemon.json`, see [daemon.json](/engine/reference/commandline/dockerd.md#daemon-configuration-file). +> **Note**: `log-opt` configuration options in the `daemon.json` configuration +> file must be provided as strings. Boolean and numeric values (such as the value +> for `splunk-gzip` or `splunk-gzip-level`) must therefore be enclosed in quotes +> (`"`). + To use the `splunk` driver for a specific container, use the commandline flags `--log-driver` and `log-opt` with `docker run`: diff --git a/config/containers/logging/syslog.md b/config/containers/logging/syslog.md index cc64d627f43..6355ac13c2a 100644 --- a/config/containers/logging/syslog.md +++ b/config/containers/logging/syslog.md @@ -41,7 +41,8 @@ configuring Docker using `daemon.json`, see [daemon.json](/engine/reference/commandline/dockerd.md#daemon-configuration-file). The following example sets the log driver to `syslog` and sets the -`syslog-address` option. +`syslog-address` option. The `syslog-address` options supports both UDP and TCP; +this example uses UDP. ```json { @@ -54,7 +55,9 @@ The following example sets the log driver to `syslog` and sets the Restart Docker for the changes to take effect. -> **Note**: The syslog-address supports both UDP and TCP. +> **Note**: `log-opt` configuration options in the `daemon.json` configuration +> file must be provided as strings. Numeric and boolean values (such as the value +> for `syslog-tls-skip-verify`) must therefore be enclosed in quotes (`"`). You can set the logging driver for a specific container by using the `--log-driver` flag to `docker container create` or `docker run`: @@ -75,7 +78,7 @@ starting the container. | Option | Description | Example value | |:-------------------------|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `syslog-address` | The address of an external `syslog` server. The URI specifier may be `[tcp | udp|tcp+tls]://host:port`, `unix://path`, or `unixgram://path`. If the transport is `tcp`, `udp`, or `tcp+tls`, the default port is `514`.| `--log-opt syslog-address=tcp+tls://192.168.1.3:514`, `--log-opt syslog-address=unix:///tmp/syslog.sock` | +| `syslog-address` | The address of an external `syslog` server. The URI specifier may be `[tcp|udp|tcp+tls]://host:port`, `unix://path`, or `unixgram://path`. If the transport is `tcp`, `udp`, or `tcp+tls`, the default port is `514`. | `--log-opt syslog-address=tcp+tls://192.168.1.3:514`, `--log-opt syslog-address=unix:///tmp/syslog.sock` | | `syslog-facility` | The `syslog` facility to use. Can be the number or name for any valid `syslog` facility. See the [syslog documentation](https://tools.ietf.org/html/rfc5424#section-6.2.1). | `--log-opt syslog-facility=daemon` | | `syslog-tls-ca-cert` | The absolute path to the trust certificates signed by the CA. **Ignored if the address protocol is not `tcp+tls`.** | `--log-opt syslog-tls-ca-cert=/etc/ca-certificates/custom/ca.pem` | | `syslog-tls-cert` | The absolute path to the TLS certificate file. **Ignored if the address protocol is not `tcp+tls`**. | `--log-opt syslog-tls-cert=/etc/ca-certificates/custom/cert.pem` | diff --git a/config/containers/resource_constraints.md b/config/containers/resource_constraints.md index 849283ed8f5..36fab1b7854 100644 --- a/config/containers/resource_constraints.md +++ b/config/containers/resource_constraints.md @@ -251,7 +251,7 @@ The following example command sets each of these three flags on a `debian:jessie container. ```bash -$ docker run --it --cpu-rt-runtime=950000 \ +$ docker run -it --cpu-rt-runtime=950000 \ --ulimit rtprio=99 \ --cap-add=sys_nice \ debian:jessie diff --git a/config/containers/runmetrics.md b/config/containers/runmetrics.md index 3e03d453af9..b80022dd09b 100644 --- a/config/containers/runmetrics.md +++ b/config/containers/runmetrics.md @@ -131,7 +131,7 @@ to the processes within the cgroup, excluding sub-cgroups. The second half (with the `total_` prefix) includes sub-cgroups as well. Some metrics are "gauges", or values that can increase or decrease. For instance, -`swap` isthe amount of swap space used by the members of the cgroup. +`swap` is the amount of swap space used by the members of the cgroup. Some others are "counters", or values that can only go up, because they represent occurrences of a specific event. For instance, `pgfault` indicates the number of page faults since the creation of the cgroup. diff --git a/config/formatting.md b/config/formatting.md index d8692501123..e916e845bae 100644 --- a/config/formatting.md +++ b/config/formatting.md @@ -87,3 +87,13 @@ docker inspect --format "{{upper .Name}}" container docker inspect --format='{{range .NetworkSettings.Networks}}{{println .IPAddress}}{{end}}' container ``` {% endraw %} + +# Hint + +To find out what data can be printed, show all content as json: + +{% raw %} +``` +docker container ls --format='{{json .}}' +``` +{% endraw %} diff --git a/config/thirdparty/prometheus.md b/config/thirdparty/prometheus.md index bfce2007bfe..5eb6fd560d5 100644 --- a/config/thirdparty/prometheus.md +++ b/config/thirdparty/prometheus.md @@ -17,6 +17,7 @@ container, and monitor your Docker instance using Prometheus. Currently, you can only monitor Docker itself. You cannot currently monitor your application using the Docker target. + ## Configure Docker To configure the Docker daemon as a Prometheus target, you need to specify the @@ -49,7 +50,7 @@ Docker now exposes Prometheus-compatible metrics on port 9323. ## Configure and run Prometheus -In this example, Prometheus runs as a Docker service on a Docker swarm. +Prometheus runs as a Docker service on a Docker swarm. > **Prerequisites** > diff --git a/datacenter/dtr/2.0/install/license.md b/datacenter/dtr/2.0/install/license.md index f9cd60d2c2d..a026b8e6509 100644 --- a/datacenter/dtr/2.0/install/license.md +++ b/datacenter/dtr/2.0/install/license.md @@ -20,7 +20,7 @@ DTR installation: ## Download your license -Go to [Docker Store](https://store.docker.com/bundles/docker-datacenter) and +Go to [Docker Hub](https://hub.docker.com/bundles/docker-datacenter) and download your license. ![](../images/license-1.png) @@ -40,4 +40,4 @@ Click the **Apply new license** button, and upload your new license file. ## Where to go next * [Install DTR](index.md) -* [Install DTR offline](install-dtr-offline.md) \ No newline at end of file +* [Install DTR offline](install-dtr-offline.md) diff --git a/datacenter/dtr/2.1/guides/install/license.md b/datacenter/dtr/2.1/guides/install/license.md index 9c75d2d8f4d..4791be26ead 100644 --- a/datacenter/dtr/2.1/guides/install/license.md +++ b/datacenter/dtr/2.1/guides/install/license.md @@ -17,7 +17,7 @@ DTR installation: ## Download your license -Go to [Docker Store](https://store.docker.com/bundles/docker-datacenter) and +Go to [Docker Hub](https://hub.docker.com/bundles/docker-datacenter) and download your license. ![](../images/license-1.png) diff --git a/datacenter/dtr/2.1/reference/api/lang/en.js b/datacenter/dtr/2.1/reference/api/lang/en.js index 776a8b72e0d..c7b8c7499ad 100644 --- a/datacenter/dtr/2.1/reference/api/lang/en.js +++ b/datacenter/dtr/2.1/reference/api/lang/en.js @@ -1,6 +1,6 @@ 'use strict'; -/* jshint quotmark: double */ +/* jshint quotemark: double */ window.SwaggerTranslator.learn({ "Warning: Deprecated":"Warning: Deprecated", "Implementation Notes":"Implementation Notes", diff --git a/datacenter/dtr/2.1/reference/api/lang/es.js b/datacenter/dtr/2.1/reference/api/lang/es.js index a8dff60b6a9..01dff98d283 100644 --- a/datacenter/dtr/2.1/reference/api/lang/es.js +++ b/datacenter/dtr/2.1/reference/api/lang/es.js @@ -1,6 +1,6 @@ 'use strict'; -/* jshint quotmark: double */ +/* jshint quotemark: double */ window.SwaggerTranslator.learn({ "Warning: Deprecated":"Advertencia: Obsoleto", "Implementation Notes":"Notas de implementación", diff --git a/datacenter/dtr/2.1/reference/api/lang/pt.js b/datacenter/dtr/2.1/reference/api/lang/pt.js index f2e7c13d413..288c81a80e1 100644 --- a/datacenter/dtr/2.1/reference/api/lang/pt.js +++ b/datacenter/dtr/2.1/reference/api/lang/pt.js @@ -1,6 +1,6 @@ 'use strict'; -/* jshint quotmark: double */ +/* jshint quotemark: double */ window.SwaggerTranslator.learn({ "Warning: Deprecated":"Aviso: Depreciado", "Implementation Notes":"Notas de Implementação", diff --git a/datacenter/dtr/2.1/reference/api/lang/ru.js b/datacenter/dtr/2.1/reference/api/lang/ru.js index 065100f73f9..15248d54246 100644 --- a/datacenter/dtr/2.1/reference/api/lang/ru.js +++ b/datacenter/dtr/2.1/reference/api/lang/ru.js @@ -1,6 +1,6 @@ 'use strict'; -/* jshint quotmark: double */ +/* jshint quotemark: double */ window.SwaggerTranslator.learn({ "Warning: Deprecated":"Ворнинг: Депрекейтед", "Implementation Notes":"Заметки", diff --git a/datacenter/dtr/2.1/reference/api/lang/tr.js b/datacenter/dtr/2.1/reference/api/lang/tr.js index 16426a9c34b..b371b67f3fe 100644 --- a/datacenter/dtr/2.1/reference/api/lang/tr.js +++ b/datacenter/dtr/2.1/reference/api/lang/tr.js @@ -1,6 +1,6 @@ 'use strict'; -/* jshint quotmark: double */ +/* jshint quotemark: double */ window.SwaggerTranslator.learn({ "Warning: Deprecated":"Uyarı: Deprecated", "Implementation Notes":"Gerçekleştirim Notları", diff --git a/datacenter/dtr/2.1/reference/api/lang/translator.js b/datacenter/dtr/2.1/reference/api/lang/translator.js index 591f6d40943..ffb879f9a27 100644 --- a/datacenter/dtr/2.1/reference/api/lang/translator.js +++ b/datacenter/dtr/2.1/reference/api/lang/translator.js @@ -7,7 +7,7 @@ * after . * For example - * - * If you wish to translate some new texsts you should do two things: + * If you wish to translate some new texts you should do two things: * 1. Add a new phrase pair ("New Phrase": "New Translation") into your language file (for example lang/ru.js). It will be great if you add it in other language files too. * 2. Mark that text it templates this way New Phrase or . * The main thing here is attribute data-sw-translate. Only inner html, title-attribute and value-attribute are going to translate. diff --git a/datacenter/dtr/2.2/guides/admin/configure/license-your-installation.md b/datacenter/dtr/2.2/guides/admin/configure/license-your-installation.md index 19063a61a87..8ed1f5f7709 100644 --- a/datacenter/dtr/2.2/guides/admin/configure/license-your-installation.md +++ b/datacenter/dtr/2.2/guides/admin/configure/license-your-installation.md @@ -17,7 +17,7 @@ DTR installation: ## Download your license -Go to [Docker Store](https://store.docker.com/bundles/docker-datacenter) and +Go to [Docker Hub](https://hub.docker.com/my-content) and download your license. ![](../../images/license-1.png) diff --git a/datacenter/dtr/2.2/guides/admin/configure/set-up-vulnerability-scans.md b/datacenter/dtr/2.2/guides/admin/configure/set-up-vulnerability-scans.md index b7d09bd93d4..24df9264bd4 100644 --- a/datacenter/dtr/2.2/guides/admin/configure/set-up-vulnerability-scans.md +++ b/datacenter/dtr/2.2/guides/admin/configure/set-up-vulnerability-scans.md @@ -14,7 +14,7 @@ access. Before you begin, make sure that you or your organization has purchased a DTR license that includes Docker Security Scanning, and that your Docker ID can -access and download this license from the Docker Store. +access and download this license from the Docker Hub. If you are using a license associated with an individual account, no additional action is needed. If you are using a license associated with an organization @@ -34,8 +34,8 @@ this step and proceed to [enable DTR Security Scanning](#enable-dtr-security-sca If your current DTR license doesn't include scanning, you must first download the new license. -1. Log in to the Docker Store using a Docker ID with access to the license you need. -2. In the top right corner, click your user account icon, and select **Subscriptions**. +1. Log in to the Docker Hub using a Docker ID with access to the license you need. +2. In the top right corner, click your user account icon, and select **My Content**. 3. If necessary, select an organization account from the **Accounts** menu at the upper right. 4. Locate Docker Datacenter in the **Subscriptions** list. 5. Click **Subscription Details** and select **Setup instructions**. @@ -141,24 +141,23 @@ Your choice is saved automatically. To update the CVE database for your DTR instance when it cannot contact the update server, you download and install a `.tar` file that contains the database updates. To download the file: -1. Log in to the [Docker Store](https://store.docker.com/). +1. Log in to the [Docker Hub](https://hub.docker.com/). - If you are a member of an Organization managing licenses using Docker Store, + If you are a member of an Organization managing licenses using Docker Hub, make sure your account is a member of the `Owners` team. Only Owners can - view and manage licenses and other entitlements for Organizations from the - Docker Store. + view and manage licenses and other entitlements for Organizations from Docker Hub. 2. In the top right corner, click your user account icon, and select **My Content**. 3. If necessary, select an organization account from the **Accounts** menu at the upper right. 4. Locate your Docker EE Advanced subscription or trial. -5. Click **Setup** button. +5. Click **Setup**. ![](../../images/cve-file-1.png){: .with-border} 6. Click **Download CVE Vulnerability Database** link to download the database file. ![](../../images/cve-file-2.png){: .with-border} - + If you run into problems, contact us at nautilus-feedback@docker.com for the file. To manually update the DTR CVE database from a `.tar` file: diff --git a/datacenter/dtr/2.2/guides/user/manage-images/sign-images/index.md b/datacenter/dtr/2.2/guides/user/manage-images/sign-images/index.md index 547494cb057..5a89b984702 100644 --- a/datacenter/dtr/2.2/guides/user/manage-images/sign-images/index.md +++ b/datacenter/dtr/2.2/guides/user/manage-images/sign-images/index.md @@ -39,7 +39,7 @@ To sign images in a way that UCP trusts them you need to: * Initialize trust metadata for the repository * Delegate signing to the keys in your UCP client bundle -In this example we're going to pull an NGINX image from Docker Store, +In this example we're going to pull an NGINX image from Docker Hub, re-tag it as `dtr.example.org/dev/nginx:1`, push the image to DTR and sign it in a way that is trusted by UCP. If you manage multiple repositories, you need to do the same procedure for every one of them. @@ -56,11 +56,11 @@ the easiest way to do it is by pushing an image to that repository. Navigate to the **DTR web UI**, and create a repository for your image. In this example we've created the `dev/nginx` repository. -From the Docker CLI client, pull an NGINX image from Docker Store, +From the Docker CLI client, pull an NGINX image from Docker Hub, re-tag it, sign and push it to DTR. ```bash -# Pull NGINX from Docker Store +# Pull NGINX from Docker Hub docker pull nginx:latest # Re-tag NGINX diff --git a/datacenter/dtr/2.2/reference/api/lang/en.js b/datacenter/dtr/2.2/reference/api/lang/en.js index 776a8b72e0d..c7b8c7499ad 100644 --- a/datacenter/dtr/2.2/reference/api/lang/en.js +++ b/datacenter/dtr/2.2/reference/api/lang/en.js @@ -1,6 +1,6 @@ 'use strict'; -/* jshint quotmark: double */ +/* jshint quotemark: double */ window.SwaggerTranslator.learn({ "Warning: Deprecated":"Warning: Deprecated", "Implementation Notes":"Implementation Notes", diff --git a/datacenter/dtr/2.2/reference/api/lang/es.js b/datacenter/dtr/2.2/reference/api/lang/es.js index a8dff60b6a9..01dff98d283 100644 --- a/datacenter/dtr/2.2/reference/api/lang/es.js +++ b/datacenter/dtr/2.2/reference/api/lang/es.js @@ -1,6 +1,6 @@ 'use strict'; -/* jshint quotmark: double */ +/* jshint quotemark: double */ window.SwaggerTranslator.learn({ "Warning: Deprecated":"Advertencia: Obsoleto", "Implementation Notes":"Notas de implementación", diff --git a/datacenter/dtr/2.2/reference/api/lang/pt.js b/datacenter/dtr/2.2/reference/api/lang/pt.js index f2e7c13d413..288c81a80e1 100644 --- a/datacenter/dtr/2.2/reference/api/lang/pt.js +++ b/datacenter/dtr/2.2/reference/api/lang/pt.js @@ -1,6 +1,6 @@ 'use strict'; -/* jshint quotmark: double */ +/* jshint quotemark: double */ window.SwaggerTranslator.learn({ "Warning: Deprecated":"Aviso: Depreciado", "Implementation Notes":"Notas de Implementação", diff --git a/datacenter/dtr/2.2/reference/api/lang/ru.js b/datacenter/dtr/2.2/reference/api/lang/ru.js index 065100f73f9..15248d54246 100644 --- a/datacenter/dtr/2.2/reference/api/lang/ru.js +++ b/datacenter/dtr/2.2/reference/api/lang/ru.js @@ -1,6 +1,6 @@ 'use strict'; -/* jshint quotmark: double */ +/* jshint quotemark: double */ window.SwaggerTranslator.learn({ "Warning: Deprecated":"Ворнинг: Депрекейтед", "Implementation Notes":"Заметки", diff --git a/datacenter/dtr/2.2/reference/api/lang/tr.js b/datacenter/dtr/2.2/reference/api/lang/tr.js index 16426a9c34b..b371b67f3fe 100644 --- a/datacenter/dtr/2.2/reference/api/lang/tr.js +++ b/datacenter/dtr/2.2/reference/api/lang/tr.js @@ -1,6 +1,6 @@ 'use strict'; -/* jshint quotmark: double */ +/* jshint quotemark: double */ window.SwaggerTranslator.learn({ "Warning: Deprecated":"Uyarı: Deprecated", "Implementation Notes":"Gerçekleştirim Notları", diff --git a/datacenter/dtr/2.2/reference/api/lang/translator.js b/datacenter/dtr/2.2/reference/api/lang/translator.js index 591f6d40943..ffb879f9a27 100644 --- a/datacenter/dtr/2.2/reference/api/lang/translator.js +++ b/datacenter/dtr/2.2/reference/api/lang/translator.js @@ -7,7 +7,7 @@ * after . * For example - * - * If you wish to translate some new texsts you should do two things: + * If you wish to translate some new texts you should do two things: * 1. Add a new phrase pair ("New Phrase": "New Translation") into your language file (for example lang/ru.js). It will be great if you add it in other language files too. * 2. Mark that text it templates this way New Phrase or . * The main thing here is attribute data-sw-translate. Only inner html, title-attribute and value-attribute are going to translate. diff --git a/datacenter/dtr/2.3/guides/admin/configure/external-storage/nfs.md b/datacenter/dtr/2.3/guides/admin/configure/external-storage/nfs.md index e6c66280e5b..1a6c3172b92 100644 --- a/datacenter/dtr/2.3/guides/admin/configure/external-storage/nfs.md +++ b/datacenter/dtr/2.3/guides/admin/configure/external-storage/nfs.md @@ -31,7 +31,7 @@ mkdir /tmp/mydir && sudo mount -t nfs : One way to configure DTR to use an NFS directory is at install time: ```none -docker run -it --rm {{ page.dtr_org }}/{{ page.dtr_repo }}:{{ dtr_version }} install \ +docker run -it --rm {{ page.dtr_org }}/{{ page.dtr_repo }}:{{ page.dtr_version }} install \ --nfs-storage-url \ ``` @@ -50,7 +50,7 @@ If you want to start using the new DTR built-in support for NFS you can reconfigure DTR: ```none -docker run -it --rm {{ page.dtr_org }}/{{ page.dtr_repo }}:{{ dtr_version }} reconfigure \ +docker run -it --rm {{ page.dtr_org }}/{{ page.dtr_repo }}:{{ page.dtr_version }} reconfigure \ --nfs-storage-url ``` @@ -58,7 +58,7 @@ If you want to reconfigure DTR to stop using NFS storage, leave the option in blank: ```none -docker run -it --rm {{ page.dtr_org }}/{{ page.dtr_repo }}:{{ dtr_version}} reconfigure \ +docker run -it --rm {{ page.dtr_org }}/{{ page.dtr_repo }}:{{ page.dtr_version}} reconfigure \ --nfs-storage-url "" ``` diff --git a/datacenter/dtr/2.3/guides/admin/configure/license-your-installation.md b/datacenter/dtr/2.3/guides/admin/configure/license-your-installation.md index 3c14e283a53..a976e7e8273 100644 --- a/datacenter/dtr/2.3/guides/admin/configure/license-your-installation.md +++ b/datacenter/dtr/2.3/guides/admin/configure/license-your-installation.md @@ -17,7 +17,7 @@ DTR installation: ## Download your license -Go to [Docker Store](https://store.docker.com/editions/enterprise/docker-ee-trial) +Go to [Docker Hub](https://hub.docker.com/editions/enterprise/docker-ee-trial) and download your license. ![](../../images/license-1.png){: .with-border} diff --git a/datacenter/dtr/2.3/guides/admin/configure/set-up-vulnerability-scans.md b/datacenter/dtr/2.3/guides/admin/configure/set-up-vulnerability-scans.md index c35e6ed8dcd..cdf1e1b3a2f 100644 --- a/datacenter/dtr/2.3/guides/admin/configure/set-up-vulnerability-scans.md +++ b/datacenter/dtr/2.3/guides/admin/configure/set-up-vulnerability-scans.md @@ -14,7 +14,7 @@ access. Before you begin, make sure that you or your organization has purchased a DTR license that includes Docker Security Scanning, and that your Docker ID can -access and download this license from the Docker Store. +access and download this license from the Docker Hub. If you are using a license associated with an individual account, no additional action is needed. If you are using a license associated with an organization @@ -34,7 +34,7 @@ this step and proceed to [enable DTR Security Scanning](#enable-dtr-security-sca If your current DTR license doesn't include scanning, you must first download the new license. -1. Log in to the Docker Store using a Docker ID with access to the license you need. +1. Log in to [Docker Hub](https://hub.docker.com) using a Docker ID with access to the license you need. 2. In the top right corner, click your user account icon, and select **My Content**. 3. Locate **Docker Enterprise Edition** in the content list, and click **Setup**. 4. Click **License Key** to download the license. @@ -139,12 +139,12 @@ Your choice is saved automatically. To update the CVE database for your DTR instance when it cannot contact the update server, you download and install a `.tar` file that contains the database updates. To download the file: -1. Log in to the [Docker Store](https://store.docker.com/). +1. Log in to [Docker Hub](https://hub.docker.com/). - If you are a member of an Organization managing licenses using Docker Store, + If you are a member of an Organization managing licenses using Docker Hub, make sure your account is a member of the `Owners` team. Only Owners can - view and manage licenses and other entitlements for Organizations from the - Docker Store. + view and manage licenses and other entitlements for Organizations from + Docker Hub. 2. In the top right corner, click your user account icon, and select **My Content**. 3. If necessary, select an organization account from the **Accounts** menu at the upper right. diff --git a/datacenter/dtr/2.3/guides/user/manage-images/sign-images/index.md b/datacenter/dtr/2.3/guides/user/manage-images/sign-images/index.md index cef1a76464e..2b72a73769b 100644 --- a/datacenter/dtr/2.3/guides/user/manage-images/sign-images/index.md +++ b/datacenter/dtr/2.3/guides/user/manage-images/sign-images/index.md @@ -39,7 +39,7 @@ To sign images in a way that UCP trusts them, you need to: * Initialize trust metadata for the repository * Delegate signing to the keys in your UCP client bundle -In this example we're going to pull an NGINX image from Docker Store, +In this example we're going to pull an NGINX image from Docker Hub, re-tag it as `dtr.example.org/dev/nginx:1`, push the image to DTR and sign it in a way that is trusted by UCP. If you manage multiple repositories, you need to do the same procedure for every one of them. @@ -56,11 +56,11 @@ the easiest way to do it is by pushing an image to that repository. Navigate to the **DTR web UI**, and create a repository for your image. In this example we've created the `dev/nginx` repository. -From the Docker CLI client, pull an NGINX image from Docker Store, +From the Docker CLI client, pull an NGINX image from Docker Hub, re-tag it, sign and push it to DTR. ```bash -# Pull NGINX from Docker Store +# Pull NGINX from Docker Hub docker pull nginx:latest # Re-tag NGINX diff --git a/datacenter/dtr/2.3/reference/api/lang/en.js b/datacenter/dtr/2.3/reference/api/lang/en.js index 776a8b72e0d..c7b8c7499ad 100644 --- a/datacenter/dtr/2.3/reference/api/lang/en.js +++ b/datacenter/dtr/2.3/reference/api/lang/en.js @@ -1,6 +1,6 @@ 'use strict'; -/* jshint quotmark: double */ +/* jshint quotemark: double */ window.SwaggerTranslator.learn({ "Warning: Deprecated":"Warning: Deprecated", "Implementation Notes":"Implementation Notes", diff --git a/datacenter/dtr/2.3/reference/api/lang/es.js b/datacenter/dtr/2.3/reference/api/lang/es.js index a8dff60b6a9..01dff98d283 100644 --- a/datacenter/dtr/2.3/reference/api/lang/es.js +++ b/datacenter/dtr/2.3/reference/api/lang/es.js @@ -1,6 +1,6 @@ 'use strict'; -/* jshint quotmark: double */ +/* jshint quotemark: double */ window.SwaggerTranslator.learn({ "Warning: Deprecated":"Advertencia: Obsoleto", "Implementation Notes":"Notas de implementación", diff --git a/datacenter/dtr/2.3/reference/api/lang/pt.js b/datacenter/dtr/2.3/reference/api/lang/pt.js index f2e7c13d413..288c81a80e1 100644 --- a/datacenter/dtr/2.3/reference/api/lang/pt.js +++ b/datacenter/dtr/2.3/reference/api/lang/pt.js @@ -1,6 +1,6 @@ 'use strict'; -/* jshint quotmark: double */ +/* jshint quotemark: double */ window.SwaggerTranslator.learn({ "Warning: Deprecated":"Aviso: Depreciado", "Implementation Notes":"Notas de Implementação", diff --git a/datacenter/dtr/2.3/reference/api/lang/ru.js b/datacenter/dtr/2.3/reference/api/lang/ru.js index 065100f73f9..15248d54246 100644 --- a/datacenter/dtr/2.3/reference/api/lang/ru.js +++ b/datacenter/dtr/2.3/reference/api/lang/ru.js @@ -1,6 +1,6 @@ 'use strict'; -/* jshint quotmark: double */ +/* jshint quotemark: double */ window.SwaggerTranslator.learn({ "Warning: Deprecated":"Ворнинг: Депрекейтед", "Implementation Notes":"Заметки", diff --git a/datacenter/dtr/2.3/reference/api/lang/tr.js b/datacenter/dtr/2.3/reference/api/lang/tr.js index 16426a9c34b..b371b67f3fe 100644 --- a/datacenter/dtr/2.3/reference/api/lang/tr.js +++ b/datacenter/dtr/2.3/reference/api/lang/tr.js @@ -1,6 +1,6 @@ 'use strict'; -/* jshint quotmark: double */ +/* jshint quotemark: double */ window.SwaggerTranslator.learn({ "Warning: Deprecated":"Uyarı: Deprecated", "Implementation Notes":"Gerçekleştirim Notları", diff --git a/datacenter/dtr/2.3/reference/api/lang/translator.js b/datacenter/dtr/2.3/reference/api/lang/translator.js index 591f6d40943..ffb879f9a27 100644 --- a/datacenter/dtr/2.3/reference/api/lang/translator.js +++ b/datacenter/dtr/2.3/reference/api/lang/translator.js @@ -7,7 +7,7 @@ * after . * For example - * - * If you wish to translate some new texsts you should do two things: + * If you wish to translate some new texts you should do two things: * 1. Add a new phrase pair ("New Phrase": "New Translation") into your language file (for example lang/ru.js). It will be great if you add it in other language files too. * 2. Mark that text it templates this way New Phrase or . * The main thing here is attribute data-sw-translate. Only inner html, title-attribute and value-attribute are going to translate. diff --git a/datacenter/dtr/2.3/reference/cli/install.md b/datacenter/dtr/2.3/reference/cli/install.md index 8dac0031911..af70dd5652f 100644 --- a/datacenter/dtr/2.3/reference/cli/install.md +++ b/datacenter/dtr/2.3/reference/cli/install.md @@ -35,10 +35,10 @@ Note: Use --ucp-ca "$(cat ca.pem)" instead of --ucp-insecure-tls for a productio | Option | Environment Variable | Description | |:------------------------------|:--------------------------|:-------------------------------------------------------------------------------------| | `--debug` | $DEBUG | Enable debug mode for additional logs. | -| `--dtr-ca` | $DTR_CA | Use a PEM-encoded TLS CA certificate for DTR.By default DTR generates a self-signed TLS certificate during deployment. You can use your own TLS CA certificate with --dtr-ca "$(cat ca.pem)". | -| `--dtr-cert` | $DTR_CERT | Use a PEM-encoded TLS certificate for DTR.By default DTR generates a self-signed TLS certificate during deployment. You can use your own TLS certificate with --dtr-cert "$(cat ca.pem)". | +| `--dtr-ca` | $DTR_CA | Use a PEM-encoded TLS CA certificate for DTR. By default DTR generates a self-signed TLS certificate during deployment. You can use your own root CA public certificate with `--dtr-ca "$(cat ca.pem)"`. | +| `--dtr-cert` | $DTR_CERT | Use a PEM-encoded TLS certificate for DTR. By default DTR generates a self-signed TLS certificate during deployment. You can use your own public key certificate with `--dtr-cert "$(cat cert.pem)"`. If the certificate has been signed by an intermediate certificate authority, append its public key certificate at the end of the file to establish a chain of trust. | | `--dtr-external-url` | $DTR_EXTERNAL_URL | URL of the host or load balancer clients use to reach DTR.When you use this flag, users are redirected to UCP for logging in. Once authenticated they are redirected to the url you specify in this flag. If you don't use this flag, DTR is deployed without single sign-on with UCP. Users and teams are shared but users login separately into the two applications. You can enable and disable single sign-on in the DTR settings. Format https://host[:port], where port is the value you used with --replica-https-port. | -| `--dtr-key` | $DTR_KEY | Use a PEM-encoded TLS private key for DTR.By default DTR generates a self-signed TLS certificate during deployment. You can use your own TLS private key with --dtr-key "$(cat ca.pem)". | +| `--dtr-key` | $DTR_KEY | Use a PEM-encoded TLS private key for DTR. By default DTR generates a self-signed TLS certificate during deployment. You can use your own TLS private key with `--dtr-key "$(cat key.pem)"`. | | `--dtr-storage-volume` | $DTR_STORAGE_VOLUME | Customize the volume to store Docker images.By default DTR creates a volume to store the Docker images in the local filesystem of the node where DTR is running, without high-availability. Use this flag to specify a full path or volume name for DTR to store images. For high-availability, make sure all DTR replicas can read and write data on this volume. If you're using NFS, use --nfs-storage-url instead. | | `--enable-pprof` | $DTR_PPROF | Enables pprof profiling of the server.Once DTR is deployed with this flag, you can access the pprof endpoint for the api server at /debug/pprof, and the registry endpoint at /registry_debug_pprof/debug/pprof. | | `--enzi-ca` | $ENZI_TLS_CA | Use a PEM-encoded TLS CA certificate for Enzi. | diff --git a/datacenter/dtr/2.3/reference/cli/reconfigure.md b/datacenter/dtr/2.3/reference/cli/reconfigure.md index e14b24dc8e5..6150472cea8 100644 --- a/datacenter/dtr/2.3/reference/cli/reconfigure.md +++ b/datacenter/dtr/2.3/reference/cli/reconfigure.md @@ -27,10 +27,10 @@ time, configure your DTR for high-availability. | Option | Environment Variable | Description | |:------------------------------|:--------------------------|:-------------------------------------------------------------------------------------| | `--debug` | $DEBUG | Enable debug mode for additional logs. | -| `--dtr-ca` | $DTR_CA | Use a PEM-encoded TLS CA certificate for DTR. By default DTR generates a self-signed TLS certificate during deployment. You can use your own TLS CA certificate with --dtr-ca "$(cat ca.pem)". | -| `--dtr-cert` | $DTR_CERT | Use a PEM-encoded TLS certificate for DTR. By default DTR generates a self-signed TLS certificate during deployment. You can use your own TLS certificate with --dtr-cert "$(cat ca.pem)". | +| `--dtr-ca` | $DTR_CA | Use a PEM-encoded TLS CA certificate for DTR. By default DTR generates a self-signed TLS certificate during deployment. You can use your own root CA public certificate with `--dtr-ca "$(cat ca.pem)"`. | +| `--dtr-cert` | $DTR_CERT | Use a PEM-encoded TLS certificate for DTR. By default DTR generates a self-signed TLS certificate during deployment. You can use your own public key certificate with `--dtr-cert "$(cat cert.pem)"`. If the certificate has been signed by an intermediate certificate authority, append its public key certificate at the end of the file to establish a chain of trust. | | `--dtr-external-url` | $DTR_EXTERNAL_URL | URL of the host or load balancer clients use to reach DTR. When you use this flag, users are redirected to UCP for logging in. Once authenticated they are redirected to the URL you specify in this flag. If you don't use this flag, DTR is deployed without single sign-on with UCP. Users and teams are shared but users log separately into the two applications. You can enable and disable single sign-on in the DTR settings. Format https://host[:port], where port is the value you used with `--replica-https-port`. | -| `--dtr-key` | $DTR_KEY | Use a PEM-encoded TLS private key for DTR. By default DTR generates a self-signed TLS certificate during deployment. You can use your own TLS private key with --dtr-key "$(cat ca.pem)". | +| `--dtr-key` | $DTR_KEY | Use a PEM-encoded TLS private key for DTR. By default DTR generates a self-signed TLS certificate during deployment. You can use your own TLS private key with `--dtr-key "$(cat key.pem)"`. | | `--dtr-storage-volume` | $DTR_STORAGE_VOLUME | Customize the volume to store Docker images. By default DTR creates a volume to store the Docker images in the local filesystem of the node where DTR is running, without high-availability. Use this flag to specify a full path or volume name for DTR to store images. For high-availability, make sure all DTR replicas can read and write data on this volume. If you're using NFS, use `--nfs-storage-url` instead. | | `--enable-pprof` | $DTR_PPROF | Enables pprof profiling of the server. Once DTR is deployed with this flag, you can access the pprof endpoint for the api server at /debug/pprof, and the registry endpoint at /registry_debug_pprof/debug/pprof. | | `--enzi-ca` | $ENZI_TLS_CA | Use a PEM-encoded TLS CA certificate for Enzi. | diff --git a/datacenter/dtr/2.4/guides/admin/configure/license-your-installation.md b/datacenter/dtr/2.4/guides/admin/configure/license-your-installation.md index 3c14e283a53..a976e7e8273 100644 --- a/datacenter/dtr/2.4/guides/admin/configure/license-your-installation.md +++ b/datacenter/dtr/2.4/guides/admin/configure/license-your-installation.md @@ -17,7 +17,7 @@ DTR installation: ## Download your license -Go to [Docker Store](https://store.docker.com/editions/enterprise/docker-ee-trial) +Go to [Docker Hub](https://hub.docker.com/editions/enterprise/docker-ee-trial) and download your license. ![](../../images/license-1.png){: .with-border} diff --git a/datacenter/dtr/2.4/guides/admin/configure/set-up-vulnerability-scans.md b/datacenter/dtr/2.4/guides/admin/configure/set-up-vulnerability-scans.md index 7f8c754b8fd..5d7570f3c21 100644 --- a/datacenter/dtr/2.4/guides/admin/configure/set-up-vulnerability-scans.md +++ b/datacenter/dtr/2.4/guides/admin/configure/set-up-vulnerability-scans.md @@ -16,7 +16,7 @@ access. Before you begin, make sure that you or your organization has purchased a DTR license that includes Docker Security Scanning, and that your Docker ID can -access and download this license from the Docker Store. +access and download this license from Docker Hub. If you are using a license associated with an individual account, no additional action is needed. If you are using a license associated with an organization @@ -36,7 +36,7 @@ this step and proceed to [enable DTR Security Scanning](#enable-dtr-security-sca If your current DTR license doesn't include scanning, you must first download the new license. -1. Log in to the Docker Store using a Docker ID with access to the license you need. +1. Log in to Docker Hub using a Docker ID with access to the license you need. 2. In the top right corner, click your user account icon, and select **My Content**. 3. Locate **Docker Enterprise Edition** in the content list, and click **Setup**. 4. Click **License Key** to download the license. @@ -141,12 +141,12 @@ Your choice is saved automatically. To update the CVE database for your DTR instance when it cannot contact the update server, you download and install a `.tar` file that contains the database updates. To download the file: -1. Log in to the [Docker Store](https://store.docker.com/). +1. Log in to the [Docker Hub](https://hub.docker.com/). - If you are a member of an Organization managing licenses using Docker Store, + If you are a member of an Organization managing licenses using Docker Hub, make sure your account is a member of the `Owners` team. Only Owners can view and manage licenses and other entitlements for Organizations from the - Docker Store. + Docker Hub. 2. In the top right corner, click your user account icon, and select **My Content**. 3. If necessary, select an organization account from the **Accounts** menu at the upper right. diff --git a/datacenter/dtr/2.4/guides/user/manage-images/sign-images/index.md b/datacenter/dtr/2.4/guides/user/manage-images/sign-images/index.md index cef1a76464e..2b72a73769b 100644 --- a/datacenter/dtr/2.4/guides/user/manage-images/sign-images/index.md +++ b/datacenter/dtr/2.4/guides/user/manage-images/sign-images/index.md @@ -39,7 +39,7 @@ To sign images in a way that UCP trusts them, you need to: * Initialize trust metadata for the repository * Delegate signing to the keys in your UCP client bundle -In this example we're going to pull an NGINX image from Docker Store, +In this example we're going to pull an NGINX image from Docker Hub, re-tag it as `dtr.example.org/dev/nginx:1`, push the image to DTR and sign it in a way that is trusted by UCP. If you manage multiple repositories, you need to do the same procedure for every one of them. @@ -56,11 +56,11 @@ the easiest way to do it is by pushing an image to that repository. Navigate to the **DTR web UI**, and create a repository for your image. In this example we've created the `dev/nginx` repository. -From the Docker CLI client, pull an NGINX image from Docker Store, +From the Docker CLI client, pull an NGINX image from Docker Hub, re-tag it, sign and push it to DTR. ```bash -# Pull NGINX from Docker Store +# Pull NGINX from Docker Hub docker pull nginx:latest # Re-tag NGINX diff --git a/datacenter/dtr/2.4/reference/cli/install.md b/datacenter/dtr/2.4/reference/cli/install.md index b7699e1e528..87690546868 100644 --- a/datacenter/dtr/2.4/reference/cli/install.md +++ b/datacenter/dtr/2.4/reference/cli/install.md @@ -35,10 +35,10 @@ Note: Use --ucp-ca "$(cat ca.pem)" instead of --ucp-insecure-tls for a productio | Option | Environment Variable | Description | |:------------------------------|:--------------------------|:-------------------------------------------------------------------------------------| | `--debug` | $DEBUG | Enable debug mode for additional logs. | -| `--dtr-ca` | $DTR_CA | Use a PEM-encoded TLS CA certificate for DTR.By default DTR generates a self-signed TLS certificate during deployment. You can use your own TLS CA certificate with --dtr-ca "$(cat ca.pem)". | -| `--dtr-cert` | $DTR_CERT | Use a PEM-encoded TLS certificate for DTR.By default DTR generates a self-signed TLS certificate during deployment. You can use your own TLS certificate with --dtr-cert "$(cat ca.pem)". | +| `--dtr-ca` | $DTR_CA | Use a PEM-encoded TLS CA certificate for DTR. By default DTR generates a self-signed TLS certificate during deployment. You can use your own root CA public certificate with `--dtr-ca "$(cat ca.pem)"`. | +| `--dtr-cert` | $DTR_CERT | Use a PEM-encoded TLS certificate for DTR. By default DTR generates a self-signed TLS certificate during deployment. You can use your own public key certificate with `--dtr-cert "$(cat cert.pem)"`. If the certificate has been signed by an intermediate certificate authority, append its public key certificate at the end of the file to establish a chain of trust. | | `--dtr-external-url` | $DTR_EXTERNAL_URL | URL of the host or load balancer clients use to reach DTR.When you use this flag, users are redirected to UCP for logging in. Once authenticated they are redirected to the url you specify in this flag. If you don't use this flag, DTR is deployed without single sign-on with UCP. Users and teams are shared but users login separately into the two applications. You can enable and disable single sign-on in the DTR settings. Format https://host[:port], where port is the value you used with --replica-https-port. | -| `--dtr-key` | $DTR_KEY | Use a PEM-encoded TLS private key for DTR.By default DTR generates a self-signed TLS certificate during deployment. You can use your own TLS private key with --dtr-key "$(cat ca.pem)". | +| `--dtr-key` | $DTR_KEY | Use a PEM-encoded TLS private key for DTR. By default DTR generates a self-signed TLS certificate during deployment. You can use your own TLS private key with `--dtr-key "$(cat key.pem)"`. | | `--dtr-storage-volume` | $DTR_STORAGE_VOLUME | Customize the volume to store Docker images.By default DTR creates a volume to store the Docker images in the local filesystem of the node where DTR is running, without high-availability. Use this flag to specify a full path or volume name for DTR to store images. For high-availability, make sure all DTR replicas can read and write data on this volume. If you're using NFS, use --nfs-storage-url instead. | | `--enable-pprof` | $DTR_PPROF | Enables pprof profiling of the server.Once DTR is deployed with this flag, you can access the pprof endpoint for the api server at /debug/pprof, and the registry endpoint at /registry_debug_pprof/debug/pprof. | | `--help-extended` | $DTR_EXTENDED_HELP | Display extended help text for a given command. | diff --git a/datacenter/dtr/2.4/reference/cli/reconfigure.md b/datacenter/dtr/2.4/reference/cli/reconfigure.md index 06050980681..b722be502c7 100644 --- a/datacenter/dtr/2.4/reference/cli/reconfigure.md +++ b/datacenter/dtr/2.4/reference/cli/reconfigure.md @@ -27,13 +27,13 @@ time, configure your DTR for high-availability. | Option | Environment Variable | Description | |:------------------------------|:--------------------------|:-------------------------------------------------------------------------------------| | `--debug` | $DEBUG | Enable debug mode for additional logs. | -| `--dtr-ca` | $DTR_CA | Use a PEM-encoded TLS CA certificate for DTR.By default DTR generates a self-signed TLS certificate during deployment. You can use your own TLS CA certificate with --dtr-ca "$(cat ca.pem)". | -| `--dtr-cert` | $DTR_CERT | Use a PEM-encoded TLS certificate for DTR.By default DTR generates a self-signed TLS certificate during deployment. You can use your own TLS certificate with --dtr-cert "$(cat ca.pem)". | +| `--dtr-ca` | $DTR_CA | Use a PEM-encoded TLS CA certificate for DTR. By default DTR generates a self-signed TLS certificate during deployment. You can use your own root CA public certificate with `--dtr-ca "$(cat ca.pem)"`. | +| `--dtr-cert` | $DTR_CERT | Use a PEM-encoded TLS certificate for DTR. By default DTR generates a self-signed TLS certificate during deployment. You can use your own public key certificate with `--dtr-cert "$(cat cert.pem)"`. If the certificate has been signed by an intermediate certificate authority, append its public key certificate at the end of the file to establish a chain of trust. | | `--dtr-external-url` | $DTR_EXTERNAL_URL | URL of the host or load balancer clients use to reach DTR.When you use this flag, users are redirected to UCP for logging in. Once authenticated they are redirected to the url you specify in this flag. If you don't use this flag, DTR is deployed without single sign-on with UCP. Users and teams are shared but users login separately into the two applications. You can enable and disable single sign-on in the DTR settings. Format https://host[:port], where port is the value you used with --replica-https-port. | -| `--dtr-key` | $DTR_KEY | Use a PEM-encoded TLS private key for DTR.By default DTR generates a self-signed TLS certificate during deployment. You can use your own TLS private key with --dtr-key "$(cat ca.pem)". | +| `--dtr-key` | $DTR_KEY | Use a PEM-encoded TLS private key for DTR. By default DTR generates a self-signed TLS certificate during deployment. You can use your own TLS private key with `--dtr-key "$(cat key.pem)"`. | | `--dtr-storage-volume` | $DTR_STORAGE_VOLUME | Customize the volume to store Docker images.By default DTR creates a volume to store the Docker images in the local filesystem of the node where DTR is running, without high-availability. Use this flag to specify a full path or volume name for DTR to store images. For high-availability, make sure all DTR replicas can read and write data on this volume. If you're using NFS, use --nfs-storage-url instead. | | `--enable-pprof` | $DTR_PPROF | Enables pprof profiling of the server.Once DTR is deployed with this flag, you can access the pprof endpoint for the api server at /debug/pprof, and the registry endpoint at /registry_debug_pprof/debug/pprof. | -| `--existing-replica-id` | $DTR_REPLICA_ID | The ID of an existing DTR replica.To add, remove or modify DTR, you must connect to an existing healthy replica's database.. | +| `--existing-replica-id` | $DTR_REPLICA_ID | The ID of an existing DTR replica. To add, remove or modify DTR, you must connect to an existing healthy replica's database. | | `--help-extended` | $DTR_EXTENDED_HELP | Display extended help text for a given command. | | `--http-proxy` | $DTR_HTTP_PROXY | The HTTP proxy used for outgoing requests. | | `--https-proxy` | $DTR_HTTPS_PROXY | The HTTPS proxy used for outgoing requests. | diff --git a/datacenter/dtr/2.5/guides/admin/backups-and-disaster-recovery.md b/datacenter/dtr/2.5/guides/admin/backups-and-disaster-recovery.md new file mode 100644 index 00000000000..725d45c18c1 --- /dev/null +++ b/datacenter/dtr/2.5/guides/admin/backups-and-disaster-recovery.md @@ -0,0 +1,239 @@ +--- +title: DTR backups and recovery +description: Learn how to back up your Docker Trusted Registry cluster, and to recover your cluster from an existing backup. +keywords: registry, high-availability, backup, recovery +--- + +{% assign image_backup_file = "backup-images.tar" %} +{% assign metadata_backup_file = "backup-metadata.tar" %} + +DTR requires that a majority (n/2 + 1) of its replicas are healthy at all times +for it to work. So if a majority of replicas is unhealthy or lost, the only +way to restore DTR to a working state, is by recovering from a backup. This +is why it's important to ensure replicas are healthy and perform frequent +backups. + +## Data managed by DTR + +Docker Trusted Registry maintains data about: + +| Data | Description | +|:-----------------------------------|:--------------------------------------------------------------------------------------------------------------------------------------------------| +| Configurations | The DTR cluster configurations | +| Repository metadata | The metadata about the repositories and images deployed | +| Access control to repos and images | Permissions for teams and repositories | +| Notary data | Notary tags and signatures | +| Scan results | Security scanning results for images | +| Certificates and keys | The certificates, public keys, and private keys that are used for mutual TLS communication | +| Images content | The images you push to DTR. This can be stored on the filesystem of the node running DTR, or other storage system, depending on the configuration | + +This data is persisted on the host running DTR, using named volumes. +[Learn more about DTR named volumes](../architecture.md). + +To perform a backup of a DTR node, run the `docker/dtr backup` command. This +command backups up the following data: + +| Data | Backed up | Description | +|:-----------------------------------|:----------|:---------------------------------------------------------------| +| Configurations | yes | DTR settings | +| Repository metadata | yes | Metadata like image architecture and size | +| Access control to repos and images | yes | Data about who has access to which images | +| Notary data | yes | Signatures and digests for images that are signed | +| Scan results | yes | Information about vulnerabilities in your images | +| Certificates and keys | yes | TLS certificates and keys used by DTR | +| Image content | no | Needs to be backed up separately, depends on DTR configuration | +| Users, orgs, teams | no | Create a UCP backup to backup this data | +| Vulnerability database | no | Can be re-downloaded after a restore | + + +## Backup DTR data + +To create a backup of DTR you need to: + +1. Backup image content +2. Backup DTR metadata + +You should always create backups from the same DTR replica, to ensure a smoother +restore. + +### Backup image content + +Since you can configure the storage backend that DTR uses to store images, +the way you backup images depends on the storage backend you're using. + +If you've configured DTR to store images on the local filesystem or NFS mount, +you can backup the images by using ssh to log into a node where DTR is running, +and creating a tar archive of the [dtr-registry volume](../architecture.md): + +```none +sudo tar -cf {{ image_backup_file }} \ + {% raw %}$(dirname $(docker volume inspect --format '{{.Mountpoint}}' dtr-registry-)){% endraw %} +``` + +If you're using a different storage backend, follow the best practices +recommended for that system. + + +### Backup DTR metadata + +To create a DTR backup, load your UCP client bundle, and run the following +command, replacing the placeholders for the real values: + +```none +read -sp 'ucp password: ' UCP_PASSWORD; \ +docker run --log-driver none -i --rm \ + --env UCP_PASSWORD=$UCP_PASSWORD \ + {{ page.dtr_org }}/{{ page.dtr_repo }}:{{ page.dtr_version }} backup \ + --ucp-url \ + --ucp-insecure-tls \ + --ucp-username \ + --existing-replica-id > {{ metadata_backup_file }} +``` + +Where: + +* `` is the url you use to access UCP +* `` is the username of a UCP administrator +* `` is the id of the DTR replica to backup + + +This prompts you for the UCP password, backups up the DTR metadata and saves the +result into a tar archive. You can learn more about the supported flags in +the [reference documentation](../../reference/cli/backup.md). + +The backup command doesn't stop DTR, so that you can take frequent backups +without affecting your users. Also, the backup contains sensitive information +like private keys, so you can encrypt the backup by running: + +```none +gpg --symmetric {{ metadata_backup_file }} +``` + +This prompts you for a password to encrypt the backup, copies the backup file +and encrypts it. + +### Test your backups + +To validate that the backup was correctly performed, you can print the contents +of the tar file created. The backup of the images should look like: + +```none +tar -tf {{ image_backup_file }} + +dtr-backup-v{{ page.dtr_version }}/ +dtr-backup-v{{ page.dtr_version }}/rethink/ +dtr-backup-v{{ page.dtr_version }}/rethink/layers/ +``` + +And the backup of the DTR metadata should look like: + +```none +tar -tf {{ metadata_backup_file }} + +# The archive should look like this +dtr-backup-v{{ page.dtr_version }}/ +dtr-backup-v{{ page.dtr_version }}/rethink/ +dtr-backup-v{{ page.dtr_version }}/rethink/properties/ +dtr-backup-v{{ page.dtr_version }}/rethink/properties/0 +``` + +If you've encrypted the metadata backup, you can use: + +```none +gpg -d {{ metadata_backup_file }} | tar -t +``` + +You can also create a backup of a UCP cluster and restore it into a new +cluster. Then restore DTR on that new cluster to confirm that everything is +working as expected. + +## Restore DTR data + +If your DTR has a majority of unhealthy replicas, the one way to restore it to +a working state is by restoring from an existing backup. + +To restore DTR, you need to: + +1. Stop any DTR containers that might be running +2. Restore the images from a backup +3. Restore DTR metadata from a backup +4. Re-fetch the vulnerability database + +You need to restore DTR on the same UCP cluster where you've created the +backup. If you restore on a different UCP cluster, all DTR resources will be +owned by users that don't exist, so you can't manage the resources, +even though they're stored in the DTR data store. + +When restoring, you need to use the same version of the `docker/dtr` image +that you've used when creating the update. Other versions are not guaranteed +to work. + +### Stop DTR containers + +Start by removing any DTR container that is still running: + +```none +docker run -it --rm \ + {{ page.dtr_org }}/{{ page.dtr_repo }}:{{ page.dtr_version }} destroy \ + --ucp-insecure-tls +``` + +### Restore images + +If you had DTR configured to store images on the local filesystem, you can +extract your backup: + +```none +sudo tar -xf {{ image_backup_file }} -C / +``` + +If you're using a different storage backend, follow the best practices +recommended for that system. When restoring the DTR metadata, DTR will be +deployed with the same configurations it had when creating the backup. + + +### Restore DTR metadata + +You can restore the DTR metadata with the `docker/dtr restore` command. This +performs a fresh installation of DTR, and reconfigures it with +the configuration created during a backup. + +Load your UCP client bundle, and run the following command, replacing the +placeholders for the real values: + +```none +read -sp 'ucp password: ' UCP_PASSWORD; \ +docker run -i --rm \ + --env UCP_PASSWORD=$UCP_PASSWORD \ + {{ page.dtr_org }}/{{ page.dtr_repo }}:{{ page.dtr_version }} restore \ + --ucp-url \ + --ucp-insecure-tls \ + --ucp-username \ + --ucp-node \ + --replica-id \ + --dtr-external-url < {{ metadata_backup_file }} +``` + +Where: + +* `` is the url you use to access UCP +* `` is the username of a UCP administrator +* `` is the hostname of the node where you've restored the images +* `` the id of the replica you backed up +* ``the url that clients use to access DTR + +If you're using NFS as a storage backend, also include `--nfs-storage-url` as +part of your restore command, otherwise DTR is restored but starts using a +local volume to persist your Docker images. + +### Re-fetch the vulnerability database + +If you're scanning images, you now need to download the vulnerability database. + +After you successfully restore DTR, you can join new replicas the same way you +would after a fresh installation. [Learn more](configure/set-up-vulnerability-scans.md). + +## Where to go next + +* [Set up high availability](configure/set-up-high-availability.md) +* [DTR architecture](../architecture.md) diff --git a/datacenter/dtr/2.5/guides/admin/configure/deploy-caches/configuration-reference.md b/datacenter/dtr/2.5/guides/admin/configure/deploy-caches/configuration-reference.md new file mode 100644 index 00000000000..988cc65b1f9 --- /dev/null +++ b/datacenter/dtr/2.5/guides/admin/configure/deploy-caches/configuration-reference.md @@ -0,0 +1,80 @@ +--- +title: DTR cache configuration reference +description: Learn about the different configuration options for DTR caches. +keywords: DTR, cache +--- + +DTR caches are based on Docker Registry, and use the same configuration +file format. +[Learn more about the configuration options](/registry/configuration.md). + +The DTR cache extends the Docker Registry configuration file format by +introducing a new middleware called `downstream` that has three configuration +options: `blobttl`, `upstreams`, and `cas`: + +```none +# Settings that you would include in a +# Docker Registry configuration file followed by + +middleware: + registry: + - name: downstream + options: + blobttl: 24h + upstreams: + - + cas: + - +``` + +Below you can find the description for each parameter, specific to DTR caches. + + + + + + + + + + + + + + + + + + + + + + +
                  ParameterRequiredDescription
                  + blobttl + + no + +A positive integer and an optional unit of time suffix to determine the TTL (Time to Live) value for blobs in the cache. If blobttl is configured, storage.delete.enabled must be set to true. Acceptable units of time are: +
                    +
                  • ns (nanoseconds)
                  • +
                  • us (microseconds)
                  • +
                  • ms (milliseconds)
                  • +
                  • s (seconds)
                  • +
                  • m (minutes)
                  • +
                  • h (hours)
                  • +
                  + If you omit the suffix, the system interprets the value as nanoseconds. +
                  + cas + + no + + An optional list of absolute paths to PEM-encoded CA certificates of upstream registries or content caches. +
                  + upstreams + + yes + + A list of externally-reachable addresses for upstream registries of content caches. If more than one host is specified, it will pull from registries in round-robin order. +
                  diff --git a/datacenter/dtr/2.5/guides/admin/configure/deploy-caches/high-availability.md b/datacenter/dtr/2.5/guides/admin/configure/deploy-caches/high-availability.md new file mode 100644 index 00000000000..02358e9dc2d --- /dev/null +++ b/datacenter/dtr/2.5/guides/admin/configure/deploy-caches/high-availability.md @@ -0,0 +1,76 @@ +--- +title: Configure caches for high availability +description: Learn how to deploy a DTR cache with fault tolerance and high + availability. +keywords: DTR, cache +--- + +If you're deploying a DTR cache in a zone with few users and with no uptime +SLAs, a [single cache service is enough for you](simple.md). + +But if you want to make sure your DTR cache is always available to users +and is highly performant, you should configure your cache deployment for +high availability. + +![Highly-available cache](../../../images/deploy-caches-ha-1.svg) + +## System requirements + +* Multiple nodes, one for each cache replica. +* A load balancer. +* Shared storage system that has read-after-write consistency. + +The way you deploy a DTR cache is the same, whether you're deploying a single +replica or multiple ones. The difference is that you should configure the +replicas to store data using a shared storage system. + +When using a shared storage system, once an image layer is cached, any replica +is able to serve it to users without having to fetch a new copy from DTR. + +DTR caches support the following storage systems: +* Alibaba Cloud Object Storage Service +* Amazon S3 +* Azure Blob Storage +* Google Cloud Storage +* NFS +* Openstack Swift + +If you're using NFS as a shared storage system, make sure the shared +directory is configured with: + +``` +/dtr-cache *(rw,root_squash,no_wdelay) +``` + +This ensures read-after-write consistency for NFS. + +You should also mount the NFS directory on each node where you'll deploy a +DTR cache replica. + +## Label the DTR cache nodes + +Use SSH to log in to a manager node of the swarm where you want to deploy +the DTR cache. + +If you're using UCP to manage that swarm you can also use a client bundle to +configure your Docker CLI client to connect to that swarm. + +Label each node that is going to run the cache replica, by running: + +``` +docker node update --label-add dtr.cache=true +``` + +## Configure and deploy the cache + +Create the cache configuration files by following the +[instructions for deploying a single cache replica](simple.md#prepare-the-cache-deployment). + +Make sure you adapt the `storage` object, using the +[configuration options for the shared storage](/registry/configuration.md#storage) +of your choice. + +## Configure your load balancer + +The last step is to deploy a load balancer of your choice to load-balance +requests across the multiple replicas you deployed. diff --git a/datacenter/dtr/2.5/guides/admin/configure/deploy-caches/index.md b/datacenter/dtr/2.5/guides/admin/configure/deploy-caches/index.md new file mode 100644 index 00000000000..e8eb56fd7d2 --- /dev/null +++ b/datacenter/dtr/2.5/guides/admin/configure/deploy-caches/index.md @@ -0,0 +1,74 @@ +--- +title: DTR cache overview +description: Deploy DTR caches in different geographical locations for users to + pull images faster. +keywords: DTR, cache +--- + +The further away you are from the geographical location where DTR is deployed, +the longer it will take the pull and push images. +This happens because the files being transferred from DTR to your machine +need to travel a longer distance, across multiple networks. + +![Slow pull](../../../images/deploy-caches-1.svg) + +To decrease the time to pull an image, you can deploy DTR caches geographically +closer to users. + +Caches are transparent to users, since users still login and pull images using +the DTR url address. +DTR checks if users are authorized to pull the image, and redirects the +request to the cache. + +![Pull with cache](../../../images/deploy-caches-2.svg) + +In this example, DTR is deployed on a datacenter in the United States, and +a cache is deployed in the Asia office. + +Users in the Asia office updated their user profile in DTR to fetch from +the cache in their office. They pull an image using: + +``` +# Log in to DTR +docker login dtr.example.org + +# Pull image +docker image pull dtr.example.org/website/ui:3-stable +``` + +DTR authenticates the request and checks if the user has permission to pull the +image they're requesting. If they have permissions, they'll get an image +manifest containing the list of image layers to pull and redirecting them +to pull them from the Asia cache. + +When users request those images layers from the Asia cache, the cache pulls +them from DTR and keeps a copy that can be used to serve to other users without +having to pull the image layers from DTR again. + +## Caches or mirroring policies + +Use caches if you: + +* Want to make image pulls faster for users in different geographical regions. +* Want to manage user permissions from a central place. + +If you need users to be able to push images faster, or you want to implement +RBAC policies based on different regions, don't use caches. +Instead, deploy multiple DTR clusters and implement mirroring policies between +them. + +![Mirroring policies](../../../images/deploy-caches-3.svg) + +With mirroring policies you can set up a development pipeline where images +are automatically pushed between different DTR repositories, or across +DTR deployments. + +As an example you can set up a development pipeline with three different stages. +Developers can push and pull images from the development environment, +only pull from QA, and have no access to Production. + +With multiple DTR deployments you can control the permissions developers have +for each deployment, and you can create policies to automatically push images +from one deployment to the next. +[Learn more about deployment policies](../../../user/promotion-policies/index.md). + diff --git a/datacenter/dtr/2.5/guides/admin/configure/deploy-caches/simple.md b/datacenter/dtr/2.5/guides/admin/configure/deploy-caches/simple.md new file mode 100644 index 00000000000..b2565f09dd0 --- /dev/null +++ b/datacenter/dtr/2.5/guides/admin/configure/deploy-caches/simple.md @@ -0,0 +1,272 @@ +--- +title: Deploy a DTR cache +description: Deploy a DTR cache to make users in remove geographical locations + pull images faster. +keywords: DTR, cache +--- + +This example guides you in deploying a DTR cache, assuming that you've got +a DTR deployment up and running. It also assumes that you've provisioned +[multiple nodes and joined them into a swarm](strategy.md#system-requirements). + +![Cache for Asia](../../../images/deploy-caches-simple-1.svg) + +The DTR cache is going to be deployed as a Docker service, so that Docker +automatically takes care of scheduling and restarting the service if +something goes wrong. + +We'll manage the cache configuration using a Docker configuration, and the TLS +certificates using Docker secrets. This allows you to manage the configurations +securely and independently of the node where the cache is actually running. + +## Dedicate a node for the cache + +To make sure the DTR cache is performant, it should be deployed on a node +dedicated just for it. Start by labelling the node where you want +to deploy the cache, so that you target the deployment to that node. + +Use SSH to log in to a manager node of the swarm where you want to deploy +the DTR cache. If you're using UCP to manage that swarm, use a client bundle to +configure your Docker CLI client to connect to the swarm. + +``` +docker node update --label-add dtr.cache=true +``` + +[Learn more about labelling nodes](/engine/swarm/manage-nodes.md#add-or-remove-label-metadata). + + +## Prepare the cache deployment + +Create a file structure that looks like this: + +``` +├── docker-stack.yml # Stack file to deploy cache with a single command +├── config.yml # The cache configuration file +└── certs + ├── cache.cert.pem # The cache public key certificate + ├── cache.key.pem # The cache private key + └── dtr.cert.pem # DTR CA certificate +``` + +Then add the following content to each of the files: + + +
                  +
                  +
                  +      
                  +version: "3.3"
                  +services:
                  +  cache:
                  +    image: {{ page.dtr_org }}/{{ page.dtr_repo }}-content-cache:{{ page.dtr_version }}
                  +    entrypoint:
                  +      - /start.sh
                  +      - "/config.yml"
                  +    ports:
                  +      - 443:443
                  +    deploy:
                  +      replicas: 1
                  +      placement:
                  +        constraints: [node.labels.dtr.cache == true]
                  +      restart_policy:
                  +        condition: on-failure
                  +    configs:
                  +      - config.yml
                  +    secrets:
                  +      - dtr.cert.pem
                  +      - cache.cert.pem
                  +      - cache.key.pem
                  +configs:
                  +  config.yml:
                  +    file: ./config.yml
                  +secrets:
                  +  dtr.cert.pem:
                  +    file: ./certs/dtr.cert.pem
                  +  cache.cert.pem:
                  +    file: ./certs/cache.cert.pem
                  +  cache.key.pem:
                  +    file: ./certs/cache.key.pem
                  +    
                  +  
                  +
                  +
                  + +
                  +
                  +      
                  +version: 0.1
                  +log:
                  +  level: info
                  +storage:
                  +  delete:
                  +    enabled: true
                  +  filesystem:
                  +    rootdirectory: /var/lib/registry
                  +http:
                  +  addr: 0.0.0.0:443
                  +  secret: generate-random-secret
                  +  host: https://<cache-url>
                  +  tls:
                  +    certificate: /run/secrets/cache.cert.pem
                  +    key: /run/secrets/cache.key.pem
                  +middleware:
                  +  registry:
                  +      - name: downstream
                  +        options:
                  +          blobttl: 24h
                  +          upstreams:
                  +            - https://<dtr-url>:<dtr-port>
                  +          cas:
                  +            - /run/secrets/dtr.cert.pem
                  +    
                  +  
                  +
                  +
                  +
                  + +Add the public key certificate for the cache here. If the certificate has been +signed by an intermediate certificate authority, append it's public key +certificate at the end of the file. + +
                  +
                  + +
                  + +Add the unencrypted private key for the cache here. + +
                  +
                  + +
                  + +The cache communicates with DTR using TLS. If you've customized DTR +to use TLS certificates issued by a globally trusted certificate authority, +the cache automatically trusts DTR. + +But if you're using the default DTR configuration, or DTR is using TLS +certificates signed by your own certificate authority, you need to configure +the cache to trust DTR. + +Add the DTR CA certificate to the `certs/dtr.cert.pem` file. You can +do this by running: + +``` +curl -sk https:///ca > certs/dtr.cert.pem +``` + +
                  +
                  +
                  + +With this configuration, the cache fetches image layers from DTR and keeps +a local copy for 24 hours. After that, if a user requests that image layer, +the cache fetches it again from DTR. + +The cache is configured to persist data inside its container. +If something goes wrong with the cache service, Docker automatically redeploys a +new container, but previously cached data is not persisted. +You can [customize the storage parameters](/registry/configuration.md#storage), +if you want to store the image layers using a persistent storage backend. + +Also, the cache is configured to use port 443. If you're already using that +port in the swarm, update the deployment and configuration files to use another +port. Don't forget to create firewall rules for the port you choose. + +## Deploy the cache + +Now that everything is set up, you can deploy the cache by running: + +``` +docker stack deploy --compose-file docker-stack.yml dtr-cache +``` + +You can check if the cache has been successfully deployed by running: + +``` +docker stack ps dtr-cache +``` + +Docker should show the dtr-cache stack is running. + +## Register the cache with DTR + +Now that you've deployed a cache, you need to configure DTR to know about it. +This is done using the `POST /api/v0/content_caches` API. You can use the +DTR interactive API documentation to use this API. + +In the DTR web UI, click the top-right menu, and choose **API docs**. + +![](../../../images/deploy-caches-simple-2.png){: .with-border} + +Navigate to the `POST /api/v0/content_caches` line and click it to expand. +In the **body** field include: + +``` +{ + "name": "region-asia", + "host": "https://:" +} +``` + +Click the **Try it out!** button to make the API call. + +![](../../../images/deploy-caches-simple-3.png){: .with-border} + +## Configure your user account + +Now that you've registered the cache with DTR, users can configure +their user profile to pull images from DTR or the cache. + +In the DTR web UI, navigate to your **Account**, click the **Settings** +tab, and change the **Content Cache** settings to use the cache you deployed. + +![](../../../images/deploy-caches-simple-4.png){: .with-border} + +If you need to set this for multiple users at the same time, use the +`/api/v0/accounts/{username}/settings` API endpoint. + +Now when you pull images, you'll be using the cache. + +## Test that the cache is working + +To validate that the cache is working as expected: + +1. [Push an image to DTR](../../../user/manage-images/pull-and-push-images.md). +2. Make sure your user account is configured to use the cache. +3. Delete the image from your local system. +4. Pull the image from DTR. + + +To validate that the cache is actually serving your request, and to +troubleshoot misconfigurations, check the logs for the cache service +by running: + +``` +docker service logs --follow dtr-cache_cache +``` + +The most common causes of configuration are due to TLS authentication: +* DTR not trusting the cache TLS certificates. +* The cache not trusting DTR TLS certificates. +* Your machine not trusting DTR or the cache. + +When this happens, check the cache logs to troubleshoot the +misconfiguration. + +## Clean up sensitive files + +The certificates and private keys are now managed by Docker in a secure way. +Don't forget to delete sensitive files you've created on disk, like the +private keys for the cache: + +``` +rm -rf certs +``` diff --git a/datacenter/dtr/2.5/guides/admin/configure/deploy-caches/strategy.md b/datacenter/dtr/2.5/guides/admin/configure/deploy-caches/strategy.md new file mode 100644 index 00000000000..70453349af1 --- /dev/null +++ b/datacenter/dtr/2.5/guides/admin/configure/deploy-caches/strategy.md @@ -0,0 +1,59 @@ +--- +title: Cache deployment strategy +description: Learn how to deploy DTR caches across multiple datacenters to make + image pulls faster. +keywords: DTR, cache +--- + +The main reason to use a DTR cache is so that users can pull images from +a service that's geographically closer to them. + +In this example a company has developers spread across three locations: United +States, Asia, and Europe. Developers working in the US office can pull their +images from DTR without problem, but developers in the Asia and Europe offices +complain that it takes them a long time to pulls images. + +![Offices](../../../images/deploy-caches-strategy-1.svg) + +To address that, you can deploy DTR caches in the Asia and Europe offices, so +that developers working from there can pull images much faster. + +## Deployment overview + +To deploy the DTR caches for this scenario, you need three datacenters: +* The US datacenter runs DTR configured for high availability. +* The Asia datacenter runs a DTR cache. +* The Europe datacenter runs another DTR cache. + +![Offices](../../../images/deploy-caches-strategy-2.svg) + +Both caches are configured to fetch images from DTR. + +## System requirements + +Before deploying a DTR cache in a datacenter, make sure you: + +* Provision multiple nodes and install Docker on them. +* Join the nodes into a Swarm. +* Have one or more dedicated worker nodes just for running the DTR cache. +* Have TLS certificates to use for securing the cache. +* Have a shared storage system, if you want the cache to be highly available. + +If you only plan on running a DTR cache on this datacenter, you just need +[Docker EE Basic](https://www.docker.com/pricing), which only includes the +Docker Engine. + +If you plan on running other workloads on this datacenter, consider deploying +[Docker EE Standard or Advanced](https://www.docker.com/pricing). +This way you can enforce fine-grain control over cluster resources, and makes it +easier to monitor and manage your applications. + +## Ports used + +You can customize the port used by the DTR cache, so you'll have to configure +your firewall rules to make sure users can access the cache using the port +you chose. + +By default the documentation guides you in deploying caches that are exposed +on port 443/TCP using the swarm routing mesh. + diff --git a/datacenter/dtr/2.5/guides/admin/configure/enable-single-sign-on.md b/datacenter/dtr/2.5/guides/admin/configure/enable-single-sign-on.md new file mode 100644 index 00000000000..3d5ae48589a --- /dev/null +++ b/datacenter/dtr/2.5/guides/admin/configure/enable-single-sign-on.md @@ -0,0 +1,42 @@ +--- +title: Enable single sign-on +description: Learn how to set up single sign-on between UCP and DTR, so that your users only need to authenticate once +keywords: dtr, login, sso +--- + +By default, users are shared between UCP and DTR, but you need to authenticate +separately on the web UI of both applications. + +You can configure DTR to have single sign-on (SSO) with UCP, so that users only +need to authenticate once. + +## At installation time + +When installing DTR, use the `docker/dtr install --dtr-external-url ` +option to enable SSO. When accessing the DTR web UI, users are redirected to the +UCP login page, and once they are authenticated, they're redirected to the URL +you provided to `--dtr-external-url`. + +Use the domain name of DTR, or the domain name of a load balancer, if you're +using one, to load-balance requests across multiple DTR replicas. + +## After install + +In your browser, navigate to the DTR web UI, and choose **Settings**. In the +**General** tab, scroll to **Domain & proxies**. + +Update the **Load balancer / public address** field to the url where users +should be redirected once they are logged in. +Use the domain name of DTR, or the domain name of a load balancer, if you're +using one, to load-balance requests across multiple DTR replicas. + +Then enable **Use single sign-on**. + +![](../../images/enable-sso-1.png){: .with-border} + +Once you save, users are redirected to UCP for logging in, and redirected back to +DTR once they are authenticated. + +## Where to go next + +* [Use your own TLS certificates](use-your-own-tls-certificates.md) diff --git a/datacenter/dtr/2.5/guides/admin/configure/external-storage/index.md b/datacenter/dtr/2.5/guides/admin/configure/external-storage/index.md new file mode 100644 index 00000000000..e2735bb1823 --- /dev/null +++ b/datacenter/dtr/2.5/guides/admin/configure/external-storage/index.md @@ -0,0 +1,76 @@ +--- +title: Configure DTR image storage +description: Storage configuration for Docker Trusted Registry +keywords: storage drivers, NFS, Azure, S3 +--- + +By default DTR uses the local filesystem of the node where it is running to +store your Docker images. You can configure DTR to use an external storage +backend, for improved performance or high availability. + +![architecture diagram](../../../images/configure-external-storage-1.svg) + +If your DTR deployment only has a single replica, you can continue using the +local filesystem to store your Docker images. If your DTR deployment has +multiple replicas, for high availability, you need to ensure all replicas are +using the same storage backend. When a user pulls an image, the node serving +the request needs to have access to that image. + +DTR supports these storage systems: + +* Local filesystem +* NFS +* Amazon S3 or compatible +* Google Cloud Storage +* Microsoft Azure Blob storage +* OpenStack Swift + +To configure the storage backend, you can log into the **DTR web UI** +as an administrator user, navigate to the **Settings** page, and choose +**Storage**. + +![dtr settings](../../../images/configure-external-storage-2.png){: .with-border} + +The storage configuration page in the DTR web UI has options for the most +common configuration options, but you can also upload a yaml configuration file. + +The format of this configuration file is similar to the one used by +[Docker Registry](/registry/configuration.md). + +## Local filesystem + +By default, DTR creates a volume named `dtr-registry-` to store +your images using the local filesystem. You can customize the name and path of +the volume used by DTR, using the `docker/dtr reconfigure --dtr-storage-volume` +option. + +If you're deploying DTR with high-availability, you need to use NFS or any other +centralized storage backend so that all your DTR replicas have access to the +same images. + +To check how much space your images are taking in the local filesystem, you +can ssh into the node where DTR is deployed and run: + +{% raw %} +``` +# Find the path to the volume +docker volume inspect dtr-registry- + +# Check the disk usage +sudo du -hs \ +$(dirname $(docker volume inspect --format '{{.Mountpoint}}' dtr-registry-)) +``` +{% endraw %} + +## NFS + +You can configure your DTR replicas to store images on an NFS partition, so that +all replicas can share the same storage backend. + +[Learn how to configure DTR with NFS](nfs.md). + + +## Amazon S3 + +DTR supports AWS3 or other storage systems that are S3-compatible like Minio. +[Learn how to configure DTR with Amazon S3](s3.md). diff --git a/datacenter/dtr/2.5/guides/admin/configure/external-storage/nfs.md b/datacenter/dtr/2.5/guides/admin/configure/external-storage/nfs.md new file mode 100644 index 00000000000..1a6c3172b92 --- /dev/null +++ b/datacenter/dtr/2.5/guides/admin/configure/external-storage/nfs.md @@ -0,0 +1,71 @@ +--- +title: Use NFS +description: Learn how to integrate Docker Trusted Registry with NFS +keywords: registry, dtr, storage, nfs +--- + +You can configure DTR to store Docker images in an NFS directory. + +Before installing or configuring DTR to use an NFS directory, make sure that: + +* The NFS server has been correctly configured +* The NFS server has a fixed IP address +* All hosts running DTR have the correct NFS libraries installed + + +To confirm that the hosts can connect to the NFS server, try to list the +directories exported by your NFS server: + +```bash +showmount -e +``` + +You should also try to mount one of the exported directories: + +```bash +mkdir /tmp/mydir && sudo mount -t nfs : +``` + +## Install DTR with NFS + +One way to configure DTR to use an NFS directory is at install time: + +```none +docker run -it --rm {{ page.dtr_org }}/{{ page.dtr_repo }}:{{ page.dtr_version }} install \ + --nfs-storage-url \ + +``` + +The NFS storage URL should be in the format `nfs:///`. + +When you join replicas to the DTR cluster, the replicas will pick up that +configuration, so you don't need to specify it again. + +### Reconfigure DTR to use NFS + +If you're upgrading from a previous version of DTR and are already using +NFS you can continue using the same configurations. + +If you want to start using the new DTR built-in support for NFS you can +reconfigure DTR: + +```none +docker run -it --rm {{ page.dtr_org }}/{{ page.dtr_repo }}:{{ page.dtr_version }} reconfigure \ + --nfs-storage-url +``` + +If you want to reconfigure DTR to stop using NFS storage, leave the option +in blank: + +```none +docker run -it --rm {{ page.dtr_org }}/{{ page.dtr_repo }}:{{ page.dtr_version}} reconfigure \ + --nfs-storage-url "" +``` + +If the IP address of your NFS server changes, even if the DNS address is kept +the same, you should reconfigure DTR to stop using NFS storage, and then +add it back again. + +## Where to go next + +* [Configure where images are stored](index.md) diff --git a/datacenter/dtr/2.5/guides/admin/configure/external-storage/s3.md b/datacenter/dtr/2.5/guides/admin/configure/external-storage/s3.md new file mode 100644 index 00000000000..d42e3b0bb0d --- /dev/null +++ b/datacenter/dtr/2.5/guides/admin/configure/external-storage/s3.md @@ -0,0 +1,111 @@ +--- +title: Store images on Amazon S3 +description: Learn how to configure Docker Trusted Registry to store Docker images on + Amazon S3 +keywords: dtr, storage driver, s3 +--- + +You can configure DTR to store Docker images on Amazon S3, or other file servers +with an S3-compatible API like Minio. + +Amazon S3 and compatible services store files in "buckets", and users have +permissions to read, write, and delete files from those buckets. When you +integrate DTR with Amazon S3, DTR sends all read and write operations to the +S3 bucket so that the images are persisted there. + +## Create a bucket on Amazon S3 + +Before configuring DTR you need to create a bucket on Amazon S3. +To get faster pulls and pushes, you should create the S3 bucket on a region +that's physically close to the servers where DTR is running. + +Start by +[creating a bucket](http://docs.aws.amazon.com/AmazonS3/latest/gsg/CreatingABucket.html). +Then, as a best practice you should +[create a new IAM user](http://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html) +just for the DTR +integration and apply an IAM policy that ensures the user has limited permissions. + +This user only needs permissions to access the bucket that you use to store +images, and the ability read, write, and delete files. + +Here's an example of a policy like that: + +```json +{ + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": "s3:ListAllMyBuckets", + "Resource": "arn:aws:s3:::*" + }, + { + "Effect": "Allow", + "Action": [ + "s3:ListBucket", + "s3:GetBucketLocation", + "s3:ListBucketMultipartUploads" + ], + "Resource": "arn:aws:s3:::" + }, + { + "Effect": "Allow", + "Action": [ + "s3:PutObject", + "s3:GetObject", + "s3:DeleteObject", + "s3:ListBucketMultipartUploads" + ], + "Resource": "arn:aws:s3:::/*" + } + ] +} + +``` + + + +## Configure DTR + +Once you've created a bucket and user, you can configure DTR to use it. +Navigate to the **DTR web UI**, go to **Settings**, and choose **Storage**. + +![](../../../images/s3-1.png){: .with-border} + +Select the **S3** option, and fill-in the information about the bucket and +user. + +| Field | Description | +|:----------------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| Root directory | The path in the bucket where images are stored | +| AWS Region name | The region where the bucket is. [Learn more](http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region) | +| S3 bucket name | The name of the bucket to store the images | +| AWS access key | The access key to use to access the S3 bucket. This can be left empty if you're using an IAM policy. [Learn more](http://docs.aws.amazon.com/general/latest/gr/managing-aws-access-keys.html) | +| AWS secret key | The secret key to use to access the S3 bucket. This can be left empty if you're using an IAM policy | +| Region endpoint | The endpoint name for the region you're using. [Learn more](http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region) | + +There are also some advanced settings. + +| Field | Description | +|:-------------------------|:----------------------------------------------------------------------------------------------------------------------------------------------------------| +| Signature version 4 auth | Authenticate the requests using AWS signature version 4. [Learn more](http://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html) | +| Use HTTPS | Secure all requests with HTTPS, or make requests in an insecure way | +| Skip TLS verification | Encrypt all traffic, but don't verify the TLS certificate used by the storage backend | +| Root CA certificate | The public key certificate of the root certificate authority that issued the storage backend certificate | + +Once you click **Save**, DTR validates the configurations and saves the changes. + +## Configure your clients + +If you use a TLS certificate in your storage backend that's not globally +trusted, you need to configure all Docker Engines that push or pull from DTR +to trust that certificate. When you push or pull an image DTR redirects the +requests to the storage backend, so if clients don't trust the TLS certificates +of both DTR and the storage backend, they can't push or pull images. +[Learn how to configure the Docker client](../../../user/access-dtr/index.md). + +And if you've configured DTR to skip TLS verification, you also need to +configure all Docker Engines that push or pull from DTR to skip TLS +verification. You do this by adding DTR to +the [list of insecure registries when starting Docker](/engine/reference/commandline/dockerd.md). diff --git a/datacenter/dtr/2.5/guides/admin/configure/garbage-collection.md b/datacenter/dtr/2.5/guides/admin/configure/garbage-collection.md new file mode 100644 index 00000000000..7e7ebea8de4 --- /dev/null +++ b/datacenter/dtr/2.5/guides/admin/configure/garbage-collection.md @@ -0,0 +1,115 @@ +--- +title: Garbage collection +description: Save disk space by configuring the garbage collection settings in + Docker Trusted Registry +keywords: registry, garbage collection, gc, space, disk space +--- + +You can configure Docker Trusted Registry to automatically delete unused image +layers, thus saving you disk space. This process is also known as garbage collection. + +## How DTR deletes unused layers + +First you configure DTR to run a garbage collection job on a fixed schedule. At +the scheduled time DTR: + +1. Identifies and marks unused image layers. +2. Deletes the marked image layers. + +When garbage collection starts, DTR is put into read-only mode by default. + +## Improved garbage collection (Experimental) + +Starting in DTR 2.5, you can configure DTR to run garbage collection jobs +without putting DTR in read-only. This feature is still experimental. + +To enable this, navigate to the **DTR web interface**. Select **Settings > Garbage collection**. + +![upgrade garbage collection](../../images/garbage-collection-0.png){: .with-border} + +Once enabled, this setting can't be changed back. The upgrade process might +take a while depending on the amount of Docker images that you have stored. Garbage collection is temporarily +disabled during the upgrade to the experimental version. + +![upgrade garbage collection](../../images/garbage-collection-upgrade.png){: .with-border} + +### Metadata Store Migration + +After a successful upgrade, the system will run a `metadatastoremigration` job which is necessary for online garbage collection. If the migration fails, the system will retry twice. If all three attempts fail, you will have to retrigger the `metadatastoremigration` job manually via the API. To check for the status of the `metadatastoremigration` job: + +1. Select **API** from the bottom left navigation pane of the DTR web interface. + +2. Scroll down to the **Jobs** resource and use the `GET /api/v0/jobs` endpoint. + +3. Filter by action `metadatastoremigration` and click "Execute". You should see the resulting `curl` request and the job status in the **Server response**. + +```bash +curl -X GET "https:///api/v0/jobs?action=metadatastoremigration&worker=any&running=any" -H "accept: application/json" +``` +To retrigger the job manually, see [2.5 to 2.6 upgrade](../upgrade#25-to-26-upgrade). To learn more about troubleshooting jobs using the API, see [Audit Jobs via the API](/ee/dtr/admin/manage-jobs/audit-jobs-via-api/). + +## Schedule garbage collection + +Navigate to the **Settings** page, and choose **Garbage collection**. + +![](../../images/garbage-collection-1.png){: .with-border} + +Select for how long the garbage collection job should run: +* Until done: Run the job until all unused image layers are deleted. +* For x minutes: Only run the garbage collection job for a maximum of x minutes +at a time. +* Never: Never delete unused image layers. + +Once you select for how long to run the garbage collection job, you can +configure its schedule (in UTC time) using the cron format. + +![](../../images/garbage-collection-2.png){: .with-border} + +Once everything is configured you can chose to **Save & start** to immediately +run the garbage collection job, or just **Save** to run the job on the next +scheduled interval. If you've upgraded to [the experimental version](#improved-garbage-collection), you +should be able to push and pull images while garbage collection is running. + +## Stop the garbage collection job + +Once the garbage collection job starts running, a banner is displayed on the +web interface explaining that users can't push images. If you're an administrator, you can click the banner to stop the garbage +collection job. + +![](../../images/garbage-collection-3.png){: .with-border} + +## Under the hood + +Each image stored in DTR is made up of multiple files: + +* A list of image layers that represent the image filesystem. +* A configuration file that contains the architecture of the image and other +metadata. +* A manifest file containing the list of all layers and configuration file for +an image. + +All these files are stored in a content-addressable way in which the name of +the file is the result of hashing the file's content. This means that if two +image tags have exactly the same content, DTR only stores the image content +once, even if the tag name is different. + +As an example, if `wordpress:4.8` and `wordpress:latest` have the same content, +they will only be stored once. If you delete one of these tags, the other won't +be deleted. + +This means that when users delete an image tag, DTR can't delete the underlying +files of that image tag since it's possible that there are other tags that +also use the same files. + +To delete unused image layers, DTR: +1. Becomes read-only to make sure that no one is able to push an image, thus +changing the underlying files in the filesystem. +2. Check all the manifest files and keep a record of the files that are +referenced. +3. If a file is never referenced, that means that no image tag uses it, so it +can be safely deleted. + +## Where to go next + +- [Deploy DTR caches](deploy-caches/index.md) +- [Upgrade DTR](../upgrade/) diff --git a/datacenter/dtr/2.5/guides/admin/configure/license-your-installation.md b/datacenter/dtr/2.5/guides/admin/configure/license-your-installation.md new file mode 100644 index 00000000000..a976e7e8273 --- /dev/null +++ b/datacenter/dtr/2.5/guides/admin/configure/license-your-installation.md @@ -0,0 +1,39 @@ +--- +title: License your installation +description: Learn how to license your Docker Trusted Registry installation. +keywords: dtr, install, license +--- + +By default, you don't need to license your Docker Trusted Registry. When +installing DTR, it automatically starts using the same license file used on +your Docker Universal Control Plane cluster. + +However, there are some situations when you need to manually license your +DTR installation: + +* When upgrading to a new major version, +* When your current license expires. + + +## Download your license + +Go to [Docker Hub](https://hub.docker.com/editions/enterprise/docker-ee-trial) +and download your license. + +![](../../images/license-1.png){: .with-border} + + +## License your installation + +Once you've downloaded the license file, you can apply it to your DTR +installation. Navigate to the **DTR web UI**, and then go to the **Settings +page**. + +![](../../images/license-2.png){: .with-border} + +Click the **Apply new license** button, and upload your new license file. + + +## Where to go next + +* [Enable single sign-on](enable-single-sign-on.md) diff --git a/datacenter/dtr/2.5/guides/admin/configure/set-up-high-availability.md b/datacenter/dtr/2.5/guides/admin/configure/set-up-high-availability.md new file mode 100644 index 00000000000..be216115658 --- /dev/null +++ b/datacenter/dtr/2.5/guides/admin/configure/set-up-high-availability.md @@ -0,0 +1,89 @@ +--- +title: Set up high availability +description: Lean how to scale Docker Trusted Registry by adding and removing replicas. +keywords: dtr, install, deploy +--- + +Docker Trusted Registry is designed to scale horizontally as your usage +increases. You can add more replicas to make DTR scale to your demand and for +high availability. + +All DTR replicas run the same set of services and changes to their configuration +are automatically propagated to other replicas. + +![](../../images/set-up-high-availability-1.svg) + +To make DTR tolerant to failures, add additional replicas to the DTR cluster. + +| DTR replicas | Failures tolerated | +|:------------:|:------------------:| +| 1 | 0 | +| 3 | 1 | +| 5 | 2 | +| 7 | 3 | + + +When sizing your DTR installation for high-availability, +follow these rules of thumb: + +* Don't create a DTR cluster with just two replicas. Your cluster +won't tolerate any failures, and it's possible that you experience performance +degradation. +* When a replica fails, the number of failures tolerated by your cluster +decreases. Don't leave that replica offline for long. +* Adding too many replicas to the cluster might also lead to performance +degradation, as data needs to be replicated across all replicas. + +To have high-availability on UCP and DTR, it is recommended to have a minimum of: + +* 3 dedicated nodes to install UCP with high availability, +* 3 dedicated nodes to install DTR with high availability, +* As many nodes as you want for running your containers and applications. + +## Join more DTR replicas + +To add replicas to an existing DTR deployment: + +1. Use ssh to log into any node that is already part of UCP. + +2. Run the DTR join command: + + ```none + docker run -it --rm \ + {{ page.dtr_org }}/{{ page.dtr_repo }}:{{ page.dtr_version }} join \ + --ucp-node \ + --ucp-insecure-tls + ``` + + Where the `--ucp-node` is the hostname of the UCP node where you want to + deploy the DTR replica. `--ucp-insecure-tls` tells the command to trust the + certificates used by UCP. + +3. If you have a load balancer, add this DTR replica to the load balancing pool. + +## Remove existing replicas + +To remove a DTR replica from your deployment: + +1. Use ssh to log into any node that is part of UCP. +2. Run the DTR remove command: + +```none +docker run -it --rm \ + {{ page.dtr_org }}/{{ page.dtr_repo }}:{{ page.dtr_version }} remove \ + --ucp-insecure-tls +``` + +You will be prompted for: + +* Existing replica id: the id of any healthy DTR replica of that cluster +* Replica id: the id of the DTR replica you want to remove. It can be the id of an +unhealthy replica +* UCP username and password: the administrator credentials for UCP + +If you're load-balancing user requests across multiple DTR replicas, don't +forget to remove this replica from the load balancing pool. + +## Where to go next + +* [Set up vulnerability scans](set-up-vulnerability-scans.md) diff --git a/datacenter/dtr/2.5/guides/admin/configure/set-up-vulnerability-scans.md b/datacenter/dtr/2.5/guides/admin/configure/set-up-vulnerability-scans.md new file mode 100644 index 00000000000..43063ab033f --- /dev/null +++ b/datacenter/dtr/2.5/guides/admin/configure/set-up-vulnerability-scans.md @@ -0,0 +1,188 @@ +--- +title: Set up Security Scanning in DTR +description: Enable and configure Docker Security Scanning for Docker Trusted Registry. +keywords: registry, scanning, security scan, vulnerability, CVE +redirect_from: +- /docker-cloud/builds/image-scan/ +--- + +This page explains how to set up and enable Docker Security Scanning on an existing installation of Docker Trusted Registry. + +## Prerequisites + +These instructions assume that you have already installed Docker Trusted +Registry, and have access to an account on the DTR instance with administrator +access. + +Before you begin, make sure that you or your organization has purchased a DTR +license that includes Docker Security Scanning, and that your Docker ID can +access and download this license from the Docker Hub. + +If you are using a license associated with an individual account, no additional +action is needed. If you are using a license associated with an organization +account, you may need to make sure your Docker ID is a member of the `Owners` +team. Only `Owners` team members can download license files for an Organization. + +If you will be allowing the Security Scanning database to update itself +automatically, make sure that the server hosting your DTR instance can access +`https://dss-cve-updates.docker.com/` on the standard https port 443. + +## Get the security scanning license. + +If your DTR instance already has a license that includes Security Scanning, skip +this step and proceed to [enable DTR Security Scanning](#enable-dtr-security-scanning). + +> **Tip**: To check if your existing DTR license includes scanning, navigate to the DTR **Settings** page, and click **Security**. If an "Enable scanning" toggle appears, the license includes scanning. + +If your current DTR license doesn't include scanning, you must first download the new license. + +1. Log in to the Docker Hub using a Docker ID with access to the license you need. +2. In the top right corner, click your user account icon, and select **My Content**. +3. Locate **Docker Enterprise Edition** in the content list, and click **Setup**. +4. Click **License Key** to download the license. + ![](../../images/security-scanning-setup-1.png){: .with-border} + +Next, install the new license on the DTR instance. + +7. Log in to your DTR instance using an administrator account. +8. Click **Settings** in the left navigation. +9. On the **General** tab click **Apply new license**. + + A file browser dialog appears. + +10. Navigate to where you saved the license key (`.lic`) file, select it, and click **Open**. + +![](../../images/security-scanning-setup-2.png){: .with-border} + +Proceed to [enable DTR Security Scanning](#enable-dtr-security-scanning). + +## Enable DTR security scanning + +To enable security scanning in DTR: + +1. Log in to your DTR instance with an administrator account. +2. Click **Settings** in the left navigation. +3. Click the **Security** tab. + + > **Note**: If you see a message on this tab telling you to contact your Docker sales representative, then the license installed on this DTR instance does not include Docker Security Scanning. Check that you have purchased Security Scanning, and that the DTR instance is using the latest license file. + +4. Click the **Enable scanning** toggle so that it turns blue and says "on". + ![](../../images/security-scanning-setup-3.png){: .with-border} +5. Next, provide a security database for the scanner. **Security scanning will not function until DTR has a security database to use.** + + By default, security scanning is enabled in **Online** mode. In this mode, + DTR attempts to download a security database from a Docker server. If your + installation cannot access `https://dss-cve-updates.docker.com/` you must + manually upload a `.tar` file containing the security database. + + - If you are using `Online` mode, the DTR instance will contact a Docker server, download the latest vulnerability database, and install it. Scanning can begin once this process completes. + - If you are using `Offline` mode, use the instructions in [Update scanning database - offline mode](#update-cve-database---offline-mode) to upload an initial security database. + +By default when Security Scanning is enabled, new repositories will automatically scan on `docker push`. If you had existing repositories before you enabled security scanning, you might want to [change repository scanning behavior](#set-repository-scanning-mode). + +## Set repository scanning mode + +Two modes are available when Security Scanning is enabled: + +- `Scan on push & Scan manually`: the image is re-scanned on each `docker push` to the repository, and whenever a user with `write` access clicks the **Start Scan** links or **Scan** button. +- `Scan manually`: the image is scanned only when a user with `write` access clicks the **Start Scan** links or **Scan** button. + +By default, _new_ repositories are set to `Scan on push & Scan manually`, but +you can change this setting during repository creation. + +![](../../images/security-scanning-setup-4.png){: .with-border} + +Any repositories that existed before scanning was enabled are set to `Scan manually` mode by default. If these repositories are still in use, you can change this setting from each repository's **Settings** page. + +> **Note**: To change an individual repository's scanning mode, you must have +`write` or `admin` access to the repo. + +To change an individual repository's scanning mode: + +1. Navigate to the repository, and click the **Settings** tab. +2. Scroll down to the **Image scanning** section. +3. Select the desired scanning mode. +![](../../images/security-scanning-setup-5.png){: .with-border} + +## Update the CVE scanning database + +Docker Security Scanning indexes the components in your DTR images and compares +them against a known CVE database. When new vulnerabilities are reported, Docker +Security Scanning matches the components in new CVE reports to the indexed +components in your images, and quickly generates an updated report. + +Users with administrator access to DTR can check when the CVE database was last updated from the **Security** tab in the DTR **Settings** pages. + +### Update CVE database - online mode + +By default Docker Security Scanning checks automatically for updates to the +vulnerability database, and downloads them when available. If your installation +does not have access to the public internet, use the [Offline mode instructions below](#update-cve-database-offline-mode). + +To ensure that DTR can access these updates, make sure that the host can reach +`https://dss-cve-updates.docker.com/` on port 443 using https. + +DTR checks for new CVE database updates at 3:00 AM UTC every day. If an update +is found it is downloaded and applied without interrupting any scans in +progress. Once the update is complete, the security scanning system looks for +new vulnerabilities in the indexed components. + +To set the update mode to Online: + +1. Log in to DTR as a user with administrator rights. +2. Click **Settings** in the left navigation and click **Security**. +3. Click **Online**. + +Your choice is saved automatically. + +> **Tip**: DTR also checks for CVE database updates when scanning is first enabled, and when you switch update modes. If you need to check for a CVE database update immediately, you can briefly switch modes from online to offline and back again. + +### Update CVE database - offline mode + +To update the CVE database for your DTR instance when it cannot contact the update server, you download and install a `.tar` file that contains the database updates. To download the file: + +1. Log in to the [Docker Hub](https://hub.docker.com/). + + If you are a member of an Organization managing licenses using Docker Hub, + make sure your account is a member of the `Owners` team. Only Owners can + view and manage licenses and other entitlements for Organizations from the + Docker Hub. + +2. In the top right corner, click your user account icon, and select **My Content**. +3. If necessary, select an organization account from the **Accounts** menu at the upper right. +4. Locate your Docker EE Advanced subscription or trial. +5. Click **Setup** button. + + ![](../../images/security-scanning-setup-6.png){: .with-border} + +6. Click **Download CVE Vulnerability Database** link to download the database file. + + ![](../../images/security-scanning-setup-7.png){: .with-border} + + If you run into problems, contact us at nautilus-feedback@docker.com for the file. + +To manually update the DTR CVE database from a `.tar` file: + +1. Log in to DTR as a user with administrator rights. +2. Click **Settings** in the left navigation and click **Security**. +4. Click **Upload .tar database file**. +5. Browse to the latest `.tar` file that you received, and click **Open**. + +DTR installs the new CVE database, and begins checking already indexed images +for components that match new or updated vulnerabilities. + +> **Tip**: The Upload button is unavailable while DTR applies CVE database updates. + +## Enable or disable automatic database updates + +To change the update mode: + +1. Log in to DTR as a user with administrator rights. +2. Click **Settings** in the left navigation and click **Security**. +3. Click **Online/Offline**. + +Your choice is saved automatically. + +## Where to go next + +* [Deploy DTR caches](deploy-caches/index.md) diff --git a/datacenter/dtr/2.5/guides/admin/configure/use-a-load-balancer.md b/datacenter/dtr/2.5/guides/admin/configure/use-a-load-balancer.md new file mode 100644 index 00000000000..826ccf5fc6a --- /dev/null +++ b/datacenter/dtr/2.5/guides/admin/configure/use-a-load-balancer.md @@ -0,0 +1,292 @@ +--- +title: Use a load balancer +description: Learn how to configure a load balancer to balance user requests across multiple Docker Trusted Registry replicas. +keywords: dtr, load balancer +--- + +Once you’ve joined multiple DTR replicas nodes for +[high-availability](set-up-high-availability.md), you can configure your own +load balancer to balance user requests across all replicas. + +![](../../images/use-a-load-balancer-1.svg) + + +This allows users to access DTR using a centralized domain name. If a replica +goes down, the load balancer can detect that and stop forwarding requests to +it, so that the failure goes unnoticed by users. + +## Load balancing DTR + +DTR does not provide a load balancing service. You can use an on-premises +or cloud-based load balancer to balance requests across multiple DTR replicas. + +Make sure you configure your load balancer to: + +* Load balance TCP traffic on ports 80 and 443 +* Make sure the load balancer is not buffering requests +* Make sure the load balancer is forwarding the `Host` HTTP header correctly +* Make sure there's no timeout for idle connections, or set it to more than 10 minutes +* Use the unauthenticated `/_ping` endpoint (note the lack of an `/api/v0/` in +the path) on each DTR replica, to check if the replica is healthy and if it +should remain in the load balancing pool or not + +## Health check endpoints + +The `/_ping` endpoint returns a JSON object for the replica being queried of +the form: + +```json +{ + "Error": "error message", + "Healthy": true +} +``` + +A response of `"Healthy": true` means the replica is suitable for taking +requests. It is also sufficient to check whether the HTTP status code is 200. + +An unhealthy replica will return 503 as the status code and populate `"Error"` +with more details on any one of these services: + +* Storage container (registry) +* Authorization (garant) +* Metadata persistence (rethinkdb) +* Content trust (notary) + +This endpoint is for checking the health of a *single* replica. To get +the health of every replica in a cluster, querying each replica individually is +the preferred way to do it in real time. + +The `/api/v0/meta/cluster_status` +[endpoint](../../../reference/api) +returns a JSON object for the entire cluster *as observed* by the replica being +queried, and it takes the form: + +```json +{ + "replica_health": { + "replica id": "OK", + "another replica id": "error message" + }, + "replica_timestamp": { + "replica id": "2006-01-02T15:04:05Z07:00", + "another replica id": "2006-01-02T15:04:05Z07:00" + }, + "(other fields go here)": "..." +} +``` + +Health statuses for the replicas is available in the `"replica_health"` object. +These statuses are taken from a cache which is last updated by each replica +individually at the time specified in the `"replica_timestamp"` object. + +The response also contains information about the internal DTR storage state, +which is around 45 KB of data. This, combined with the fact that the endpoint +requires admin credentials, means it is not particularly appropriate for load +balance checks. Use `/_ping` instead for those kinds of checks. + + +## Configuration examples + +Use the following examples to configure your load balancer for DTR. + + +
                  +
                  +```conf +user nginx; +worker_processes 1; + +error_log /var/log/nginx/error.log warn; +pid /var/run/nginx.pid; + +events { + worker_connections 1024; +} + +stream { + upstream dtr_80 { + server :80 max_fails=2 fail_timeout=30s; + server :80 max_fails=2 fail_timeout=30s; + server :80 max_fails=2 fail_timeout=30s; + } + upstream dtr_443 { + server :443 max_fails=2 fail_timeout=30s; + server :443 max_fails=2 fail_timeout=30s; + server :443 max_fails=2 fail_timeout=30s; + } + server { + listen 443; + proxy_pass dtr_443; + } + + server { + listen 80; + proxy_pass dtr_80; + } +} +``` +
                  +
                  +```conf +global + log /dev/log local0 + log /dev/log local1 notice + +defaults + mode tcp + option dontlognull + timeout connect 5s + timeout client 50s + timeout server 50s + timeout tunnel 1h + timeout client-fin 50s +### frontends +# Optional HAProxy Stats Page accessible at http://:8181/haproxy?stats +frontend dtr_stats + mode http + bind 0.0.0.0:8181 + default_backend dtr_stats +frontend dtr_80 + mode tcp + bind 0.0.0.0:80 + default_backend dtr_upstream_servers_80 +frontend dtr_443 + mode tcp + bind 0.0.0.0:443 + default_backend dtr_upstream_servers_443 +### backends +backend dtr_stats + mode http + option httplog + stats enable + stats admin if TRUE + stats refresh 5m +backend dtr_upstream_servers_80 + mode tcp + option httpchk GET /_ping HTTP/1.1\r\nHost:\ + server node01 :80 check weight 100 + server node02 :80 check weight 100 + server node03 :80 check weight 100 +backend dtr_upstream_servers_443 + mode tcp + option httpchk GET /_ping HTTP/1.1\r\nHost:\ + server node01 :443 weight 100 check check-ssl verify none + server node02 :443 weight 100 check check-ssl verify none + server node03 :443 weight 100 check check-ssl verify none +``` +
                  +
                  +```json +{ + "Subnets": [ + "subnet-XXXXXXXX", + "subnet-YYYYYYYY", + "subnet-ZZZZZZZZ" + ], + "CanonicalHostedZoneNameID": "XXXXXXXXXXX", + "CanonicalHostedZoneName": "XXXXXXXXX.us-west-XXX.elb.amazonaws.com", + "ListenerDescriptions": [ + { + "Listener": { + "InstancePort": 443, + "LoadBalancerPort": 443, + "Protocol": "TCP", + "InstanceProtocol": "TCP" + }, + "PolicyNames": [] + } + ], + "HealthCheck": { + "HealthyThreshold": 2, + "Interval": 10, + "Target": "HTTPS:443/_ping", + "Timeout": 2, + "UnhealthyThreshold": 4 + }, + "VPCId": "vpc-XXXXXX", + "BackendServerDescriptions": [], + "Instances": [ + { + "InstanceId": "i-XXXXXXXXX" + }, + { + "InstanceId": "i-XXXXXXXXX" + }, + { + "InstanceId": "i-XXXXXXXXX" + } + ], + "DNSName": "XXXXXXXXXXXX.us-west-2.elb.amazonaws.com", + "SecurityGroups": [ + "sg-XXXXXXXXX" + ], + "Policies": { + "LBCookieStickinessPolicies": [], + "AppCookieStickinessPolicies": [], + "OtherPolicies": [] + }, + "LoadBalancerName": "ELB-DTR", + "CreatedTime": "2017-02-13T21:40:15.400Z", + "AvailabilityZones": [ + "us-west-2c", + "us-west-2a", + "us-west-2b" + ], + "Scheme": "internet-facing", + "SourceSecurityGroup": { + "OwnerAlias": "XXXXXXXXXXXX", + "GroupName": "XXXXXXXXXXXX" + } +} +``` +
                  +
                  + + +You can deploy your load balancer using: + + +
                  +
                  +```conf +# Create the nginx.conf file, then +# deploy the load balancer + +docker run --detach \ + --name dtr-lb \ + --restart=unless-stopped \ + --publish 80:80 \ + --publish 443:443 \ + --volume ${PWD}/nginx.conf:/etc/nginx/nginx.conf:ro \ + nginx:stable-alpine +``` +
                  +
                  +```conf +# Create the haproxy.cfg file, then +# deploy the load balancer + +docker run --detach \ + --name dtr-lb \ + --publish 443:443 \ + --publish 80:80 \ + --publish 8181:8181 \ + --restart=unless-stopped \ + --volume ${PWD}/haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro \ + haproxy:1.7-alpine haproxy -d -f /usr/local/etc/haproxy/haproxy.cfg +``` +
                  +
                  + +## Where to go next + +* [Backups and disaster recovery](../backups-and-disaster-recovery.md) +* [DTR architecture](../../architecture.md) diff --git a/datacenter/dtr/2.5/guides/admin/configure/use-a-web-proxy.md b/datacenter/dtr/2.5/guides/admin/configure/use-a-web-proxy.md new file mode 100644 index 00000000000..9490e5e2ad9 --- /dev/null +++ b/datacenter/dtr/2.5/guides/admin/configure/use-a-web-proxy.md @@ -0,0 +1,33 @@ +--- +title: Use a web proxy +description: Learn how to configure Docker Content Trust to use a web proxy to + reach external services. +keywords: dtr, configure, http, proxy +--- + +Docker Trusted Registry makes outgoing connections to check for new versions, +automatically renew its license, and update its vulnerability database. +If DTR can't access the internet, then you need to manually apply updates. + +One option to keep your environment secure while still allowing DTR access to +the internet is to use a web proxy. If you have an HTTP or HTTPS proxy, you +can configure DTR to use it. To avoid downtime you should do this configuration +outside business peak hours. + +As an administrator, log into a node where DTR is deployed, and run: + +``` +docker run -it --rm \ + {{ page.dtr_org }}/{{ page.dtr_repo }}:{{ page.dtr_version }} reconfigure \ + --http-proxy http://: \ + --https-proxy https://: \ + --ucp-insecure-tls +``` + +To confirm how DTR is configured, check the **Settings** page on the web UI. + +![DTR settings](../../images/use-a-web-proxy-1.png){: .with-border} + +## Where to go next + +* [Configure garbage collection](garbage-collection.md) diff --git a/datacenter/dtr/2.5/guides/admin/configure/use-your-own-tls-certificates.md b/datacenter/dtr/2.5/guides/admin/configure/use-your-own-tls-certificates.md new file mode 100644 index 00000000000..5ff5fe3031c --- /dev/null +++ b/datacenter/dtr/2.5/guides/admin/configure/use-your-own-tls-certificates.md @@ -0,0 +1,45 @@ +--- +title: Use your own TLS certificates +description: Learn how to configure Docker Trusted Registry with your own TLS certificates. +keywords: dtr, tls +--- + + +By default the DTR services are exposed using HTTPS, to ensure all +communications between clients and DTR is encrypted. Since DTR +replicas use self-signed certificates for this, when a client accesses +DTR, their browsers don't trust this certificate, so the browser displays a +warning message. + +You can configure DTR to use your own certificates, so that it is automatically +trusted by your users' browser and client tools. + +## Replace the server certificates + +To configure DTR to use your own certificates and keys, go to the +**DTR web UI**, navigate to the **Settings** page, and scroll down to the +**Domain** section. + +![](../../images/use-your-certificates-1.png){: .with-border} + + +Set the DTR domain name and upload the certificates and key: + +* Load balancer/public address, is the domain name clients will use to access DTR. +* TLS certificate, is the server certificate and any intermediate CA public +certificates. This certificate needs to be valid for the DTR public address, +and have SANs for all addresses used to reach the DTR replicas, including load +balancers. +* TLS private key is the server private key. +* TLS CA is the root CA public certificate. + +Finally, click **Save** for the changes to take effect. + +If you're using certificates issued by a globally trusted certificate authority, +any web browser or client tool should now trust DTR. If you're using an internal +certificate authority, configure your system to trust that +certificate authority. + +## Where to go next + +* [Set up external storage](external-storage/index.md) diff --git a/datacenter/dtr/2.5/guides/admin/install/index.md b/datacenter/dtr/2.5/guides/admin/install/index.md new file mode 100644 index 00000000000..c8c308d5158 --- /dev/null +++ b/datacenter/dtr/2.5/guides/admin/install/index.md @@ -0,0 +1,131 @@ +--- +title: Install Docker Trusted Registry +description: Learn how to install Docker Trusted Registry for production. +keywords: dtr, registry, install +--- + +Docker Trusted Registry (DTR) is a containerized application that runs on a +swarm managed by Docker Universal Control Plane (UCP). It can be installed +on-premises or on a cloud infrastructure. + +Use these instructions to install DTR. + +## Step 1. Validate the system requirements + +The first step in installing DTR, is ensuring your +infrastructure has all the [requirements DTR needs to run](system-requirements.md). + +## Step 2. Install UCP + +Since DTR requires Docker Universal Control Plane (UCP) +to run, you need to install UCP on all the nodes where you plan to install DTR. +[Learn how to install UCP](/datacenter/ucp/2.2/guides/admin/install.md). + +DTR needs to be installed on a worker node that is being managed by UCP. +You can't install DTR on a standalone Docker Engine. + +![](../../images/install-dtr-1.svg) + + +## Step 3. Install DTR + +Once UCP is installed, navigate to the **UCP web interface**. In the **Admin Settings**, +choose **Docker Trusted Registry**. + +![](../../images/install-dtr-2.png){: .with-border} + +After you configure all the options, you have a snippet that you can use +to deploy DTR. It should look like this: + +```none +# Pull the latest version of DTR +$ docker pull {{ page.dtr_org }}/{{ page.dtr_repo }}:{{ page.dtr_version }} + +# Install DTR +$ docker run -it --rm \ + {{ page.dtr_org }}/{{ page.dtr_repo }}:{{ page.dtr_version }} install \ + --ucp-node \ + --ucp-insecure-tls +``` + +You can run that snippet on any node where Docker is installed. As an example +you can SSH into a UCP node and run the DTR installer from there. By default +the installer runs in interactive mode and prompts you for any additional +information that is necessary. +[Learn more about the installer](/datacenter/dtr/2.5/reference/cli/install). + +## Step 4. Check that DTR is running + +In your browser, navigate to the Docker **Universal Control Plane** +web interface, and navigate to the **Applications** screen. DTR should be listed +as an application. + +![](../../images/install-dtr-3.png){: .with-border} + +You can also access the **DTR web interface** to make sure it is working. In your +browser, navigate to the address where you installed DTR. + +![](../../images/install-dtr-4.png){: .with-border} + + +## Step 5. Configure DTR + +After installing DTR, you should configure: + + * The certificates used for TLS communication. [Learn more](../configure/use-your-own-tls-certificates.md). + * The storage backend to store the Docker images. [Lean more](../configure/external-storage/index.md). + + To perform these configurations, navigate to the **Settings** page of DTR. + + ![](../../images/install-dtr-5.png){: .with-border} + + +## Step 6. Test pushing and pulling + +Now that you have a working installation of DTR, you should test that you can +push and pull images to it. +[Learn how to push and pull images](../../user/manage-images/pull-and-push-images.md). + +## Step 7. Join replicas to the cluster + +This step is optional. + +To set up DTR for high availability, +you can add more replicas to your DTR cluster. Adding more replicas allows you +to load-balance requests across all replicas, and keep DTR working if a +replica fails. + +For high-availability you should set 3, 5, or 7 DTR replicas. The nodes where +you're going to install these replicas also need to be managed by UCP. + +To add replicas to a DTR cluster, use the `docker/dtr join` command: + +1. Load your UCP user bundle. + +2. Run the join command. + + When you join a replica to a DTR cluster, you need to specify the + ID of a replica that is already part of the cluster. You can find an + existing replica ID by going to the **Applications** page on UCP. + + Then run: + + ```none + docker run -it --rm \ + {{ page.dtr_org }}/{{ page.dtr_repo }}:{{ page.dtr_version }} join \ + --ucp-node \ + --ucp-insecure-tls + ``` + +3. Check that all replicas are running. + + In your browser, navigate to the Docker **Universal Control Plane** + web interface, and navigate to the **Applications** screen. All replicas should + be displayed. + + ![](../../images/install-dtr-6.png){: .with-border} + +## See also + +* [Install DTR offline](install-offline.md) +* [Upgrade DTR](../upgrade.md) diff --git a/datacenter/dtr/2.5/guides/admin/install/install-offline.md b/datacenter/dtr/2.5/guides/admin/install/install-offline.md new file mode 100644 index 00000000000..74250ed34f2 --- /dev/null +++ b/datacenter/dtr/2.5/guides/admin/install/install-offline.md @@ -0,0 +1,70 @@ +--- +title: Install Docker Trusted Registry offline +description: Learn how to install Docker Trusted Registry on a machine with no internet + access. +keywords: registry, install, offline +--- + +The procedure to install Docker Trusted Registry on a host is the same, +whether that host has access to the internet or not. + +The only difference when installing on an offline host, +is that instead of pulling the UCP images from Docker Hub, you use a +computer that is connected to the internet to download a single package with +all the images. Then you copy that package to the host where you’ll install DTR. + +## Versions available + +{% include components/ddc_url_list_2.html product="dtr" version="2.5" %} + +## Download the offline package + +Use a computer with internet access to download a package with all DTR images: + +```bash +$ wget -O dtr.tar.gz +``` + +Now that you have the package in your local machine, you can transfer it to +the machines where you want to install DTR. + +For each machine where you want to install DTR: + +1. Copy the DTR package to that machine. + + ```bash + $ scp dtr.tar.gz @ + ``` + +2. Use ssh to log into the hosts where you transferred the package. + +3. Load the DTR images. + + Once the package is transferred to the hosts, you can use the + `docker load` command to load the Docker images from the tar archive: + + ```bash + $ docker load < dtr.tar.gz + ``` + +## Install DTR + +Now that the offline hosts have all the images needed to install DTR, +you can [install DTR on that host](index.md). + +### Preventing outgoing connections + +DTR makes outgoing connections to: + +* report analytics, +* check for new versions, +* check online licenses, +* update the vulnerability scanning database + +All of these uses of online connections are optional. You can choose to +disable or not use any or all of these features on the admin settings page. + +## Where to go next + +* [DTR architecture](../../architecture.md) +* [Install DTR](index.md) diff --git a/datacenter/dtr/2.5/guides/admin/install/system-requirements.md b/datacenter/dtr/2.5/guides/admin/install/system-requirements.md new file mode 100644 index 00000000000..971c423f645 --- /dev/null +++ b/datacenter/dtr/2.5/guides/admin/install/system-requirements.md @@ -0,0 +1,46 @@ +--- +title: Docker Trusted Registry system requirements +description: Learn about the system requirements for installing Docker Trusted Registry. +keywords: DTR, architecture, requirements +--- + +Docker Trusted Registry can be installed on-premises or on the cloud. +Before installing, be sure your infrastructure has these requirements. + +## Software requirements + +You can install DTR on-premises or on a cloud provider. To install DTR, +all nodes must: +* Be a worker node managed by Universal Control Plane. +* Have a fixed hostname. + +## Ports used + +When installing DTR on a node, make sure the following ports are open on that +node: + +| Direction | Port | Purpose | +|:---------:|:--------|:--------------------------------------| +| in | 80/tcp | Web app and API client access to DTR. | +| in | 443/tcp | Web app and API client access to DTR. | + +These ports are configurable when installing DTR. + +## Compatibility and maintenance lifecycle + +Docker Enterprise Edition is a software subscription that includes three products: + +* Docker Engine EE, +* Docker Trusted Registry, +* Docker Universal Control Plane. + +[Learn more about the maintenance lifecycle for these products](https://success.docker.com/article/Compatibility_Matrix). + +## Hardware requirements + +Hardware requirements for DTR nodes are found at [UCP Hardware requirement](/datacenter/ucp/2.2/guides/admin/install/system-requirements.md) + +## Where to go next + +* [DTR architecture](../../architecture.md) +* [Install DTR](index.md) diff --git a/datacenter/dtr/2.5/guides/admin/install/uninstall.md b/datacenter/dtr/2.5/guides/admin/install/uninstall.md new file mode 100644 index 00000000000..26d8c28c437 --- /dev/null +++ b/datacenter/dtr/2.5/guides/admin/install/uninstall.md @@ -0,0 +1,31 @@ +--- +title: Uninstall Docker Trusted Registry +description: Learn how to uninstall your Docker Trusted Registry installation. +keywords: dtr, install, uninstall +--- + +Uninstalling DTR can be done by simply removing all data associated with each +replica. To do that, you just run the remove command once per replica and destroy the last one : + +```none +docker run -it --rm \ + docker/dtr:{{ page.dtr_version }} remove \ + --ucp-insecure-tls +``` + +```none +docker run -it --rm \ + docker/dtr:{{ page.dtr_version }} destroy \ + --ucp-insecure-tls +``` + +You will be prompted for the UCP URL, UCP credentials, and which replica to +remove/destroy. + +To see what options are available in the remove/destroy commands, check the +[remove command reference documentation](../../../reference/cli/remove.md) and [destroy command reference documentation](../../../reference/cli/destroy.md). + +## Where to go next + +* [Scale your deployment](../configure/set-up-high-availability.md) +* [Install DTR](index.md) diff --git a/datacenter/dtr/2.5/guides/admin/manage-users/create-and-manage-orgs.md b/datacenter/dtr/2.5/guides/admin/manage-users/create-and-manage-orgs.md new file mode 100644 index 00000000000..fd4ba27b524 --- /dev/null +++ b/datacenter/dtr/2.5/guides/admin/manage-users/create-and-manage-orgs.md @@ -0,0 +1,47 @@ +--- +title: Create and manage organizations +description: Learn how to set up organizations to enforce security in Docker Trusted + Registry. +keywords: registry, security, permissions, organizations +--- + +When a user creates a repository, only that user has permissions to make changes +to the repository. + +For team workflows, where multiple users have permissions to manage a set of +common repositories, create an organization. By default, DTR has one +organization called 'docker-datacenter', that is shared between DTR and UCP. + +To create a new organization, navigate to the **DTR web UI**, and go to the +**Organizations** page. + +![](../../images/create-and-manage-orgs-1.png){: .with-border} + +Click the **New organization** button, and choose a meaningful name for the +organization. + +![](../../images/create-and-manage-orgs-2.png){: .with-border} + +Repositories owned by this organization will contain the organization name, so +to pull an image from that repository, use: + +```bash +$ docker pull //: +``` + +Click **Save** to create the organization, and then **click the organization** +to define which users are allowed to manage this +organization. These users can edit the organization settings, edit +all repositories owned by the organization, and define the user permissions for +this organization. + +For this, click the **Add user** button, **select the users** that you want to +grant permissions to manage the organization, and click +**Save**. Then change their permissions from 'Member' to **Admin**. + +![](../../images/create-and-manage-orgs-3.png){: .with-border} + +## Where to go next + +* [Create and manage users](create-and-manage-users.md) +* [Create and manage teams](create-and-manage-teams.md) diff --git a/datacenter/dtr/2.5/guides/admin/manage-users/create-and-manage-teams.md b/datacenter/dtr/2.5/guides/admin/manage-users/create-and-manage-teams.md new file mode 100644 index 00000000000..435305d92e7 --- /dev/null +++ b/datacenter/dtr/2.5/guides/admin/manage-users/create-and-manage-teams.md @@ -0,0 +1,55 @@ +--- +title: Create and manage teams in DTR +description: Learn how to manage teams to enforce fine-grain access control in Docker + Trusted Registry. +keywords: registry, security, permissions, teams +--- + +You can extend a user's default permissions by granting them individual +permissions in other image repositories, by adding the user to a team. A team +defines the permissions a set of users have for a set of repositories. + +To create a new team, go to the **DTR web UI**, and navigate to the +**Organizations** page. +Then **click the organization** where you want to create the team. In this +example, we create the 'billing' team under the 'whale' organization. + +![](../../images/create-and-manage-teams-1.png){: .with-border} + +Click '**+**' to create a new team, and give it a name. + +![](../../images/create-and-manage-teams-2.png){: .with-border} + +## Add users to a team + +Once you have created a team, **click the team** name, to manage its settings. +The first thing we need to do is add users to the team. Click the **Add user** +button and add users to the team. + +![](../../images/create-and-manage-teams-3.png){: .with-border} + +## Manage team permissions + +The next step is to define the permissions this team has for a set of +repositories. Navigate to the **Repositories** tab, and click the +**Add repository** button. + +![](../../images/create-and-manage-teams-4.png){: .with-border} + +Choose the repositories this team has access to, and what permission levels the +team members have. + +![](../../images/create-and-manage-teams-5.png){: .with-border} + +There are three permission levels available: + +| Permission level | Description | +|:-----------------|:-----------------------------------------------------------------| +| Read only | View repository and pull images. | +| Read & Write | View repository, pull and push images. | +| Admin | Manage repository and change its settings, pull and push images. | + +## Where to go next + +* [Create and manage users](create-and-manage-users.md) +* [Permission levels](permission-levels.md) diff --git a/datacenter/dtr/2.5/guides/admin/manage-users/create-and-manage-users.md b/datacenter/dtr/2.5/guides/admin/manage-users/create-and-manage-users.md new file mode 100644 index 00000000000..34799b07fef --- /dev/null +++ b/datacenter/dtr/2.5/guides/admin/manage-users/create-and-manage-users.md @@ -0,0 +1,28 @@ +--- +title: Create and manage users in DTR +description: Learn how to manage user permissions in Docker Trusted Registry. +keywords: registry, security, permissions, users +--- + +When using the built-in authentication, you can create users +to grant them fine-grained permissions. +Users are shared across UCP and DTR. When you create a new user in +Docker Universal Control Plane, that user becomes available in DTR and vice +versa. + +To create a new user, go to the **DTR web UI**, and navigate to the **Users** +page. + +![](../../images/create-manage-users-1.png){: .with-border} + +Click the **New user** button, and fill-in the user information. + +![](../../images/create-manage-users-2.png){: .with-border} + +Check the **Trusted Registry admin** option, if you want to grant permissions +for the user to be a UCP and DTR administrator. + +## Where to go next + +* [Authentication and authorization](index.md) +* [Create and manage teams](create-and-manage-teams.md) diff --git a/datacenter/dtr/2.5/guides/admin/manage-users/index.md b/datacenter/dtr/2.5/guides/admin/manage-users/index.md new file mode 100644 index 00000000000..0d02ca49e2c --- /dev/null +++ b/datacenter/dtr/2.5/guides/admin/manage-users/index.md @@ -0,0 +1,56 @@ +--- +title: Authentication and authorization in DTR +description: Learn about the permission levels available on Docker Trusted Registry. +keywords: registry, security, permissions, users +--- + +With DTR you get to control which users have access to your image repositories. + +By default, anonymous users can only pull images from public repositories. +They can't create new repositories or push to existing ones. +You can then grant permissions to enforce fine-grained access control to image +repositories. For that: + +* Start by creating a user. + + Users are shared across UCP and DTR. When you create a new user in + Docker Universal Control Plane, that user becomes available in DTR and vice + versa. Registered users can create and manage their own repositories. + + You can also integrate with an LDAP service to manage users from a single + place. + +* Extend the permissions by adding the user to a team. + + To extend a user's permission and manage their permissions over repositories, + you add the user to a team. + A team defines the permissions users have for a set of repositories. + + +## Organizations and teams + +When a user creates a repository, only that user can make changes to the +repository settings, and push new images to it. + +Organizations take permission management one step further, since they allow +multiple users to own and manage a common set of repositories. This +is useful when implementing team workflows. With organizations you can +delegate the management of a set of repositories and user permissions to the +organization administrators. + +An organization owns a set of repositories, and defines a set of teams. With +teams you can define fine-grain permissions that a team of +user has for a set of repositories. + +![](../../images/authentication-authorization-1.svg) + +In this example, the 'Whale' organization has three repositories and two teams: + +* Members of the blog team can only see and pull images from the whale/java +repository, +* Members of the billing team can manage the whale/golang repository, and push +and pull images from the whale/java repository. + +## Where to go next + +* [Create and manage users](create-and-manage-users.md) diff --git a/datacenter/dtr/2.5/guides/admin/manage-users/permission-levels.md b/datacenter/dtr/2.5/guides/admin/manage-users/permission-levels.md new file mode 100644 index 00000000000..6ce70e8da3c --- /dev/null +++ b/datacenter/dtr/2.5/guides/admin/manage-users/permission-levels.md @@ -0,0 +1,54 @@ +--- +title: Permission levels in DTR +description: Learn about the permission levels available in Docker Trusted Registry. +keywords: registry, security, permissions +--- + +Docker Trusted Registry allows you to define fine-grain permissions over image +repositories. + +## Administrator users + +Users are shared across UCP and DTR. When you create a new user in Docker +Universal Control Plane, that user becomes available in DTR and vice versa. +When you create an administrator user in DTR, the user has permissions to: + +* Manage users across UCP and DTR, +* Manage DTR repositories and settings, +* Manage UCP resources and settings. + +## Team permission levels + +Teams allow you to define the permissions a set of user has for a set of +repositories. Three permission levels are available: + +| Repository operation | read | read-write | admin | +|:----------------------|:----:|:----------:|:-----:| +| View/ browse | x | x | x | +| Pull | x | x | x | +| Push | | x | x | +| Start a scan | | x | x | +| Delete tags | | x | x | +| Edit description | | | x | +| Set public or private | | | x | +| Manage user access | | | x | +| Delete repository | | | x | + +Team permissions are additive. When a user is a member of multiple teams, they +have the highest permission level defined by those teams. + +## Overall permissions + +Here's an overview of the permission levels available in DTR: + +* Anonymous users: Can search and pull public repositories. +* Users: Can search and pull public repos, and create and manage their own +repositories. +* Team member: Everything a user can do, plus the permissions granted by the teams the user is member of. +* Team admin: Everything a team member can do, and can also add members to the team. +* Organization admin: Everything a team admin can do, can create new teams, and add members to the organization. +* Admin: Can manage anything across UCP and DTR. + +## Where to go next + +* [Authentication and authorization](index.md) diff --git a/datacenter/dtr/2.5/guides/admin/monitor-and-troubleshoot/index.md b/datacenter/dtr/2.5/guides/admin/monitor-and-troubleshoot/index.md new file mode 100644 index 00000000000..f04826a346b --- /dev/null +++ b/datacenter/dtr/2.5/guides/admin/monitor-and-troubleshoot/index.md @@ -0,0 +1,44 @@ +--- +title: Monitor Docker Trusted Registry +description: Learn how to monitor your DTR installation. +keywords: registry, monitor, troubleshoot +--- + +Docker Trusted Registry is a Dockerized application. To monitor it, you can +use the same tools and techniques you're already using to monitor other +containerized applications running on your cluster. One way to monitor +DTR is using the monitoring capabilities of Docker Universal Control Plane. + +In your browser, log in to **Docker Universal Control Plane** (UCP), and +navigate to the **Stacks** page. +If you have DTR set up for high-availability, then all the DTR replicas are +displayed. + +![](../../images/monitor-1.png){: .with-border} + +To check the containers for the DTR replica, **click the replica** you want +to inspect, click **Inspect Resource**, and choose **Containers**. + +![](../../images/monitor-2.png){: .with-border} + +Now you can drill into each DTR container to see its logs and find the root +cause of the problem. + +![](../../images/monitor-3.png){: .with-border} + +## Health checks + +DTR also exposes several endpoints you can use to assess if a DTR replica +is healthy or not: + +* `/_ping`: Checks if the DTR replica is healthy, and +returns a simple json response. This is useful for load balancing or other +automated health check tasks. +* `/nginx_status`: Returns the number of connections being handled by the +NGINX front-end used by DTR. +* `/api/v0/meta/cluster_status`: Returns extensive information about all DTR +replicas. + +## Where to go next + +* [Troubleshoot with logs](troubleshoot-with-logs.md) diff --git a/datacenter/dtr/2.5/guides/admin/monitor-and-troubleshoot/notary-audit-logs.md b/datacenter/dtr/2.5/guides/admin/monitor-and-troubleshoot/notary-audit-logs.md new file mode 100644 index 00000000000..577821f6c03 --- /dev/null +++ b/datacenter/dtr/2.5/guides/admin/monitor-and-troubleshoot/notary-audit-logs.md @@ -0,0 +1,266 @@ +--- +title: Check Notary audit logs +description: When you push signed images, Docker Trusted Registry keeps audit + logs for the changes made to the image metadata. Learn how to view these logs. +keywords: registry, monitor, troubleshoot +--- + +Docker Content Trust (DCT) keeps audit logs of changes made to trusted repositories. +Every time you push a signed image to a repository, or delete trust data for a +repository, DCT logs that information. + +These logs are only available from the DTR API. + +## Get an authentication token + +To access the audit logs you need to authenticate your requests using an +authentication token. You can get an authentication token for all repositories, +or one that is specific to a single repository. + + +
                  +
                  + +```bash +curl --insecure --silent \ +--user : \ +"https:///auth/token?realm=dtr&service=dtr&scope=registry:catalog:*" +``` + +
                  +
                  + +```bash +curl --insecure --silent \ +--user : \ +"https:///auth/token?realm=dtr&service=dtr&scope=repository:/:pull" +``` + +
                  +
                  + +DTR returns a JSON file with a token, even when the user doesn't have access +to the repository to which they requested the authentication token. This token +doesn't grant access to DTR repositories. + +The JSON file returned has the following structure: + + +```json +{ + "token": "", + "access_token": "", + "expires_in": "", + "issued_at": "
                  @@ -195,7 +195,7 @@ from the repository. $ sudo add-apt-repository \ "deb [arch=s390x] $DOCKER_EE_URL/ubuntu \ $(lsb_release -cs) \ - stable-17.06" + stable-18.09" ```
                @@ -205,7 +205,7 @@ from the repository. $ sudo add-apt-repository \ "deb [arch=ppc64el] $DOCKER_EE_URL/ubuntu \ $(lsb_release -cs) \ - stable-17.06" + stable-18.09" ```
              • @@ -279,7 +279,7 @@ steps. To upgrade Docker EE: 1. If upgrading to a new major Docker EE version (such as when going from - Docker 17.03.x to Docker 17.06.x), + Docker 18.03.x to Docker 18.09.x), [add the new repository](#set-up-the-repository){: target="_blank" class="_" }. 2. Run `sudo apt-get update`. diff --git a/install/linux/linux-postinstall.md b/install/linux/linux-postinstall.md index 3f1bf92d118..5f6b1102dc9 100644 --- a/install/linux/linux-postinstall.md +++ b/install/linux/linux-postinstall.md @@ -479,7 +479,7 @@ and a 10% overall performance degradation, even if Docker is not running. ``` If your GRUB configuration file has incorrect syntax, an error occurs. - In this case, repeat steps 3 and 4. + In this case, repeat steps 2 and 3. The changes take effect when the system is rebooted. diff --git a/install/windows/docker-ee.md b/install/windows/docker-ee.md index ea09e55b339..a024625eb7c 100644 --- a/install/windows/docker-ee.md +++ b/install/windows/docker-ee.md @@ -1,27 +1,37 @@ --- -description: How to install Docker EE for Windows Server -keywords: Windows, Windows Server, install, download, ucp, Docker EE -title: Install Docker Enterprise Edition for Windows Server +description: How to install Docker Engine - Enterprise for Windows Server +keywords: Windows, Windows Server, install, download, ucp, Docker Engine - Enterprise +title: Install Docker Engine - Enterprise on Windows Servers redirect_from: - /docker-ee-for-windows/install/ - /engine/installation/windows/docker-ee/ +- /install/windows/ee-preview/ --- {% capture filename %}{{ page.win_latest_build }}.zip{% endcapture %} {% capture download_url %}https://download.docker.com/components/engine/windows-server/{{ site.docker_ee_version }}/{{ filename }}{% endcapture %} -Docker Enterprise Edition for Windows Server (*Docker EE*) enables native -Docker containers on Windows Server. Windows Server 2016 and later versions are supported. The Docker EE installation package -includes everything you need to run Docker on Windows Server. -This topic describes pre-install considerations, and how to download and -install Docker EE. +Docker Engine - Enterprise enables native Docker containers on Windows Server. Windows Server 2016 and later versions are supported. The Docker Engine - Enterprise installation package includes everything you need to run Docker on Windows Server. This topic describes pre-install considerations, and how to download and install Docker Engine - Enterprise. > Release notes > > [Release notes for all versions](/release-notes/) -## Install Docker EE +## System requirements -Docker EE for Windows requires Windows Server 2016 or later. See +Windows OS requirements around specific CPU and RAM requirements also need to be met as specified +in the [Windows Server Requirements](https://docs.microsoft.com/en-us/windows-server/get-started/system-requirements). +This provides information for specific CPU and memory specs and capabilities (instruction sets like CMPXCHG16b, +LAHF/SAHF, and PrefetchW, security: DEP/NX, etc.). + +* OS Versions: Server 2016 (Core and GUI), 1709 and 1803 +* RAM: 4GB +* Disk space: [32 GB minimum recommendation for Windows](https://docs.microsoft.com/en-us/windows-server/get-started/system + requirements). An additional 32 GB of Space is recommended for base images for ServerCore and NanoServer along with buffer + space for workload containers running IIS, SQL Server and .Net apps. + +## Install Docker Engine - Enterprise + +Docker Engine - Enterprise requires Windows Server 2016, 1703, or 1803. See [What to know before you install](#what-to-know-before-you-install) for a full list of prerequisites. @@ -43,7 +53,8 @@ full list of prerequisites. Restart-Computer ``` -3. Test your Docker EE installation by running the `hello-world` container. +3. Test your Docker Engine - Enterprise installation by running the + `hello-world` container. ```PowerShell docker run hello-world:nanoserver @@ -73,6 +84,37 @@ sconfig Select option `6) Download and Install Updates`. + +### FIPS 140-2 cryptographic module support + +[Federal Information Processing Standards (FIPS) Publication 140-2](https://csrc.nist.gov/csrc/media/publications/fips/140/2/final/documents/fips1402.pdf) is a United States Federal security requirement for cryptographic modules. + +With Docker EE Basic license for versions 18.09 and later, Docker provides FIPS 140-2 support in Windows Server 2016. This includes a FIPS supported cryptographic module. If the Windows implementation already has FIPS support enabled, FIPS is automatically enabled in the Docker engine. + +**NOTE:** FIPS 140-2 is only supported in the Docker EE engine. UCP and DTR currently do not have support for FIPS 140-2. + +To enable FIPS 140-2 compliance on a system that is not in FIPS 140-2 mode, do the following in PowerShell: + +``` +[System.Environment]::SetEnvironmentVariable("DOCKER_FIPS", "1", "Machine") +``` + +Restart the Docker service by running the following command. + +``` +net stop docker +net start docker +``` + +To confirm Docker is running with FIPS-140-2 enabled, run the `docker info` command: + +``` +Labels: + com.docker.security.fips=enabled +``` + +**NOTE:** If the system has the FIPS-140-2 cryptographic module installed on the operating system, it is possible to disable FIPS-140-2 compliance. To disable FIPS-140-2 in Docker but not the operating system, set the value `"DOCKER_FIPS","0"` in the `[System.Environment]`.` + ## Use a script to install Docker EE Use the following steps when you want to install manually, script automated @@ -83,9 +125,12 @@ installs, or install on air-gapped systems. ```PowerShell # On an online machine, download the zip file. - invoke-webrequest -UseBasicparsing -Outfile {{ filename }} {{ download_url }} + Invoke-WebRequest -UseBasicParsing -OutFile {{ filename }} {{ download_url }} ``` + If you need to download a specific Docker EE Engine release, all URLs can be + found on this [JSON index](https://download.docker.com/components/engine/windows-server/index.json) + 2. Copy the zip file to the machine where you want to install Docker. In a PowerShell command prompt, use the following commands to extract the archive, register, and start the Docker service. @@ -129,22 +174,18 @@ installs, or install on air-gapped systems. ## Install a specific version -There are currently two channels available for Docker EE for Windows Server: - -* `17.06` - Use this version if you're using Docker Enterprise Edition (Docker Engine, UCP, DTR). `17.06` is the default. -* `18.03` - Use this version if you're running Docker EE Engine alone. - To install a specific version, use the `RequiredVersion` flag: ```PowerShell -Install-Package -Name docker -ProviderName DockerMsftProvider -Force -RequiredVersion 18.03 +Install-Package -Name docker -ProviderName DockerMsftProvider -Force -RequiredVersion {{ site.docker_ee_version }} ... Name Version Source Summary ---- ------- ------ ------- -Docker 18.03.1-ee-2 Docker Contains Docker EE for use with Windows Server... +Docker {{ site.docker_ee_version }} Docker Contains Docker Engine - Enterprise for use with Windows Server... ``` ### Updating the DockerMsftProvider + Installing specific Docker EE versions may require an update to previously installed DockerMsftProvider modules. To update: ```PowerShell @@ -153,20 +194,51 @@ Update-Module DockerMsftProvider Then open a new Powershell session for the update to take effect. -## Update Docker EE +## Update Docker Engine - Enterprise -To update Docker EE Engine to the most recent release, specify the `-RequiredVersion` and `-Update` flags: +To update Docker Engine - Enterprise to the most recent release, specify the `-RequiredVersion` and `-Update` flags: ```PowerShell -Install-Package -Name docker -ProviderName DockerMsftProvider -RequiredVersion 18.03.1-ee-2 -Update -Force +Install-Package -Name docker -ProviderName DockerMsftProvider -RequiredVersion {{ site.docker_ee_version }} -Update -Force ``` The required version must match any of the versions available in this json file: https://dockermsft.blob.core.windows.net/dockercontainer/DockerMsftIndex.json +## Uninstall Docker EE + + Use the following commands to completely remove the Docker Engine - Enterprise from a Windows Server: + +1. Leave any active Docker Swarm + ```PowerShell + docker swarm leave --force + ``` + +1. Remove all running and stopped containers + + ```PowerShell + docker rm -f $(docker ps --all --quiet) + ``` + +1. Prune container data + ```PowerShell + docker system prune --all --volumes + ``` + +1. Uninstall Docker PowerShell Package and Module + ```PowerShell + Uninstall-Package -Name docker -ProviderName DockerMsftProvider + Uninstall-Module -Name DockerMsftProvider + ``` + +1. Clean up Windows Networking and file system + ```PowerShell + Get-HNSNetwork | Remove-HNSNetwork + Remove-Item -Path "C:\ProgramData\Docker" -Recurse -Force + ``` ## Preparing a Docker EE Engine for use with UCP Run the -[UCP installation script for Windows](/datacenter/ucp/2.2/guides/admin/configure/join-windows-worker-nodes/#run-the-windows-node-setup-script). +[UCP installation script for Windows](/datacenter/ucp/3.0/guides/admin/configure/join-windows-worker-nodes/#run-the-windows-node-setup-script). Start the Docker service: @@ -174,15 +246,13 @@ Start the Docker service: Start-Service Docker ``` -## What to know before you install - -* **What the Docker EE for Windows install includes**: The installation +* **What the Docker Engine - Enterprise install includes**: The installation provides [Docker Engine](/engine/userguide/intro.md) and the [Docker CLI client](/engine/reference/commandline/cli.md). -## About Docker EE containers and Windows Server +## About Docker Engine - Enterprise containers and Windows Server -Looking for information on using Docker EE containers? +Looking for information on using Docker Engine - Enterprise containers? * [Getting Started with Windows Containers (Lab)](https://github.com/docker/labs/blob/master/windows/windows-containers/README.md) provides a tutorial on how to set up and run Windows containers on Windows 10 diff --git a/install/windows/ee-preview.md b/install/windows/ee-preview.md deleted file mode 100644 index 876b1c0ece5..00000000000 --- a/install/windows/ee-preview.md +++ /dev/null @@ -1,59 +0,0 @@ ---- -description: How to install Docker on Windows Server 1709 and Windows 10 Fall Creators Update -keywords: Windows, Windows Server, install, download, Docker EE, preview, Windows 1709 -title: Preview Docker for Windows Server 1709 and Windows 10 Fall Creators Update -redirect_from: -- /engine/installation/windows/ee-preview/ ---- - -Windows versions released in the fall of 2017 (Windows Server 1709 and Windows -10 Fall Creators Update for server and client respectively) contain improvements -that improve the experience of running Docker on Windows. Enhancements include: - - * Docker ingress mode service publishing and virtual-IP based service discovery - * Mounting container-host named pipes into Windows containers - * Smaller Windows container base images - * Linux containers on Windows - -Check out the -[blog post announcement for details](https://blog.docker.com/2017/09/docker-windows-server-1709/) -on use-cases for these new features. - -## Windows 10 Fall Creators Update - -Windows 10 users can take advantage of the new Windows features by -[installing Docker CE _Edge_ for Windows 10](/docker-for-windows/install/). Edge -comes with the latest Docker platform builds that support the new Windows features. - -## Windows Server 1709 - -The latest version of Docker Enterprise Edition Basic is 17.06 and Docker EE -17.06 is the recommended way to run Docker containers on Windows Server 1709 in -production. Unfortunately, Docker Universal Control plane does not support -managing Windows Server 1709 workers yet. Only Docker EE Basic is supported on -Windows Server 1709. - -Docker EE 17.06 does not support improved networking (ingress and virtual-IP -based service discovery), named pipe mounting nor Linux containers on Windows -Server 1709 (it does benefit from the smaller base images). For users that want -to test these new Windows features with Docker, Docker Inc. makes available -preview builds of Docker EE. These can be installed from the `preview` channel -using the standard PowerShell installation method: - - Install-Module DockerProvider - Install-Package Docker -ProviderName DockerProvider -RequiredVersion preview - -Again, Docker Universal Control Plane does not work on Windows Server 1709 -whether running Docker EE 17.06 or Docker EE preview. - -## FAQ - -### Image compatibility - -Windows container base images are not compatible between Windows Server 2016 and -Windows Server 1709 (except that Windows Server 1709 can run Windows Server 2016 -based images when using Hyper-V isolation - but not the other way around). Check -the following Microsoft compatibility docs for details. - -- [Version compatibility](https://docs.microsoft.com/en-us/virtualization/windowscontainers/deploy-containers/version-compatibility) -- [System requirements](https://docs.microsoft.com/en-us/virtualization/windowscontainers/deploy-containers/system-requirements) diff --git a/js/my_first_tour.js b/js/my_first_tour.js index 9fe29900ca1..ad9f292a108 100644 --- a/js/my_first_tour.js +++ b/js/my_first_tour.js @@ -63,7 +63,7 @@ var tour = { }, { title: "Product Manuals", - content: "Learn about Docker products and tools, such as Docker Cloud, UCP, Docker for Mac, or Docker for Windows.", + content: "Learn about Docker products and tools, such as Docker Hub, UCP, Docker for Mac, or Docker for Windows.", target: "top-nav", placement: "bottom", width: "570px", diff --git a/machine/AVAILABLE_DRIVER_PLUGINS.md b/machine/AVAILABLE_DRIVER_PLUGINS.md index 3e870e1038b..61e014ae4d0 100644 --- a/machine/AVAILABLE_DRIVER_PLUGINS.md +++ b/machine/AVAILABLE_DRIVER_PLUGINS.md @@ -192,6 +192,23 @@ with Docker Inc. Use 3rd party plugins at your own risk. bo.thompson@gmail.com + + Hetzner Cloud + + https://github.com/JonasProgrammer/docker-machine-driver-hetzner + + + JonasProgrammer
                + monochromata
                + mxschmitt + + + jonass@dev.jsje.de
                + sl@monochromata.de
                + max@schmitt.mx + + HPE OneView diff --git a/machine/drivers/aws.md b/machine/drivers/aws.md index 890bd27cf0b..d96bb67552e 100644 --- a/machine/drivers/aws.md +++ b/machine/drivers/aws.md @@ -46,73 +46,75 @@ You can use environment variables: - `--amazonec2-ami`: The AMI ID of the instance to use. - `--amazonec2-block-duration-minutes`: AWS spot instance duration in minutes (60, 120, 180, 240, 300, or 360). - `--amazonec2-device-name`: The root device name of the instance. -- `--amazonec2-endpoint`: Optional endpoint URL (hostname only or fully qualified URI) +- `--amazonec2-endpoint`: Optional endpoint URL (hostname only or a fully qualified URI). - `--amazonec2-iam-instance-profile`: The AWS IAM role name to be used as the instance profile. -- `--amazonec2-insecure-transport`: Disable SSL when sending requests +- `--amazonec2-insecure-transport`: Disable SSL when sending requests. - `--amazonec2-instance-type`: The instance type to run. -- `--amazonec2-keypair-name`: AWS keypair to use; requires --amazonec2-ssh-keypath +- `--amazonec2-keypair-name`: AWS keypair to use; requires `--amazonec2-ssh-keypath`. - `--amazonec2-monitoring`: Enable CloudWatch Monitoring. - `--amazonec2-open-port`: Make the specified port number accessible from the Internet. - `--amazonec2-private-address-only`: Use the private IP address only. - `--amazonec2-region`: The region to use when launching the instance. - `--amazonec2-request-spot-instance`: Use spot instances. -- `--amazonec2-retries`: Set retry count for recoverable failures (use -1 to disable) +- `--amazonec2-retries`: Set retry count for recoverable failures (use `-1` to disable). - `--amazonec2-root-size`: The root disk size of the instance (in GB). - `--amazonec2-secret-key`: Your secret access key for the Amazon Web Services API. - `--amazonec2-security-group`: AWS VPC security group name. +- `--amazonec2-security-group-readonly`: Skip adding default rules to security groups. - `--amazonec2-session-token`: Your session token for the Amazon Web Services API. -- `--amazonec2-spot-price`: Spot instance bid price (in dollars). Require the `--amazonec2-request-spot-instance` flag. -- `--amazonec2-ssh-keypath`: Path to Private Key file to use for instance. Matching public key with .pub extension should exist -- `--amazonec2-ssh-user`: The SSH Login username, which must match the default SSH user set in the ami used. +- `--amazonec2-spot-price`: Spot instance bid price in dollars. Requires the `--amazonec2-request-spot-instance` flag. +- `--amazonec2-ssh-keypath`: Path to private key file to use for instance. Requires a matching public key with `.pub` extension to exist. +- `--amazonec2-ssh-user`: The SSH login username, which must match the default SSH user set in the AMI being used. - `--amazonec2-subnet-id`: AWS VPC subnet ID. -- `--amazonec2-tags`: AWS extra tag key-value pairs. Comma-separated. For example, `key1,value1,key2,value2`. -- `--amazonec2-use-ebs-optimized-instance`: Create an EBS Optimized Instance, instance type must support it. +- `--amazonec2-tags`: A comma-separated list of AWS extra tag key-value pairs. For example, `key1,value1,key2,value2`. +- `--amazonec2-use-ebs-optimized-instance`: Create an EBS Optimized Instance. Instance type must support it. - `--amazonec2-use-private-address`: Use the private IP address for docker-machine, but still create a public IP address. - `--amazonec2-userdata`: Path to file with cloud-init user data. - `--amazonec2-volume-type`: The Amazon EBS volume type to be attached to the instance. - `--amazonec2-vpc-id`: Your VPC ID to launch the instance in. -- `--amazonec2-zone`: The AWS zone to launch the instance in (one of a,b,c,d,e). +- `--amazonec2-zone`: The AWS zone to launch the instance in (one of a,b,c,d, and e). #### Environment variables and default values: -| CLI option | Environment variable | Default | -|:-----------------------------------------|:-------------------------|:-----------------| -| `--amazonec2-access-key` | `AWS_ACCESS_KEY_ID` | - | -| `--amazonec2-ami` | `AWS_AMI` | `ami-c60b90d1` | -| `--amazonec2-block-duration-minutes` | - | - | -| `--amazonec2-device-name` | `AWS_DEVICE_NAME` | `/dev/sda1` | -| `--amazonec2-endpoint` | `AWS_ENDPOINT` | - | -| `--amazonec2-iam-instance-profile` | `AWS_INSTANCE_PROFILE` | - | -| `--amazonec2-insecure-transport` | `AWS_INSECURE_TRANSPORT` | - | -| `--amazonec2-instance-type` | `AWS_INSTANCE_TYPE` | `t2.micro` | -| `--amazonec2-keypair-name` | `AWS_KEYPAIR_NAME` | - | -| `--amazonec2-monitoring` | - | `false` | -| `--amazonec2-open-port` | - | - | -| `--amazonec2-private-address-only` | - | `false` | -| `--amazonec2-region` | `AWS_DEFAULT_REGION` | `us-east-1` | -| `--amazonec2-request-spot-instance` | - | `false` | -| `--amazonec2-retries` | - | `5` | -| `--amazonec2-root-size` | `AWS_ROOT_SIZE` | `16` | -| `--amazonec2-secret-key` | `AWS_SECRET_ACCESS_KEY` | - | -| `--amazonec2-security-group` | `AWS_SECURITY_GROUP` | `docker-machine` | -| `--amazonec2-session-token` | `AWS_SESSION_TOKEN` | - | -| `--amazonec2-spot-price` | - | `0.50` | -| `--amazonec2-ssh-keypath` | `AWS_SSH_KEYPATH` | - | -| `--amazonec2-ssh-user` | `AWS_SSH_USER` | `ubuntu` | -| `--amazonec2-subnet-id` | `AWS_SUBNET_ID` | - | -| `--amazonec2-tags` | `AWS_TAGS` | - | -| `--amazonec2-use-ebs-optimized-instance` | - | `false` | -| `--amazonec2-use-private-address` | - | `false` | -| `--amazonec2-userdata` | `AWS_USERDATA` | - | -| `--amazonec2-volume-type` | `AWS_VOLUME_TYPE` | `gp2` | -| `--amazonec2-vpc-id` | `AWS_VPC_ID` | - | -| `--amazonec2-zone` | `AWS_ZONE` | `a` | +| CLI option | Environment variable | Default | +|:-----------------------------------------|:------------------------------|:-----------------| +| `--amazonec2-access-key` | `AWS_ACCESS_KEY_ID` | - | +| `--amazonec2-ami` | `AWS_AMI` | `ami-c60b90d1` | +| `--amazonec2-block-duration-minutes` | - | - | +| `--amazonec2-device-name` | `AWS_DEVICE_NAME` | `/dev/sda1` | +| `--amazonec2-endpoint` | `AWS_ENDPOINT` | - | +| `--amazonec2-iam-instance-profile` | `AWS_INSTANCE_PROFILE` | - | +| `--amazonec2-insecure-transport` | `AWS_INSECURE_TRANSPORT` | - | +| `--amazonec2-instance-type` | `AWS_INSTANCE_TYPE` | `t2.micro` | +| `--amazonec2-keypair-name` | `AWS_KEYPAIR_NAME` | - | +| `--amazonec2-monitoring` | - | `false` | +| `--amazonec2-open-port` | - | - | +| `--amazonec2-private-address-only` | - | `false` | +| `--amazonec2-region` | `AWS_DEFAULT_REGION` | `us-east-1` | +| `--amazonec2-request-spot-instance` | - | `false` | +| `--amazonec2-retries` | - | `5` | +| `--amazonec2-root-size` | `AWS_ROOT_SIZE` | `16` | +| `--amazonec2-secret-key` | `AWS_SECRET_ACCESS_KEY` | - | +| `--amazonec2-security-group` | `AWS_SECURITY_GROUP` | `docker-machine` | +| `--amazonec2-security-group-readonly` | `AWS_SECURITY_GROUP_READONLY` | `false` | +| `--amazonec2-session-token` | `AWS_SESSION_TOKEN` | - | +| `--amazonec2-spot-price` | - | `0.50` | +| `--amazonec2-ssh-keypath` | `AWS_SSH_KEYPATH` | - | +| `--amazonec2-ssh-user` | `AWS_SSH_USER` | `ubuntu` | +| `--amazonec2-subnet-id` | `AWS_SUBNET_ID` | - | +| `--amazonec2-tags` | `AWS_TAGS` | - | +| `--amazonec2-use-ebs-optimized-instance` | - | `false` | +| `--amazonec2-use-private-address` | - | `false` | +| `--amazonec2-userdata` | `AWS_USERDATA` | - | +| `--amazonec2-volume-type` | `AWS_VOLUME_TYPE` | `gp2` | +| `--amazonec2-vpc-id` | `AWS_VPC_ID` | - | +| `--amazonec2-zone` | `AWS_ZONE` | `a` | ## Default AMIs -By default, the Amazon EC2 driver uses a daily image of Ubuntu 16.04 LTS. +By default, the Amazon EC2 driver uses a daily image of `Ubuntu 16.04 LTS`. | Region | AMI ID | | -------------- | ------------ | @@ -142,35 +144,32 @@ A security group is created and associated to the host. This security group has - docker (2376/tcp) - swarm (3376/tcp), only if the node is a swarm master -If you specify a security group yourself using the `--amazonec2-security-group` flag, the above ports are checked and opened and the security group modified. -If you want more ports to be opened, like application specific ports, use the AWS console and modify the configuration manually. +If you specify a security group yourself using the `--amazonec2-security-group` flag, the above ports are checked and opened and the security group is modified. +If you want more ports to be opened such as application-specific ports, use the AWS console and modify the configuration manually. ## VPC ID -We determine your default VPC ID at the start of a command. -In some cases, either because your account does not have a default vpc, or you don't want to use the default one, you can specify a vpc with the `--amazonec2-vpc-id` flag. +Your default VPC ID is determined at the start of a command. In some cases, either because your account does not have a default VPC, or you do not want to use the default one, you can specify a VPC with the `--amazonec2-vpc-id` flag. -To find the VPC ID: +### To find the VPC ID: -1. Login to the AWS console +1. Login to the AWS console. 2. Go to **Services -> VPC -> Your VPCs**. -3. Locate the VPC ID you want from the _VPC_ column. -4. Go to **Services -> VPC -> Subnets**. Examine the _Availability Zone_ column to verify that zone `a` exists and matches your VPC ID. +3. Locate the VPC ID you want from the *_VPC_* column. +4. Go to **Services -> VPC -> Subnets**. Examine the _Availability Zone_ column to verify that zone `a` exists and matches your VPC ID. For example, `us-east1-a` is in the `a` availability zone. If the `a` zone is not present, you can create a new subnet in that zone or specify a different zone when you create the machine. - For example, `us-east1-a` is in the `a` availability zone. If the `a` zone is not present, you can create a new subnet in that zone or specify a different zone when you create the machine. - -To create a machine with a non-default VPC-ID: +### To create a machine with a non-default VPC-ID: $ docker-machine create --driver amazonec2 --amazonec2-access-key AKI******* --amazonec2-secret-key 8T93C********* --amazonec2-vpc-id vpc-****** aws02 This example assumes the VPC ID was found in the `a` availability zone. Use the`--amazonec2-zone` flag to specify a zone other than the `a` zone. For example, `--amazonec2-zone c` signifies `us-east1-c`. ## VPC Connectivity -Machine uses SSH to complete the set up of instances in EC2 and requires the ability to access the instance directly. +Docker Machine uses SSH to complete the set up of instances in EC2 and requires the ability to access the instance directly. If you use the flag `--amazonec2-private-address-only`, ensure that you can access the new instance from within the internal network of the VPC, such as a corporate VPN to the VPC, a VPN instance inside the VPC, or using `docker-machine` from an instance within your VPC. -Configuration of VPCs is beyond the scope of this guide, however the first step in troubleshooting is ensuring if you are using private subnets that you follow the design guidance in the [AWS VPC User Guide](http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Scenario2.html) and have some form of NAT available so that the set up process can access the internet to complete set up. +Configuration of VPCs is beyond the scope of this guide. However, the first step in troubleshooting is making sure that you are using private subnets that follow the design guidance in the [AWS VPC User Guide](http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Scenario2.html) and have some form of NAT available so that the setup process can access the internet to complete the setup. ## Custom AMI and SSH username @@ -178,4 +177,4 @@ The default SSH username for the default AMIs is `ubuntu`. You need to change the SSH username only if the custom AMI you use has a different SSH username. -You can change the SSH username with the `--amazonec2-ssh-user` according to the AMI you selected with the `--amazonec2-ami`. +You can change the SSH username with the `--amazonec2-ssh-user` according to the AMI you selected with the `--amazonec2-ami` option. diff --git a/machine/drivers/hyper-v.md b/machine/drivers/hyper-v.md index 30a3b06987b..939b3d337bb 100644 --- a/machine/drivers/hyper-v.md +++ b/machine/drivers/hyper-v.md @@ -9,8 +9,8 @@ Creates a Boot2Docker virtual machine locally on your Windows machine using Hyper-V. Hyper-V must be enabled on your desktop system. Docker for Windows automatically -enables it upon install. See this article on the Microsoft developer network for -[instructions on how to manually enable +enables it upon install. See this article on the Microsoft developer network for instructions on +[how to manually enable Hyper-V](https://msdn.microsoft.com/en-us/virtualization/hyperv_on_windows/quick_start/walkthrough_install). > **Notes**: @@ -18,12 +18,12 @@ Hyper-V](https://msdn.microsoft.com/en-us/virtualization/hyperv_on_windows/quick > * You must use an Administrator level account to create and manage Hyper-V machines. > >* You need an existing virtual switch to use the -> driver. Hyper-V can share an external network interface (aka -> bridging), see [this blog](http://blogs.technet.com/b/canitpro/archive/2014/03/11/step-by-step-enabling-hyper-v-for-use-on-windows-8-1.aspx). +> driver. Hyper-V can share an external network interface (also known as +> bridging). See [this blog](http://blogs.technet.com/b/canitpro/archive/2014/03/11/step-by-step-enabling-hyper-v-for-use-on-windows-8-1.aspx) to learn more. > If you would like to use NAT, create an internal network, and use > [Internet Connection Sharing](http://www.packet6.com/allowing-windows-8-1-hyper-v-vm-to-work-with-wifi/). > -> * This reference page includes an [example](hyper-v.md#example) that shows how to use an elevated (Administrator-level) PowerShell and how to create and use an external network switch. +> * This reference page includes an [example](hyper-v.md#example) showing you how to use an elevated (Administrator-level) PowerShell and create and use an external network switch. ## Usage @@ -38,38 +38,40 @@ Hyper-V](https://msdn.microsoft.com/en-us/virtualization/hyperv_on_windows/quick - `--hyperv-cpu-count`: Number of CPUs for the host. - `--hyperv-static-macaddress`: Hyper-V network adapter's static MAC address. - `--hyperv-vlan-id`: Hyper-V network adapter's VLAN ID if any. +- `--hyperv-disable-dynamic-memory`: Disable dynamic memory management. ## Environment variables and default values -| CLI option | Environment variable | Default | -| ---------------------------- | -------------------------- | ------------------------ | -| `--hyperv-boot2docker-url` | `HYPERV_BOOT2DOCKER_URL` | _Latest boot2docker url_ | -| `--hyperv-cpu-count` | `HYPERV_CPU_COUNT` | `1` | -| `--hyperv-disk-size` | `HYPERV_DISK_SIZE` | `20000` | -| `--hyperv-memory` | `HYPERV_MEMORY` | `1024` | -| `--hyperv-static-macaddress` | `HYPERV_STATIC_MACADDRESS` | _undefined_ | -| `--hyperv-virtual-switch` | `HYPERV_VIRTUAL_SWITCH` | _first found_ | -| `--hyperv-vlan-id` | `HYPERV_VLAN_ID` | _undefined_ | +| CLI option | Environment variable | Default | +| --------------------------------- | ------------------------------- | ------------------------ | +| `--hyperv-boot2docker-url` | `HYPERV_BOOT2DOCKER_URL` | _Latest boot2docker url_ | +| `--hyperv-cpu-count` | `HYPERV_CPU_COUNT` | `1` | +| `--hyperv-disk-size` | `HYPERV_DISK_SIZE` | `20000` | +| `--hyperv-memory` | `HYPERV_MEMORY` | `1024` | +| `--hyperv-static-macaddress` | `HYPERV_STATIC_MACADDRESS` | _undefined_ | +| `--hyperv-virtual-switch` | `HYPERV_VIRTUAL_SWITCH` | _first found_ | +| `--hyperv-vlan-id` | `HYPERV_VLAN_ID` | _undefined_ | +| `--hyperv-disable-dynamic-memory` | `HYPERV_DISABLE_DYNAMIC_MEMORY` | `false` | -## Example +## Example: -#### 1. Make sure Hyper-V is enabled +#### 1. Make sure Hyper-V is enabled. - Hyper-V is automatically enabled on a Docker for Windows install. To enable it manually, see [instructions on how to manually enable Hyper-V](https://msdn.microsoft.com/en-us/virtualization/hyperv_on_windows/quick_start/walkthrough_install) on the Microsoft developer network. +Hyper-V is automatically enabled on a Docker for Windows installation. To enable it manually, see [instructions on how to manually enable Hyper-V](https://msdn.microsoft.com/en-us/virtualization/hyperv_on_windows/quick_start/walkthrough_install) on the Microsoft developer network. #### 2. Set up a new external network switch (Optional) -> **Note**: If you already have an external network switch you can skip this setup and use that one. +> **Note**: If you already have an external network switch, skip this setup and use that one instead. Make sure you have Ethernet connectivity while you are doing this. -Open the **Hyper-V Manager**. (On Windows 10, just search for the Hyper-V Manager in the search field in the lower left search field.) +Open the **Hyper-V Manager**. (On Windows 10, search for the Hyper-V Manager in the lower left search field.) -Select the Virtual Switch Manager in the right-side **Actions** panel. +Select the **Virtual Switch Manager** on the right-hand **Actions** panel. ![Hyper-V manager](../img/hyperv-manager.png) -Set up a new **external network switch** to use instead of DockerNAT network switch (for Moby), which is set up by default when you install Docker for Windows. (Or if you already have another network switch set up, you can use that one, but it must be an **external** switch.) +Set up a new **external network switch** to use instead of DockerNAT network switch (for Moby), which is set up by default when you install Docker for Windows. If you already have another network switch set up, use that one instead but make sure it is an **external** switch.) For this example, we created a virtual switch called `Primary Virtual Switch`. @@ -77,29 +79,28 @@ For this example, we created a virtual switch called `Primary Virtual Switch`. #### 3. Reboot - See [this issue on virtualbox: Hangs on Waiting for VM to start #986](https://github.com/docker/machine/issues/986). +See this issue on virtualbox: [Hangs on Waiting for VM to start #986](https://github.com/docker/machine/issues/986). - A reboot of your desktop system clears out any problems with the routing tables. Without a reboot first, `docker-machine create ...` might get hung up on `Waiting for VM to start`. +Reboot your desktop system to clear out any routing table problems. Without a reboot first, `docker-machine create ...` might get hung up on `Waiting for host to start...`. If you are still hung on "Waiting for host to start..." after you reboot, make sure you selected the correct network in the Virtual Switch Manager. #### 4. Create the nodes with Docker Machine and the Microsoft Hyper-V driver -* Start an "elevated" PowerShell with administrator privileges. To do this, search for PowerShell, right-click, and choose Run as administrator. +* Start an "elevated" PowerShell with administrator privileges. To do this, search for PowerShell, then right click and choose ***Run as administrator***. * Run the `docker-machine create` commands to create machines. For example, if you follow along with the [Swarm mode tutorial](/engine/swarm/swarm-tutorial/index.md) which asks you to create [three -networked host -machines](/engine/swarm/swarm-tutorial/index.md#three-networked-host-machines), +networked host machines](/engine/swarm/swarm-tutorial/index.md#three-networked-host-machines), you can create these swarm nodes: `manager1`, `worker1`, `worker2`. * Use the Microsoft Hyper-V driver and reference the new virtual switch you created. ```shell - docker-machine create -d hyperv --hyperv-virtual-switch "" + docker-machine create -d hyperv --hyperv-virtual-switch ``` - Here is an example of creating `manager1` node: + Here is an example of creating a `manager1` node: ```shell PS C:\WINDOWS\system32> docker-machine create -d hyperv --hyperv-virtual-switch "Primary Virtual Switch" manager1 @@ -138,10 +139,10 @@ you can create these swarm nodes: `manager1`, `worker1`, `worker2`. ## Where to go next -As a point of interest, the virtual machines you create with the -[`docker-machine create`](/machine/reference/create.md) command show up in the +As a point of interest, the virtual machines you create with +[`docker-machine create`](/machine/reference/create.md) show up in the Hyper-V Manager under "Virtual Machines", but you need to manage them with -[`docker-machine`](/machine/reference/index.md) commands not through the Hyper-V +[`docker-machine`](/machine/reference/index.md) commands and not through the Hyper-V Manager. To get started using `docker-machine` commands, see these topics: diff --git a/machine/examples/aws.md b/machine/examples/aws.md index 96af995a3d8..aba70270539 100644 --- a/machine/examples/aws.md +++ b/machine/examples/aws.md @@ -4,23 +4,6 @@ keywords: docker, machine, cloud, aws title: Amazon Web Services (AWS) EC2 example --- -> Try out Docker Cloud! -> -> We suggest using [Docker Cloud](https://cloud.docker.com/) as the -most up-to-date way to run Docker on your cloud providers. To get started, see -[Docker Cloud docs home page](/docker-cloud/index.md), [Docker Cloud Settings -and Docker ID](/docker-cloud/dockerid.md), [Swarms in Docker Cloud -(Beta)](/docker-cloud/cloud-swarm/index.md), and [Link Amazon Web Services to -Docker Cloud](/docker-cloud/cloud-swarm/link-aws-swarm.md). If you are running -Edge channel Docker for Mac or Windows, you can access your Docker Cloud account -from those Docker desktop applications. See Docker Cloud (Edge feature) on -[Mac](/docker-for-mac/index.md#docker-cloud-edge-feature) or -[Windows](/docker-for-windows/index.md#docker-cloud-edge-feature). -> -> Docker Machine still works as described here, but Docker Cloud -supersedes Machine for this purpose. -{: .important} - Follow along with this example to create a Dockerized [Amazon Web Services (AWS)](https://aws.amazon.com/) EC2 instance. ### Step 1. Sign up for AWS and configure credentials diff --git a/machine/examples/index.md b/machine/examples/index.md index 7f99adb4db5..c11cf5dc27d 100644 --- a/machine/examples/index.md +++ b/machine/examples/index.md @@ -3,22 +3,5 @@ description: Examples of cloud installs keywords: docker, machine, amazonec2, azure, digitalocean, google, openstack, rackspace, softlayer, virtualbox, vmwarefusion, vmwarevcloudair, vmwarevsphere, exoscale title: Learn by example --- - -> Try out Docker Cloud! -> -> We suggest using [Docker Cloud](https://cloud.docker.com/) as the -most up-to-date way to run Docker on your cloud providers. To get started, see -[Docker Cloud docs home page](/docker-cloud/index.md), [Docker Cloud Settings -and Docker ID](/docker-cloud/dockerid.md) and [Swarms in Docker Cloud -(Beta)](/docker-cloud/cloud-swarm/index.md). If you are running Edge channel -Docker for Mac or Windows, you can access your Docker Cloud account from those -Docker desktop applications. See Docker Cloud (Edge feature) on -[Mac](/docker-for-mac/index.md#docker-cloud-edge-feature) or -[Windows](/docker-for-windows/index.md#docker-cloud-edge-feature). -> -> Docker Machine still works as described here, but Docker Cloud -supersedes Machine for this purpose. -{: .important} - - [Digital Ocean Example](ocean.md) - [AWS Example](aws.md) diff --git a/machine/examples/ocean.md b/machine/examples/ocean.md index bae3fa788a3..1fd0f0663c9 100644 --- a/machine/examples/ocean.md +++ b/machine/examples/ocean.md @@ -4,22 +4,6 @@ keywords: docker, machine, cloud, digital ocean title: Digital Ocean example --- -> Try out Docker Cloud! -> -> We suggest using [Docker Cloud](https://cloud.docker.com/) as the -most up-to-date way to run Docker on your cloud providers. To get started, see -[Docker Cloud docs home page](/docker-cloud/index.md), [Docker Cloud Settings -and Docker ID](/docker-cloud/dockerid.md), and [Link a DigitalOcean account to -Docker Cloud](/docker-cloud/infrastructure/link-do.md). If you are running Edge -channel Docker for Mac or Windows, you can access your Docker Cloud account from -those Docker desktop applications. See Docker Cloud (Edge feature) on -[Mac](/docker-for-mac/index.md#docker-cloud-edge-feature) or -[Windows](/docker-for-windows/index.md#docker-cloud-edge-feature). -> -> Docker Machine still works as described below, but Docker Cloud -supersedes Machine for this purpose. -{: .important} - Follow along with this example to create a Dockerized [Digital Ocean](https://digitalocean.com) Droplet (cloud host). ### Step 1. Create a Digital Ocean account diff --git a/machine/get-started-cloud.md b/machine/get-started-cloud.md index eb32e2c9b94..dc9d3e8b05c 100644 --- a/machine/get-started-cloud.md +++ b/machine/get-started-cloud.md @@ -4,21 +4,6 @@ keywords: docker, machine, amazonec2, azure, digitalocean, google, openstack, ra title: Use Docker Machine to provision hosts on cloud providers --- -> Try out Docker Cloud! -> -> We suggest using [Docker Cloud](https://cloud.docker.com/) as the -most up-to-date way to run Docker on your cloud providers. To get started, see -[Docker Cloud docs home page](/docker-cloud/index.md), [Docker Cloud Settings -and Docker ID](/docker-cloud/dockerid.md), and [Swarms in Docker Cloud -(Beta)](/docker-cloud/cloud-swarm/index.md). If you are running Edge channel -Docker for Mac or Windows, you can access your Docker Cloud account from those -Docker desktop applications. See Docker Cloud (Edge feature) on -[Mac](/docker-for-mac/index.md#docker-cloud-edge-feature) or -[Windows](/docker-for-windows/index.md#docker-cloud-edge-feature). -> -> Docker Machine still works as described here, but Docker Cloud supersedes Machine for this purpose. -{: .important} - Docker Machine driver plugins are available for many cloud platforms, so you can use Machine to provision cloud hosts. When you use Docker Machine for provisioning, you create cloud hosts with Docker Engine installed on them. diff --git a/machine/get-started.md b/machine/get-started.md index 4b44047f982..847669b4778 100644 --- a/machine/get-started.md +++ b/machine/get-started.md @@ -292,9 +292,7 @@ For machines other than `default`, and commands other than those listed above, y You might want to use the current shell to connect to a different Docker Engine. This would be the case if, for example, you are [running Docker for Mac concurrent with Docker Toolbox](/docker-for-mac/docker-toolbox.md) and want to -talk to two different Docker Engines, or running swarms on Docker Cloud and want -to [switch between managing the swarm and using Docker -hosts](/docker-cloud/cloud-swarm/connect-to-swarm.md#switch-between-your-swarm-and-docker-hosts-in-the-same-shell). +talk to two different Docker Engines. In both scenarios, you have the option to switch the environment for the current shell to talk to different Docker engines. @@ -344,9 +342,6 @@ shell to talk to different Docker engines. If you are running Docker for Mac, you can run Docker commands to talk to the Docker Engine installed with that app. - If you are running swarms on Docker Cloud, you can re-run the `export` - command you used to connect to the swarm. - Since [Docker for Windows is incompatible with Toolbox](/docker-for-windows/install.md#what-to-know-before-you-install), this scenario isn't applicable because Docker for Windows uses the Docker diff --git a/machine/reference/create.md b/machine/reference/create.md index c0155db49a9..9cbba0d10bf 100644 --- a/machine/reference/create.md +++ b/machine/reference/create.md @@ -156,7 +156,7 @@ $ docker-machine create -d virtualbox \ foobarmachine ``` -This creates a virtual machine running locally in Virtualbox which uses the +This creates a virtual machine running locally in VirtualBox which uses the `overlay` storage backend, has the key-value pairs `foo=bar` and `spam=eggs` as labels on the engine, and allows pushing / pulling from the insecure registry located at `registry.myco.com`. You can verify much of this by inspecting the diff --git a/network/index.md b/network/index.md index 9b832c295b3..be083b2652b 100644 --- a/network/index.md +++ b/network/index.md @@ -75,7 +75,7 @@ exist by default, and provide core networking functionality: - [Network plugins](/engine/extend/plugins_services/): You can install and use third-party network plugins with Docker. These plugins are available from - [Docker Store](https://store.docker.com/search?category=network&q=&type=plugin) + [Docker Hub](https://hub.docker.com/search?category=network&q=&type=plugin) or from third-party vendors. See the vendor's documentation for installing and using a given network plugin. @@ -118,4 +118,3 @@ understanding using the following tutorials: - [Host networking tutorial](network-tutorial-host.md) - [Overlay networking tutorial](network-tutorial-overlay.md) - [Macvlan networking tutorial](network-tutorial-macvlan.md) - diff --git a/network/macvlan.md b/network/macvlan.md index 7e9a23810cd..e0f6c4013d3 100644 --- a/network/macvlan.md +++ b/network/macvlan.md @@ -17,7 +17,7 @@ the Macvlan, as well as the subnet and gateway of the Macvlan. You can even isolate your Macvlan networks using different physical network interfaces. Keep the following things in mind: -- It is very easy to unintentionally damage your network due IP address +- It is very easy to unintentionally damage your network due to IP address exhaustion or to "VLAN spread", which is a situation in which you have an inappropriately large number of unique MAC addresses in your network. - Your networking equipment needs to be able to handle "promiscuous mode", diff --git a/network/network-tutorial-macvlan.md b/network/network-tutorial-macvlan.md index 3cda5bc069e..31000e99b7e 100644 --- a/network/network-tutorial-macvlan.md +++ b/network/network-tutorial-macvlan.md @@ -47,7 +47,7 @@ on your network, your container appears to be physically attached to the network my-macvlan-net ``` - You can use `docker network ls` and `docker network inspect pub_net` + You can use `docker network ls` and `docker network inspect my-macvlan-net` commands to verify that the network exists and is a `macvlan` network. 2. Start an `alpine` container and attach it to the `my-macvlan-net` network. The @@ -138,7 +138,7 @@ be physically attached to the network. my-8021q-macvlan-net ``` - You can use `docker network ls` and `docker network inspect pub_net` + You can use `docker network ls` and `docker network inspect my-8021q-macvlan-net` commands to verify that the network exists, is a `macvlan` network, and has parent `eth0.10`. You can use `ip addr show` on the Docker host to verify that the interface `eth0.10` exists and has a separate IP address @@ -208,7 +208,7 @@ be physically attached to the network. the network. ```bash - $ docker container stop my-second-macvlan-alpin + $ docker container stop my-second-macvlan-alpine $ docker network rm my-8021q-macvlan-net ``` diff --git a/network/network-tutorial-overlay.md b/network/network-tutorial-overlay.md index 164476f6c8f..ccf37a7500d 100644 --- a/network/network-tutorial-overlay.md +++ b/network/network-tutorial-overlay.md @@ -623,7 +623,7 @@ need to have Docker installed and running. ping: bad address 'alpine2' ``` -7. Detach from `alpine2` without stopping it by using the detach sequence, +7. Detach from `alpine1` without stopping it by using the detach sequence, `CTRL` + `p` `CTRL` + `q` (hold down `CTRL` and type `p` followed by `q`). If you wish, attach to `alpine2` and repeat steps 4, 5, and 6 there, substituting `alpine1` for `alpine2`. diff --git a/notary/getting_started.md b/notary/getting_started.md index ddf08f0d790..3ec28f51704 100644 --- a/notary/getting_started.md +++ b/notary/getting_started.md @@ -35,7 +35,7 @@ enable Notary to run in a multi-tenant fashion, you must use this format when interacting with Docker Hub through the Notary client. When specifying Docker image names for the Notary client, the GUN format is: -- For official images (identifiable by the "Official Repository" moniker), the +- For official images (identifiable by the "Official Image" moniker), the image name as displayed on Docker Hub, prefixed with `docker.io/library/`. For example, if you would normally type `docker pull ubuntu` you must enter `notary {cmd} docker.io/library/ubuntu`. diff --git a/reference.md b/reference.md index 09887390db2..262229b1a70 100644 --- a/reference.md +++ b/reference.md @@ -12,7 +12,6 @@ various APIs, CLIs, and file formats. |:--------------------------------------------------------------------|:----------------------------------------------------------------| | [Dockerfile](/engine/reference/builder/) | Defines the contents and startup behavior of a single container | | [Compose file](/compose/compose-file/) | Defines a multi-container application | -| [Docker Cloud Stack file](/docker-cloud/apps/stack-yaml-reference/) | Defines a multi-container application for Docker Cloud | ## Command-line interfaces (CLIs) @@ -29,7 +28,6 @@ various APIs, CLIs, and file formats. | API | Description | |:------------------------------------------------------|:---------------------------------------------------------------------------------------| -| [Cloud API](/apidocs/docker-cloud/) | Enables programmatic management of your Docker application running on a cloud provider | | [Engine API](/engine/api/) | The main API for Docker, provides programmatic access to a [daemon](/glossary/#daemon) | | [Registry API](/registry/spec/api/) | Facilitates distribution of images to the engine | | [DTR API](/reference/dtr/{{ site.dtr_version }}/api/) | Provides programmatic access to a Docker Trusted Registry deployment | diff --git a/reference/dtr/2.5/cli/backup.md b/reference/dtr/2.5/cli/backup.md deleted file mode 100644 index 12fb4822aa2..00000000000 --- a/reference/dtr/2.5/cli/backup.md +++ /dev/null @@ -1,54 +0,0 @@ ---- -title: docker/dtr backup -description: Create a backup of DTR -keywords: dtr, cli, backup ---- - -Create a backup of DTR - -## Usage - -```bash -docker run -i --rm docker/dtr \ - backup [command options] > backup.tar -``` - -## Description - - -This command creates a tar file with the contents of the volumes used by -DTR, and prints it. You can then use the 'restore' command to restore the data -from an existing backup. - -Note: - - * This command only creates backups of configurations, and image metadata. - It doesn't backup users and organizations. Users and organizations can be - backed up when performing a UCP backup. - - It also doesn't backup the Docker images stored in your registry. - You should implement a separate backup policy for the Docker images stored - in your registry, taking in consideration whether your DTR installation is - configured to store images on the filesystem or using a cloud provider. - - * This backup contains sensitive information and should be - stored securely. - - * Using the '--offline-backup' flag will temporarily shut down the rethinkdb container. - You should take the replica out of your load balancer to avoid downtime. - - -## Options - -| Option | Environment Variable | Description | -|:------------------------------|:--------------------------|:-------------------------------------------------------------------------------------| -| `--debug` | $DEBUG | Enable debug mode for additional logs. | -| `--existing-replica-id` | $DTR_REPLICA_ID | The ID of an existing DTR replica.To add, remove or modify DTR, you must connect to an existing healthy replica's database.. | -| `--help-extended` | $DTR_EXTENDED_HELP | Display extended help text for a given command. | -| `--offline-backup` | $DTR_OFFLINE_BACKUP | This flag takes rethinkdb down during backup and takes a more reliable backup..If you back up DTR with this flag, rethinkdb will go down during backup. However, it will be guaranteed to be consistent. With online backups there's no guarantee of consistency.. | -| `--ucp-ca` | $UCP_CA | Use a PEM-encoded TLS CA certificate for UCP.Download the UCP TLS CA certificate from https:///ca, and use --ucp-ca "$(cat ca.pem)". | -| `--ucp-insecure-tls` | $UCP_INSECURE_TLS | Disable TLS verification for UCP.The installation uses TLS but always trusts the TLS certificate used by UCP, which can lead to man-in-the-middle attacks. For production deployments, use --ucp-ca "$(cat ca.pem)" instead. | -| `--ucp-password` | $UCP_PASSWORD | The UCP administrator password. | -| `--ucp-url` | $UCP_URL | The UCP URL including domain and port. | -| `--ucp-username` | $UCP_USERNAME | The UCP administrator username. | - diff --git a/reference/dtr/2.5/cli/emergency-repair.md b/reference/dtr/2.5/cli/emergency-repair.md deleted file mode 100644 index 7d8b299df3a..00000000000 --- a/reference/dtr/2.5/cli/emergency-repair.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -title: docker/dtr emergency-repair -description: Recover DTR from loss of quorum -keywords: dtr, cli, emergency-repair ---- - -Recover DTR from loss of quorum - -## Usage - -```bash -docker run -it --rm docker/dtr \ - emergency-repair [command options] -``` - -## Description - - -This command repairs a DTR cluster that has lost quorum by reverting your -cluster to a single DTR replica. - -There are three steps you can take to recover an unhealthy DTR cluster: - -1. If the majority of replicas are healthy, remove the unhealthy nodes from - the cluster, and join new ones for high availability. -2. If the majority of replicas are unhealthy, use this command to revert your - cluster to a single DTR replica. -3. If you can't repair your cluster to a single replica, you'll have to - restore from an existing backup, using the 'restore' command. - -When you run this command, a DTR replica of your choice is repaired and -turned into the only replica in the whole DTR cluster. -The containers for all the other DTR replicas are stopped and removed. When -using the 'force' option, the volumes for these replicas are also deleted. - -After repairing the cluster, you should use the 'join' command to add more -DTR replicas for high availability. - - -## Options - -| Option | Environment Variable | Description | -|:------------------------------|:--------------------------|:-------------------------------------------------------------------------------------| -| `--debug` | $DEBUG | Enable debug mode for additional logs. | -| `--existing-replica-id` | $DTR_REPLICA_ID | The ID of an existing DTR replica.To add, remove or modify DTR, you must connect to an existing healthy replica's database.. | -| `--help-extended` | $DTR_EXTENDED_HELP | Display extended help text for a given command. | -| `--overlay-subnet` | $DTR_OVERLAY_SUBNET | The subnet used by the dtr-ol overlay network. Example: 10.0.0.0/24.For high-availalibity, DTR creates an overlay network between UCP nodes. This flag allows you to choose the subnet for that network. Make sure the subnet you choose is not used on any machine where DTR replicas are deployed. | -| `--prune` | $PRUNE | Delete the data volumes of all unhealthy replicas.With this option, the volume of the DTR replica you're restoring is preserved but the volumes for all other replicas are deleted. This has the same result as completely uninstalling DTR from those replicas.. | -| `--ucp-ca` | $UCP_CA | Use a PEM-encoded TLS CA certificate for UCP.Download the UCP TLS CA certificate from https:///ca, and use --ucp-ca "$(cat ca.pem)". | -| `--ucp-insecure-tls` | $UCP_INSECURE_TLS | Disable TLS verification for UCP.The installation uses TLS but always trusts the TLS certificate used by UCP, which can lead to man-in-the-middle attacks. For production deployments, use --ucp-ca "$(cat ca.pem)" instead. | -| `--ucp-password` | $UCP_PASSWORD | The UCP administrator password. | -| `--ucp-url` | $UCP_URL | The UCP URL including domain and port. | -| `--ucp-username` | $UCP_USERNAME | The UCP administrator username. | -| `--y, yes` | $YES | Answer yes to any prompts. | - diff --git a/reference/dtr/2.5/cli/index.md b/reference/dtr/2.5/cli/index.md deleted file mode 100644 index f13629c2a09..00000000000 --- a/reference/dtr/2.5/cli/index.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: docker/dtr overview -description: Learn about the commands available in the docker/dtr image. -keywords: dtr, install, uninstall, configure ---- - -This tool has commands to install, configure, and backup Docker -Trusted Registry (DTR). It also allows uninstalling DTR. -By default the tool runs in interactive mode. It prompts you for -the values needed. - -Additional help is available for each command with the '--help' option. - - -## Usage - -```bash -docker run -it --rm docker/dtr \ - command [command options] -``` - - -## Commands - -| Option | Description | -|:-------------------------------------|:------------------------------------------------| -| [install](install) | Install Docker Trusted Registry | -| [join](join) | Add a new replica to an existing DTR cluster | -| [reconfigure](reconfigure) | Change DTR configurations | -| [remove](remove) | Remove a DTR replica from a cluster | -| [destroy](destroy) | Destroy a DTR replica's data | -| [restore](restore) | Install and restore DTR from an existing backup | -| [backup](backup) | Create a backup of DTR | -| [upgrade](upgrade) | Upgrade DTR 2.4.x cluster to this version | -| [images](images) | List all the images necessary to install DTR | -| [emergency-repair](emergency-repair) | Recover DTR from loss of quorum | diff --git a/reference/dtr/2.5/cli/install.md b/reference/dtr/2.5/cli/install.md deleted file mode 100644 index ad31b76f8ce..00000000000 --- a/reference/dtr/2.5/cli/install.md +++ /dev/null @@ -1,64 +0,0 @@ ---- -title: docker/dtr install -description: Install Docker Trusted Registry -keywords: dtr, cli, install ---- - -Install Docker Trusted Registry - -## Usage - -```bash -docker run -it --rm docker/dtr \ - install [command options] -``` - -## Description - - -This command installs Docker Trusted Registry (DTR) on a node managed by -Docker Universal Control Plane (UCP). - -After installing DTR, you can join additional DTR replicas using the 'join' -command. - -Example usage: - -$ docker run -it --rm docker/dtr:2.5.0 install \ - --ucp-node \ - --ucp-insecure-tls - -Note: Use --ucp-ca "$(cat ca.pem)" instead of --ucp-insecure-tls for a production deployment. - -## Options - -| Option | Environment Variable | Description | -|:------------------------------|:--------------------------|:-------------------------------------------------------------------------------------| -| `--debug` | $DEBUG | Enable debug mode for additional logs. | -| `--dtr-ca` | $DTR_CA | Use a PEM-encoded TLS CA certificate for DTR.By default DTR generates a self-signed TLS certificate during deployment. You can use your own TLS CA certificate with --dtr-ca "$(cat ca.pem)". | -| `--dtr-cert` | $DTR_CERT | Use a PEM-encoded TLS certificate for DTR.By default DTR generates a self-signed TLS certificate during deployment. You can use your own TLS certificate with --dtr-cert "$(cat ca.pem)". | -| `--dtr-external-url` | $DTR_EXTERNAL_URL | URL of the host or load balancer clients use to reach DTR.When you use this flag, users are redirected to UCP for logging in. Once authenticated they are redirected to the url you specify in this flag. If you don't use this flag, DTR is deployed without single sign-on with UCP. Users and teams are shared but users login separately into the two applications. You can enable and disable single sign-on in the DTR settings. Format https://host[:port], where port is the value you used with --replica-https-port. | -| `--dtr-key` | $DTR_KEY | Use a PEM-encoded TLS private key for DTR.By default DTR generates a self-signed TLS certificate during deployment. You can use your own TLS private key with --dtr-key "$(cat ca.pem)". | -| `--dtr-storage-volume` | $DTR_STORAGE_VOLUME | Customize the volume to store Docker images.By default DTR creates a volume to store the Docker images in the local filesystem of the node where DTR is running, without high-availability. Use this flag to specify a full path or volume name for DTR to store images. For high-availability, make sure all DTR replicas can read and write data on this volume. If you're using NFS, use --nfs-storage-url instead. | -| `--enable-pprof` | $DTR_PPROF | Enables pprof profiling of the server; use --enable-pprof=false to disable it.Once DTR is deployed with this flag, you can access the pprof endpoint for the api server at /debug/pprof, and the registry endpoint at /registry_debug_pprof/debug/pprof. | -| `--help-extended` | $DTR_EXTENDED_HELP | Display extended help text for a given command. | -| `--http-proxy` | $DTR_HTTP_PROXY | The HTTP proxy used for outgoing requests. | -| `--https-proxy` | $DTR_HTTPS_PROXY | The HTTPS proxy used for outgoing requests. | -| `--log-host` | $LOG_HOST | The syslog system to send logs to.The endpoint to send logs to. Use this flag if you set --log-protocol to tcp or udp. | -| `--log-level` | $LOG_LEVEL | Log level for all container logs when logging to syslog. Default: INFO.The supported log levels are debug, info, warn, error, or fatal.. | -| `--log-protocol` | $LOG_PROTOCOL | The protocol for sending logs. Default is internal.By default, DTR internal components log information using the logger specified in the Docker daemon in the node where the DTR replica is deployed. Use this option to send DTR logs to an external syslog system. The supported values are tcp, udp, and internal. Internal is the default option, stopping DTR from sending logs to an external system. Use this flag with --log-host. | -| `--nfs-storage-url` | $NFS_STORAGE_URL | NFS to store Docker images. Format nfs:///.By default DTR creates a volume to store the Docker images in the local filesystem of the node where DTR is running, without high-availability. Use this flag to specify an NFS mount for DTR to store images, using the format nfs:///. To use this flag, you need to install an NFS client library like nfs-common in the node where you're deploying DTR. You can test this by running showmount -e . When you join new replicas, they will start using NFS so you don't need to use this flag. To reconfigure DTR to stop using NFS, leave this option empty. | -| `--no-proxy` | $DTR_NO_PROXY | List of domains the proxy should not be used for.When using --http-proxy you can use this flag to specify a list of domains that you don't want to route through the proxy. Format acme.com[, acme.org]. | -| `--overlay-subnet` | $DTR_OVERLAY_SUBNET | The subnet used by the dtr-ol overlay network. Example: 10.0.0.0/24.For high-availalibity, DTR creates an overlay network between UCP nodes. This flag allows you to choose the subnet for that network. Make sure the subnet you choose is not used on any machine where DTR replicas are deployed. | -| `--replica-http-port` | $REPLICA_HTTP_PORT | The public HTTP port for the DTR replica. Default is 80.This allows you to customize the HTTP port where users can reach DTR. Once users access the HTTP port, they are redirected to use an HTTPS connection, using the port specified with --replica-https-port. This port can also be used for unencrypted health checks. | -| `--replica-https-port` | $REPLICA_HTTPS_PORT | The public HTTPS port for the DTR replica. Default is 443.This allows you to customize the HTTPS port where users can reach DTR. Each replica can use a different port. | -| `--replica-id` | $DTR_INSTALL_REPLICA_ID | Assign a 12-character hexadecimal ID to the DTR replica. Random by default. | -| `--replica-rethinkdb-cache-mb` | $RETHINKDB_CACHE_MB | The maximum amount of space for rethinkdb in-memory cache use for the given replica in MB. - Default is auto. Auto is (available_memory - 1024) / 2.This config allows changing the rethinkdb cache usage per replica. You need to run it once per replica to change each one.. | -| `--ucp-ca` | $UCP_CA | Use a PEM-encoded TLS CA certificate for UCP.Download the UCP TLS CA certificate from https:///ca, and use --ucp-ca "$(cat ca.pem)". | -| `--ucp-insecure-tls` | $UCP_INSECURE_TLS | Disable TLS verification for UCP.The installation uses TLS but always trusts the TLS certificate used by UCP, which can lead to man-in-the-middle attacks. For production deployments, use --ucp-ca "$(cat ca.pem)" instead. | -| `--ucp-node` | $UCP_NODE | The hostname of the UCP node to deploy DTR. Random by default.You can find the hostnames of the nodes in the cluster in the UCP web UI, or by running 'docker node ls' on a UCP manager node.. | -| `--ucp-password` | $UCP_PASSWORD | The UCP administrator password. | -| `--ucp-url` | $UCP_URL | The UCP URL including domain and port. | -| `--ucp-username` | $UCP_USERNAME | The UCP administrator username. | - diff --git a/reference/dtr/2.5/cli/join.md b/reference/dtr/2.5/cli/join.md deleted file mode 100644 index 5ca0ea55cb3..00000000000 --- a/reference/dtr/2.5/cli/join.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: docker/dtr join -description: Add a new replica to an existing DTR cluster -keywords: dtr, cli, join ---- - -Add a new replica to an existing DTR cluster - - - -## Description - - -This command creates a replica of an existing DTR on a node managed by -Docker Universal Control Plane (UCP). - -For setting DTR for high-availability, create 3, 5, or 7 replicas of DTR. - - -## Options - -| Option | Environment Variable | Description | -|:------------------------------|:--------------------------|:-------------------------------------------------------------------------------------| -| `--debug` | $DEBUG | Enable debug mode for additional logs. | -| `--existing-replica-id` | $DTR_REPLICA_ID | The ID of an existing DTR replica.To add, remove or modify DTR, you must connect to an existing healthy replica's database.. | -| `--help-extended` | $DTR_EXTENDED_HELP | Display extended help text for a given command. | -| `--replica-http-port` | $REPLICA_HTTP_PORT | The public HTTP port for the DTR replica. Default is 80.This allows you to customize the HTTP port where users can reach DTR. Once users access the HTTP port, they are redirected to use an HTTPS connection, using the port specified with --replica-https-port. This port can also be used for unencrypted health checks. | -| `--replica-https-port` | $REPLICA_HTTPS_PORT | The public HTTPS port for the DTR replica. Default is 443.This allows you to customize the HTTPS port where users can reach DTR. Each replica can use a different port. | -| `--replica-id` | $DTR_INSTALL_REPLICA_ID | Assign a 12-character hexadecimal ID to the DTR replica. Random by default. | -| `--replica-rethinkdb-cache-mb` | $RETHINKDB_CACHE_MB | The maximum amount of space for rethinkdb in-memory cache use for the given replica in MB. - Default is auto. Auto is (available_memory - 1024) / 2.This config allows changing the rethinkdb cache usage per replica. You need to run it once per replica to change each one.. | -| `--skip-network-test` | $DTR_SKIP_NETWORK_TEST | Don't test if overlay networks are working correctly between UCP nodes.For high-availalibity, DTR creates an overlay network between UCP nodes and tests that it is working when joining replicas. Don't use this option for production deployments. | -| `--ucp-ca` | $UCP_CA | Use a PEM-encoded TLS CA certificate for UCP.Download the UCP TLS CA certificate from https:///ca, and use --ucp-ca "$(cat ca.pem)". | -| `--ucp-insecure-tls` | $UCP_INSECURE_TLS | Disable TLS verification for UCP.The installation uses TLS but always trusts the TLS certificate used by UCP, which can lead to man-in-the-middle attacks. For production deployments, use --ucp-ca "$(cat ca.pem)" instead. | -| `--ucp-node` | $UCP_NODE | The hostname of the UCP node to deploy DTR. Random by default.You can find the hostnames of the nodes in the cluster in the UCP web UI, or by running 'docker node ls' on a UCP manager node.. | -| `--ucp-password` | $UCP_PASSWORD | The UCP administrator password. | -| `--ucp-url` | $UCP_URL | The UCP URL including domain and port. | -| `--ucp-username` | $UCP_USERNAME | The UCP administrator username. | -| `--unsafe-join` | $DTR_UNSAFE_JOIN | Join a new replica even if the cluster is unhealthy.Joining replicas to an unhealthy DTR cluster leads to split-brain scenarios, and data loss. Don't use this option for production deployments. | - diff --git a/reference/dtr/2.5/cli/reconfigure.md b/reference/dtr/2.5/cli/reconfigure.md deleted file mode 100644 index e017a5a82f7..00000000000 --- a/reference/dtr/2.5/cli/reconfigure.md +++ /dev/null @@ -1,54 +0,0 @@ ---- -title: docker/dtr reconfigure -description: Change DTR configurations -keywords: dtr, cli, reconfigure ---- - -Change DTR configurations - -## Usage - -```bash -docker run -it --rm docker/dtr \ - reconfigure [command options] -``` - -## Description - - -This command changes DTR configuration settings. - -DTR is restarted for the new configurations to take effect. To have no down -time, configure your DTR for high-availability. - - -## Options - -| Option | Environment Variable | Description | -|:------------------------------|:--------------------------|:-------------------------------------------------------------------------------------| -| `--debug` | $DEBUG | Enable debug mode for additional logs. | -| `--dtr-ca` | $DTR_CA | Use a PEM-encoded TLS CA certificate for DTR.By default DTR generates a self-signed TLS certificate during deployment. You can use your own TLS CA certificate with --dtr-ca "$(cat ca.pem)". | -| `--dtr-cert` | $DTR_CERT | Use a PEM-encoded TLS certificate for DTR.By default DTR generates a self-signed TLS certificate during deployment. You can use your own TLS certificate with --dtr-cert "$(cat ca.pem)". | -| `--dtr-external-url` | $DTR_EXTERNAL_URL | URL of the host or load balancer clients use to reach DTR.When you use this flag, users are redirected to UCP for logging in. Once authenticated they are redirected to the url you specify in this flag. If you don't use this flag, DTR is deployed without single sign-on with UCP. Users and teams are shared but users login separately into the two applications. You can enable and disable single sign-on in the DTR settings. Format https://host[:port], where port is the value you used with --replica-https-port. | -| `--dtr-key` | $DTR_KEY | Use a PEM-encoded TLS private key for DTR.By default DTR generates a self-signed TLS certificate during deployment. You can use your own TLS private key with --dtr-key "$(cat ca.pem)". | -| `--dtr-storage-volume` | $DTR_STORAGE_VOLUME | Customize the volume to store Docker images.By default DTR creates a volume to store the Docker images in the local filesystem of the node where DTR is running, without high-availability. Use this flag to specify a full path or volume name for DTR to store images. For high-availability, make sure all DTR replicas can read and write data on this volume. If you're using NFS, use --nfs-storage-url instead. | -| `--enable-pprof` | $DTR_PPROF | Enables pprof profiling of the server; use --enable-pprof=false to disable it.Once DTR is deployed with this flag, you can access the pprof endpoint for the api server at /debug/pprof, and the registry endpoint at /registry_debug_pprof/debug/pprof. | -| `--existing-replica-id` | $DTR_REPLICA_ID | The ID of an existing DTR replica.To add, remove or modify DTR, you must connect to an existing healthy replica's database.. | -| `--help-extended` | $DTR_EXTENDED_HELP | Display extended help text for a given command. | -| `--http-proxy` | $DTR_HTTP_PROXY | The HTTP proxy used for outgoing requests. | -| `--https-proxy` | $DTR_HTTPS_PROXY | The HTTPS proxy used for outgoing requests. | -| `--log-host` | $LOG_HOST | The syslog system to send logs to.The endpoint to send logs to. Use this flag if you set --log-protocol to tcp or udp. | -| `--log-level` | $LOG_LEVEL | Log level for all container logs when logging to syslog. Default: INFO.The supported log levels are debug, info, warn, error, or fatal.. | -| `--log-protocol` | $LOG_PROTOCOL | The protocol for sending logs. Default is internal.By default, DTR internal components log information using the logger specified in the Docker daemon in the node where the DTR replica is deployed. Use this option to send DTR logs to an external syslog system. The supported values are tcp, udp, and internal. Internal is the default option, stopping DTR from sending logs to an external system. Use this flag with --log-host. | -| `--nfs-storage-url` | $NFS_STORAGE_URL | NFS to store Docker images. Format nfs:///.By default DTR creates a volume to store the Docker images in the local filesystem of the node where DTR is running, without high-availability. Use this flag to specify an NFS mount for DTR to store images, using the format nfs:///. To use this flag, you need to install an NFS client library like nfs-common in the node where you're deploying DTR. You can test this by running showmount -e . When you join new replicas, they will start using NFS so you don't need to use this flag. To reconfigure DTR to stop using NFS, leave this option empty. | -| `--no-proxy` | $DTR_NO_PROXY | List of domains the proxy should not be used for.When using --http-proxy you can use this flag to specify a list of domains that you don't want to route through the proxy. Format acme.com[, acme.org]. | -| `--replica-http-port` | $REPLICA_HTTP_PORT | The public HTTP port for the DTR replica. Default is 80.This allows you to customize the HTTP port where users can reach DTR. Once users access the HTTP port, they are redirected to use an HTTPS connection, using the port specified with --replica-https-port. This port can also be used for unencrypted health checks. | -| `--replica-https-port` | $REPLICA_HTTPS_PORT | The public HTTPS port for the DTR replica. Default is 443.This allows you to customize the HTTPS port where users can reach DTR. Each replica can use a different port. | -| `--replica-rethinkdb-cache-mb` | $RETHINKDB_CACHE_MB | The maximum amount of space for rethinkdb in-memory cache use for the given replica in MB. - Default is auto. Auto is (available_memory - 1024) / 2.This config allows changing the rethinkdb cache usage per replica. You need to run it once per replica to change each one.. | -| `--ucp-ca` | $UCP_CA | Use a PEM-encoded TLS CA certificate for UCP.Download the UCP TLS CA certificate from https:///ca, and use --ucp-ca "$(cat ca.pem)". | -| `--ucp-insecure-tls` | $UCP_INSECURE_TLS | Disable TLS verification for UCP.The installation uses TLS but always trusts the TLS certificate used by UCP, which can lead to man-in-the-middle attacks. For production deployments, use --ucp-ca "$(cat ca.pem)" instead. | -| `--ucp-password` | $UCP_PASSWORD | The UCP administrator password. | -| `--ucp-url` | $UCP_URL | The UCP URL including domain and port. | -| `--ucp-username` | $UCP_USERNAME | The UCP administrator username. | - diff --git a/reference/dtr/2.5/cli/remove.md b/reference/dtr/2.5/cli/remove.md deleted file mode 100644 index 929d5df0194..00000000000 --- a/reference/dtr/2.5/cli/remove.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: docker/dtr remove -description: Remove a DTR replica from a cluster -keywords: dtr, cli, remove ---- - -Remove a DTR replica from a cluster - -## Usage - -```bash -docker run -it --rm docker/dtr \ - remove [command options] -``` - -## Description - - -This command gracefully scales down your DTR cluster by removing exactly -one replica. All other replicas must be healthy and will remain healthy after -this operation. - - -## Options - -| Option | Environment Variable | Description | -|:------------------------------|:--------------------------|:-------------------------------------------------------------------------------------| -| `--debug` | $DEBUG | Enable debug mode for additional logs. | -| `--existing-replica-id` | $DTR_REPLICA_ID | The ID of an existing DTR replica.To add, remove or modify DTR, you must connect to an existing healthy replica's database.. | -| `--help-extended` | $DTR_EXTENDED_HELP | Display extended help text for a given command. | -| `--replica-id` | $DTR_REMOVE_REPLICA_ID | DEPRECATED Alias for --replica-ids. | -| `--replica-ids` | $DTR_REMOVE_REPLICA_IDS | A comma separated list of IDs of replicas to remove from the cluster. | -| `--ucp-ca` | $UCP_CA | Use a PEM-encoded TLS CA certificate for UCP.Download the UCP TLS CA certificate from https:///ca, and use --ucp-ca "$(cat ca.pem)". | -| `--ucp-insecure-tls` | $UCP_INSECURE_TLS | Disable TLS verification for UCP.The installation uses TLS but always trusts the TLS certificate used by UCP, which can lead to man-in-the-middle attacks. For production deployments, use --ucp-ca "$(cat ca.pem)" instead. | -| `--ucp-password` | $UCP_PASSWORD | The UCP administrator password. | -| `--ucp-url` | $UCP_URL | The UCP URL including domain and port. | -| `--ucp-username` | $UCP_USERNAME | The UCP administrator username. | - diff --git a/reference/dtr/2.5/cli/restore.md b/reference/dtr/2.5/cli/restore.md deleted file mode 100644 index cdf8627ea1a..00000000000 --- a/reference/dtr/2.5/cli/restore.md +++ /dev/null @@ -1,70 +0,0 @@ ---- -title: docker/dtr restore -description: Install and restore DTR from an existing backup -keywords: dtr, cli, restore ---- - -Install and restore DTR from an existing backup - -## Usage - -```bash -docker run -i --rm docker/dtr \ - restore [command options] < backup.tar -``` - -## Description - - -This command performs a fresh installation of DTR, and reconfigures it -with configuration data from a tar file generated by the 'backup' command. - -There are three steps you can take to recover an unhealthy DTR cluster: - -1. If the majority of replicas are healthy, remove the unhealthy nodes from - the cluster, and join new ones for high availability. -2. If the majority of replicas are unhealthy, use this command to revert your - cluster to a single DTR replica. -3. If you can't repair your cluster to a single replica, you'll have to - restore from an existing backup, using the 'restore' command. - -This command does not restore Docker images. You should implement a separate -restore procedure for the Docker images stored in your registry, taking in -consideration whether your DTR installation is configured to store images on -the local filesystem or using a cloud provider. - -After restoring the cluster, you should use the 'join' command to add more -DTR replicas for high availability. - - -## Options - -| Option | Environment Variable | Description | -|:------------------------------|:--------------------------|:-------------------------------------------------------------------------------------| -| `--debug` | $DEBUG | Enable debug mode for additional logs. | -| `--dtr-ca` | $DTR_CA | Use a PEM-encoded TLS CA certificate for DTR.By default DTR generates a self-signed TLS certificate during deployment. You can use your own TLS CA certificate with --dtr-ca "$(cat ca.pem)". | -| `--dtr-cert` | $DTR_CERT | Use a PEM-encoded TLS certificate for DTR.By default DTR generates a self-signed TLS certificate during deployment. You can use your own TLS certificate with --dtr-cert "$(cat ca.pem)". | -| `--dtr-external-url` | $DTR_EXTERNAL_URL | URL of the host or load balancer clients use to reach DTR.When you use this flag, users are redirected to UCP for logging in. Once authenticated they are redirected to the url you specify in this flag. If you don't use this flag, DTR is deployed without single sign-on with UCP. Users and teams are shared but users login separately into the two applications. You can enable and disable single sign-on in the DTR settings. Format https://host[:port], where port is the value you used with --replica-https-port. | -| `--dtr-key` | $DTR_KEY | Use a PEM-encoded TLS private key for DTR.By default DTR generates a self-signed TLS certificate during deployment. You can use your own TLS private key with --dtr-key "$(cat ca.pem)". | -| `--dtr-storage-volume` | $DTR_STORAGE_VOLUME | Customize the volume to store Docker images.By default DTR creates a volume to store the Docker images in the local filesystem of the node where DTR is running, without high-availability. Use this flag to specify a full path or volume name for DTR to store images. For high-availability, make sure all DTR replicas can read and write data on this volume. If you're using NFS, use --nfs-storage-url instead. | -| `--enable-pprof` | $DTR_PPROF | Enables pprof profiling of the server; use --enable-pprof=false to disable it.Once DTR is deployed with this flag, you can access the pprof endpoint for the api server at /debug/pprof, and the registry endpoint at /registry_debug_pprof/debug/pprof. | -| `--help-extended` | $DTR_EXTENDED_HELP | Display extended help text for a given command. | -| `--http-proxy` | $DTR_HTTP_PROXY | The HTTP proxy used for outgoing requests. | -| `--https-proxy` | $DTR_HTTPS_PROXY | The HTTPS proxy used for outgoing requests. | -| `--log-host` | $LOG_HOST | The syslog system to send logs to.The endpoint to send logs to. Use this flag if you set --log-protocol to tcp or udp. | -| `--log-level` | $LOG_LEVEL | Log level for all container logs when logging to syslog. Default: INFO.The supported log levels are debug, info, warn, error, or fatal.. | -| `--log-protocol` | $LOG_PROTOCOL | The protocol for sending logs. Default is internal.By default, DTR internal components log information using the logger specified in the Docker daemon in the node where the DTR replica is deployed. Use this option to send DTR logs to an external syslog system. The supported values are tcp, udp, and internal. Internal is the default option, stopping DTR from sending logs to an external system. Use this flag with --log-host. | -| `--nfs-storage-url` | $NFS_STORAGE_URL | NFS to store Docker images. Format nfs:///.By default DTR creates a volume to store the Docker images in the local filesystem of the node where DTR is running, without high-availability. Use this flag to specify an NFS mount for DTR to store images, using the format nfs:///. To use this flag, you need to install an NFS client library like nfs-common in the node where you're deploying DTR. You can test this by running showmount -e . When you join new replicas, they will start using NFS so you don't need to use this flag. To reconfigure DTR to stop using NFS, leave this option empty. | -| `--no-proxy` | $DTR_NO_PROXY | List of domains the proxy should not be used for.When using --http-proxy you can use this flag to specify a list of domains that you don't want to route through the proxy. Format acme.com[, acme.org]. | -| `--replica-http-port` | $REPLICA_HTTP_PORT | The public HTTP port for the DTR replica. Default is 80.This allows you to customize the HTTP port where users can reach DTR. Once users access the HTTP port, they are redirected to use an HTTPS connection, using the port specified with --replica-https-port. This port can also be used for unencrypted health checks. | -| `--replica-https-port` | $REPLICA_HTTPS_PORT | The public HTTPS port for the DTR replica. Default is 443.This allows you to customize the HTTPS port where users can reach DTR. Each replica can use a different port. | -| `--replica-id` | $DTR_INSTALL_REPLICA_ID | Assign a 12-character hexadecimal ID to the DTR replica. Random by default. | -| `--replica-rethinkdb-cache-mb` | $RETHINKDB_CACHE_MB | The maximum amount of space for rethinkdb in-memory cache use for the given replica in MB. - Default is auto. Auto is (available_memory - 1024) / 2.This config allows changing the rethinkdb cache usage per replica. You need to run it once per replica to change each one.. | -| `--ucp-ca` | $UCP_CA | Use a PEM-encoded TLS CA certificate for UCP.Download the UCP TLS CA certificate from https:///ca, and use --ucp-ca "$(cat ca.pem)". | -| `--ucp-insecure-tls` | $UCP_INSECURE_TLS | Disable TLS verification for UCP.The installation uses TLS but always trusts the TLS certificate used by UCP, which can lead to man-in-the-middle attacks. For production deployments, use --ucp-ca "$(cat ca.pem)" instead. | -| `--ucp-node` | $UCP_NODE | The hostname of the UCP node to deploy DTR. Random by default.You can find the hostnames of the nodes in the cluster in the UCP web UI, or by running 'docker node ls' on a UCP manager node.. | -| `--ucp-password` | $UCP_PASSWORD | The UCP administrator password. | -| `--ucp-url` | $UCP_URL | The UCP URL including domain and port. | -| `--ucp-username` | $UCP_USERNAME | The UCP administrator username. | - diff --git a/reference/dtr/2.5/cli/upgrade.md b/reference/dtr/2.5/cli/upgrade.md deleted file mode 100644 index 274b63ef15a..00000000000 --- a/reference/dtr/2.5/cli/upgrade.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: docker/dtr upgrade -description: Upgrade DTR 2.4.x cluster to this version -keywords: dtr, cli, upgrade ---- - -Upgrade DTR 2.4.x cluster to this version - -## Usage - -```bash -docker run -it --rm docker/dtr \ - upgrade [command options] -``` - -## Description - - -This command upgrades DTR 2.4.x to the current version of this image. - - -## Options - -| Option | Environment Variable | Description | -|:------------------------------|:--------------------------|:-------------------------------------------------------------------------------------| -| `--debug` | $DEBUG | Enable debug mode for additional logs. | -| `--existing-replica-id` | $DTR_REPLICA_ID | The ID of an existing DTR replica.To add, remove or modify DTR, you must connect to an existing healthy replica's database.. | -| `--help-extended` | $DTR_EXTENDED_HELP | Display extended help text for a given command. | -| `--ucp-ca` | $UCP_CA | Use a PEM-encoded TLS CA certificate for UCP.Download the UCP TLS CA certificate from https:///ca, and use --ucp-ca "$(cat ca.pem)". | -| `--ucp-insecure-tls` | $UCP_INSECURE_TLS | Disable TLS verification for UCP.The installation uses TLS but always trusts the TLS certificate used by UCP, which can lead to man-in-the-middle attacks. For production deployments, use --ucp-ca "$(cat ca.pem)" instead. | -| `--ucp-password` | $UCP_PASSWORD | The UCP administrator password. | -| `--ucp-url` | $UCP_URL | The UCP URL including domain and port. | -| `--ucp-username` | $UCP_USERNAME | The UCP administrator username. | - diff --git a/reference/dtr/2.6/api/index.html b/reference/dtr/2.6/api/index.html new file mode 100644 index 00000000000..91abd52d947 --- /dev/null +++ b/reference/dtr/2.6/api/index.html @@ -0,0 +1,16 @@ + + + + + Docker Trusted Registry API Documentation + + + + +
                + + + + + + diff --git a/reference/dtr/2.6/api/main.js b/reference/dtr/2.6/api/main.js new file mode 100644 index 00000000000..9e2c43c84fe --- /dev/null +++ b/reference/dtr/2.6/api/main.js @@ -0,0 +1,21 @@ +window.onload = function() { + + // Build a system + const ui = SwaggerUIBundle({ + spec: +{"swagger":"2.0","info":{"description":"Docker Trusted Registry has an experimental API that you can use to manage\nDTR repositories, permissions, and settings.\n\n**This API is experimental and subject to change, which could affect future\nbackwards compatibility.**\n\nYou can authenticate your requests by using an authentication token. In the\nDTR web UI, navigate to your user profile and choose **Access tokens** to\ncreate a new token. The authentication token issued will have the same\npermissions your user has.\n\nTo authenticate your requests, use HTTP basic authentication to pass the\nauthentication token to the DTR API. Here's an example:\n\n```\ncurl -sL -u {user}:{token} /api/v0/repositories\n```\n","title":"Docker Trusted Registry","version":"2.6.0"}, "paths":{"/api/v0/accounts/language":{"get":{"consumes":["application/json"],"produces":["application/json"],"tags":["accounts"],"summary":"Get the chosen language","operationId":"GetLanguage","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/responses.Language"}},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"default":{"description":"OK","schema":{"$ref":"#/definitions/responses.Language"}}}}},"/api/v0/accounts/{namespace}":{"delete":{"description":"\n\t*Authorization:* Client must be authenticated as a system admin.\n\t\t","consumes":["application/json"],"produces":["application/json"],"tags":["accounts"],"summary":"Removes a user or organization along with all repositories","operationId":"DeleteNamespace","parameters":[{"type":"string","description":"namespace/owner of repository","name":"namespace","in":"path","required":true}],"responses":{"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"403":{"description":"NOT_AUTHORIZED: The client is not authorized."},"404":{"description":"NO_SUCH_ACCOUNT: An account with the given name does not exist."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"}}}},"/api/v0/accounts/{namespace}/repositories":{"delete":{"description":"\n\t*Authorization:* Client must be authenticated as a system admin, organization admin or user in question\n\t\t","consumes":["application/json"],"produces":["application/json"],"tags":["accounts"],"summary":"Removes all of a user or organization's repositories","operationId":"DeleteNamespaceRepositories","deprecated":true,"parameters":[{"type":"string","description":"namespace/owner of repository","name":"namespace","in":"path","required":true}],"responses":{"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"403":{"description":"NOT_AUTHORIZED: The client is not authorized."},"404":{"description":"NO_SUCH_ACCOUNT: An account with the given name does not exist."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"}}}},"/api/v0/accounts/{namespace}/webhooks":{"get":{"description":"\n*Authorization:* Client must be authenticated as a user who has \"admin\" level access to the repository.\n\t\t","consumes":["application/json"],"produces":["application/json"],"tags":["accounts"],"summary":"List the webhook subscriptions for a namespace","operationId":"ListNamespaceWebhooks","parameters":[{"type":"string","description":"namespace/owner of repository","name":"namespace","in":"path","required":true}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/responses.Webhook"}}},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"403":{"description":"NOT_AUTHORIZED: The client is not authorized."},"404":{"description":"NO_SUCH_ACCOUNT: An account with the given name does not exist."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"default":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/responses.Webhook"}}}}}},"/api/v0/accounts/{orgname}/teams/{teamname}/repositoryAccess":{"get":{"description":"\n*Authorization:* Client must be authenticated as a user who owns the organization the team is in or be a member of that team.\n\t\t","consumes":["application/json"],"produces":["application/json"],"tags":["accounts"],"summary":"List repository access grants for a team","operationId":"ListTeamRepoAccess","parameters":[{"type":"string","description":"organization account name","name":"orgname","in":"path","required":true},{"type":"string","description":"team name","name":"teamname","in":"path","required":true},{"type":"string","description":"The ID of the first record on the page","name":"pageStart","in":"query"},{"type":"integer","default":10,"description":"Maximum number of results to return","name":"pageSize","in":"query"},{"type":"boolean","default":false,"description":"Whether to include the resource count in the response header","name":"count","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/responses.ListTeamRepoAccess"}},"400":{"description":"the team does not belong to the organization"},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"403":{"description":"NOT_AUTHORIZED: The client is not authorized."},"404":{"description":"NO_SUCH_TEAM: A team with the given name does not exist in the organization."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"default":{"description":"OK","schema":{"$ref":"#/definitions/responses.ListTeamRepoAccess"}}}}},"/api/v0/accounts/{username}/repositoryAccess/{namespace}/{reponame}":{"get":{"description":"\n\t*Authorization:* Client must be authenticated either as the user in question or be a system admin.\n\t\t","consumes":["application/json"],"produces":["application/json"],"tags":["accounts"],"summary":"Check a user's access to a repository","operationId":"GetUserRepoAccess","parameters":[{"type":"string","description":"user account name","name":"username","in":"path","required":true},{"type":"string","description":"namespace/owner of repository","name":"namespace","in":"path","required":true},{"type":"string","description":"name of repository","name":"reponame","in":"path","required":true}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/responses.RepoUserAccess"}},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"403":{"description":"NOT_AUTHORIZED: The client is not authorized."},"404":{"description":"NO_SUCH_REPOSITORY: A repository with the given name does not exist."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"default":{"description":"OK","schema":{"$ref":"#/definitions/responses.RepoUserAccess"}}}}},"/api/v0/accounts/{username}/settings":{"get":{"description":"\n*Authorization:* Client must be authenticated either as the user in question or be a system admin.\n\t\t","consumes":["application/json"],"produces":["application/json"],"tags":["accounts"],"summary":"Check a user's settings","operationId":"GetUserSettings","parameters":[{"type":"string","description":"user account name","name":"username","in":"path","required":true}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/responses.UserSettings"}},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"403":{"description":"NOT_AUTHORIZED: The client is not authorized."},"404":{"description":"NO_SUCH_USER: A user with the given name does not exist."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"default":{"description":"OK","schema":{"$ref":"#/definitions/responses.UserSettings"}}}},"patch":{"description":"\n*Authorization:* Client must be authenticated either as the user in question or be a system admin.\n\t\t","consumes":["application/json"],"produces":["application/json"],"tags":["accounts"],"summary":"Update a user's settings","operationId":"UpdateUserSettings","parameters":[{"type":"string","description":"user account name","name":"username","in":"path","required":true},{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/forms.UserSettings"}}],"responses":{"200":{"description":"Successfully updated user settings."},"400":{"description":"INVALID_USER_SETTINGS: The submitted user settings change request contains invalid values."},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"403":{"description":"NOT_AUTHORIZED: The client is not authorized."},"404":{"description":"NO_SUCH_USER: A user with the given name does not exist."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"default":{"description":"Successfully updated user settings."}}}},"/api/v0/action_configs":{"get":{"consumes":["application/json"],"produces":["application/json"],"tags":["action_configs"],"summary":"List all action configs","operationId":"ListActionConfigs","responses":{"200":{"description":"Success, list of action configs returned.","schema":{"$ref":"#/definitions/tmpresponses.ActionConfigs"}},"default":{"description":"Success, list of action configs returned.","schema":{"$ref":"#/definitions/tmpresponses.ActionConfigs"}}}},"post":{"consumes":["application/json"],"produces":["application/json"],"tags":["action_configs"],"summary":"Configure actions","operationId":"UpdateActionConfig","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tmpforms.ActionConfigCreate"}}],"responses":{"202":{"description":"Success.","schema":{"$ref":"#/definitions/tmpresponses.ActionConfig"}}}}},"/api/v0/action_configs/{action}":{"get":{"consumes":["application/json"],"produces":["application/json"],"tags":["action_configs"],"summary":"Get info about the actionConfig with the given action","operationId":"GetActionConfig","parameters":[{"type":"string","description":"name of action to fetch the config for","name":"action","in":"path","required":true}],"responses":{"200":{"description":"Success, action config info returned.","schema":{"$ref":"#/definitions/tmpresponses.ActionConfig"}},"default":{"description":"Success, action config info returned.","schema":{"$ref":"#/definitions/tmpresponses.ActionConfig"}}}},"delete":{"consumes":["application/json"],"produces":["application/json"],"tags":["action_configs"],"summary":"Delete the action config. The defaults will be used.","operationId":"DeleteActionConfig","parameters":[{"type":"string","description":"the name of the action to delete the config for","name":"action","in":"path","required":true}],"responses":{"204":{"description":"Success, action config has been deleted."}}}},"/api/v0/api_tokens":{"get":{"description":"listUserAPITokensHandler","consumes":["application/json"],"produces":["application/json"],"tags":["API_tokens"],"summary":"Get all API tokens associated with user. Get all tokens if no user is not specified","operationId":"GetAllAPITokensByUser","parameters":[{"type":"string","description":"The ID of the first record on the page","name":"pageStart","in":"query"},{"type":"integer","default":10,"description":"Maximum number of results to return","name":"pageSize","in":"query"},{"type":"boolean","default":false,"description":"Whether to include the resource count in the response header","name":"count","in":"query"},{"type":"string","description":"Limit the API token results to a specific user","name":"username","in":"query"}],"responses":{"200":{"description":"Successfully retrieved API tokens","schema":{"type":"array","items":{"$ref":"#/definitions/responses.APIToken"}}},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"403":{"description":"NOT_AUTHORIZED: The client is not authorized."},"404":{"description":"NO_SUCH_USER: A user with the given name does not exist."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"default":{"description":"Successfully retrieved API tokens","schema":{"type":"array","items":{"$ref":"#/definitions/responses.APIToken"}}}}},"post":{"description":"createAPITokenHandler","consumes":["application/json"],"produces":["application/json"],"tags":["API_tokens"],"summary":"Create a new API token","operationId":"CreateAnAPIToken","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/forms.CreateAPIToken"}},{"type":"string","description":"Limit the API token results to a specific user","name":"username","in":"query"}],"responses":{"200":{"description":"Successfully created API token","schema":{"$ref":"#/definitions/responses.NewAPIToken"}},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"403":{"description":"NOT_AUTHORIZED: The client is not authorized."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"default":{"description":"Successfully created API token","schema":{"$ref":"#/definitions/responses.NewAPIToken"}}}},"delete":{"description":"cleanupAPITokenHleanupHandler","consumes":["application/json"],"produces":["application/json"],"tags":["API_tokens"],"summary":"Mass deletion of API tokens from database based on user, time created, and/or generation method","operationId":"APITokenCleanup","parameters":[{"type":"string","description":"Limit the API token results to a specific user","name":"username","in":"query"},{"type":"string","description":"The date on which the token was last used","name":"usedbefore","in":"query"},{"type":"string","default":"auto","description":"The method by which the token was created","name":"generatedby","in":"query"}],"responses":{"200":{"description":"Successfully cleaned up API tokens"},"400":{"description":"INVALID_PARAMETERS: Unable to parse query parameters"},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"403":{"description":"NOT_AUTHORIZED: The client is not authorized."},"404":{"description":"NO_SUCH_USER: A user with the given name does not exist."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"default":{"description":"Successfully cleaned up API tokens"}}}},"/api/v0/api_tokens/{hashedtoken}":{"get":{"description":"getAPITokenHandler","consumes":["application/json"],"produces":["application/json"],"tags":["API_tokens"],"summary":"Get an API token's information based on it's token id","operationId":"GetAnAPIToken","parameters":[{"type":"string","description":"API token id","name":"hashedtoken","in":"path","required":true}],"responses":{"200":{"description":"Successfully retrieved API token","schema":{"$ref":"#/definitions/responses.APIToken"}},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"403":{"description":"NOT_AUTHORIZED: The client is not authorized."},"404":{"description":"NO_SUCH_API_TOKEN: An API token with the id name does not exist."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"default":{"description":"Successfully retrieved API token","schema":{"$ref":"#/definitions/responses.APIToken"}}}},"delete":{"description":"deleteAPITokenHandler","consumes":["application/json"],"produces":["application/json"],"tags":["API_tokens"],"summary":"Delete a specific API token","operationId":"DeleteAnAPIToken","parameters":[{"type":"string","description":"API token id","name":"hashedtoken","in":"path","required":true}],"responses":{"200":{"description":"Successfully deleted API token"},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"403":{"description":"NOT_AUTHORIZED: The client is not authorized."},"404":{"description":"NO_SUCH_API_TOKEN: An API token with the id name does not exist."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"default":{"description":"Successfully deleted API token"}}},"patch":{"description":"updateAPITokenHandler","consumes":["application/json"],"produces":["application/json"],"tags":["API_tokens"],"summary":"Update information about a specific API token","operationId":"UpdateAnAPIToken","parameters":[{"type":"string","description":"API token id","name":"hashedtoken","in":"path","required":true},{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/forms.UpdateAPIToken"}}],"responses":{"200":{"description":"Successfully updated API tokens","schema":{"$ref":"#/definitions/responses.APIToken"}},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"403":{"description":"NOT_AUTHORIZED: The client is not authorized."},"404":{"description":"NO_SUCH_API_TOKEN: An API token with the id name does not exist."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"default":{"description":"Successfully updated API tokens","schema":{"$ref":"#/definitions/responses.APIToken"}}}}},"/api/v0/content_caches":{"get":{"description":"\n*Authorization:* Client must be authenticated as any active user in the system.\n\t\t","consumes":["application/json"],"produces":["application/json"],"tags":["content_caches"],"summary":"List all content caches","operationId":"ListContentCaches","responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/responses.ContentCache"}}},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"403":{"description":"NOT_AUTHORIZED: The client is not authorized."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"default":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/responses.ContentCache"}}}}},"post":{"description":"\n*Authorization:* Client must be authenticated an admin.\n\t\t","consumes":["application/json"],"produces":["application/json"],"tags":["content_caches"],"summary":"Create content cache","operationId":"CreateContentCache","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/forms.CreateContentCache"}}],"responses":{"201":{"description":"success","schema":{"$ref":"#/definitions/responses.ContentCache"}},"400":{"description":"invalid content cache details"},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"403":{"description":"NOT_AUTHORIZED: The client is not authorized."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"}}}},"/api/v0/content_caches/{contentcacheuuid}":{"get":{"description":"\n*Authorization:* Client must be authenticated as any active user in the system.\n\t\t","consumes":["application/json"],"produces":["application/json"],"tags":["content_caches"],"summary":"View details of a content cache","operationId":"GetContentCache","parameters":[{"type":"string","description":"uuid of content cache","name":"contentcacheuuid","in":"path","required":true}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/responses.ContentCache"}},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"403":{"description":"NOT_AUTHORIZED: The client is not authorized."},"404":{"description":"NO_SUCH_CONTENT_CACHE: A content cache with the given uuid does not exist."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"default":{"description":"OK","schema":{"$ref":"#/definitions/responses.ContentCache"}}}},"delete":{"description":"\n*Authorization:* Client must be authenticated an admin.\n\t\t","consumes":["application/json"],"produces":["application/json"],"tags":["content_caches"],"summary":"Remove a content cache","operationId":"DeleteContentCache","parameters":[{"type":"string","description":"uuid of content cache","name":"contentcacheuuid","in":"path","required":true}],"responses":{"204":{"description":"success or content cache does not exist"},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"403":{"description":"NOT_AUTHORIZED: The client is not authorized."},"404":{"description":"NO_SUCH_CONTENT_CACHE: A content cache with the given uuid does not exist."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"}}}},"/api/v0/crons":{"get":{"consumes":["application/json"],"produces":["application/json"],"tags":["crons"],"summary":"List all crons","operationId":"ListCrons","responses":{"200":{"description":"Success, list of crons returned.","schema":{"$ref":"#/definitions/tmpresponses.Crons"}},"default":{"description":"Success, list of crons returned.","schema":{"$ref":"#/definitions/tmpresponses.Crons"}}}},"post":{"consumes":["application/json"],"produces":["application/json"],"tags":["crons"],"summary":"Create / update a periodic task","operationId":"UpdateCron","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tmpforms.CronCreate"}}],"responses":{"202":{"description":"Success.","schema":{"$ref":"#/definitions/tmpresponses.Cron"}}}}},"/api/v0/crons/{action}":{"get":{"consumes":["application/json"],"produces":["application/json"],"tags":["crons"],"summary":"Get info about the cron with the given action","operationId":"GetCron","parameters":[{"type":"string","description":"action of the cron to fetch","name":"action","in":"path","required":true}],"responses":{"200":{"description":"Success, cron info returned.","schema":{"$ref":"#/definitions/tmpresponses.Cron"}},"default":{"description":"Success, cron info returned.","schema":{"$ref":"#/definitions/tmpresponses.Cron"}}}},"delete":{"consumes":["application/json"],"produces":["application/json"],"tags":["crons"],"summary":"Delete the cron. Jobs created from it will not be canceled.","operationId":"DeleteCron","parameters":[{"type":"string","description":"action of cron to delete","name":"action","in":"path","required":true}],"responses":{"204":{"description":"Success, cron has been deleted."}}}},"/api/v0/events":{"get":{"consumes":["application/json"],"produces":["application/json"],"tags":["events"],"summary":"Get Events","operationId":"GetEvents","parameters":[{"type":"string","description":"The ID of the first record on the page","name":"pageStart","in":"query"},{"type":"integer","default":10,"description":"Maximum number of results to return","name":"pageSize","in":"query"},{"type":"boolean","default":false,"description":"Whether to include the resource count in the response header","name":"count","in":"query"},{"type":"string","name":"publishedBefore","in":"query"},{"type":"string","name":"publishedAfter","in":"query"},{"type":"string","description":"UUID of the user or organization that performed the event","name":"actorId","in":"query"},{"type":"string","description":"Type of events to filter by","name":"eventType","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/responses.Events"}},"400":{"description":"INVALID_PARAMETERS: Unable to parse query parameters"},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"403":{"description":"NOT_AUTHORIZED: The client is not authorized."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"default":{"description":"OK","schema":{"$ref":"#/definitions/responses.Events"}}}}},"/api/v0/imagescan/layeroverride":{"get":{"consumes":["application/json"],"produces":["application/json"],"tags":["imagescan"],"summary":"Gets a list of all the available overrides","operationId":"GetLayerVulnOverrides","responses":{"200":{"description":"Successfully set vulnerability override","schema":{"type":"array","items":{"$ref":"#/definitions/responses.LayerVulnOverride"}}},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"500":{"description":"INTERNAL_ERROR: An internal server error occurred. Contact a system administrator for more information."},"default":{"description":"Successfully set vulnerability override","schema":{"type":"array","items":{"$ref":"#/definitions/responses.LayerVulnOverride"}}}}}},"/api/v0/imagescan/layeroverride/{layerid}":{"post":{"consumes":["application/json"],"produces":["application/json"],"tags":["imagescan"],"summary":"Sets a vulnerability override for the given layer","operationId":"SetLayerVulnOverride","parameters":[{"type":"string","description":"layer id","name":"layerid","in":"path","required":true},{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/forms.VulnOverrideOption"}}],"responses":{"200":{"description":"Successfully set vulnerability override"},"400":{"description":"INVALID_SETTINGS: The submitted settings change request contains invalid values."},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"404":{"description":"NO_SUCH_LAYER: A layer with the given sha does not exist in the repository."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"500":{"description":"INTERNAL_ERROR: An internal server error occurred. Contact a system administrator for more information."},"default":{"description":"Successfully set vulnerability override"}}}},"/api/v0/imagescan/layeroverride/{vulnerabilityid}":{"delete":{"consumes":["application/json"],"produces":["application/json"],"tags":["imagescan"],"summary":"Deletes a layer vulnerability override","operationId":"DeleteLayerVulnOverride","parameters":[{"type":"string","description":"vulnerability id","name":"vulnerabilityid","in":"path","required":true}],"responses":{"200":{"description":"OK"},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"404":{"description":"NO_SUCH_LAYER: A layer with the given sha does not exist in the repository."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"default":{"description":"OK"}}}},"/api/v0/imagescan/repositories/{namespace}/{reponame}/{tag}":{"get":{"consumes":["application/json"],"produces":["application/json"],"tags":["imagescan"],"summary":"Deprecated use /scansummary/repositories/{namespace}/{reponame}/{tag}","operationId":"GetSummaryByManifestDigest","deprecated":true,"parameters":[{"type":"string","description":"namespace/owner of repository","name":"namespace","in":"path","required":true},{"type":"string","description":"name of repository","name":"reponame","in":"path","required":true},{"type":"string","description":"tag name","name":"tag","in":"path","required":true},{"type":"boolean","default":true,"description":"Whether to include detailed summary results","name":"detailed","in":"query"},{"type":"string","description":"Operating system of the tag","name":"os","in":"query"},{"type":"string","description":"Architecture of the tag","name":"arch","in":"query"}],"responses":{"200":{"description":"Successfully retrieved summary.","schema":{"type":"array","items":{"$ref":"#/definitions/responses.OldScanSummary"}}},"400":{"description":"SCANNING_NOT_ENABLED: Scanning is not enabled"},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"404":{"description":"NO_SUCH_TAG: A tag with the given name does not exist for the given repository."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"default":{"description":"Successfully retrieved summary.","schema":{"type":"array","items":{"$ref":"#/definitions/responses.OldScanSummary"}}}}}},"/api/v0/imagescan/scan":{"post":{"consumes":["application/json"],"produces":["application/json"],"tags":["imagescan"],"summary":"Do a scan or a scan/check of all layers","operationId":"ScanAllLayers","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/forms.ScanOptions"}}],"responses":{"200":{"description":"Successfully submitted all layers to jobrunner for scan/check."},"400":{"description":"SCANNING_NOT_ENABLED: Scanning is not enabled"},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"default":{"description":"Successfully submitted all layers to jobrunner for scan/check."}}}},"/api/v0/imagescan/scan/update":{"put":{"consumes":["multipart/form-data","application/json"],"produces":["application/json"],"tags":["imagescan"],"summary":"Update the vulnerability database for security scanning","operationId":"UpdateVulnDB","parameters":[{"type":"file","description":"Upload file to init database","name":"file","in":"formData"},{"type":"boolean","default":false,"description":"Init or update vuln db in online mode.","name":"online","in":"query"}],"responses":{"200":{"description":"Successfully started to updated vulnerability DB."},"400":{"description":"SCANNING_DB_NOT_READY: Scanning DB is not ready"},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"default":{"description":"Successfully started to updated vulnerability DB."}}}},"/api/v0/imagescan/scan/{namespace}/{reponame}/{tag}/{os}/{arch}":{"post":{"consumes":["application/json"],"produces":["application/json"],"tags":["imagescan"],"summary":"Do a scan or a scan/check of given image","operationId":"ScanImage","parameters":[{"type":"string","description":"namespace/owner of repository","name":"namespace","in":"path","required":true},{"type":"string","description":"name of repository","name":"reponame","in":"path","required":true},{"type":"string","description":"tag name","name":"tag","in":"path","required":true},{"type":"string","description":"operating system of the tag","name":"os","in":"path","required":true},{"type":"string","description":"architecture of the tag","name":"arch","in":"path","required":true}],"responses":{"200":{"description":"Successfully submitted image to jobrunner for scan/check."},"400":{"description":"SCANNING_NOT_ENABLED: Scanning is not enabled"},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"404":{"description":"NO_SUCH_TAG: A tag with the given name does not exist for the given repository."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"default":{"description":"Successfully submitted image to jobrunner for scan/check."}}}},"/api/v0/imagescan/scansummary/component/{component}":{"get":{"consumes":["application/json"],"produces":["application/json"],"tags":["imagescan"],"summary":"Get the image by component","operationId":"GetScannedImageByComponent","parameters":[{"type":"string","description":"component","name":"component","in":"path","required":true},{"type":"string","description":"The ID of the first record on the page","name":"pageStart","in":"query"},{"type":"integer","default":10,"description":"Maximum number of results to return","name":"pageSize","in":"query"},{"type":"boolean","default":false,"description":"Whether to include the resource count in the response header","name":"count","in":"query"},{"type":"boolean","default":true,"description":"Whether to include scan status summary results","name":"scanstatus","in":"query"}],"responses":{"200":{"description":"Successfully retrieved images","schema":{"type":"array","items":{"$ref":"#/definitions/responses.ScanSummary"}}},"400":{"description":"SCANNING_NOT_ENABLED: Scanning is not enabled"},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"404":{"description":"NO_SUCH_TAG: A tag with the given name does not exist for the given repository."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"default":{"description":"Successfully retrieved images","schema":{"type":"array","items":{"$ref":"#/definitions/responses.ScanSummary"}}}}}},"/api/v0/imagescan/scansummary/cve/{cve}":{"get":{"consumes":["application/json"],"produces":["application/json"],"tags":["imagescan"],"summary":"Get the image by CVE","operationId":"GetScannedImageByCVE","parameters":[{"type":"string","description":"cve","name":"cve","in":"path","required":true},{"type":"string","description":"The ID of the first record on the page","name":"pageStart","in":"query"},{"type":"integer","default":10,"description":"Maximum number of results to return","name":"pageSize","in":"query"},{"type":"boolean","default":false,"description":"Whether to include the resource count in the response header","name":"count","in":"query"},{"type":"boolean","default":true,"description":"Whether to include scan status summary results","name":"scanstatus","in":"query"}],"responses":{"200":{"description":"Successfully retrieved images","schema":{"type":"array","items":{"$ref":"#/definitions/responses.ScanSummary"}}},"400":{"description":"SCANNING_NOT_ENABLED: Scanning is not enabled"},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"404":{"description":"NO_SUCH_TAG: A tag with the given name does not exist for the given repository."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"default":{"description":"Successfully retrieved images","schema":{"type":"array","items":{"$ref":"#/definitions/responses.ScanSummary"}}}}}},"/api/v0/imagescan/scansummary/layer/{layerid}":{"get":{"consumes":["application/json"],"produces":["application/json"],"tags":["imagescan"],"summary":"Get the image by layer sha","operationId":"GetScannedImageByLayer","parameters":[{"type":"string","description":"layer id","name":"layerid","in":"path","required":true},{"type":"string","description":"The ID of the first record on the page","name":"pageStart","in":"query"},{"type":"integer","default":10,"description":"Maximum number of results to return","name":"pageSize","in":"query"},{"type":"boolean","default":false,"description":"Whether to include the resource count in the response header","name":"count","in":"query"},{"type":"boolean","default":true,"description":"Whether to include scan status summary results","name":"scanstatus","in":"query"}],"responses":{"200":{"description":"Successfully retrieved images","schema":{"type":"array","items":{"$ref":"#/definitions/responses.ScanSummary"}}},"400":{"description":"SCANNING_NOT_ENABLED: Scanning is not enabled"},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"404":{"description":"NO_SUCH_LAYER: A layer with the given sha does not exist in the repository."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"default":{"description":"Successfully retrieved images","schema":{"type":"array","items":{"$ref":"#/definitions/responses.ScanSummary"}}}}}},"/api/v0/imagescan/scansummary/license/{license}":{"get":{"consumes":["application/json"],"produces":["application/json"],"tags":["imagescan"],"summary":"Get the image by license","operationId":"GetScannedImageByLicense","parameters":[{"type":"string","description":"license","name":"license","in":"path","required":true},{"type":"string","description":"The ID of the first record on the page","name":"pageStart","in":"query"},{"type":"integer","default":10,"description":"Maximum number of results to return","name":"pageSize","in":"query"},{"type":"boolean","default":false,"description":"Whether to include the resource count in the response header","name":"count","in":"query"},{"type":"boolean","default":true,"description":"Whether to include scan status summary results","name":"scanstatus","in":"query"}],"responses":{"200":{"description":"Successfully retrieved images","schema":{"type":"array","items":{"$ref":"#/definitions/responses.ScanSummary"}}},"400":{"description":"SCANNING_NOT_ENABLED: Scanning is not enabled"},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"404":{"description":"NO_SUCH_TAG: A tag with the given name does not exist for the given repository."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"default":{"description":"Successfully retrieved images","schema":{"type":"array","items":{"$ref":"#/definitions/responses.ScanSummary"}}}}}},"/api/v0/imagescan/scansummary/repositories/{namespace}/{reponame}/{reference}":{"get":{"consumes":["application/json"],"produces":["application/json"],"tags":["imagescan"],"summary":"Get the scan summary info on a namespace/repo:tag or namespace/repo@digest","operationId":"GetScanSummary","parameters":[{"type":"string","description":"namespace/owner of repository","name":"namespace","in":"path","required":true},{"type":"string","description":"name of repository","name":"reponame","in":"path","required":true},{"type":"string","description":"digest or tag for an image manifest","name":"reference","in":"path","required":true},{"type":"boolean","default":true,"description":"Whether to include scan status summary results","name":"scanstatus","in":"query"},{"type":"string","description":"Operating system of the tag","name":"os","in":"query"},{"type":"string","description":"Architecture of the tag","name":"arch","in":"query"}],"responses":{"200":{"description":"Successfully retrieved summary.","schema":{"type":"array","items":{"$ref":"#/definitions/responses.ScanSummary"}}},"400":{"description":"SCANNING_NOT_ENABLED: Scanning is not enabled"},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"404":{"description":"NO_SUCH_REF: A ref with the given name does not exist for the given repository."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"default":{"description":"Successfully retrieved summary.","schema":{"type":"array","items":{"$ref":"#/definitions/responses.ScanSummary"}}}}}},"/api/v0/imagescan/scansummary/repositories/{namespace}/{reponame}/{tag}/export":{"get":{"consumes":["application/json"],"produces":["text/csv","application/json"],"tags":["imagescan"],"summary":"Get the scan summary info on a namespace/repo:tag as a file","operationId":"ExportScanSummary","parameters":[{"type":"string","description":"namespace/owner of repository","name":"namespace","in":"path","required":true},{"type":"string","description":"name of repository","name":"reponame","in":"path","required":true},{"type":"string","description":"tag name","name":"tag","in":"path","required":true},{"type":"boolean","default":true,"description":"Whether to include scan status summary results","name":"scanstatus","in":"query"},{"type":"string","description":"Operating system of the tag","name":"os","in":"query"},{"type":"string","description":"Architecture of the tag","name":"arch","in":"query"},{"type":"string","description":"Scan summary exported filetype","name":"Accept","in":"header"}],"responses":{"400":{"description":"INVALID_PARAMETERS: Unable to parse query parameters"},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"404":{"description":"NO_SUCH_TAG: A tag with the given name does not exist for the given repository."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"}}}},"/api/v0/imagescan/scansummary/tags":{"post":{"consumes":["application/json"],"produces":["application/json"],"tags":["imagescan"],"summary":"Get a list of scan summaries","operationId":"GetScanSummaries","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/forms.ImagesForm"}}],"responses":{"200":{"description":"Successfully retrieved summary.","schema":{"$ref":"#/definitions/responses.ThinScanSummaries"}},"400":{"description":"INVALID_PARAMETERS: Unable to parse query parameters"},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"default":{"description":"Successfully retrieved summary.","schema":{"$ref":"#/definitions/responses.ThinScanSummaries"}}}}},"/api/v0/imagescan/status":{"get":{"consumes":["application/json"],"produces":["application/json"],"tags":["imagescan"],"summary":"Get the status and version of scanning service","operationId":"GetNautilusDBStatus","responses":{"200":{"description":"Successfully retrieved DB status","schema":{"$ref":"#/definitions/responses.NautilusStatus"}},"400":{"description":"SCANNING_NOT_ENABLED: Scanning is not enabled"},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"default":{"description":"Successfully retrieved DB status","schema":{"$ref":"#/definitions/responses.NautilusStatus"}}}}},"/api/v0/index/autocomplete":{"get":{"description":"\nRepository results will be filtered to only those repositories visible to the client. Account results will not be filtered.\n\t\t","consumes":["application/json"],"produces":["application/json"],"tags":["index"],"summary":"Autocompletion for repositories and/or accounts","operationId":"Autocomplete","parameters":[{"type":"string","description":"Autocomplete query","name":"query","in":"query","required":true},{"type":"boolean","default":true,"description":"Whether to include repositories in the response","name":"includeRepositories","in":"query"},{"type":"boolean","default":true,"description":"Whether to include accounts in the response","name":"includeAccounts","in":"query"},{"type":"string","description":"Exact repository namespace to limit results to.","name":"namespace","in":"query"},{"type":"number","default":25,"name":"limit","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/responses.Autocomplete"}},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"default":{"description":"OK","schema":{"$ref":"#/definitions/responses.Autocomplete"}}}}},"/api/v0/index/dockersearch":{"get":{"description":"\nThis is used for the Docker CLI's docker search command. Repository results will be filtered to only those repositories visible to the client.\n\t\t","consumes":["application/json"],"produces":["application/json"],"tags":["index"],"summary":"Search Docker repositories","operationId":"Docker Search","parameters":[{"type":"string","description":"Search query","name":"q","in":"query","required":true}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/responses.DockerSearch"}},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"403":{"description":"NOT_AUTHORIZED: The client is not authorized."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"default":{"description":"OK","schema":{"$ref":"#/definitions/responses.DockerSearch"}}}}},"/api/v0/jobs":{"get":{"consumes":["application/json"],"produces":["application/json"],"tags":["jobs"],"summary":"List all jobs ordered by most recently scheduled","operationId":"ListJobs","parameters":[{"type":"string","default":"any","description":"Filter jobs by action.","name":"action","in":"query"},{"type":"string","default":"any","description":"Filter jobs by worker ID.","name":"worker","in":"query"},{"type":"string","default":"any","description":"Show only jobs that are running.","name":"running","in":"query"},{"type":"integer","default":0,"description":"Return most recently scheduled jobs starting from this offset index.","name":"start","in":"query"},{"type":"integer","default":10,"description":"Maximum number of jobs per page of results.","name":"limit","in":"query"}],"responses":{"200":{"description":"Success, list of jobs returned.","schema":{"$ref":"#/definitions/tmpresponses.Jobs"}},"default":{"description":"Success, list of jobs returned.","schema":{"$ref":"#/definitions/tmpresponses.Jobs"}}}},"post":{"consumes":["application/json"],"produces":["application/json"],"tags":["jobs"],"summary":"Schedule a job to be run immediately","operationId":"CreateJob","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tmpforms.JobSubmission"}}],"responses":{"202":{"description":"Success, job waiting to be claimed.","schema":{"$ref":"#/definitions/tmpresponses.Job"}}}}},"/api/v0/jobs/{jobID}":{"get":{"consumes":["application/json"],"produces":["application/json"],"tags":["jobs"],"summary":"Get info about the job with the given ID","operationId":"GetJob","parameters":[{"type":"string","description":"ID of job to fetch","name":"jobID","in":"path","required":true}],"responses":{"200":{"description":"Success, job info returned.","schema":{"$ref":"#/definitions/tmpresponses.Job"}},"default":{"description":"Success, job info returned.","schema":{"$ref":"#/definitions/tmpresponses.Job"}}}},"delete":{"consumes":["application/json"],"produces":["application/json"],"tags":["jobs"],"summary":"Signal this job's worker to cancel and delete the job","operationId":"DeleteJobs","parameters":[{"type":"string","description":"ID of job to delete","name":"jobID","in":"path","required":true}],"responses":{"204":{"description":"Success, job has been deleted."}}}},"/api/v0/jobs/{jobID}/cancel":{"post":{"consumes":["application/json"],"produces":["application/json"],"tags":["jobs"],"summary":"Signal this job's worker to cancel the job","operationId":"CancelJob","parameters":[{"type":"string","description":"ID of job to cancel","name":"jobID","in":"path","required":true}],"responses":{"204":{"description":"Success, job has been canceled."}}}},"/api/v0/jobs/{jobID}/logs":{"get":{"consumes":["application/json"],"produces":["application/json"],"tags":["jobs"],"summary":"Retrieve logs for this job from its worker","operationId":"GetJobLogs","parameters":[{"type":"string","description":"ID of job whose logs to retrieve","name":"jobID","in":"path","required":true},{"type":"boolean","default":false,"description":"t/f: stream new logs","name":"stream","in":"query"},{"type":"integer","default":0,"description":"Line number to start from","name":"offset","in":"query"},{"type":"integer","default":0,"description":"Number of lines to return if not streaming","name":"limit","in":"query"}],"responses":{"200":{"description":"Success, job's logs returned.","schema":{"type":"array","items":{"$ref":"#/definitions/tmpresponses.JobLog"}}},"default":{"description":"Success, job's logs returned.","schema":{"type":"array","items":{"$ref":"#/definitions/tmpresponses.JobLog"}}}}}},"/api/v0/meta/alerts":{"get":{"description":"\n*Authorization:* Client must be authenticated an admin.\n\t\t","consumes":["application/json"],"produces":["application/json"],"tags":["meta"],"summary":"Get alerts","operationId":"GetAlerts","responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/responses.Alert"}}},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"default":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/responses.Alert"}}}}}},"/api/v0/meta/cluster_status":{"get":{"description":"\n*Authorization:* Client must be authenticated an admin.\n\t\t","consumes":["application/json"],"produces":["application/json"],"tags":["meta"],"summary":"Get cluster status","operationId":"GetClusterStatus","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/responses.ClusterStatus"}},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"403":{"description":"NOT_AUTHORIZED: The client is not authorized."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"default":{"description":"OK","schema":{"$ref":"#/definitions/responses.ClusterStatus"}}}}},"/api/v0/meta/features":{"get":{"description":"\n*Authorization:* Client must be authenticated as any active user in the system\n\t\t","consumes":["application/json"],"produces":["application/json"],"tags":["meta"],"summary":"Get features","operationId":"GetFeatures","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/responses.Features"}},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"default":{"description":"OK","schema":{"$ref":"#/definitions/responses.Features"}}}}},"/api/v0/meta/settings":{"get":{"description":"\n*Authorization:* Client must be authenticated an admin.\n\t\t","consumes":["application/json"],"produces":["application/json"],"tags":["meta"],"summary":"Get settings","operationId":"GetSettings","responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/responses.Settings"}},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"403":{"description":"NOT_AUTHORIZED: The client is not authorized."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"default":{"description":"OK","schema":{"$ref":"#/definitions/responses.Settings"}}}},"post":{"description":"\n*Authorization:* Client must be authenticated an admin.\n\t\t","consumes":["application/json"],"produces":["application/json"],"tags":["meta"],"summary":"Update settings","operationId":"UpdateSettings","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/forms.Settings"}}],"responses":{"202":{"description":"success"},"400":{"description":"INVALID_SETTINGS: The submitted settings change request contains invalid values."},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"}}}},"/api/v0/remote/registry":{"post":{"description":"\n*Authorization:* Client must be authenticated as any active user in the system. Credentials provided in the request body must be for an active user in the remote system.\n\t\t","consumes":["application/json"],"produces":["application/json"],"tags":["remote"],"summary":"Create a check for connection status of remote registry","operationId":"CreateRemoteRegistryCheck","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/forms.CreateRemoteRegistryCheck"}}],"responses":{"201":{"description":"success","schema":{"$ref":"#/definitions/responses.RemoteRegistryCheck"}},"400":{"description":"REMOTE_REGISTRY_INVALID_PERMISSIONS: Remote user not authorized to access the requested resource."},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"}}}},"/api/v0/repositories":{"get":{"description":"\n*Authorization:* Client must be authenticated as any active user in the system. Results will be filtered to only those repositories visible to the client.\n\t\t","consumes":["application/json"],"produces":["application/json"],"tags":["repositories"],"summary":"List all repositories","operationId":"ListRepositories","parameters":[{"type":"string","description":"The ID of the first record on the page","name":"pageStart","in":"query"},{"type":"integer","default":10,"description":"Maximum number of results to return","name":"pageSize","in":"query"},{"type":"boolean","default":false,"description":"Whether to include the resource count in the response header","name":"count","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/responses.Repositories"}},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"default":{"description":"OK","schema":{"$ref":"#/definitions/responses.Repositories"}}}}},"/api/v0/repositories/scan/toggle":{"post":{"description":"\n*Authorization:* Client must be authenticated as a user who has \"admin\" access to the repository\n(i.e., user owns the repo or is a member of a team with \"admin\" level access to the organization\"s repository).\n\t\t","consumes":["application/json"],"produces":["application/json"],"tags":["repositories"],"summary":"Toggles scan on push for all repositories","operationId":"ToggleAllRepositoriesScanOnPush","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/forms.ToggleScanOnPush"}}],"responses":{"200":{"description":"Successfully toggled scan on push for all repositories."},"400":{"description":"INVALID_JSON: Unable to parse JSON"},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"403":{"description":"NOT_AUTHORIZED: The client is not authorized."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"default":{"description":"Successfully toggled scan on push for all repositories."}}}},"/api/v0/repositories/{namespace}":{"get":{"description":"\n*Authorization:* Client must be authenticated as any active user in the system. Results will be filtered to only those repositories visible to the client.\n\t\t","consumes":["application/json"],"produces":["application/json"],"tags":["repositories"],"summary":"List repositories in a namespace","operationId":"ListNamespaceRepositories","parameters":[{"type":"string","description":"namespace/owner of repository","name":"namespace","in":"path","required":true},{"type":"string","description":"The ID of the first record on the page","name":"pageStart","in":"query"},{"type":"integer","default":10,"description":"Maximum number of results to return","name":"pageSize","in":"query"},{"type":"boolean","default":false,"description":"Whether to include the resource count in the response header","name":"count","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/responses.Repositories"}},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"404":{"description":"NO_SUCH_ACCOUNT: An account with the given name does not exist."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"default":{"description":"OK","schema":{"$ref":"#/definitions/responses.Repositories"}}}},"post":{"description":"\n*Authorization:* Client must be authenticated as a user who has admin access to the\nrepository namespace (i.e., user owns the repo or is a member of a team with\n\"admin\" level access to the organization's namespace of repositories).\n\t\t","consumes":["application/json"],"produces":["application/json"],"tags":["repositories"],"summary":"Create repository","operationId":"CreateRepository","parameters":[{"type":"string","description":"namespace/owner of repository","name":"namespace","in":"path","required":true},{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/forms.CreateRepo"}}],"responses":{"201":{"description":"success","schema":{"$ref":"#/definitions/responses.Repository"}},"400":{"description":"REPOSITORY_EXISTS: A repository with the same name already exists."},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"403":{"description":"NOT_AUTHORIZED: The client is not authorized."},"404":{"description":"NO_SUCH_ACCOUNT: An account with the given name does not exist."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"}}}},"/api/v0/repositories/{namespace}/{reponame}":{"get":{"description":"\n*Authorization:* Client must be authenticated as a user who has visibility to the repository.\n\t\t","consumes":["application/json"],"produces":["application/json"],"tags":["repositories"],"summary":"View details of a repository","operationId":"GetRepository","parameters":[{"type":"string","description":"namespace/owner of repository","name":"namespace","in":"path","required":true},{"type":"string","description":"name of repository","name":"reponame","in":"path","required":true}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/responses.Repository"}},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"404":{"description":"NO_SUCH_REPOSITORY: A repository with the given name does not exist."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"default":{"description":"OK","schema":{"$ref":"#/definitions/responses.Repository"}}}},"delete":{"description":"\n*Authorization:* Client must be authenticated as a user who has \"admin\" access to the repository\n(i.e., user owns the repo or is a member of a team with \"admin\" level access to the organization\"s repository).\n\t\t","consumes":["application/json"],"produces":["application/json"],"tags":["repositories"],"summary":"Remove a repository","operationId":"DeleteRepository","parameters":[{"type":"string","description":"namespace/owner of repository","name":"namespace","in":"path","required":true},{"type":"string","description":"name of repository","name":"reponame","in":"path","required":true},{"type":"string","description":"The domain used to push tags to DTR. Must be set to obtain/manipulate Notary related information","name":"domain","in":"query"}],"responses":{"204":{"description":"success or repository does not exist"},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"403":{"description":"NOT_AUTHORIZED: The client is not authorized."},"404":{"description":"NO_SUCH_REPOSITORY: A repository with the given name does not exist."},"405":{"description":"REPOSITORY_CONTAINS_TAGS_IN_NOTARY: This repository contains tags in notary and can't be deleted until all tags in notary are removed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"}}},"patch":{"description":"\n*Authorization:* Client must be authenticated as a user who has \"admin\" access to the repository\n(i.e., user owns the repo or is a member of a team with \"admin\" level access to the organization\"s repository).\n\nNote that a repository cannot be renamed this way.\n\t\t","consumes":["application/json"],"produces":["application/json"],"tags":["repositories"],"summary":"Update details of a repository","operationId":"PatchRepository","parameters":[{"type":"string","description":"namespace/owner of repository","name":"namespace","in":"path","required":true},{"type":"string","description":"name of repository","name":"reponame","in":"path","required":true},{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/forms.UpdateRepo"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/responses.Repository"}},"400":{"description":"INVALID_REPOSITORY_VISIBILITY: The visibility value of the repository is invalid."},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"403":{"description":"NOT_AUTHORIZED: The client is not authorized."},"404":{"description":"NO_SUCH_REPOSITORY: A repository with the given name does not exist."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"default":{"description":"OK","schema":{"$ref":"#/definitions/responses.Repository"}}}}},"/api/v0/repositories/{namespace}/{reponame}/events":{"get":{"description":"\n*Authorization:* Client must be authenticated as a user who has visibility to local repository.\n\t\t","consumes":["application/json"],"produces":["application/json"],"tags":["repositories"],"summary":"List the events for a repository","operationId":"ListRepoEvents","parameters":[{"type":"string","description":"namespace/owner of repository","name":"namespace","in":"path","required":true},{"type":"string","description":"name of repository","name":"reponame","in":"path","required":true},{"type":"string","description":"The ID of the first record on the page","name":"pageStart","in":"query"},{"type":"integer","default":10,"description":"Maximum number of results to return","name":"pageSize","in":"query"},{"type":"boolean","default":false,"description":"Whether to include the resource count in the response header","name":"count","in":"query"},{"type":"string","name":"publishedBefore","in":"query"},{"type":"string","name":"publishedAfter","in":"query"},{"type":"string","description":"UUID of the user or organization that performed the event","name":"actorId","in":"query"},{"type":"string","description":"Type of events to filter by","name":"eventType","in":"query"},{"type":"boolean","default":false,"description":"Exclude image pull events","name":"excludePull","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/responses.Events"}},"400":{"description":"INVALID_PARAMETERS: Unable to parse query parameters"},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"403":{"description":"NOT_AUTHORIZED: The client is not authorized."},"404":{"description":"NO_SUCH_REPOSITORY: A repository with the given name does not exist."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"default":{"description":"OK","schema":{"$ref":"#/definitions/responses.Events"}}}}},"/api/v0/repositories/{namespace}/{reponame}/manifests":{"get":{"description":"\n*Authorization:* Client must be authenticated as a user who has visibility to the repository.\n\t\t","consumes":["application/json"],"produces":["application/json"],"tags":["repositories"],"summary":"List the available manifests for a repository","operationId":"ListRepoManifests","parameters":[{"type":"string","description":"namespace/owner of repository","name":"namespace","in":"path","required":true},{"type":"string","description":"name of repository","name":"reponame","in":"path","required":true},{"type":"string","description":"The ID of the first record on the page","name":"pageStart","in":"query"},{"type":"integer","default":10,"description":"Maximum number of results to return","name":"pageSize","in":"query"},{"type":"boolean","default":false,"description":"Whether to include the resource count in the response header","name":"count","in":"query"}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/responses.Manifest"}}},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"404":{"description":"NO_SUCH_REPOSITORY: A repository with the given name does not exist."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"default":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/responses.Manifest"}}}}}},"/api/v0/repositories/{namespace}/{reponame}/manifests/{reference}":{"delete":{"description":"\n*Authorization:* Client must be authenticated as a user who has \"write\" level access to the repository.\n\t\t","consumes":["application/json"],"produces":["application/json"],"tags":["repositories"],"summary":"Delete a manifest for a repository","operationId":"DeleteRepoManifest","deprecated":true,"parameters":[{"type":"string","description":"namespace/owner of repository","name":"namespace","in":"path","required":true},{"type":"string","description":"name of repository","name":"reponame","in":"path","required":true},{"type":"string","description":"digest or tag for an image manifest","name":"reference","in":"path","required":true}],"responses":{"204":{"description":"success"},"400":{"description":"INVALID_DIGEST: The given digest is invalid."},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"403":{"description":"NOT_AUTHORIZED: The client is not authorized."},"404":{"description":"NO_SUCH_REF: A ref with the given name does not exist for the given repository."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"}}}},"/api/v0/repositories/{namespace}/{reponame}/mirroringPolicies":{"get":{"description":"\n*Authorization:* Client must be authenticated as a user who has visibility to local repository.\n\t\t","consumes":["application/json"],"produces":["application/json"],"tags":["repositories"],"summary":"List the mirroring policies for a repository","operationId":"ListRepoMirroringPolicies","parameters":[{"type":"string","description":"namespace/owner of repository","name":"namespace","in":"path","required":true},{"type":"string","description":"name of repository","name":"reponame","in":"path","required":true},{"type":"string","description":"The ID of the first record on the page","name":"pageStart","in":"query"},{"type":"integer","default":10,"description":"Maximum number of results to return","name":"pageSize","in":"query"},{"type":"boolean","default":false,"description":"Whether to include the resource count in the response header","name":"count","in":"query"}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/responses.MirroringPolicy"}}},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"403":{"description":"NOT_AUTHORIZED: The client is not authorized."},"404":{"description":"NO_SUCH_REPOSITORY: A repository with the given name does not exist."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"default":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/responses.MirroringPolicy"}}}}},"delete":{"description":"\n*Authorization:* Client must be authenticated as a user who has \"admin\" level access to the local repository.\n\t\t","consumes":["application/json"],"produces":["application/json"],"tags":["repositories"],"summary":"Deletes a set of mirroring policies for a repository","operationId":"DeleteRepoMirroringPolicies","parameters":[{"type":"string","description":"namespace/owner of repository","name":"namespace","in":"path","required":true},{"type":"string","description":"name of repository","name":"reponame","in":"path","required":true},{"name":"body","in":"body","required":true,"schema":{"type":"array","items":{"$ref":"#/definitions/forms.DeleteMirroringPolicyIDs"}}}],"responses":{"204":{"description":"success"},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"403":{"description":"NOT_AUTHORIZED: The client is not authorized."},"404":{"description":"NO_SUCH_REPOSITORY: A repository with the given name does not exist."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"}}}},"/api/v0/repositories/{namespace}/{reponame}/pollMirroringPolicies":{"get":{"description":"\n*Authorization:* Client must be authenticated as a user who has visibility to local repository.\n\t\t","consumes":["application/json"],"produces":["application/json"],"tags":["repositories"],"summary":"List the poll mirroring policies for a repository","operationId":"ListRepoPollMirroringPolicies","parameters":[{"type":"string","description":"namespace/owner of repository","name":"namespace","in":"path","required":true},{"type":"string","description":"name of repository","name":"reponame","in":"path","required":true}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/responses.PollMirroringPolicy"}}},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"403":{"description":"NOT_AUTHORIZED: The client is not authorized."},"404":{"description":"NO_SUCH_REPOSITORY: A repository with the given name does not exist."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"default":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/responses.PollMirroringPolicy"}}}}},"post":{"description":"*Authorization:* Client must be authenticated as a user who has \"admin\" level access to the local repository and credentials to the remote repository.","consumes":["application/json"],"produces":["application/json"],"tags":["repositories"],"summary":"Create a poll mirroring policy for a repository","operationId":"CreateRepoPollMirroringPolicy","parameters":[{"type":"string","description":"namespace/owner of repository","name":"namespace","in":"path","required":true},{"type":"string","description":"name of repository","name":"reponame","in":"path","required":true},{"type":"boolean","default":true,"description":"Whether to evaluate the policy on creation","name":"initialEvaluation","in":"query"},{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/forms.CreatePollMirroringPolicy"}}],"responses":{"201":{"description":"success","schema":{"$ref":"#/definitions/responses.PollMirroringPolicy"}},"400":{"description":"REMOTE_REGISTRY_INVALID_PERMISSIONS: Remote user not authorized to access the requested resource."},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"403":{"description":"NOT_AUTHORIZED: The client is not authorized."},"404":{"description":"INVALID_POLL_MIRRORING_POLICY: The given poll mirroring policy is invalid."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"}}}},"/api/v0/repositories/{namespace}/{reponame}/pollMirroringPolicies/{pollmirroringpolicyid}":{"get":{"description":"\n*Authorization:* Client must be authenticated as a user who has visibility to the local repository.\n\t\t","consumes":["application/json"],"produces":["application/json"],"tags":["repositories"],"summary":"Retrieve a specific poll mirroring policy for a repository","operationId":"GetRepoPollMirroringPolicy","parameters":[{"type":"string","description":"namespace/owner of repository","name":"namespace","in":"path","required":true},{"type":"string","description":"name of repository","name":"reponame","in":"path","required":true},{"type":"string","description":"poll mirroring policy id","name":"pollmirroringpolicyid","in":"path","required":true}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/responses.PollMirroringPolicy"}},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"403":{"description":"NOT_AUTHORIZED: The client is not authorized."},"404":{"description":"NO_SUCH_POLL_MIRRORING_POLICY: A poll mirroring policy with the given id does not exist."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"default":{"description":"OK","schema":{"$ref":"#/definitions/responses.PollMirroringPolicy"}}}},"put":{"description":"\n*Authorization:* Client must be authenticated as a user who has \"admin\" level access to the local repository and credentials to the remote repository.\n\t\t","consumes":["application/json"],"produces":["application/json"],"tags":["repositories"],"summary":"Updates a specific poll mirroring policy for a repository","operationId":"UpdateRepoPollMirroringPolicy","parameters":[{"type":"string","description":"namespace/owner of repository","name":"namespace","in":"path","required":true},{"type":"string","description":"name of repository","name":"reponame","in":"path","required":true},{"type":"string","description":"poll mirroring policy id","name":"pollmirroringpolicyid","in":"path","required":true},{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/forms.UpdatePollMirroringPolicy"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/responses.PollMirroringPolicy"}},"400":{"description":"REMOTE_REGISTRY_INVALID_PERMISSIONS: Remote user not authorized to access the requested resource."},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"403":{"description":"NOT_AUTHORIZED: The client is not authorized."},"404":{"description":"INVALID_POLL_MIRRORING_POLICY: The given poll mirroring policy is invalid."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"default":{"description":"OK","schema":{"$ref":"#/definitions/responses.PollMirroringPolicy"}}}},"delete":{"description":"\n*Authorization:* Client must be authenticated as a user who has \"admin\" level access to the local repository.\n\t\t","consumes":["application/json"],"produces":["application/json"],"tags":["repositories"],"summary":"Deletes a specific poll mirroring policy for a repository","operationId":"DeleteRepoPollMirroringPolicy","parameters":[{"type":"string","description":"namespace/owner of repository","name":"namespace","in":"path","required":true},{"type":"string","description":"name of repository","name":"reponame","in":"path","required":true},{"type":"string","description":"poll mirroring policy id","name":"pollmirroringpolicyid","in":"path","required":true}],"responses":{"204":{"description":"success or poll mirroring policy does not exist"},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"403":{"description":"NOT_AUTHORIZED: The client is not authorized."},"404":{"description":"NO_SUCH_POLL_MIRRORING_POLICY: A poll mirroring policy with the given id does not exist."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"}}}},"/api/v0/repositories/{namespace}/{reponame}/promotionPolicies":{"get":{"description":"\n*Authorization:* Client must be authenticated as a user who has visibility to the source or target repository.\n\t\t","consumes":["application/json"],"produces":["application/json"],"tags":["repositories"],"summary":"List the promotion policies for a repository","operationId":"ListRepoPromotionPolicies","parameters":[{"type":"string","description":"namespace/owner of repository","name":"namespace","in":"path","required":true},{"type":"string","description":"name of repository","name":"reponame","in":"path","required":true},{"type":"boolean","default":true,"description":"Whether to list promotion policies for a repository as a source or destination.","name":"source","in":"query"}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/responses.PromotionPolicy"}}},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"403":{"description":"NOT_AUTHORIZED: The client is not authorized."},"404":{"description":"NO_SUCH_REPOSITORY: A repository with the given name does not exist."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"default":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/responses.PromotionPolicy"}}}}},"post":{"description":"*Authorization:* Client must be authenticated as a user who has \"admin\" level access to the source and target repository.\nRules for the policy can be on the following fields and their respective operators:\n- \"tag\"\n\t- \"eq\": equals\n\t- \"sw\": starts with\n\t- \"ew\": ends with\n\t- \"c\": contains\n\t- \"oo\": one of\n\t- \"noo\": not one of\n- \"license.name\"\n\t- \"oo\": one of\n\t- \"noo\": not one of\n- \"component.name\"\n\t- \"oo\": one of\n\t- \"noo\": not one of\n- \"vulnerability_all\"\n\t- \"gte\": greater than or equals\n\t- \"gt\": greater than\n\t- \"eq\": equals\n\t- \"neq\": not equals\n\t- \"lte\": less than or equals\n\t- \"lt\": less than\n- \"vulnerability_critical\"\n\t- \"gte\": greater than or equals\n\t- \"gt\": greater than\n\t- \"eq\": equals\n\t- \"neq\": not equals\n\t- \"lte\": less than or equals\n\t- \"lt\": less than\n- \"vulnerability_major\"\n\t- \"gte\": greater than or equals\n\t- \"gt\": greater than\n\t- \"eq\": equals\n\t- \"neq\": not equals\n\t- \"lte\": less than or equals\n\t- \"lt\": less than\n- \"vulnerability_minor\"\n\t- \"gte\": greater than or equals\n\t- \"gt\": greater than\n\t- \"eq\": equals\n\t- \"neq\": not equals\n\t- \"lte\": less than or equals\n\t- \"lt\": less than\n- \"updated_at\"\n\t- \"bf\": before\n\t- \"af\": after\n- \"updated_at_duration\"\n\t- \"bf\": before\n\t- \"af\": after\n\nThe tag template is used to rename the tag in the target repository. The\nfollowing symbols are allowed:\n- \"%n\": The tag to promote (e.g. 1, 4.5, latest)\n- \"%A\": Day of the week (e.g. Sunday, Monday)\n- \"%a\": Day of the week, abbreviated (e.g. Sun, Mon , Tue)\n- \"%w\": Day of the week, as a number (e.g. 0, 1, 6)\n- \"%d\": Number for the day of the month (e.g. 01, 15, 31)\n- \"%B\": Month (e.g. January, December)\n- \"%b\": Month, abbreviated (e.g. Jan, Jun, Dec)\n- \"%m\": Month, as a number (e.g. 01, 06, 12)\n- \"%Y\": Year (e.g. 1999, 2015, 2048)\n- \"%y\": Year, two digits (e.g. 99, 15, 48)\n- \"%H\": Hour, in 24 hour format (e.g. 00, 12, 23)\n- \"%I\": Hour, in 12 hour format (e.g. 01, 10, 10)\n- \"%p\": Period of the day (e.g. AM, PM)\n- \"%M\": Minute (e.g. 00, 10, 59)\n- \"%S\": Second (e.g. 00, 10, 59)\n- \"%f\": Microsecond (e.g. 000000, 999999)\n- \"%Z\": Name for the timezone (e.g. UTC, PST, EST)\n- \"%j\": Day of the year (e.g. 001, 200, 366)\n- \"%W\": Week of the year (e.g. 00, 10 , 53)\n","consumes":["application/json"],"produces":["application/json"],"tags":["repositories"],"summary":"Create a promotion policy for a repository","operationId":"CreateRepoPromotionPolicy","parameters":[{"type":"string","description":"namespace/owner of repository","name":"namespace","in":"path","required":true},{"type":"string","description":"name of repository","name":"reponame","in":"path","required":true},{"type":"boolean","default":true,"description":"Whether to evaluate the policy on creation","name":"initialEvaluation","in":"query"},{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/forms.CreatePromotionPolicy"}}],"responses":{"201":{"description":"success","schema":{"$ref":"#/definitions/responses.PromotionPolicy"}},"400":{"description":"INVALID_PROMOTION_POLICY: The given promotion policy is invalid."},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"403":{"description":"NOT_AUTHORIZED: The client is not authorized."},"404":{"description":"NO_SUCH_REPOSITORY: A repository with the given name does not exist."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"}}}},"/api/v0/repositories/{namespace}/{reponame}/promotionPolicies/{promotionpolicyid}":{"get":{"description":"\n*Authorization:* Client must be authenticated as a user who has visibility to the source or target repository.\n\t\t","consumes":["application/json"],"produces":["application/json"],"tags":["repositories"],"summary":"Retrieve a specific promotion policy for a repository","operationId":"GetRepoPromotionPolicy","parameters":[{"type":"string","description":"namespace/owner of repository","name":"namespace","in":"path","required":true},{"type":"string","description":"name of repository","name":"reponame","in":"path","required":true},{"type":"string","description":"promotion policy id","name":"promotionpolicyid","in":"path","required":true}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/responses.PromotionPolicy"}},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"403":{"description":"NOT_AUTHORIZED: The client is not authorized."},"404":{"description":"NO_SUCH_PROMOTION_POLICY: A promotion policy with the given id does not exist."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"default":{"description":"OK","schema":{"$ref":"#/definitions/responses.PromotionPolicy"}}}},"put":{"description":"\n*Authorization:* Client must be authenticated as a user who has \"admin\" level access to the source and target repository.\n\t\t","consumes":["application/json"],"produces":["application/json"],"tags":["repositories"],"summary":"Updates a specific promotion policy for a repository","operationId":"UpdateRepoPromotionPolicy","parameters":[{"type":"string","description":"namespace/owner of repository","name":"namespace","in":"path","required":true},{"type":"string","description":"name of repository","name":"reponame","in":"path","required":true},{"type":"string","description":"promotion policy id","name":"promotionpolicyid","in":"path","required":true},{"type":"boolean","default":true,"description":"Whether to evaluate the policy on creation","name":"initialEvaluation","in":"query"},{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/forms.UpdatePromotionPolicy"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/responses.PromotionPolicy"}},"400":{"description":"INVALID_PROMOTION_POLICY: The given promotion policy is invalid."},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"403":{"description":"NOT_AUTHORIZED: The client is not authorized."},"404":{"description":"NO_SUCH_PROMOTION_POLICY: A promotion policy with the given id does not exist."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"default":{"description":"OK","schema":{"$ref":"#/definitions/responses.PromotionPolicy"}}}},"delete":{"description":"\n*Authorization:* Client must be authenticated as a user who has \"admin\" level access to the source or target repository.\n\t\t","consumes":["application/json"],"produces":["application/json"],"tags":["repositories"],"summary":"Deletes a specific promotion policy for a repository","operationId":"DeleteRepoPromotionPolicy","parameters":[{"type":"string","description":"namespace/owner of repository","name":"namespace","in":"path","required":true},{"type":"string","description":"name of repository","name":"reponame","in":"path","required":true},{"type":"string","description":"promotion policy id","name":"promotionpolicyid","in":"path","required":true}],"responses":{"204":{"description":"success or promotion policy does not exist"},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"403":{"description":"NOT_AUTHORIZED: The client is not authorized."},"404":{"description":"NO_SUCH_PROMOTION_POLICY: A promotion policy with the given id does not exist."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"}}}},"/api/v0/repositories/{namespace}/{reponame}/pruningPolicies":{"get":{"description":"*Authorization:* Client must be authenticated as a user who has visibility to the repository.","consumes":["application/json"],"produces":["application/json"],"tags":["repositories"],"summary":"List the pruning policies for a repository","operationId":"ListRepoPruningPolicies","parameters":[{"type":"string","description":"namespace/owner of repository","name":"namespace","in":"path","required":true},{"type":"string","description":"name of repository","name":"reponame","in":"path","required":true},{"type":"string","description":"The ID of the first record on the page","name":"pageStart","in":"query"},{"type":"integer","default":10,"description":"Maximum number of results to return","name":"pageSize","in":"query"},{"type":"boolean","default":false,"description":"Whether to include the resource count in the response header","name":"count","in":"query"}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/responses.PruningPolicy"}}},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"403":{"description":"NOT_AUTHORIZED: The client is not authorized."},"404":{"description":"NO_SUCH_REPOSITORY: A repository with the given name does not exist."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"default":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/responses.PruningPolicy"}}}}},"post":{"description":"*Authorization:* Client must be authenticated as a user who has \"admin\" level access to the repository.\nRules for the policy can be on the following fields and their respective operators:\n- \"tag\"\n\t- \"eq\": equals\n\t- \"sw\": starts with\n\t- \"ew\": ends with\n\t- \"c\": contains\n\t- \"oo\": one of\n\t- \"noo\": not one of\n- \"license.name\"\n\t- \"oo\": one of\n\t- \"noo\": not one of\n- \"component.name\"\n\t- \"oo\": one of\n\t- \"noo\": not one of\n- \"vulnerability_all\"\n\t- \"gte\": greater than or equals\n\t- \"gt\": greater than\n\t- \"eq\": equals\n\t- \"neq\": not equals\n\t- \"lte\": less than or equals\n\t- \"lt\": less than\n- \"vulnerability_critical\"\n\t- \"gte\": greater than or equals\n\t- \"gt\": greater than\n\t- \"eq\": equals\n\t- \"neq\": not equals\n\t- \"lte\": less than or equals\n\t- \"lt\": less than\n- \"vulnerability_major\"\n\t- \"gte\": greater than or equals\n\t- \"gt\": greater than\n\t- \"eq\": equals\n\t- \"neq\": not equals\n\t- \"lte\": less than or equals\n\t- \"lt\": less than\n- \"vulnerability_minor\"\n\t- \"gte\": greater than or equals\n\t- \"gt\": greater than\n\t- \"eq\": equals\n\t- \"neq\": not equals\n\t- \"lte\": less than or equals\n\t- \"lt\": less than\n- \"updated_at\"\n\t- \"bf\": before\n\t- \"af\": after\n- \"updated_at_duration\"\n\t- \"bf\": before\n\t- \"af\": after\n","consumes":["application/json"],"produces":["application/json"],"tags":["repositories"],"summary":"Create a pruning policy for a repository","operationId":"CreateRepoPruningPolicy","parameters":[{"type":"string","description":"namespace/owner of repository","name":"namespace","in":"path","required":true},{"type":"string","description":"name of repository","name":"reponame","in":"path","required":true},{"type":"boolean","default":true,"description":"Whether to evaluate the policy on creation","name":"initialEvaluation","in":"query"},{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/forms.CreatePruningPolicy"}}],"responses":{"201":{"description":"success","schema":{"$ref":"#/definitions/responses.PruningPolicy"}},"400":{"description":"REMOTE_REGISTRY_INVALID_PERMISSIONS: Remote user not authorized to access the requested resource."},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"403":{"description":"NOT_AUTHORIZED: The client is not authorized."},"404":{"description":"INVALID_PRUNING_POLICY: The given pruning policy is invalid."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"}}}},"/api/v0/repositories/{namespace}/{reponame}/pruningPolicies/test":{"post":{"description":"*Authorization:* Client must be authenticated as a user who has \"admin\" level access to the repository.","consumes":["application/json"],"produces":["application/json"],"tags":["repositories"],"summary":"Test a pruning policy for a repository","operationId":"TestRepoPruningPolicy","parameters":[{"type":"string","description":"namespace/owner of repository","name":"namespace","in":"path","required":true},{"type":"string","description":"name of repository","name":"reponame","in":"path","required":true},{"type":"string","description":"The ID of the first record on the page","name":"pageStart","in":"query"},{"type":"integer","default":10,"description":"Maximum number of results to return","name":"pageSize","in":"query"},{"type":"boolean","default":false,"description":"Whether to include the resource count in the response header","name":"count","in":"query"},{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/forms.CreatePruningPolicy"}}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/responses.ThinTag"}}},"400":{"description":"REMOTE_REGISTRY_INVALID_PERMISSIONS: Remote user not authorized to access the requested resource."},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"403":{"description":"NOT_AUTHORIZED: The client is not authorized."},"404":{"description":"INVALID_PRUNING_POLICY: The given pruning policy is invalid."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"default":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/responses.ThinTag"}}}}}},"/api/v0/repositories/{namespace}/{reponame}/pruningPolicies/{pruningpolicyid}":{"get":{"description":"\n*Authorization:* Client must be authenticated as a user who has visibility to the local repository.\n\t\t","consumes":["application/json"],"produces":["application/json"],"tags":["repositories"],"summary":"Retrieve a specific pruning policy for a repository","operationId":"GetRepoPruningPolicy","parameters":[{"type":"string","description":"namespace/owner of repository","name":"namespace","in":"path","required":true},{"type":"string","description":"name of repository","name":"reponame","in":"path","required":true},{"type":"string","description":"pruning policy id","name":"pruningpolicyid","in":"path","required":true}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/responses.PruningPolicy"}},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"403":{"description":"NOT_AUTHORIZED: The client is not authorized."},"404":{"description":"NO_SUCH_PRUNING_POLICY: A pruning policy with the given id does not exist."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"default":{"description":"OK","schema":{"$ref":"#/definitions/responses.PruningPolicy"}}}},"put":{"description":"\n*Authorization:* Client must be authenticated as a user who has \"admin\" level access to the repository.\n\t\t","consumes":["application/json"],"produces":["application/json"],"tags":["repositories"],"summary":"Updates a specific pruning policy for a repository","operationId":"UpdateRepoPruningPolicy","parameters":[{"type":"string","description":"namespace/owner of repository","name":"namespace","in":"path","required":true},{"type":"string","description":"name of repository","name":"reponame","in":"path","required":true},{"type":"string","description":"pruning policy id","name":"pruningpolicyid","in":"path","required":true},{"type":"boolean","default":true,"description":"Whether to evaluate the policy on creation","name":"initialEvaluation","in":"query"},{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/forms.UpdatePruningPolicy"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/responses.PruningPolicy"}},"400":{"description":"REMOTE_REGISTRY_INVALID_PERMISSIONS: Remote user not authorized to access the requested resource."},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"403":{"description":"NOT_AUTHORIZED: The client is not authorized."},"404":{"description":"INVALID_PRUNING_POLICY: The given pruning policy is invalid."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"default":{"description":"OK","schema":{"$ref":"#/definitions/responses.PruningPolicy"}}}},"delete":{"description":"\n*Authorization:* Client must be authenticated as a user who has \"admin\" level access to the repository.\n\t\t","consumes":["application/json"],"produces":["application/json"],"tags":["repositories"],"summary":"Deletes a specific pruning policy for a repository","operationId":"DeleteRepoPruningPolicy","parameters":[{"type":"string","description":"namespace/owner of repository","name":"namespace","in":"path","required":true},{"type":"string","description":"name of repository","name":"reponame","in":"path","required":true},{"type":"string","description":"pruning policy id","name":"pruningpolicyid","in":"path","required":true}],"responses":{"204":{"description":"success or pruning policy does not exist"},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"403":{"description":"NOT_AUTHORIZED: The client is not authorized."},"404":{"description":"NO_SUCH_PRUNING_POLICY: A pruning policy with the given id does not exist."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"}}}},"/api/v0/repositories/{namespace}/{reponame}/pushMirroringPolicies":{"get":{"description":"\n*Authorization:* Client must be authenticated as a user who has visibility to local repository.\n\t\t","consumes":["application/json"],"produces":["application/json"],"tags":["repositories"],"summary":"List the push mirroring policies for a repository","operationId":"ListRepoPushMirroringPolicies","parameters":[{"type":"string","description":"namespace/owner of repository","name":"namespace","in":"path","required":true},{"type":"string","description":"name of repository","name":"reponame","in":"path","required":true}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/responses.PushMirroringPolicy"}}},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"403":{"description":"NOT_AUTHORIZED: The client is not authorized."},"404":{"description":"NO_SUCH_REPOSITORY: A repository with the given name does not exist."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"default":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/responses.PushMirroringPolicy"}}}}},"post":{"description":"*Authorization:* Client must be authenticated as a user who has \"admin\" level access to the local repository and credentials to the remote repository.\nRules for the policy can be on the following fields and their respective operators:\n- \"tag\"\n\t- \"eq\": equals\n\t- \"sw\": starts with\n\t- \"ew\": ends with\n\t- \"c\": contains\n\t- \"oo\": one of\n\t- \"noo\": not one of\n- \"license.name\"\n\t- \"oo\": one of\n\t- \"noo\": not one of\n- \"component.name\"\n\t- \"oo\": one of\n\t- \"noo\": not one of\n- \"vulnerability_all\"\n\t- \"gte\": greater than or equals\n\t- \"gt\": greater than\n\t- \"eq\": equals\n\t- \"neq\": not equals\n\t- \"lte\": less than or equals\n\t- \"lt\": less than\n- \"vulnerability_critical\"\n\t- \"gte\": greater than or equals\n\t- \"gt\": greater than\n\t- \"eq\": equals\n\t- \"neq\": not equals\n\t- \"lte\": less than or equals\n\t- \"lt\": less than\n- \"vulnerability_major\"\n\t- \"gte\": greater than or equals\n\t- \"gt\": greater than\n\t- \"eq\": equals\n\t- \"neq\": not equals\n\t- \"lte\": less than or equals\n\t- \"lt\": less than\n- \"vulnerability_minor\"\n\t- \"gte\": greater than or equals\n\t- \"gt\": greater than\n\t- \"eq\": equals\n\t- \"neq\": not equals\n\t- \"lte\": less than or equals\n\t- \"lt\": less than\n- \"updated_at\"\n\t- \"bf\": before\n\t- \"af\": after\n- \"updated_at_duration\"\n\t- \"bf\": before\n\t- \"af\": after\n\nThe tag template is used to rename the tag in the target repository. The\nfollowing symbols are allowed:\n- \"%n\": The tag to promote (e.g. 1, 4.5, latest)\n- \"%A\": Day of the week (e.g. Sunday, Monday)\n- \"%a\": Day of the week, abbreviated (e.g. Sun, Mon , Tue)\n- \"%w\": Day of the week, as a number (e.g. 0, 1, 6)\n- \"%d\": Number for the day of the month (e.g. 01, 15, 31)\n- \"%B\": Month (e.g. January, December)\n- \"%b\": Month, abbreviated (e.g. Jan, Jun, Dec)\n- \"%m\": Month, as a number (e.g. 01, 06, 12)\n- \"%Y\": Year (e.g. 1999, 2015, 2048)\n- \"%y\": Year, two digits (e.g. 99, 15, 48)\n- \"%H\": Hour, in 24 hour format (e.g. 00, 12, 23)\n- \"%I\": Hour, in 12 hour format (e.g. 01, 10, 10)\n- \"%p\": Period of the day (e.g. AM, PM)\n- \"%M\": Minute (e.g. 00, 10, 59)\n- \"%S\": Second (e.g. 00, 10, 59)\n- \"%f\": Microsecond (e.g. 000000, 999999)\n- \"%Z\": Name for the timezone (e.g. UTC, PST, EST)\n- \"%j\": Day of the year (e.g. 001, 200, 366)\n- \"%W\": Week of the year (e.g. 00, 10 , 53)\n","consumes":["application/json"],"produces":["application/json"],"tags":["repositories"],"summary":"Create a push mirroring policy for a repository","operationId":"CreateRepoPushMirroringPolicy","parameters":[{"type":"string","description":"namespace/owner of repository","name":"namespace","in":"path","required":true},{"type":"string","description":"name of repository","name":"reponame","in":"path","required":true},{"type":"boolean","default":true,"description":"Whether to evaluate the policy on creation","name":"initialEvaluation","in":"query"},{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/forms.CreatePushMirroringPolicy"}}],"responses":{"201":{"description":"success","schema":{"$ref":"#/definitions/responses.PushMirroringPolicy"}},"400":{"description":"REMOTE_REGISTRY_INVALID_PERMISSIONS: Remote user not authorized to access the requested resource."},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"403":{"description":"NOT_AUTHORIZED: The client is not authorized."},"404":{"description":"INVALID_PUSH_MIRRORING_POLICY: The given push mirroring policy is invalid."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"}}}},"/api/v0/repositories/{namespace}/{reponame}/pushMirroringPolicies/{pushmirroringpolicyid}":{"get":{"description":"\n*Authorization:* Client must be authenticated as a user who has visibility to the local repository.\n\t\t","consumes":["application/json"],"produces":["application/json"],"tags":["repositories"],"summary":"Retrieve a specific push mirroring policy for a repository","operationId":"GetRepoPushMirroringPolicy","parameters":[{"type":"string","description":"namespace/owner of repository","name":"namespace","in":"path","required":true},{"type":"string","description":"name of repository","name":"reponame","in":"path","required":true},{"type":"string","description":"push mirroring policy id","name":"pushmirroringpolicyid","in":"path","required":true}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/responses.PushMirroringPolicy"}},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"403":{"description":"NOT_AUTHORIZED: The client is not authorized."},"404":{"description":"NO_SUCH_PUSH_MIRRORING_POLICY: A push mirroring policy with the given id does not exist."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"default":{"description":"OK","schema":{"$ref":"#/definitions/responses.PushMirroringPolicy"}}}},"put":{"description":"\n*Authorization:* Client must be authenticated as a user who has \"admin\" level access to the local repository and credentials to the remote repository.\n\t\t","consumes":["application/json"],"produces":["application/json"],"tags":["repositories"],"summary":"Updates a specific push mirroring policy for a repository","operationId":"UpdateRepoPushMirroringPolicy","parameters":[{"type":"string","description":"namespace/owner of repository","name":"namespace","in":"path","required":true},{"type":"string","description":"name of repository","name":"reponame","in":"path","required":true},{"type":"string","description":"push mirroring policy id","name":"pushmirroringpolicyid","in":"path","required":true},{"type":"boolean","default":true,"description":"Whether to evaluate the policy on creation","name":"initialEvaluation","in":"query"},{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/forms.UpdatePushMirroringPolicy"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/responses.PushMirroringPolicy"}},"400":{"description":"REMOTE_REGISTRY_INVALID_PERMISSIONS: Remote user not authorized to access the requested resource."},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"403":{"description":"NOT_AUTHORIZED: The client is not authorized."},"404":{"description":"INVALID_PUSH_MIRRORING_POLICY: The given push mirroring policy is invalid."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"default":{"description":"OK","schema":{"$ref":"#/definitions/responses.PushMirroringPolicy"}}}},"delete":{"description":"\n*Authorization:* Client must be authenticated as a user who has \"admin\" level access to the local repository.\n\t\t","consumes":["application/json"],"produces":["application/json"],"tags":["repositories"],"summary":"Deletes a specific push mirroring policy for a repository","operationId":"DeleteRepoPushMirroringPolicy","parameters":[{"type":"string","description":"namespace/owner of repository","name":"namespace","in":"path","required":true},{"type":"string","description":"name of repository","name":"reponame","in":"path","required":true},{"type":"string","description":"push mirroring policy id","name":"pushmirroringpolicyid","in":"path","required":true}],"responses":{"204":{"description":"success or push mirroring policy does not exist"},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"403":{"description":"NOT_AUTHORIZED: The client is not authorized."},"404":{"description":"NO_SUCH_PUSH_MIRRORING_POLICY: A push mirroring policy with the given id does not exist."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"}}}},"/api/v0/repositories/{namespace}/{reponame}/tags":{"get":{"description":"\n*Authorization:* Client must be authenticated as a user who has visibility to the repository.\n\t\t","consumes":["application/json"],"produces":["application/json"],"tags":["repositories"],"summary":"List the available tags for a repository","operationId":"ListRepoTags","parameters":[{"type":"string","description":"namespace/owner of repository","name":"namespace","in":"path","required":true},{"type":"string","description":"name of repository","name":"reponame","in":"path","required":true},{"type":"string","description":"The ID of the first record on the page","name":"pageStart","in":"query"},{"type":"integer","default":10,"description":"Maximum number of results to return","name":"pageSize","in":"query"},{"type":"boolean","default":false,"description":"Whether to include the resource count in the response header","name":"count","in":"query"},{"type":"boolean","default":false,"description":"Whether to include the manifest for each tag","name":"includeManifests","in":"query"},{"type":"string","description":"The domain used to push tags to DTR. Must be set to obtain/manipulate Notary related information","name":"domain","in":"query"}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/responses.ListTag"}}},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"403":{"description":"NOT_AUTHORIZED: The client is not authorized."},"404":{"description":"NO_SUCH_REPOSITORY: A repository with the given name does not exist."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"default":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/responses.ListTag"}}}}}},"/api/v0/repositories/{namespace}/{reponame}/tags/{reference}":{"get":{"description":"\n*Authorization:* Client must be authenticated as a user who has visibility to the repository.\nIf the ref given is to a manifest list, multiple Tag objects will be returned, one for each manifest in the list.\nSimilarly if the ref is a digest the API will return all tags referencing that digest.\n\t\t","consumes":["application/json"],"produces":["application/json"],"tags":["repositories"],"summary":"Retrieve a specific tag for a repository","operationId":"ListRepoTag","parameters":[{"type":"string","description":"namespace/owner of repository","name":"namespace","in":"path","required":true},{"type":"string","description":"name of repository","name":"reponame","in":"path","required":true},{"type":"string","description":"digest or tag for an image manifest","name":"reference","in":"path","required":true},{"type":"string","description":"The domain used to push tags to DTR. Must be set to obtain/manipulate Notary related information","name":"domain","in":"query"},{"type":"string","description":"Operating system of the tag","name":"os","in":"query"},{"type":"string","description":"Architecture of the tag","name":"arch","in":"query"}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/responses.Tag"}}},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"403":{"description":"NOT_AUTHORIZED: The client is not authorized."},"404":{"description":"NO_SUCH_REF: A ref with the given name does not exist for the given repository."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"default":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/responses.Tag"}}}}}},"/api/v0/repositories/{namespace}/{reponame}/tags/{tag}":{"delete":{"description":"\n*Authorization:* Client must be authenticated as a user who has \"write\" level access to the repository.\n\t\t","consumes":["application/json"],"produces":["application/json"],"tags":["repositories"],"summary":"Delete a tag for a repository","operationId":"DeleteRepoTag","parameters":[{"type":"string","description":"namespace/owner of repository","name":"namespace","in":"path","required":true},{"type":"string","description":"name of repository","name":"reponame","in":"path","required":true},{"type":"string","description":"tag name","name":"tag","in":"path","required":true},{"type":"string","description":"The domain used to push tags to DTR. Must be set to obtain/manipulate Notary related information","name":"domain","in":"query"}],"responses":{"204":{"description":"success"},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"403":{"description":"NOT_AUTHORIZED: The client is not authorized."},"404":{"description":"NO_SUCH_TAG: A tag with the given name does not exist for the given repository."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"409":{"description":"TAG_IN_NOTARY: This tag is in notary and can't be deleted until it is removed from notary"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"}}}},"/api/v0/repositories/{namespace}/{reponame}/tags/{tag}/promotion":{"post":{"description":"\n*Authorization:* Client must be authenticated as a user who has \"read\" level access to the source repository and \"write\" level access to the target repository.\n\t\t","consumes":["application/json"],"produces":["application/json"],"tags":["repositories"],"summary":"Promotes a specific tag for a repository","operationId":"CreateRepoTagPromotion","parameters":[{"type":"string","description":"namespace/owner of repository","name":"namespace","in":"path","required":true},{"type":"string","description":"name of repository","name":"reponame","in":"path","required":true},{"type":"string","description":"tag name","name":"tag","in":"path","required":true},{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/forms.CreatePromotion"}}],"responses":{"201":{"description":"success","schema":{"$ref":"#/definitions/responses.Promotion"}},"400":{"description":"INVALID_TAG_NAME: The given tag name is either too long or contains illegal characters."},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"403":{"description":"NOT_AUTHORIZED: The client is not authorized."},"404":{"description":"NO_SUCH_TAG: A tag with the given name does not exist for the given repository."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"}}}},"/api/v0/repositories/{namespace}/{reponame}/tags/{tag}/pushMirroring":{"post":{"description":"\n*Authorization:* Client must be authenticated as a user who has \"read\" level access to the local repository and \"write\" level access to the remote repository.\n\t\t","consumes":["application/json"],"produces":["application/json"],"tags":["repositories"],"summary":"Mirrors a local tag by pushing to a remote repository","operationId":"CreateRepoTagPushMirroring","parameters":[{"type":"string","description":"namespace/owner of repository","name":"namespace","in":"path","required":true},{"type":"string","description":"name of repository","name":"reponame","in":"path","required":true},{"type":"string","description":"tag name","name":"tag","in":"path","required":true},{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/forms.CreateMirroring"}}],"responses":{"201":{"description":"success","schema":{"$ref":"#/definitions/responses.Mirroring"}},"400":{"description":"INVALID_TAG_NAME: The given tag name is either too long or contains illegal characters."},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"403":{"description":"NOT_AUTHORIZED: The client is not authorized."},"404":{"description":"NO_SUCH_TAG: A tag with the given name does not exist for the given repository."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"}}}},"/api/v0/repositories/{namespace}/{reponame}/teamAccess":{"get":{"description":"\n*Authorization:* Client must be authenticated as a user who has \"admin\" level access to the repository.\n\t\t","consumes":["application/json"],"produces":["application/json"],"tags":["repositories"],"summary":"List teams granted access to an organization-owned repository","operationId":"ListRepoTeamAccess","parameters":[{"type":"string","description":"namespace/owner of repository","name":"namespace","in":"path","required":true},{"type":"string","description":"name of repository","name":"reponame","in":"path","required":true},{"type":"string","description":"The ID of the first record on the page","name":"pageStart","in":"query"},{"type":"integer","default":10,"description":"Maximum number of results to return","name":"pageSize","in":"query"},{"type":"boolean","default":false,"description":"Whether to include the resource count in the response header","name":"count","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/responses.ListRepoTeamAccess"}},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"403":{"description":"NOT_AUTHORIZED: The client is not authorized."},"404":{"description":"NO_SUCH_REPOSITORY: A repository with the given name does not exist."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"default":{"description":"OK","schema":{"$ref":"#/definitions/responses.ListRepoTeamAccess"}}}}},"/api/v0/repositories/{namespace}/{reponame}/teamAccess/{teamname}":{"put":{"description":"\n*Authorization:* Client must be authenticated as a user who has \"admin\" level access to the repository.\n\t\t","consumes":["application/json"],"produces":["application/json"],"tags":["repositories"],"summary":"Set a team's access to an orgnization-owned repository","operationId":"GrantRepoTeamAccess","parameters":[{"type":"string","description":"namespace/owner of repository","name":"namespace","in":"path","required":true},{"type":"string","description":"name of repository","name":"reponame","in":"path","required":true},{"type":"string","description":"team name","name":"teamname","in":"path","required":true},{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/forms.Access"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/responses.ListRepoTeamAccess"}},"400":{"description":"the team does not belong to the organization"},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"403":{"description":"NOT_AUTHORIZED: The client is not authorized."},"404":{"description":"NO_SUCH_TEAM: A team with the given name does not exist in the organization."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"default":{"description":"OK","schema":{"$ref":"#/definitions/responses.ListRepoTeamAccess"}}}},"delete":{"description":"\n*Authorization:* Client must be authenticated as a user who has \"admin\" level access to the repository.\n\t\t","consumes":["application/json"],"produces":["application/json"],"tags":["repositories"],"summary":"Revoke a team's acccess to an organization-owned repository","operationId":"RevokeRepoTeamAccess","parameters":[{"type":"string","description":"namespace/owner of repository","name":"namespace","in":"path","required":true},{"type":"string","description":"name of repository","name":"reponame","in":"path","required":true},{"type":"string","description":"team name","name":"teamname","in":"path","required":true}],"responses":{"204":{"description":"success or the team is not in the access list or there is no such team in the organization"},"400":{"description":"the repository is not owned by an organization"},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"403":{"description":"NOT_AUTHORIZED: The client is not authorized."},"404":{"description":"NO_SUCH_TEAM: A team with the given name does not exist in the organization."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"}}}},"/api/v0/repositories/{namespace}/{reponame}/webhooks":{"get":{"description":"\n*Authorization:* Client must be authenticated as a user who has \"admin\" level access to the repository.\n\t\t","consumes":["application/json"],"produces":["application/json"],"tags":["repositories"],"summary":"List the webhook subscriptions for a repository","operationId":"ListRepoWebhooks","parameters":[{"type":"string","description":"namespace/owner of repository","name":"namespace","in":"path","required":true},{"type":"string","description":"name of repository","name":"reponame","in":"path","required":true}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/responses.Webhook"}}},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"403":{"description":"NOT_AUTHORIZED: The client is not authorized."},"404":{"description":"NO_SUCH_REPOSITORY: A repository with the given name does not exist."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"default":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/responses.Webhook"}}}}}},"/api/v0/repositoryNamespaces/{namespace}/teamAccess":{"get":{"description":"\n*Authorization:* Client must be authenticated as an admin or a member of the organization.\n\t\t","consumes":["application/json"],"produces":["application/json"],"tags":["repositoryNamespaces"],"summary":"List teams granted access to an organization-owned namespace of repositories","operationId":"ListRepoNamespaceTeamAccess","parameters":[{"type":"string","description":"namespace/owner of repository","name":"namespace","in":"path","required":true},{"type":"string","description":"The ID of the first record on the page","name":"pageStart","in":"query"},{"type":"integer","default":10,"description":"Maximum number of results to return","name":"pageSize","in":"query"},{"type":"boolean","default":false,"description":"Whether to include the resource count in the response header","name":"count","in":"query"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/responses.ListRepoNamespaceTeamAccess"}},"400":{"description":"the namespace is not owned by an organization"},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"403":{"description":"NOT_AUTHORIZED: The client is not authorized."},"404":{"description":"NO_SUCH_ACCOUNT: An account with the given name does not exist."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"default":{"description":"OK","schema":{"$ref":"#/definitions/responses.ListRepoNamespaceTeamAccess"}}}}},"/api/v0/repositoryNamespaces/{namespace}/teamAccess/{teamname}":{"get":{"description":"\n*Authorization:* Client must be authenticated as a user who has \"admin\" level\naccess to the namespace or is a member of the team.\n\t\t","consumes":["application/json"],"produces":["application/json"],"tags":["repositoryNamespaces"],"summary":"Get a team's granted access to an organization-owned namespace of repositories","operationId":"GetRepoNamespaceTeamAccess","parameters":[{"type":"string","description":"namespace/owner of repository","name":"namespace","in":"path","required":true},{"type":"string","description":"team name","name":"teamname","in":"path","required":true}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/responses.NamespaceTeamAccess"}},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"403":{"description":"NOT_AUTHORIZED: The client is not authorized."},"404":{"description":"NO_SUCH_NAMESPACE_TEAM_ACCESS: An access grant for the given team in the given namespace does not exist."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"default":{"description":"OK","schema":{"$ref":"#/definitions/responses.NamespaceTeamAccess"}}}},"put":{"description":"\n*Authorization:* Client must be authenticated as a user who has \"admin\" level access to the namespace.\n\t\t","consumes":["application/json"],"produces":["application/json"],"tags":["repositoryNamespaces"],"summary":"Set a team's access to an organization-owned namespace of repositories","operationId":"GrantRepoNamespaceTeamAccess","parameters":[{"type":"string","description":"namespace/owner of repository","name":"namespace","in":"path","required":true},{"type":"string","description":"team name","name":"teamname","in":"path","required":true},{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/forms.Access"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/responses.NamespaceTeamAccess"}},"400":{"description":"the team does not belong to the owning organization"},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"403":{"description":"NOT_AUTHORIZED: The client is not authorized."},"404":{"description":"NO_SUCH_TEAM: A team with the given name does not exist in the organization."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"default":{"description":"OK","schema":{"$ref":"#/definitions/responses.NamespaceTeamAccess"}}}},"delete":{"description":"\n*Authorization:* Client must be authenticated as a user who has \"admin\" level access to the namespace.\n\t\t","consumes":["application/json"],"produces":["application/json"],"tags":["repositoryNamespaces"],"summary":"Revoke a team's access to an organization-owned namespace of repositories","operationId":"RevokeRepoNamespaceTeamAccess","parameters":[{"type":"string","description":"namespace/owner of repository","name":"namespace","in":"path","required":true},{"type":"string","description":"team name","name":"teamname","in":"path","required":true}],"responses":{"204":{"description":"success or the team does not exist in the access list or there is no such team in the organization"},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"403":{"description":"NOT_AUTHORIZED: The client is not authorized."},"404":{"description":"NO_SUCH_TEAM: A team with the given name does not exist in the organization."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"}}}},"/api/v0/webhooks":{"get":{"consumes":["application/json"],"produces":["application/json"],"tags":["webhooks"],"summary":"List Webhooks","operationId":"ListWebhooks","parameters":[{"type":"string","default":"any","description":"The type of webhook to list","name":"webhookType","in":"query"}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/responses.Webhook"}}},"400":{"description":"INVALID_JSON: Unable to parse JSON"},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"403":{"description":"NOT_AUTHORIZED: The client is not authorized."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"default":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/responses.Webhook"}}}}},"post":{"consumes":["application/json"],"produces":["application/json"],"tags":["webhooks"],"summary":"Create Webhook","operationId":"CreateWebhook","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/forms.Webhook"}}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/responses.Webhook"}}},"400":{"description":"INVALID_JSON: Unable to parse JSON"},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"403":{"description":"NOT_AUTHORIZED: The client is not authorized."},"404":{"description":"NO_SUCH_ACCOUNT: An account with the given name does not exist."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"default":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/responses.Webhook"}}}}}},"/api/v0/webhooks/test":{"post":{"consumes":["application/json"],"produces":["application/json"],"tags":["webhooks"],"summary":"Test Webhook","operationId":"TestWebhook","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/forms.WebhookTestPayload"}}],"responses":{"200":{"description":"OK"},"400":{"description":"INVALID_JSON: Unable to parse JSON"},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"403":{"description":"NOT_AUTHORIZED: The client is not authorized."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"default":{"description":"OK"}}}},"/api/v0/webhooks/update":{"post":{"consumes":["application/json"],"produces":["application/json"],"tags":["webhooks"],"summary":"Update Webhook","operationId":"UpdateWebhook","parameters":[{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/forms.WebhookUpdate"}}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/responses.Webhook"}}},"400":{"description":"INVALID_JSON: Unable to parse JSON"},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"403":{"description":"NOT_AUTHORIZED: The client is not authorized."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"default":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/responses.Webhook"}}}}}},"/api/v0/webhooks/{webhook}":{"delete":{"consumes":["application/json"],"produces":["application/json"],"tags":["webhooks"],"summary":"Delete Webhook","operationId":"DeleteWebhook","parameters":[{"type":"string","description":"webhook subscription ID","name":"webhook","in":"path","required":true}],"responses":{"200":{"description":"OK"},"401":{"description":"NOT_AUTHENTICATED: The client is not authenticated."},"403":{"description":"NOT_AUTHORIZED: The client is not authorized."},"404":{"description":"NO_SUCH_WEBHOOK: A webhook subscription with the given name does not exist for the given repository."},"405":{"description":"NOT_ALLOWED: Method Not Allowed"},"406":{"description":"NOT_ACCEPTABLE: Not Acceptable"},"415":{"description":"UNSUPPORTED_MEDIA_TYPE: Unsupported Media Type"},"default":{"description":"OK"}}}},"/api/v0/workers":{"get":{"consumes":["application/json"],"produces":["application/json"],"tags":["workers"],"summary":"List all workers","operationId":"ListWorkers","responses":{"200":{"description":"Success, list of workers returned.","schema":{"$ref":"#/definitions/tmpresponses.Workers"}},"default":{"description":"Success, list of workers returned.","schema":{"$ref":"#/definitions/tmpresponses.Workers"}}}}},"/api/v0/workers/{id}/capacity":{"post":{"consumes":["application/json"],"produces":["application/json"],"tags":["workers"],"summary":"Update the capacity for a worker","operationId":"UpdateWorkerCapacity","parameters":[{"type":"string","description":"ID of worker to update","name":"id","in":"path","required":true},{"name":"body","in":"body","required":true,"schema":{"$ref":"#/definitions/tmpforms.UpdateWorkerCapacity"}}],"responses":{"202":{"description":"Success."}}}}},"definitions":{"forms.Access":{"required":["accessLevel"],"properties":{"accessLevel":{"type":"string","enum":["read-only","read-write","admin"]}}},"forms.CreateAPIToken":{"properties":{"tokenLabel":{"type":"string"}}},"forms.CreateContentCache":{"required":["name","host"],"properties":{"host":{"type":"string"},"name":{"type":"string"}}},"forms.CreateMirroring":{"required":["remoteHost","remoteRepository","remoteCA","skipTLSVerification","remoteTag","username","password","authToken"],"properties":{"authToken":{"type":"string"},"password":{"type":"string"},"remoteCA":{"type":"string"},"remoteHost":{"type":"string"},"remoteRepository":{"type":"string"},"remoteTag":{"type":"string"},"skipTLSVerification":{"type":"boolean"},"username":{"type":"string"}}},"forms.CreatePollMirroringPolicy":{"required":["remoteHost","remoteRepository","remoteCA","skipTLSVerification","enabled","username","password","authToken"],"properties":{"authToken":{"type":"string"},"enabled":{"type":"boolean"},"password":{"type":"string"},"remoteCA":{"type":"string"},"remoteHost":{"type":"string"},"remoteRepository":{"type":"string"},"skipTLSVerification":{"type":"boolean"},"username":{"type":"string"}}},"forms.CreatePromotion":{"required":["targetRepository","targetTag"],"properties":{"targetRepository":{"type":"string"},"targetTag":{"type":"string"}}},"forms.CreatePromotionPolicy":{"required":["rules","targetRepository","tagTemplate","enabled"],"properties":{"enabled":{"type":"boolean"},"rules":{"type":"array","items":{"$ref":"#/definitions/ruleengine.Rule"}},"tagTemplate":{"type":"string"},"targetRepository":{"type":"string"}}},"forms.CreatePruningPolicy":{"required":["rules","enabled"],"properties":{"enabled":{"type":"boolean"},"rules":{"type":"array","items":{"$ref":"#/definitions/ruleengine.Rule"}}}},"forms.CreatePushMirroringPolicy":{"required":["rules","remoteHost","remoteRepository","remoteCA","skipTLSVerification","tagTemplate","enabled","username","password","authToken"],"properties":{"authToken":{"type":"string"},"enabled":{"type":"boolean"},"password":{"type":"string"},"remoteCA":{"type":"string"},"remoteHost":{"type":"string"},"remoteRepository":{"type":"string"},"rules":{"type":"array","items":{"$ref":"#/definitions/ruleengine.Rule"}},"skipTLSVerification":{"type":"boolean"},"tagTemplate":{"type":"string"},"username":{"type":"string"}}},"forms.CreateRemoteRegistryCheck":{"required":["remoteHost","remoteRepository","remoteCA","skipTLSVerification","username","password","authToken"],"properties":{"authToken":{"type":"string"},"password":{"type":"string"},"remoteCA":{"type":"string"},"remoteHost":{"type":"string"},"remoteRepository":{"type":"string"},"skipTLSVerification":{"type":"boolean"},"username":{"type":"string"}}},"forms.CreateRepo":{"required":["name","shortDescription","longDescription","scanOnPush","immutableTags","enableManifestLists","tagLimit"],"properties":{"enableManifestLists":{"type":"boolean"},"immutableTags":{"type":"boolean"},"longDescription":{"type":"string"},"name":{"type":"string"},"scanOnPush":{"type":"boolean"},"shortDescription":{"type":"string"},"tagLimit":{"type":"integer","format":"integer"},"visibility":{"type":"string","enum":["public","private"]}}},"forms.DeleteMirroringPolicyIDs":{"required":["id"],"properties":{"id":{"type":"string"}}},"forms.EmptyForm":{},"forms.Image":{"required":["name","digest"],"properties":{"digest":{"type":"string"},"name":{"type":"string"}}},"forms.ImagesForm":{"required":["images"],"properties":{"images":{"type":"array","items":{"$ref":"#/definitions/forms.Image"}}}},"forms.ScanOptions":{"required":["scan","check"],"properties":{"check":{"type":"boolean"},"scan":{"type":"boolean"}}},"forms.Settings":{"required":["dtrHost","sso","createRepositoryOnPush","disableUpgrades","reportAnalytics","anonymizeAnalytics","disableBackupWarning","webTLSCert","webTLSKey","webTLSCA","scanningEnabled","scanningSyncOnline","scanningDeadline","scanningEnableAutoRecheck","jobHistoryCompactionEnabled","jobHistoryToKeep","jobHistoryMaxAge","repoEventHistoryCompactionEnabled","repoEventHistoryToKeep","repoEventHistoryMaxAge","readOnlyRegistry"],"properties":{"anonymizeAnalytics":{"type":"boolean"},"createRepositoryOnPush":{"type":"boolean"},"disableBackupWarning":{"type":"boolean"},"disableUpgrades":{"type":"boolean"},"dtrHost":{"type":"string"},"jobHistoryCompactionEnabled":{"type":"boolean"},"jobHistoryMaxAge":{"type":"string"},"jobHistoryToKeep":{"type":"integer","format":"int64"},"readOnlyRegistry":{"type":"boolean"},"repoEventHistoryCompactionEnabled":{"type":"boolean"},"repoEventHistoryMaxAge":{"type":"string"},"repoEventHistoryToKeep":{"type":"integer","format":"int64"},"reportAnalytics":{"type":"boolean"},"scanningDeadline":{"type":"integer"},"scanningEnableAutoRecheck":{"type":"boolean"},"scanningEnabled":{"type":"boolean"},"scanningSyncOnline":{"type":"boolean"},"sso":{"type":"boolean"},"webTLSCA":{"type":"string"},"webTLSCert":{"type":"string"},"webTLSKey":{"type":"string"}}},"forms.ToggleScanOnPush":{"required":["scanOnPush"],"properties":{"scanOnPush":{"type":"boolean"}}},"forms.UpdateAPIToken":{"properties":{"isActive":{"type":"boolean"},"tokenLabel":{"type":"string"}}},"forms.UpdatePollMirroringPolicy":{"properties":{"authToken":{"type":"string"},"enabled":{"type":"boolean"},"password":{"type":"string"},"remoteCA":{"type":"string"},"remoteHost":{"type":"string"},"remoteRepository":{"type":"string"},"skipTLSVerification":{"type":"boolean"},"username":{"type":"string"}}},"forms.UpdatePromotionPolicy":{"properties":{"enabled":{"type":"boolean"},"rules":{"type":"array","items":{"$ref":"#/definitions/ruleengine.Rule"}},"tagTemplate":{"type":"string"},"targetRepository":{"type":"string"}}},"forms.UpdatePruningPolicy":{"properties":{"enabled":{"type":"boolean"},"rules":{"type":"array","items":{"$ref":"#/definitions/ruleengine.Rule"}}}},"forms.UpdatePushMirroringPolicy":{"properties":{"authToken":{"type":"string"},"enabled":{"type":"boolean"},"password":{"type":"string"},"remoteCA":{"type":"string"},"remoteHost":{"type":"string"},"remoteRepository":{"type":"string"},"rules":{"type":"array","items":{"$ref":"#/definitions/ruleengine.Rule"}},"skipTLSVerification":{"type":"boolean"},"tagTemplate":{"type":"string"},"username":{"type":"string"}}},"forms.UpdateRepo":{"required":["immutableTags"],"properties":{"enableManifestLists":{"type":"boolean"},"immutableTags":{"type":"boolean"},"longDescription":{"type":"string"},"scanOnPush":{"type":"boolean"},"shortDescription":{"type":"string"},"tagLimit":{"type":"integer","format":"integer"},"visibility":{"type":"string","enum":["public","private"]}}},"forms.UserSettings":{"properties":{"contentCacheUUID":{"type":"string"}}},"forms.VulnOverrideOption":{"required":["component","componentVersion","cve","notes"],"properties":{"component":{"type":"string"},"componentVersion":{"type":"string"},"cve":{"type":"string"},"notes":{"type":"string"}}},"forms.Webhook":{"required":["endpoint","tlsCert","skipTLSVerification"],"properties":{"endpoint":{"type":"string"},"key":{"type":"string"},"skipTLSVerification":{"type":"boolean"},"tlsCert":{"type":"string"},"type":{"type":"string","enum":["TAG_PUSH","TAG_PULL","TAG_DELETE","PROMOTION","PUSH_MIRRORING","POLL_MIRRORING","MANIFEST_PUSH","MANIFEST_PULL","MANIFEST_DELETE","REPO_EVENT","SCAN_COMPLETED","SCAN_FAILED","SCANNER_UPDATE_COMPLETED"]}}},"forms.WebhookTestPayload":{"required":["type","endpoint","tlsCert","skipTLSVerification"],"properties":{"endpoint":{"type":"string"},"skipTLSVerification":{"type":"boolean"},"tlsCert":{"type":"string"},"type":{"type":"string"}}},"forms.WebhookUpdate":{"required":["id","inactive","tlsCert","skipTLSVerification"],"properties":{"id":{"type":"string"},"inactive":{"type":"boolean"},"skipTLSVerification":{"type":"boolean"},"tlsCert":{"type":"string"}}},"responses.APIToken":{"required":["hashedToken","tokenLabel","isActive","lastUsed","createdAt","generatedBy","creatorUa"],"properties":{"createdAt":{"type":"string","format":"date-time"},"creatorUa":{"type":"string"},"generatedBy":{"type":"string"},"hashedToken":{"type":"string"},"isActive":{"type":"boolean"},"lastUsed":{"type":"string","format":"date-time"},"tokenLabel":{"type":"string"}}},"responses.Account":{"required":["name","id","fullName","isOrg"],"properties":{"fullName":{"description":"Full Name of the account","type":"string"},"id":{"description":"ID of the account","type":"string"},"isActive":{"description":"Whether the user is active and can login (users only)","type":"boolean"},"isAdmin":{"description":"Whether the user is a system admin (users only)","type":"boolean"},"isImported":{"description":"Whether the user was imported from an upstream identity provider","type":"boolean"},"isOrg":{"description":"Whether the account is an organization (or user)","type":"boolean"},"membersCount":{"description":"The number of members of the organization","type":"integer","format":"int32"},"name":{"description":"Name of the account","type":"string"},"teamsCount":{"description":"The number of teams in the organization","type":"integer","format":"int32"}}},"responses.Alert":{"required":["message"],"properties":{"class":{"type":"string"},"id":{"type":"string"},"img":{"type":"string"},"message":{"type":"string"},"url":{"type":"string"}}},"responses.Autocomplete":{"properties":{"accountResults":{"type":"array","items":{"$ref":"#/definitions/responses.Account"}},"repositoryResults":{"type":"array","items":{"$ref":"#/definitions/responses.Repository"}}}},"responses.ClusterStatus":{"required":["rethink_system_tables","replica_health","replica_timestamp","replica_readonly","gc_lock_holder"],"properties":{"gc_lock_holder":{"type":"string"},"replica_health":{"type":"object","additionalProperties":{"type":"string"}},"replica_readonly":{"type":"object","additionalProperties":{"type":"boolean"}},"replica_timestamp":{"type":"object","additionalProperties":{"type":"string"}},"rethink_system_tables":{"type":"object"}}},"responses.Component":{"required":["component","version","vulns","fullpath"],"properties":{"component":{"type":"string"},"fullpath":{"type":"array","items":{"type":"string"}},"license":{"$ref":"#/definitions/responses.License"},"version":{"type":"string"},"vulns":{"type":"array","items":{"$ref":"#/definitions/responses.VulnerabilityDetails"}}}},"responses.ContentCache":{"required":["id","name","host"],"properties":{"host":{"type":"string"},"id":{"type":"string"},"name":{"type":"string"}}},"responses.DetailedSummary":{"required":["sha256sum"],"properties":{"components":{"type":"array","items":{"$ref":"#/definitions/responses.Component"}},"sha256sum":{"type":"string"}}},"responses.DockerRepository":{"required":["description","is_official","is_trusted","name","star_count"],"properties":{"description":{"type":"string"},"is_official":{"type":"boolean"},"is_trusted":{"type":"boolean"},"name":{"type":"string"},"star_count":{"type":"integer","format":"int32"}}},"responses.DockerSearch":{"required":["num_results","query","results"],"properties":{"num_results":{"type":"integer","format":"int32"},"query":{"type":"string"},"results":{"type":"array","items":{"$ref":"#/definitions/responses.DockerRepository"}}}},"responses.DockerfileLine":{"required":["line","layerDigest","size","isEmpty"],"properties":{"isEmpty":{"type":"boolean"},"layerDigest":{"type":"string"},"line":{"type":"string"},"mediaType":{"type":"string"},"size":{"type":"integer","format":"int64"},"urls":{"type":"array","items":{"type":"string"}}}},"responses.Events":{"required":["events"],"properties":{"events":{"type":"array","items":{"$ref":"#/definitions/schema.Event"}}}},"responses.Features":{"required":["scanningEnabled","scanningLicensed","promotionLicensed","mirroringLicensed","metadataStoreOptedIn","onlineGCEnabled","db_version","ucpHost"],"properties":{"db_version":{"type":"integer","format":"int32"},"metadataStoreOptedIn":{"type":"boolean"},"mirroringLicensed":{"type":"boolean"},"onlineGCEnabled":{"type":"boolean"},"promotionLicensed":{"type":"boolean"},"scanningEnabled":{"type":"boolean"},"scanningLicensed":{"type":"boolean"},"ucpHost":{"type":"string"}}},"responses.Language":{"required":["language"],"properties":{"language":{"type":"string"}}},"responses.LayerVulnOverride":{"required":["pk","digest","component","componentVersion","cve","notes"],"properties":{"component":{"type":"string"},"componentVersion":{"type":"string"},"cve":{"type":"string"},"digest":{"type":"string"},"notes":{"type":"string"},"pk":{"type":"string"}}},"responses.License":{"required":["name","type","url"],"properties":{"name":{"type":"string"},"type":{"type":"string"},"url":{"type":"string"}}},"responses.ListRepoNamespaceTeamAccess":{"required":["namespace","teamAccessList"],"properties":{"namespace":{"type":"string"},"teamAccessList":{"type":"array","items":{"$ref":"#/definitions/responses.TeamAccess"}}}},"responses.ListRepoTeamAccess":{"required":["repository","teamAccessList"],"properties":{"repository":{"$ref":"#/definitions/responses.Repository"},"teamAccessList":{"type":"array","items":{"$ref":"#/definitions/responses.TeamAccess"}}}},"responses.ListTag":{"required":["name","digest","author","updatedAt","createdAt","hashMismatch","inNotary","manifest"],"properties":{"author":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"digest":{"type":"string"},"hashMismatch":{"description":"true if the hashes from notary and registry don't match","type":"boolean"},"inNotary":{"description":"true if the tag exists in Notary","type":"boolean"},"manifest":{"$ref":"#/definitions/responses.Manifest"},"mirroring":{"$ref":"#/definitions/responses.Mirroring"},"name":{"type":"string"},"promotion":{"$ref":"#/definitions/responses.Promotion"},"updatedAt":{"type":"string","format":"date-time"}}},"responses.ListTeamRepoAccess":{"required":["team","repositoryAccessList"],"properties":{"repositoryAccessList":{"type":"array","items":{"$ref":"#/definitions/responses.RepoAccess"}},"team":{"$ref":"#/definitions/responses.Team"}}},"responses.Manifest":{"required":["digest"],"properties":{"architecture":{"type":"string"},"author":{"type":"string"},"configDigest":{"type":"string"},"configMediaType":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"digest":{"type":"string"},"dockerfile":{"type":"array","items":{"$ref":"#/definitions/responses.DockerfileLine"}},"mediaType":{"type":"string"},"os":{"type":"string"},"osVersion":{"type":"string"},"size":{"type":"integer","format":"int64"}}},"responses.Mirroring":{"required":["mirroringPolicyID","digest","remoteRepository","remoteTag"],"properties":{"digest":{"type":"string"},"mirroringPolicyID":{"type":"string"},"remoteRepository":{"type":"string"},"remoteTag":{"type":"string"}}},"responses.MirroringPolicy":{"required":["id","mirroringType","username","localRepository","remoteHost","remoteRepository","remoteCA","skipTLSVerification","enabled","lastMirroredAt","lastStatus"],"properties":{"enabled":{"type":"boolean"},"id":{"type":"string"},"lastMirroredAt":{"type":"string"},"lastStatus":{"$ref":"#/definitions/schema.MirroringStatus"},"localRepository":{"type":"string"},"mirroringType":{"type":"string"},"remoteCA":{"type":"string"},"remoteHost":{"type":"string"},"remoteRepository":{"type":"string"},"rules":{"type":"array","items":{"$ref":"#/definitions/ruleengine.Rule"}},"skipTLSVerification":{"type":"boolean"},"tagTemplate":{"type":"string"},"username":{"type":"string"}}},"responses.NamespaceTeamAccess":{"required":["accessLevel","team","namespace"],"properties":{"accessLevel":{"type":"string","enum":["read-only","read-write","admin"]},"namespace":{"type":"string"},"team":{"$ref":"#/definitions/responses.Team"}}},"responses.NautilusStatus":{"required":["state","scanner_version","scannerUpdatedAt","db_version","db_updated_at","lastDBUpdateFailed","lastVulnOverridesDBUpdateFailed"],"properties":{"db_updated_at":{"type":"string","format":"date-time"},"db_version":{"type":"integer","format":"int32"},"lastDBUpdateFailed":{"type":"boolean"},"lastVulnOverridesDBUpdateFailed":{"type":"boolean"},"replicas":{"type":"object","additionalProperties":{"$ref":"#/definitions/schema.ScannerFingerprint"}},"scannerUpdatedAt":{"type":"string","format":"date-time"},"scanner_version":{"type":"integer","format":"int32"},"state":{"type":"integer","format":"int32"}}},"responses.NewAPIToken":{"required":["token","hashedToken","tokenLabel","isActive","lastUsed","createdAt","generatedBy","creatorUa"],"properties":{"createdAt":{"type":"string","format":"date-time"},"creatorUa":{"type":"string"},"generatedBy":{"type":"string"},"hashedToken":{"type":"string"},"isActive":{"type":"boolean"},"lastUsed":{"type":"string","format":"date-time"},"token":{"type":"string"},"tokenLabel":{"type":"string"}}},"responses.Note":{"required":["reason","type"],"properties":{"reason":{"type":"string"},"type":{"type":"string"}}},"responses.OldScanSummary":{"required":["namespace","reponame","tag","critical","major","minor","last_scan_status","check_completed_at","should_rescan","has_foreign_layers"],"properties":{"check_completed_at":{"type":"string","format":"date-time"},"critical":{"type":"integer","format":"int32"},"has_foreign_layers":{"type":"boolean"},"last_scan_status":{"type":"integer","format":"int32"},"layer_details":{"type":"array","items":{"$ref":"#/definitions/responses.DetailedSummary"}},"major":{"type":"integer","format":"int32"},"minor":{"type":"integer","format":"int32"},"namespace":{"type":"string"},"reponame":{"type":"string"},"should_rescan":{"type":"boolean"},"tag":{"type":"string"}}},"responses.PollMirroringPolicy":{"required":["id","username","localRepository","remoteHost","remoteRepository","remoteCA","skipTLSVerification","enabled","lastMirroredAt","lastStatus"],"properties":{"enabled":{"type":"boolean"},"id":{"type":"string"},"lastMirroredAt":{"type":"string"},"lastStatus":{"$ref":"#/definitions/schema.MirroringStatus"},"localRepository":{"type":"string"},"remoteCA":{"type":"string"},"remoteHost":{"type":"string"},"remoteRepository":{"type":"string"},"skipTLSVerification":{"type":"boolean"},"username":{"type":"string"}}},"responses.Promotion":{"required":["promotionPolicyID","string","sourceRepository","sourceTag"],"properties":{"promotionPolicyID":{"type":"string"},"sourceRepository":{"type":"string"},"sourceTag":{"type":"string"},"string":{"type":"string"}}},"responses.PromotionPolicy":{"required":["id","rules","sourceRepository","targetRepository","tagTemplate","enabled","lastPromotedAt"],"properties":{"enabled":{"type":"boolean"},"id":{"type":"string"},"lastPromotedAt":{"type":"string","format":"date-time"},"rules":{"type":"array","items":{"$ref":"#/definitions/ruleengine.Rule"}},"sourceRepository":{"type":"string"},"tagTemplate":{"type":"string"},"targetRepository":{"type":"string"}}},"responses.PruningPolicy":{"required":["id","rules","repository","enabled","lastPrunedAt"],"properties":{"enabled":{"type":"boolean"},"id":{"type":"string"},"lastPrunedAt":{"type":"string"},"repository":{"type":"string"},"rules":{"type":"array","items":{"$ref":"#/definitions/ruleengine.Rule"}}}},"responses.PushMirroringPolicy":{"required":["id","rules","username","localRepository","remoteHost","remoteRepository","remoteCA","skipTLSVerification","tagTemplate","enabled","lastMirroredAt","lastStatus"],"properties":{"enabled":{"type":"boolean"},"id":{"type":"string"},"lastMirroredAt":{"type":"string"},"lastStatus":{"$ref":"#/definitions/schema.MirroringStatus"},"localRepository":{"type":"string"},"remoteCA":{"type":"string"},"remoteHost":{"type":"string"},"remoteRepository":{"type":"string"},"rules":{"type":"array","items":{"$ref":"#/definitions/ruleengine.Rule"}},"skipTLSVerification":{"type":"boolean"},"tagTemplate":{"type":"string"},"username":{"type":"string"}}},"responses.RemoteRegistryCheck":{"required":["registryType","permissions"],"properties":{"permissions":{"$ref":"#/definitions/responses.RemoteRepositoryPermissions"},"registryType":{"type":"string"}}},"responses.RemoteRepositoryPermissions":{"required":["read","write"],"properties":{"read":{"type":"boolean"},"write":{"type":"boolean"}}},"responses.ReplicaSettings":{"required":["HTTPPort","HTTPSPort","node"],"properties":{"HTTPPort":{"type":"integer"},"HTTPSPort":{"type":"integer"},"node":{"type":"string"}}},"responses.RepoAccess":{"required":["accessLevel","repository"],"properties":{"accessLevel":{"type":"string","enum":["read-only","read-write","admin"]},"repository":{"$ref":"#/definitions/responses.Repository"}}},"responses.RepoUserAccess":{"required":["accessLevel","user","repository"],"properties":{"accessLevel":{"type":"string","enum":["read-only","read-write","admin"]},"repository":{"$ref":"#/definitions/responses.Repository"},"user":{"$ref":"#/definitions/responses.Account"}}},"responses.Repositories":{"required":["repositories"],"properties":{"repositories":{"type":"array","items":{"$ref":"#/definitions/responses.Repository"}}}},"responses.Repository":{"required":["id","namespace","namespaceType","name","shortDescription","visibility","scanOnPush","immutableTags","enableManifestLists","pulls","pushes","tagLimit"],"properties":{"enableManifestLists":{"type":"boolean"},"id":{"type":"string"},"immutableTags":{"type":"boolean"},"longDescription":{"type":"string"},"name":{"type":"string"},"namespace":{"type":"string"},"namespaceType":{"type":"string","enum":["user","organization"]},"pulls":{"type":"integer","format":"integer"},"pushes":{"type":"integer","format":"integer"},"scanOnPush":{"type":"boolean"},"shortDescription":{"type":"string"},"tagLimit":{"type":"integer","format":"integer"},"visibility":{"type":"string","enum":["public","private"]}}},"responses.ScanSummary":{"required":["scannedImage","shouldRescan"],"properties":{"scanStatus":{"type":"integer","format":"int32"},"scannedImage":{"$ref":"#/definitions/schema.ScannedImage"},"shouldRescan":{"type":"boolean"}}},"responses.Settings":{"required":["dtrHost","sso","createRepositoryOnPush","replicaSettings","httpProxy","httpsProxy","noProxy","disableUpgrades","reportAnalytics","anonymizeAnalytics","disableBackupWarning","logProtocol","logHost","logLevel","webTLSCert","webTLSCA","replicaID","scanningEnabled","scanningSyncOnline","scanningDeadline","scanningEnableAutoRecheck","jobHistoryCompactionEnabled","jobHistoryToKeep","jobHistoryMaxAge","repoEventHistoryCompactionEnabled","repoEventHistoryToKeep","repoEventHistoryMaxAge","storageVolume","nfsHost","nfsPath","readOnlyRegistry"],"properties":{"anonymizeAnalytics":{"type":"boolean"},"createRepositoryOnPush":{"type":"boolean"},"disableBackupWarning":{"type":"boolean"},"disableUpgrades":{"type":"boolean"},"dtrHost":{"type":"string"},"httpProxy":{"type":"string"},"httpsProxy":{"type":"string"},"jobHistoryCompactionEnabled":{"type":"boolean"},"jobHistoryMaxAge":{"type":"string"},"jobHistoryToKeep":{"type":"integer","format":"int64"},"logHost":{"type":"string"},"logLevel":{"type":"string"},"logProtocol":{"type":"string"},"nfsHost":{"type":"string"},"nfsPath":{"type":"string"},"noProxy":{"type":"string"},"readOnlyRegistry":{"type":"boolean"},"replicaID":{"type":"string"},"replicaSettings":{"type":"object","additionalProperties":{"$ref":"#/definitions/responses.ReplicaSettings"}},"repoEventHistoryCompactionEnabled":{"type":"boolean"},"repoEventHistoryMaxAge":{"type":"string"},"repoEventHistoryToKeep":{"type":"integer","format":"int64"},"reportAnalytics":{"type":"boolean"},"scanningDeadline":{"type":"integer"},"scanningEnableAutoRecheck":{"type":"boolean"},"scanningEnabled":{"type":"boolean"},"scanningSyncOnline":{"type":"boolean"},"sso":{"type":"boolean"},"storageVolume":{"type":"string"},"webTLSCA":{"type":"string"},"webTLSCert":{"type":"string"}}},"responses.Tag":{"required":["digest","createdAt","inNotary","manifest","name","author","updatedAt","hashMismatch"],"properties":{"author":{"type":"string"},"components":{"type":"array","items":{"$ref":"#/definitions/schema.ScannerComponent"}},"createdAt":{"type":"string","format":"date-time"},"digest":{"type":"string"},"hashMismatch":{"description":"true if the hashes from notary and registry don't match","type":"boolean"},"inNotary":{"description":"true if the tag exists in Notary","type":"boolean"},"licenses":{"type":"array","items":{"$ref":"#/definitions/schema.ScannerLicense"}},"manifest":{"$ref":"#/definitions/responses.Manifest"},"mirroring":{"$ref":"#/definitions/responses.Mirroring"},"name":{"type":"string"},"promotion":{"$ref":"#/definitions/responses.Promotion"},"updatedAt":{"type":"string","format":"date-time"},"vuln_summary":{"$ref":"#/definitions/responses.OldScanSummary"}}},"responses.Team":{"required":["id","clientUserIsMember"],"properties":{"clientUserIsMember":{"type":"boolean"},"id":{"type":"string"}}},"responses.TeamAccess":{"required":["accessLevel","team"],"properties":{"accessLevel":{"type":"string","enum":["read-only","read-write","admin"]},"team":{"$ref":"#/definitions/responses.Team"}}},"responses.ThinScanSummaries":{"required":["images"],"properties":{"images":{"type":"object","additionalProperties":{"$ref":"#/definitions/schema.ScannerVulnCount"}}}},"responses.ThinTag":{"required":["name","digest"],"properties":{"digest":{"type":"string"},"name":{"type":"string"}}},"responses.UserSettings":{"required":["ContentCacheUUID"],"properties":{"ContentCacheUUID":{"type":"string"}}},"responses.Vulnerability":{"required":["cve","cvss","summary"],"properties":{"cve":{"type":"string"},"cvss":{"type":"number","format":"float"},"summary":{"type":"string"}}},"responses.VulnerabilityDetails":{"required":["vuln","exact","notes"],"properties":{"exact":{"type":"boolean"},"notes":{"type":"array","items":{"$ref":"#/definitions/responses.Note"}},"vuln":{"$ref":"#/definitions/responses.Vulnerability"}}},"responses.Webhook":{"required":["id","type","key","endpoint","authorID","createdAt","inactive","tlsCert","skipTLSVerification"],"properties":{"authorID":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"endpoint":{"type":"string"},"id":{"type":"string"},"inactive":{"type":"boolean"},"key":{"type":"string"},"lastSuccessfulAt":{"type":"string","format":"date-time"},"skipTLSVerification":{"type":"boolean"},"tlsCert":{"type":"string"},"type":{"type":"string"}}},"ruleengine.Rule":{"properties":{"field":{"type":"string"},"operator":{"type":"string"},"values":{"type":"array","items":{"type":"string"}}}},"schema.Event":{"required":["id","publishedAt","actor","actorType","type","object","repository"],"properties":{"actor":{"type":"string"},"actorType":{"type":"string"},"id":{"type":"string"},"object":{"$ref":"#/definitions/schema.Object"},"publishedAt":{"type":"string","format":"date-time"},"repository":{"type":"string"},"target":{"$ref":"#/definitions/schema.Object"},"type":{"type":"string"}}},"schema.LayerVulnOverride":{"required":["pk","digest","component","componentVersion","cve","notes"],"properties":{"component":{"type":"string"},"componentVersion":{"type":"string"},"cve":{"type":"string"},"digest":{"type":"string"},"notes":{"type":"string"},"pk":{"type":"string"}}},"schema.MirroringStatus":{"required":["code","detail","timestamp"],"properties":{"code":{"type":"string"},"detail":{"type":"string"},"timestamp":{"type":"string","format":"date-time"}}},"schema.Object":{"required":["id","type"],"properties":{"content":{"type":"string"},"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string"}}},"schema.ScannedImage":{"required":["pk","namespace","repository","tag","manifestDigest","totalVulnCount","licenses","layers","components","cves","maxCVSSValue","scannerFingerprint","vulnOverrides"],"properties":{"components":{"type":"array","items":{"$ref":"#/definitions/schema.ScannerComponent"}},"cves":{"type":"array","items":{"$ref":"#/definitions/schema.ScannerCVE"}},"layers":{"type":"array","items":{"$ref":"#/definitions/schema.ScannerLayer"}},"licenses":{"type":"array","items":{"$ref":"#/definitions/schema.ScannerLicense"}},"manifestDigest":{"type":"string"},"maxCVSSValue":{"type":"number","format":"float"},"namespace":{"type":"string"},"pk":{"type":"string"},"repository":{"type":"string"},"scannerFingerprint":{"$ref":"#/definitions/schema.ScannerFingerprint"},"tag":{"type":"string"},"totalVulnCount":{"$ref":"#/definitions/schema.ScannerVulnCount"},"vulnOverrides":{"type":"array","items":{"$ref":"#/definitions/schema.LayerVulnOverride"}}}},"schema.ScannerCVE":{"required":["cvePK","summary","cvss","notes"],"properties":{"cvePK":{"type":"string"},"cvss":{"type":"number","format":"float"},"notes":{"type":"string"},"summary":{"type":"string"}}},"schema.ScannerComponent":{"required":["componentPK","vulnCount","name","version","filepaths","cves","licenses","source"],"properties":{"componentPK":{"type":"string"},"cves":{"type":"array","items":{"type":"string"}},"filepaths":{"type":"array","items":{"type":"string"}},"licenses":{"type":"array","items":{"type":"string"}},"name":{"type":"string"},"source":{"type":"string"},"version":{"type":"string"},"vulnCount":{"$ref":"#/definitions/schema.ScannerVulnCount"}}},"schema.ScannerFingerprint":{"required":["scannerType","version"],"properties":{"scannerType":{"type":"integer","format":"int32"},"version":{"type":"array","items":{"type":"string"}}}},"schema.ScannerLayer":{"required":["digest","mediaType","author","size","components"],"properties":{"author":{"type":"string"},"components":{"type":"array","items":{"type":"string"}},"digest":{"type":"string"},"mediaType":{"type":"string"},"size":{"type":"integer","format":"int64"}}},"schema.ScannerLicense":{"required":["name","url","type"],"properties":{"name":{"type":"string"},"type":{"type":"string"},"url":{"type":"string"}}},"schema.ScannerVulnCount":{"required":["critical","major","minor"],"properties":{"critical":{"type":"integer","format":"int32"},"major":{"type":"integer","format":"int32"},"minor":{"type":"integer","format":"int32"}}},"tmpforms.ActionConfigCreate":{"required":["action","parameters"],"properties":{"action":{"description":"The action to modify the config for","type":"string"},"parameters":{"description":"Extra parameters to pass to the job. The available parameters depend on the job. These are overwritten by any corresponding parameters set in the job itself.","type":"object","additionalProperties":{"type":"string"}}}},"tmpforms.CronCreate":{"required":["action","schedule","retries","capacityMap","parameters","deadline","stopTimeout"],"properties":{"action":{"description":"The action which the cron will perform","type":"string"},"capacityMap":{"description":"The map of required capacity","type":"object","additionalProperties":{"type":"integer"}},"deadline":{"description":"After this amount of time has passed, a SIGTERM will be sent","type":"string"},"parameters":{"description":"Extra parameters to pass to the job. The available parameters depend on the job.","type":"object","additionalProperties":{"type":"string"}},"retries":{"description":"The number of times to retry a job if it fails","type":"integer","format":"int32"},"schedule":{"description":"The for the cron as a cronspec string: (seconds) (minutes) (hours) (day of month) (month) (day of week) or @hourly, @weekly, etc.","type":"string"},"stopTimeout":{"description":"This long after SIGTERM is sent, SIGKILL will be sent if the proccess is still alive","type":"string"}}},"tmpforms.EmptyForm":{},"tmpforms.JobSubmission":{"required":["action","parameters","retries","capacityMap","deadline","stopTimeout","scheduledAt"],"properties":{"action":{"description":"The action which the job will perform","type":"string"},"capacityMap":{"description":"The map of required capacity","type":"object","additionalProperties":{"type":"integer"}},"deadline":{"description":"After this amount of time has passed, a SIGTERM will be sent","type":"string"},"parameters":{"description":"Parameters to start the job with","type":"object","additionalProperties":{"type":"string"}},"retries":{"description":"The number of times to retry a job if it fails","type":"integer","format":"int32"},"scheduledAt":{"description":"The time at which to run the job. Empty string or no value means now. Format: RFC3339","type":"string"},"stopTimeout":{"description":"This long after SIGTERM is sent, SIGKILL will be sent if the proccess is still alive","type":"string"}}},"tmpforms.UpdateWorkerCapacity":{"required":["capacityMap"],"properties":{"capacityMap":{"description":"The new capacity for the worker, representing roughly the amount of RAM to use","type":"object","additionalProperties":{"type":"integer"}}}},"tmpresponses.ActionConfig":{"required":["id","action","parameters"],"properties":{"action":{"description":"The action this config refers to.","type":"string"},"id":{"description":"Randomly generated UUID for foreign references.","type":"string"},"parameters":{"description":"Extra parameters to pass to the job. The available parameters depend on the job.","type":"object","additionalProperties":{"type":"string"}}}},"tmpresponses.ActionConfigs":{"required":["actionConfigs"],"properties":{"actionConfigs":{"type":"array","items":{"$ref":"#/definitions/tmpresponses.ActionConfig"}}}},"tmpresponses.Cron":{"required":["id","action","schedule","retries","capacityMap","parameters","deadline","stopTimeout","nextRun"],"properties":{"action":{"description":"The action to be performed by jobs spawned from this cron.","type":"string"},"capacityMap":{"description":"The map of required capacity","type":"object","additionalProperties":{"type":"integer"}},"deadline":{"type":"string"},"id":{"description":"Randomly generated UUID for foreign references.","type":"string"},"nextRun":{"description":"The next time the job will run.","type":"string","format":"date-time"},"parameters":{"description":"Extra parameters to pass to the job. The available parameters depend on the job.","type":"object","additionalProperties":{"type":"string"}},"retries":{"description":"The number of times to retry the job if it fails","type":"integer","format":"int32"},"schedule":{"description":"The schedule for this cron as a cronspec string: (seconds) (minutes) (hours) (day of month) (month) (day of week) or @hourly, @weekly, etc.","type":"string"},"stopTimeout":{"description":"This long after SIGTERM is sent, SIGKILL will be sent if the proccess is still alive","type":"string"}}},"tmpresponses.Crons":{"required":["crons"],"properties":{"crons":{"type":"array","items":{"$ref":"#/definitions/tmpresponses.Cron"}}}},"tmpresponses.Job":{"required":["id","retryFromID","workerID","status","scheduledAt","lastUpdated","action","retriesLeft","retriesTotal","capacityMap","parameters","deadline","stopTimeout"],"properties":{"action":{"description":"The action this job performs","type":"string"},"capacityMap":{"description":"The map of required capacity","type":"object","additionalProperties":{"type":"integer"}},"deadline":{"type":"string"},"id":{"description":"The ID of the job","type":"string"},"lastUpdated":{"description":"The last time at which the status of this job was updated","type":"string","format":"date-time"},"parameters":{"description":"Extra parameters to pass to the job. The available parameters depend on the job.","type":"object","additionalProperties":{"type":"string"}},"retriesLeft":{"description":"The number of times to retry the job if it fails","type":"integer","format":"int32"},"retriesTotal":{"description":"The total number of times to retry the original job if it fails","type":"integer","format":"int32"},"retryFromID":{"description":"The ID of the job this job retried from","type":"string"},"scheduledAt":{"description":"The time at which this job was scheduled","type":"string","format":"date-time"},"status":{"description":"The current status of the job","type":"string","enum":["waiting","running","done","canceled","errored"]},"stopTimeout":{"description":"This long after SIGTERM is sent, SIGKILL will be sent if the proccess is still alive","type":"string"},"workerID":{"description":"The ID of the worker which performed the job, unclaimed by a worker if empty","type":"string"}}},"tmpresponses.JobLog":{"required":["data","lineNum"],"properties":{"data":{"type":"string"},"lineNum":{"type":"integer","format":"int32"}}},"tmpresponses.Jobs":{"required":["jobs"],"properties":{"jobs":{"type":"array","items":{"$ref":"#/definitions/tmpresponses.Job"}}}},"tmpresponses.Worker":{"required":["id","status","capacityMap","heartbeatExpiration"],"properties":{"capacityMap":{"description":"A map used to represent now much load the worker should be allocated. Only security scanning jobs use this and the value is roughly equivalent to expected memory usage in bytes.","type":"object","additionalProperties":{"type":"integer"}},"heartbeatExpiration":{"description":"Time after which the worker should be considered dead.","type":"string"},"id":{"description":"Randomly generated UUID for foreign references.","type":"string"},"status":{"description":"Status of the worker","type":"string"}}},"tmpresponses.Workers":{"required":["workers"],"properties":{"workers":{"type":"array","items":{"$ref":"#/definitions/tmpresponses.Worker"}}}}},"tags":[{"description":"Accounts","name":"accounts"},{"description":"Admin","name":"meta"},{"description":"Content Caches","name":"content_caches"},{"description":"Repositories","name":"repositories"},{"description":"Repository Namespaces","name":"repositoryNamespaces"},{"description":"Events","name":"events"},{"description":"Docker Security Scanner","name":"imagescan"},{"description":"Webhooks","name":"webhooks"},{"description":"Jobs","name":"jobs"},{"description":"Crons","name":"crons"},{"description":"Workers","name":"workers"},{"description":"Action Configs","name":"action_configs"}]} +, + dom_id: '#swagger-ui', + validatorUrl: null, + presets: [ + SwaggerUIBundle.presets.apis, + SwaggerUIStandalonePreset + ], + plugins: [ + SwaggerUIBundle.plugins.DownloadUrl + ], + layout: "StandaloneLayout" + }) + + window.ui = ui +} diff --git a/reference/dtr/2.6/api/swagger-ui-bundle.js b/reference/dtr/2.6/api/swagger-ui-bundle.js new file mode 100644 index 00000000000..4ec510a936c --- /dev/null +++ b/reference/dtr/2.6/api/swagger-ui-bundle.js @@ -0,0 +1,105 @@ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.SwaggerUIBundle=t():e.SwaggerUIBundle=t()}(this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p="/dist",t(0)}(function(e){for(var t in e)if(Object.prototype.hasOwnProperty.call(e,t))switch(typeof e[t]){case"function":break;case"object":e[t]=function(t){var n=t.slice(1),r=e[t[0]];return function(e,t,i){r.apply(this,[e,t,i].concat(n))}}(e[t]);break;default:e[t]=e[e[t]]}return e}([function(e,t,n){n(1),e.exports=n(56)},function(e,t,n){"use strict";n(2)},function(e,t,n){n(3),n(17),n(30),n(36),e.exports=n(16).Promise},function(e,t,n){"use strict";var r=n(4),i={};i[n(6)("toStringTag")]="z",i+""!="[object z]"&&n(10)(Object.prototype,"toString",function(){return"[object "+r(this)+"]"},!0)},function(e,t,n){var r=n(5),i=n(6)("toStringTag"),o="Arguments"==r(function(){return arguments}());e.exports=function(e){var t,n,a;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=(t=Object(e))[i])?n:o?r(t):"Object"==(a=r(t))&&"function"==typeof t.callee?"Arguments":a}},function(e,t){var n={}.toString;e.exports=function(e){return n.call(e).slice(8,-1)}},function(e,t,n){var r=n(7)("wks"),i=n(9),o=n(8).Symbol;e.exports=function(e){return r[e]||(r[e]=o&&o[e]||(o||i)("Symbol."+e))}},function(e,t,n){var r=n(8),i="__core-js_shared__",o=r[i]||(r[i]={});e.exports=function(e){return o[e]||(o[e]={})}},function(e,t){var n=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=n)},function(e,t){var n=0,r=Math.random();e.exports=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++n+r).toString(36))}},function(e,t,n){var r=n(8),i=n(11),o=n(9)("src"),a="toString",s=Function[a],u=(""+s).split(a);n(16).inspectSource=function(e){return s.call(e)},(e.exports=function(e,t,n,a){"function"==typeof n&&(n.hasOwnProperty(o)||i(n,o,e[t]?""+e[t]:u.join(String(t))),n.hasOwnProperty("name")||i(n,"name",t)),e===r?e[t]=n:(a||delete e[t],i(e,t,n))})(Function.prototype,a,function(){return"function"==typeof this&&this[o]||s.call(this)})},function(e,t,n){var r=n(12),i=n(13);e.exports=n(14)?function(e,t,n){return r.setDesc(e,t,i(1,n))}:function(e,t,n){return e[t]=n,e}},function(e,t){var n=Object;e.exports={create:n.create,getProto:n.getPrototypeOf,isEnum:{}.propertyIsEnumerable,getDesc:n.getOwnPropertyDescriptor,setDesc:n.defineProperty,setDescs:n.defineProperties,getKeys:n.keys,getNames:n.getOwnPropertyNames,getSymbols:n.getOwnPropertySymbols,each:[].forEach}},function(e,t){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},function(e,t,n){e.exports=!n(15)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(e,t){e.exports=function(e){try{return!!e()}catch(e){return!0}}},function(e,t){var n=e.exports={version:"1.2.6"};"number"==typeof __e&&(__e=n)},function(e,t,n){"use strict";var r=n(18)(!0);n(21)(String,"String",function(e){this._t=String(e),this._i=0},function(){var e,t=this._t,n=this._i;return n>=t.length?{value:void 0,done:!0}:(e=r(t,n),this._i+=e.length,{value:e,done:!1})})},function(e,t,n){var r=n(19),i=n(20);e.exports=function(e){return function(t,n){var o,a,s=String(i(t)),u=r(n),c=s.length;return u<0||u>=c?e?"":void 0:(o=s.charCodeAt(u),o<55296||o>56319||u+1===c||(a=s.charCodeAt(u+1))<56320||a>57343?e?s.charAt(u):o:e?s.slice(u,u+2):(o-55296<<10)+(a-56320)+65536)}}},function(e,t){var n=Math.ceil,r=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?r:n)(e)}},function(e,t){e.exports=function(e){if(void 0==e)throw TypeError("Can't call method on "+e);return e}},function(e,t,n){"use strict";var r=n(22),i=n(23),o=n(10),a=n(11),s=n(26),u=n(27),c=n(28),l=n(29),p=n(12).getProto,f=n(6)("iterator"),h=!([].keys&&"next"in[].keys()),d="@@iterator",m="keys",v="values",y=function(){return this};e.exports=function(e,t,n,g,_,b,x){c(n,t,g);var w,k,S=function(e){if(!h&&e in T)return T[e];switch(e){case m:return function(){return new n(this,e)};case v:return function(){return new n(this,e)}}return function(){return new n(this,e)}},E=t+" Iterator",C=_==v,A=!1,T=e.prototype,D=T[f]||T[d]||_&&T[_],M=D||S(_);if(D){var O=p(M.call(new e));l(O,E,!0),!r&&s(T,d)&&a(O,f,y),C&&D.name!==v&&(A=!0,M=function(){return D.call(this)})}if(r&&!x||!h&&!A&&T[f]||a(T,f,M),u[t]=M,u[E]=y,_)if(w={values:C?M:S(v),keys:b?M:S(m),entries:C?S("entries"):M},x)for(k in w)k in T||o(T,k,w[k]);else i(i.P+i.F*(h||A),t,w);return w}},function(e,t){e.exports=!1},function(e,t,n){var r=n(8),i=n(16),o=n(11),a=n(10),s=n(24),u="prototype",c=function(e,t,n){var l,p,f,h,d=e&c.F,m=e&c.G,v=e&c.S,y=e&c.P,g=e&c.B,_=m?r:v?r[t]||(r[t]={}):(r[t]||{})[u],b=m?i:i[t]||(i[t]={}),x=b[u]||(b[u]={});m&&(n=t);for(l in n)p=!d&&_&&l in _,f=(p?_:n)[l],h=g&&p?s(f,r):y&&"function"==typeof f?s(Function.call,f):f,_&&!p&&a(_,l,f),b[l]!=f&&o(b,l,h),y&&x[l]!=f&&(x[l]=f)};r.core=i,c.F=1,c.G=2,c.S=4,c.P=8,c.B=16,c.W=32,e.exports=c},function(e,t,n){var r=n(25);e.exports=function(e,t,n){if(r(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,r){return e.call(t,n,r)};case 3:return function(n,r,i){return e.call(t,n,r,i)}}return function(){return e.apply(t,arguments)}}},function(e,t){e.exports=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}},function(e,t){var n={}.hasOwnProperty;e.exports=function(e,t){return n.call(e,t)}},function(e,t){e.exports={}},function(e,t,n){"use strict";var r=n(12),i=n(13),o=n(29),a={};n(11)(a,n(6)("iterator"),function(){return this}),e.exports=function(e,t,n){e.prototype=r.create(a,{next:i(1,n)}),o(e,t+" Iterator")}},function(e,t,n){var r=n(12).setDesc,i=n(26),o=n(6)("toStringTag");e.exports=function(e,t,n){e&&!i(e=n?e:e.prototype,o)&&r(e,o,{configurable:!0,value:t})}},function(e,t,n){n(31);var r=n(8),i=n(11),o=n(27),a=n(6)("iterator"),s=r.NodeList,u=r.HTMLCollection,c=s&&s.prototype,l=u&&u.prototype,p=o.NodeList=o.HTMLCollection=o.Array;c&&!c[a]&&i(c,a,p),l&&!l[a]&&i(l,a,p)},function(e,t,n){"use strict";var r=n(32),i=n(33),o=n(27),a=n(34);e.exports=n(21)(Array,"Array",function(e,t){this._t=a(e),this._i=0,this._k=t},function(){var e=this._t,t=this._k,n=this._i++;return!e||n>=e.length?(this._t=void 0,i(1)):"keys"==t?i(0,n):"values"==t?i(0,e[n]):i(0,[n,e[n]])},"values"),o.Arguments=o.Array,r("keys"),r("values"),r("entries")},function(e,t,n){var r=n(6)("unscopables"),i=Array.prototype;void 0==i[r]&&n(11)(i,r,{}),e.exports=function(e){i[r][e]=!0}},function(e,t){e.exports=function(e,t){return{value:t,done:!!e}}},function(e,t,n){var r=n(35),i=n(20);e.exports=function(e){return r(i(e))}},function(e,t,n){var r=n(5);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==r(e)?e.split(""):Object(e)}},function(e,t,n){"use strict";var r,i=n(12),o=n(22),a=n(8),s=n(24),u=n(4),c=n(23),l=n(37),p=n(38),f=n(25),h=n(39),d=n(40),m=n(45).set,v=n(46),y=n(6)("species"),g=n(47),_=n(48),b="Promise",x=a.process,w="process"==u(x),k=a[b],S=function(){},E=function(e){var t,n=new k(S);return e&&(n.constructor=function(e){e(S,S)}),(t=k.resolve(n)).catch(S),t===n},C=function(){function e(t){var n=new k(t);return m(n,e.prototype),n}var t=!1;try{if(t=k&&k.resolve&&E(),m(e,k),e.prototype=i.create(k.prototype,{constructor:{value:e}}),e.resolve(5).then(function(){})instanceof e||(t=!1),t&&n(14)){var r=!1;k.resolve(i.setDesc({},"then",{get:function(){r=!0}})),t=r}}catch(e){t=!1}return t}(),A=function(e,t){return!(!o||e!==k||t!==r)||v(e,t)},T=function(e){var t=p(e)[y];return void 0!=t?t:e},D=function(e){var t;return!(!l(e)||"function"!=typeof(t=e.then))&&t},M=function(e){var t,n;this.promise=new e(function(e,r){if(void 0!==t||void 0!==n)throw TypeError("Bad Promise constructor");t=e,n=r}),this.resolve=f(t),this.reject=f(n)},O=function(e){try{e()}catch(e){return{error:e}}},P=function(e,t){if(!e.n){e.n=!0;var n=e.c;_(function(){for(var r=e.v,i=1==e.s,o=0,s=function(t){var n,o,a=i?t.ok:t.fail,s=t.resolve,u=t.reject;try{a?(i||(e.h=!0),n=a===!0?r:a(r),n===t.promise?u(TypeError("Promise-chain cycle")):(o=D(n))?o.call(n,s,u):s(n)):u(r)}catch(e){u(e)}};n.length>o;)s(n[o++]);n.length=0,e.n=!1,t&&setTimeout(function(){var t,n,i=e.p;I(i)&&(w?x.emit("unhandledRejection",r,i):(t=a.onunhandledrejection)?t({promise:i,reason:r}):(n=a.console)&&n.error&&n.error("Unhandled promise rejection",r)),e.a=void 0},1)})}},I=function(e){var t,n=e._d,r=n.a||n.c,i=0;if(n.h)return!1;for(;r.length>i;)if(t=r[i++],t.fail||!I(t.promise))return!1;return!0},N=function(e){var t=this;t.d||(t.d=!0,t=t.r||t,t.v=e,t.s=2,t.a=t.c.slice(),P(t,!0))},R=function(e){var t,n=this;if(!n.d){n.d=!0,n=n.r||n;try{if(n.p===e)throw TypeError("Promise can't be resolved itself");(t=D(e))?_(function(){var r={r:n,d:!1};try{t.call(e,s(R,r,1),s(N,r,1))}catch(e){N.call(r,e)}}):(n.v=e,n.s=1,P(n,!1))}catch(e){N.call({r:n,d:!1},e)}}};C||(k=function(e){f(e);var t=this._d={p:h(this,k,b),c:[],a:void 0,s:0,d:!1,v:void 0,h:!1,n:!1};try{e(s(R,t,1),s(N,t,1))}catch(e){N.call(t,e)}},n(53)(k.prototype,{then:function(e,t){var n=new M(g(this,k)),r=n.promise,i=this._d;return n.ok="function"!=typeof e||e,n.fail="function"==typeof t&&t,i.c.push(n),i.a&&i.a.push(n),i.s&&P(i,!1),r},catch:function(e){return this.then(void 0,e)}})),c(c.G+c.W+c.F*!C,{Promise:k}),n(29)(k,b),n(54)(b),r=n(16)[b],c(c.S+c.F*!C,b,{reject:function(e){var t=new M(this),n=t.reject;return n(e),t.promise}}),c(c.S+c.F*(!C||E(!0)),b,{resolve:function(e){if(e instanceof k&&A(e.constructor,this))return e;var t=new M(this),n=t.resolve;return n(e),t.promise}}),c(c.S+c.F*!(C&&n(55)(function(e){k.all(e).catch(function(){})})),b,{all:function(e){var t=T(this),n=new M(t),r=n.resolve,o=n.reject,a=[],s=O(function(){d(e,!1,a.push,a);var n=a.length,s=Array(n);n?i.each.call(a,function(e,i){var a=!1;t.resolve(e).then(function(e){a||(a=!0,s[i]=e,--n||r(s))},o)}):r(s)});return s&&o(s.error),n.promise},race:function(e){var t=T(this),n=new M(t),r=n.reject,i=O(function(){d(e,!1,function(e){t.resolve(e).then(n.resolve,r)})});return i&&r(i.error),n.promise}})},function(e,t){e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},function(e,t,n){var r=n(37);e.exports=function(e){if(!r(e))throw TypeError(e+" is not an object!");return e}},function(e,t){e.exports=function(e,t,n){if(!(e instanceof t))throw TypeError(n+": use the 'new' operator!");return e}},function(e,t,n){var r=n(24),i=n(41),o=n(42),a=n(38),s=n(43),u=n(44);e.exports=function(e,t,n,c){var l,p,f,h=u(e),d=r(n,c,t?2:1),m=0;if("function"!=typeof h)throw TypeError(e+" is not iterable!");if(o(h))for(l=s(e.length);l>m;m++)t?d(a(p=e[m])[0],p[1]):d(e[m]);else for(f=h.call(e);!(p=f.next()).done;)i(f,d,p.value,t)}},function(e,t,n){var r=n(38);e.exports=function(e,t,n,i){try{return i?t(r(n)[0],n[1]):t(n)}catch(t){var o=e.return;throw void 0!==o&&r(o.call(e)),t}}},function(e,t,n){var r=n(27),i=n(6)("iterator"),o=Array.prototype;e.exports=function(e){return void 0!==e&&(r.Array===e||o[i]===e)}},function(e,t,n){var r=n(19),i=Math.min;e.exports=function(e){return e>0?i(r(e),9007199254740991):0}},function(e,t,n){var r=n(4),i=n(6)("iterator"),o=n(27);e.exports=n(16).getIteratorMethod=function(e){if(void 0!=e)return e[i]||e["@@iterator"]||o[r(e)]}},function(e,t,n){var r=n(12).getDesc,i=n(37),o=n(38),a=function(e,t){if(o(e),!i(t)&&null!==t)throw TypeError(t+": can't set as prototype!")};e.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(e,t,i){try{i=n(24)(Function.call,r(Object.prototype,"__proto__").set,2),i(e,[]),t=!(e instanceof Array)}catch(e){t=!0}return function(e,n){return a(e,n),t?e.__proto__=n:i(e,n),e}}({},!1):void 0),check:a}},function(e,t){e.exports=Object.is||function(e,t){return e===t?0!==e||1/e===1/t:e!=e&&t!=t}},function(e,t,n){var r=n(38),i=n(25),o=n(6)("species");e.exports=function(e,t){var n,a=r(e).constructor;return void 0===a||void 0==(n=r(a)[o])?t:i(n)}},function(e,t,n){var r,i,o,a=n(8),s=n(49).set,u=a.MutationObserver||a.WebKitMutationObserver,c=a.process,l=a.Promise,p="process"==n(5)(c),f=function(){var e,t,n;for(p&&(e=c.domain)&&(c.domain=null,e.exit());r;)t=r.domain,n=r.fn,t&&t.enter(),n(),t&&t.exit(),r=r.next;i=void 0,e&&e.enter()};if(p)o=function(){c.nextTick(f)};else if(u){var h=1,d=document.createTextNode("");new u(f).observe(d,{characterData:!0}),o=function(){d.data=h=-h}}else o=l&&l.resolve?function(){l.resolve().then(f)}:function(){s.call(a,f)};e.exports=function(e){var t={fn:e,next:void 0,domain:p&&c.domain};i&&(i.next=t),r||(r=t,o()),i=t}},function(e,t,n){var r,i,o,a=n(24),s=n(50),u=n(51),c=n(52),l=n(8),p=l.process,f=l.setImmediate,h=l.clearImmediate,d=l.MessageChannel,m=0,v={},y="onreadystatechange",g=function(){var e=+this;if(v.hasOwnProperty(e)){var t=v[e];delete v[e],t()}},_=function(e){g.call(e.data)};f&&h||(f=function(e){for(var t=[],n=1;arguments.length>n;)t.push(arguments[n++]);return v[++m]=function(){s("function"==typeof e?e:Function(e),t)},r(m),m},h=function(e){delete v[e]},"process"==n(5)(p)?r=function(e){p.nextTick(a(g,e,1))}:d?(i=new d,o=i.port2,i.port1.onmessage=_,r=a(o.postMessage,o,1)):l.addEventListener&&"function"==typeof postMessage&&!l.importScripts?(r=function(e){l.postMessage(e+"","*")},l.addEventListener("message",_,!1)):r=y in c("script")?function(e){u.appendChild(c("script"))[y]=function(){u.removeChild(this),g.call(e)}}:function(e){setTimeout(a(g,e,1),0)}),e.exports={set:f,clear:h}},function(e,t){e.exports=function(e,t,n){var r=void 0===n;switch(t.length){case 0:return r?e():e.call(n);case 1:return r?e(t[0]):e.call(n,t[0]);case 2:return r?e(t[0],t[1]):e.call(n,t[0],t[1]);case 3:return r?e(t[0],t[1],t[2]):e.call(n,t[0],t[1],t[2]);case 4:return r?e(t[0],t[1],t[2],t[3]):e.call(n,t[0],t[1],t[2],t[3])}return e.apply(n,t)}},function(e,t,n){e.exports=n(8).document&&document.documentElement},function(e,t,n){var r=n(37),i=n(8).document,o=r(i)&&r(i.createElement);e.exports=function(e){return o?i.createElement(e):{}}},function(e,t,n){var r=n(10);e.exports=function(e,t){for(var n in t)r(e,n,t[n]);return e}},function(e,t,n){"use strict";var r=n(8),i=n(12),o=n(14),a=n(6)("species");e.exports=function(e){var t=r[e];o&&t&&!t[a]&&i.setDesc(t,a,{configurable:!0,get:function(){return this}})}},function(e,t,n){var r=n(6)("iterator"),i=!1;try{var o=[7][r]();o.return=function(){i=!0},Array.from(o,function(){throw 2})}catch(e){}e.exports=function(e,t){if(!t&&!i)return!1;var n=!1;try{var o=[7],a=o[r]();a.next=function(){return{done:n=!0}},o[r]=function(){return a},e(o)}catch(e){}return n}},function(e,t,n){"use strict";function r(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}function i(e){return e&&e.__esModule?e:{default:e}}var o=n(57),a=i(o),s=n(60),u=i(s),c=n(94),l=i(c),p=n(131),f=i(p),h=n(136),d=i(h),m=n(177),v=i(m),y=n(414),g=i(y),_=n(1175),b=r(_),x=n(183),w=["url","spec","validatorUrl","onComplete","onFailure","authorizations","docExpansion","apisSorter","operationsSorter","supportedSubmitMethods","dom_id","defaultModelRendering","oauth2RedirectUrl","showRequestHeaders","custom","modelPropertyMacro","parameterMacro","displayOperationId"],k={PACKAGE_VERSION:"3.0.17",GIT_COMMIT:"gf3c3c5c",GIT_DIRTY:!0},S=k.GIT_DIRTY,E=k.GIT_COMMIT,C=k.PACKAGE_VERSION;e.exports=function(e){v.default.versions=v.default.versions||{},v.default.versions.swaggerUi=C+"/"+(E||"unknown")+(S?"-dirty":"");var t={dom_id:null,spec:{},url:"",layout:"BaseLayout",docExpansion:"list",validatorUrl:"https://online.swagger.io/validator",configs:{},custom:{},displayOperationId:!1,presets:[],plugins:[],fn:{},components:{},state:{},store:{}},n=(0,f.default)({},t,e),r=(0,f.default)({},n.store,{system:{configs:n.configs},plugins:n.presets,state:{layout:{layout:n.layout},spec:{spec:"",url:n.url}}}),i=function(){return{fn:n.fn,components:n.components,state:n.state}},o=new d.default(r);o.register([n.plugins,i]);var s=o.getSystem(),c=(0,x.parseSeach)();s.initOAuth=s.authActions.configureAuth;var p=function(e){if("object"!==("undefined"==typeof n?"undefined":(0,l.default)(n)))return s;var t=s.specSelectors.getLocalConfig?s.specSelectors.getLocalConfig():{},r=(0,f.default)({},t,n,e||{},c);return o.setConfigs((0,x.filterConfigs)(r,w)),null!==e&&(!c.url&&"object"===(0,l.default)(r.spec)&&(0,u.default)(r.spec).length?(s.specActions.updateUrl(""),s.specActions.updateLoadingStatus("success"),s.specActions.updateSpec((0,a.default)(r.spec))):s.specActions.download&&r.url&&(s.specActions.updateUrl(r.url),s.specActions.download(r.url))),r.dom_id?s.render(r.dom_id,"App"):console.error("Skipped rendering: no `dom_id` was specified"),s},h=c.config||n.configUrl;return!h||!s.specActions.getConfigByUrl||s.specActions.getConfigByUrl&&!s.specActions.getConfigByUrl(h,p)?p():s},e.exports.presets={apis:g.default},e.exports.plugins=b},function(e,t,n){e.exports={default:n(58),__esModule:!0}},function(e,t,n){var r=n(59),i=r.JSON||(r.JSON={stringify:JSON.stringify});e.exports=function(e){return i.stringify.apply(i,arguments)}},function(e,t){var n=e.exports={version:"2.4.0"};"number"==typeof __e&&(__e=n)},function(e,t,n){e.exports={default:n(61),__esModule:!0}},function(e,t,n){n(62),e.exports=n(59).Object.keys},function(e,t,n){var r=n(63),i=n(65);n(80)("keys",function(){return function(e){return i(r(e))}})},function(e,t,n){var r=n(64);e.exports=function(e){return Object(r(e))}},20,function(e,t,n){var r=n(66),i=n(79);e.exports=Object.keys||function(e){return r(e,i)}},function(e,t,n){var r=n(67),i=n(68),o=n(71)(!1),a=n(75)("IE_PROTO");e.exports=function(e,t){var n,s=i(e),u=0,c=[];for(n in s)n!=a&&r(s,n)&&c.push(n);for(;t.length>u;)r(s,n=t[u++])&&(~o(c,n)||c.push(n));return c}},26,function(e,t,n){var r=n(69),i=n(64);e.exports=function(e){return r(i(e))}},function(e,t,n){var r=n(70);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==r(e)?e.split(""):Object(e)}},5,function(e,t,n){var r=n(68),i=n(72),o=n(74);e.exports=function(e){return function(t,n,a){var s,u=r(t),c=i(u.length),l=o(a,c);if(e&&n!=n){for(;c>l;)if(s=u[l++],s!=s)return!0}else for(;c>l;l++)if((e||l in u)&&u[l]===n)return e||l||0;return!e&&-1}}},function(e,t,n){var r=n(73),i=Math.min;e.exports=function(e){return e>0?i(r(e),9007199254740991):0}},19,function(e,t,n){var r=n(73),i=Math.max,o=Math.min;e.exports=function(e,t){return e=r(e),e<0?i(e+t,0):o(e,t)}},function(e,t,n){var r=n(76)("keys"),i=n(78);e.exports=function(e){return r[e]||(r[e]=i(e))}},function(e,t,n){var r=n(77),i="__core-js_shared__",o=r[i]||(r[i]={});e.exports=function(e){return o[e]||(o[e]={})}},8,9,function(e,t){e.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(e,t,n){var r=n(81),i=n(59),o=n(90);e.exports=function(e,t){var n=(i.Object||{})[e]||Object[e],a={};a[e]=t(n),r(r.S+r.F*o(function(){n(1)}),"Object",a)}},function(e,t,n){var r=n(77),i=n(59),o=n(82),a=n(84),s="prototype",u=function(e,t,n){var c,l,p,f=e&u.F,h=e&u.G,d=e&u.S,m=e&u.P,v=e&u.B,y=e&u.W,g=h?i:i[t]||(i[t]={}),_=g[s],b=h?r:d?r[t]:(r[t]||{})[s];h&&(n=t);for(c in n)l=!f&&b&&void 0!==b[c],l&&c in g||(p=l?b[c]:n[c],g[c]=h&&"function"!=typeof b[c]?n[c]:v&&l?o(p,r):y&&b[c]==p?function(e){var t=function(t,n,r){if(this instanceof e){switch(arguments.length){case 0:return new e;case 1:return new e(t);case 2:return new e(t,n)}return new e(t,n,r)}return e.apply(this,arguments)};return t[s]=e[s],t}(p):m&&"function"==typeof p?o(Function.call,p):p,m&&((g.virtual||(g.virtual={}))[c]=p,e&u.R&&_&&!_[c]&&a(_,c,p)))};u.F=1,u.G=2,u.S=4,u.P=8,u.B=16,u.W=32,u.U=64,u.R=128,e.exports=u},function(e,t,n){var r=n(83);e.exports=function(e,t,n){if(r(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,r){return e.call(t,n,r)};case 3:return function(n,r,i){return e.call(t,n,r,i)}}return function(){return e.apply(t,arguments)}}},25,function(e,t,n){var r=n(85),i=n(93);e.exports=n(89)?function(e,t,n){return r.f(e,t,i(1,n))}:function(e,t,n){return e[t]=n,e}},function(e,t,n){var r=n(86),i=n(88),o=n(92),a=Object.defineProperty;t.f=n(89)?Object.defineProperty:function(e,t,n){if(r(e),t=o(t,!0),r(n),i)try{return a(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e}},function(e,t,n){var r=n(87);e.exports=function(e){if(!r(e))throw TypeError(e+" is not an object!");return e}},37,function(e,t,n){e.exports=!n(89)&&!n(90)(function(){return 7!=Object.defineProperty(n(91)("div"),"a",{get:function(){return 7}}).a})},function(e,t,n){e.exports=!n(90)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},15,function(e,t,n){var r=n(87),i=n(77).document,o=r(i)&&r(i.createElement);e.exports=function(e){return o?i.createElement(e):{}}},function(e,t,n){var r=n(87);e.exports=function(e,t){if(!r(e))return e;var n,i;if(t&&"function"==typeof(n=e.toString)&&!r(i=n.call(e)))return i;if("function"==typeof(n=e.valueOf)&&!r(i=n.call(e)))return i;if(!t&&"function"==typeof(n=e.toString)&&!r(i=n.call(e)))return i;throw TypeError("Can't convert object to primitive value")}},13,function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var i=n(95),o=r(i),a=n(115),s=r(a),u="function"==typeof s.default&&"symbol"==typeof o.default?function(e){return typeof e}:function(e){return e&&"function"==typeof s.default&&e.constructor===s.default&&e!==s.default.prototype?"symbol":typeof e};t.default="function"==typeof s.default&&"symbol"===u(o.default)?function(e){return"undefined"==typeof e?"undefined":u(e)}:function(e){return e&&"function"==typeof s.default&&e.constructor===s.default&&e!==s.default.prototype?"symbol":"undefined"==typeof e?"undefined":u(e)}},function(e,t,n){e.exports={default:n(96),__esModule:!0}},function(e,t,n){n(97),n(110),e.exports=n(114).f("iterator")},function(e,t,n){"use strict";var r=n(98)(!0);n(99)(String,"String",function(e){this._t=String(e),this._i=0},function(){var e,t=this._t,n=this._i;return n>=t.length?{value:void 0,done:!0}:(e=r(t,n),this._i+=e.length,{value:e,done:!1})})},function(e,t,n){var r=n(73),i=n(64);e.exports=function(e){return function(t,n){var o,a,s=String(i(t)),u=r(n),c=s.length;return u<0||u>=c?e?"":void 0:(o=s.charCodeAt(u),o<55296||o>56319||u+1===c||(a=s.charCodeAt(u+1))<56320||a>57343?e?s.charAt(u):o:e?s.slice(u,u+2):(o-55296<<10)+(a-56320)+65536)}}},function(e,t,n){"use strict";var r=n(100),i=n(81),o=n(101),a=n(84),s=n(67),u=n(102),c=n(103),l=n(107),p=n(109),f=n(108)("iterator"),h=!([].keys&&"next"in[].keys()),d="@@iterator",m="keys",v="values",y=function(){return this};e.exports=function(e,t,n,g,_,b,x){c(n,t,g);var w,k,S,E=function(e){if(!h&&e in D)return D[e];switch(e){case m:return function(){return new n(this,e)};case v:return function(){return new n(this,e)}}return function(){return new n(this,e)}},C=t+" Iterator",A=_==v,T=!1,D=e.prototype,M=D[f]||D[d]||_&&D[_],O=M||E(_),P=_?A?E("entries"):O:void 0,I="Array"==t?D.entries||M:M;if(I&&(S=p(I.call(new e)),S!==Object.prototype&&(l(S,C,!0),r||s(S,f)||a(S,f,y))),A&&M&&M.name!==v&&(T=!0,O=function(){return M.call(this)}),r&&!x||!h&&!T&&D[f]||a(D,f,O),u[t]=O,u[C]=y,_)if(w={values:A?O:E(v),keys:b?O:E(m),entries:P},x)for(k in w)k in D||o(D,k,w[k]);else i(i.P+i.F*(h||T),t,w);return w}},function(e,t){e.exports=!0},function(e,t,n){e.exports=n(84)},27,function(e,t,n){"use strict";var r=n(104),i=n(93),o=n(107),a={};n(84)(a,n(108)("iterator"),function(){return this}),e.exports=function(e,t,n){e.prototype=r(a,{next:i(1,n)}),o(e,t+" Iterator")}},function(e,t,n){var r=n(86),i=n(105),o=n(79),a=n(75)("IE_PROTO"),s=function(){},u="prototype",c=function(){var e,t=n(91)("iframe"),r=o.length,i="<",a=">";for(t.style.display="none",n(106).appendChild(t),t.src="javascript:",e=t.contentWindow.document,e.open(),e.write(i+"script"+a+"document.F=Object"+i+"/script"+a),e.close(),c=e.F;r--;)delete c[u][o[r]];return c()};e.exports=Object.create||function(e,t){var n;return null!==e?(s[u]=r(e),n=new s,s[u]=null,n[a]=e):n=c(),void 0===t?n:i(n,t)}},function(e,t,n){var r=n(85),i=n(86),o=n(65);e.exports=n(89)?Object.defineProperties:function(e,t){i(e);for(var n,a=o(t),s=a.length,u=0;s>u;)r.f(e,n=a[u++],t[n]);return e}},function(e,t,n){e.exports=n(77).document&&document.documentElement},function(e,t,n){var r=n(85).f,i=n(67),o=n(108)("toStringTag");e.exports=function(e,t,n){e&&!i(e=n?e:e.prototype,o)&&r(e,o,{configurable:!0,value:t})}},function(e,t,n){var r=n(76)("wks"),i=n(78),o=n(77).Symbol,a="function"==typeof o,s=e.exports=function(e){return r[e]||(r[e]=a&&o[e]||(a?o:i)("Symbol."+e))};s.store=r},function(e,t,n){var r=n(67),i=n(63),o=n(75)("IE_PROTO"),a=Object.prototype;e.exports=Object.getPrototypeOf||function(e){return e=i(e),r(e,o)?e[o]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?a:null}},function(e,t,n){n(111);for(var r=n(77),i=n(84),o=n(102),a=n(108)("toStringTag"),s=["NodeList","DOMTokenList","MediaList","StyleSheetList","CSSRuleList"],u=0;u<5;u++){var c=s[u],l=r[c],p=l&&l.prototype;p&&!p[a]&&i(p,a,c),o[c]=o.Array}},function(e,t,n){"use strict";var r=n(112),i=n(113),o=n(102),a=n(68);e.exports=n(99)(Array,"Array",function(e,t){this._t=a(e),this._i=0,this._k=t},function(){var e=this._t,t=this._k,n=this._i++;return!e||n>=e.length?(this._t=void 0,i(1)):"keys"==t?i(0,n):"values"==t?i(0,e[n]):i(0,[n,e[n]])},"values"),o.Arguments=o.Array,r("keys"),r("values"),r("entries")},function(e,t){e.exports=function(){}},33,function(e,t,n){t.f=n(108)},function(e,t,n){e.exports={default:n(116),__esModule:!0}},function(e,t,n){n(117),n(128),n(129),n(130),e.exports=n(59).Symbol},function(e,t,n){"use strict";var r=n(77),i=n(67),o=n(89),a=n(81),s=n(101),u=n(118).KEY,c=n(90),l=n(76),p=n(107),f=n(78),h=n(108),d=n(114),m=n(119),v=n(120),y=n(121),g=n(124),_=n(86),b=n(68),x=n(92),w=n(93),k=n(104),S=n(125),E=n(127),C=n(85),A=n(65),T=E.f,D=C.f,M=S.f,O=r.Symbol,P=r.JSON,I=P&&P.stringify,N="prototype",R=h("_hidden"),j=h("toPrimitive"),F={}.propertyIsEnumerable,B=l("symbol-registry"),L=l("symbols"),z=l("op-symbols"),q=Object[N],U="function"==typeof O,W=r.QObject,K=!W||!W[N]||!W[N].findChild,V=o&&c(function(){return 7!=k(D({},"a",{get:function(){return D(this,"a",{value:7}).a}})).a})?function(e,t,n){var r=T(q,t);r&&delete q[t],D(e,t,n),r&&e!==q&&D(q,t,r)}:D,H=function(e){var t=L[e]=k(O[N]);return t._k=e,t},J=U&&"symbol"==typeof O.iterator?function(e){return"symbol"==typeof e}:function(e){return e instanceof O},G=function(e,t,n){return e===q&&G(z,t,n),_(e),t=x(t,!0),_(n),i(L,t)?(n.enumerable?(i(e,R)&&e[R][t]&&(e[R][t]=!1),n=k(n,{enumerable:w(0,!1)})):(i(e,R)||D(e,R,w(1,{})),e[R][t]=!0),V(e,t,n)):D(e,t,n)},X=function(e,t){_(e);for(var n,r=y(t=b(t)),i=0,o=r.length;o>i;)G(e,n=r[i++],t[n]);return e},Y=function(e,t){return void 0===t?k(e):X(k(e),t)},$=function(e){var t=F.call(this,e=x(e,!0));return!(this===q&&i(L,e)&&!i(z,e))&&(!(t||!i(this,e)||!i(L,e)||i(this,R)&&this[R][e])||t)},Z=function(e,t){if(e=b(e),t=x(t,!0),e!==q||!i(L,t)||i(z,t)){var n=T(e,t);return!n||!i(L,t)||i(e,R)&&e[R][t]||(n.enumerable=!0),n}},Q=function(e){for(var t,n=M(b(e)),r=[],o=0;n.length>o;)i(L,t=n[o++])||t==R||t==u||r.push(t);return r},ee=function(e){for(var t,n=e===q,r=M(n?z:b(e)),o=[],a=0;r.length>a;)!i(L,t=r[a++])||n&&!i(q,t)||o.push(L[t]);return o};U||(O=function(){if(this instanceof O)throw TypeError("Symbol is not a constructor!");var e=f(arguments.length>0?arguments[0]:void 0),t=function(n){this===q&&t.call(z,n),i(this,R)&&i(this[R],e)&&(this[R][e]=!1),V(this,e,w(1,n))};return o&&K&&V(q,e,{configurable:!0,set:t}),H(e)},s(O[N],"toString",function(){return this._k}),E.f=Z,C.f=G,n(126).f=S.f=Q,n(123).f=$,n(122).f=ee,o&&!n(100)&&s(q,"propertyIsEnumerable",$,!0),d.f=function(e){return H(h(e))}),a(a.G+a.W+a.F*!U,{Symbol:O});for(var te="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),ne=0;te.length>ne;)h(te[ne++]);for(var te=A(h.store),ne=0;te.length>ne;)m(te[ne++]);a(a.S+a.F*!U,"Symbol",{for:function(e){return i(B,e+="")?B[e]:B[e]=O(e)},keyFor:function(e){if(J(e))return v(B,e);throw TypeError(e+" is not a symbol!")},useSetter:function(){K=!0},useSimple:function(){K=!1}}),a(a.S+a.F*!U,"Object",{create:Y,defineProperty:G,defineProperties:X,getOwnPropertyDescriptor:Z,getOwnPropertyNames:Q,getOwnPropertySymbols:ee}),P&&a(a.S+a.F*(!U||c(function(){var e=O();return"[null]"!=I([e])||"{}"!=I({a:e})||"{}"!=I(Object(e))})),"JSON",{stringify:function(e){if(void 0!==e&&!J(e)){for(var t,n,r=[e],i=1;arguments.length>i;)r.push(arguments[i++]);return t=r[1],"function"==typeof t&&(n=t),!n&&g(t)||(t=function(e,t){if(n&&(t=n.call(this,e,t)),!J(t))return t}),r[1]=t,I.apply(P,r)}}}),O[N][j]||n(84)(O[N],j,O[N].valueOf),p(O,"Symbol"),p(Math,"Math",!0),p(r.JSON,"JSON",!0)},function(e,t,n){var r=n(78)("meta"),i=n(87),o=n(67),a=n(85).f,s=0,u=Object.isExtensible||function(){return!0},c=!n(90)(function(){return u(Object.preventExtensions({}))}),l=function(e){a(e,r,{value:{i:"O"+ ++s,w:{}}})},p=function(e,t){if(!i(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!o(e,r)){if(!u(e))return"F";if(!t)return"E";l(e)}return e[r].i},f=function(e,t){if(!o(e,r)){if(!u(e))return!0;if(!t)return!1;l(e)}return e[r].w},h=function(e){return c&&d.NEED&&u(e)&&!o(e,r)&&l(e),e},d=e.exports={KEY:r,NEED:!1,fastKey:p,getWeak:f,onFreeze:h}},function(e,t,n){var r=n(77),i=n(59),o=n(100),a=n(114),s=n(85).f;e.exports=function(e){var t=i.Symbol||(i.Symbol=o?{}:r.Symbol||{});"_"==e.charAt(0)||e in t||s(t,e,{value:a.f(e)})}},function(e,t,n){var r=n(65),i=n(68);e.exports=function(e,t){for(var n,o=i(e),a=r(o),s=a.length,u=0;s>u;)if(o[n=a[u++]]===t)return n}},function(e,t,n){var r=n(65),i=n(122),o=n(123);e.exports=function(e){var t=r(e),n=i.f;if(n)for(var a,s=n(e),u=o.f,c=0;s.length>c;)u.call(e,a=s[c++])&&t.push(a);return t}},function(e,t){t.f=Object.getOwnPropertySymbols},function(e,t){t.f={}.propertyIsEnumerable},function(e,t,n){var r=n(70);e.exports=Array.isArray||function(e){return"Array"==r(e)}},function(e,t,n){var r=n(68),i=n(126).f,o={}.toString,a="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],s=function(e){try{return i(e)}catch(e){return a.slice()}};e.exports.f=function(e){return a&&"[object Window]"==o.call(e)?s(e):i(r(e))}},function(e,t,n){var r=n(66),i=n(79).concat("length","prototype");t.f=Object.getOwnPropertyNames||function(e){return r(e,i)}},function(e,t,n){var r=n(123),i=n(93),o=n(68),a=n(92),s=n(67),u=n(88),c=Object.getOwnPropertyDescriptor;t.f=n(89)?c:function(e,t){if(e=o(e),t=a(t,!0),u)try{return c(e,t)}catch(e){}if(s(e,t))return i(!r.f.call(e,t),e[t])}},function(e,t){},function(e,t,n){n(119)("asyncIterator")},function(e,t,n){n(119)("observable")},function(e,t,n){(function(t){/*! + * @description Recursive object extending + * @author Viacheslav Lotsmanov + * @license MIT + * + * The MIT License (MIT) + * + * Copyright (c) 2013-2015 Viacheslav Lotsmanov + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +"use strict";function n(e){return e instanceof t||e instanceof Date||e instanceof RegExp}function r(e){if(e instanceof t){var n=new t(e.length);return e.copy(n),n}if(e instanceof Date)return new Date(e.getTime());if(e instanceof RegExp)return new RegExp(e);throw new Error("Unexpected situation")}function i(e){var t=[];return e.forEach(function(e,a){"object"==typeof e&&null!==e?Array.isArray(e)?t[a]=i(e):n(e)?t[a]=r(e):t[a]=o({},e):t[a]=e}),t}var o=e.exports=function(){if(arguments.length<1||"object"!=typeof arguments[0])return!1;if(arguments.length<2)return arguments[0];var e,t,a=arguments[0],s=Array.prototype.slice.call(arguments,1);return s.forEach(function(s){"object"!=typeof s||Array.isArray(s)||Object.keys(s).forEach(function(u){return t=a[u],e=s[u],e===a?void 0:"object"!=typeof e||null===e?void(a[u]=e):Array.isArray(e)?void(a[u]=i(e)):n(e)?void(a[u]=r(e)):"object"!=typeof t||null===t||Array.isArray(t)?void(a[u]=o({},e)):void(a[u]=o(t,e))})}),a}}).call(t,n(132).Buffer)},function(e,t,n){(function(e){/*! + * The buffer module from node.js, for the browser. + * + * @author Feross Aboukhadijeh + * @license MIT + */ +"use strict";function r(){try{var e=new Uint8Array(1);return e.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}},42===e.foo()&&"function"==typeof e.subarray&&0===e.subarray(1,1).byteLength}catch(e){return!1}}function i(){return a.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function o(e,t){if(i()=i())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+i().toString(16)+" bytes");return 0|e}function v(e){return+e!=e&&(e=0),a.alloc(+e)}function y(e,t){if(a.isBuffer(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var n=e.length;if(0===n)return 0;for(var r=!1;;)switch(t){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":case void 0:return V(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return G(e).length;default:if(r)return V(e).length;t=(""+t).toLowerCase(),r=!0}}function g(e,t,n){var r=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if(n>>>=0,t>>>=0,n<=t)return"";for(e||(e="utf8");;)switch(e){case"hex":return I(this,t,n);case"utf8":case"utf-8":return D(this,t,n);case"ascii":return O(this,t,n);case"latin1":case"binary":return P(this,t,n);case"base64":return T(this,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return N(this,t,n);default:if(r)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),r=!0}}function _(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function b(e,t,n,r,i){if(0===e.length)return-1;if("string"==typeof n?(r=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),n=+n,isNaN(n)&&(n=i?0:e.length-1),n<0&&(n=e.length+n),n>=e.length){if(i)return-1;n=e.length-1}else if(n<0){if(!i)return-1;n=0}if("string"==typeof t&&(t=a.from(t,r)),a.isBuffer(t))return 0===t.length?-1:x(e,t,n,r,i);if("number"==typeof t)return t&=255,a.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(e,t,n):Uint8Array.prototype.lastIndexOf.call(e,t,n):x(e,[t],n,r,i);throw new TypeError("val must be string, number or Buffer")}function x(e,t,n,r,i){function o(e,t){return 1===a?e[t]:e.readUInt16BE(t*a)}var a=1,s=e.length,u=t.length;if(void 0!==r&&(r=String(r).toLowerCase(),"ucs2"===r||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(e.length<2||t.length<2)return-1;a=2,s/=2,u/=2,n/=2}var c;if(i){var l=-1;for(c=n;cs&&(n=s-u),c=n;c>=0;c--){for(var p=!0,f=0;fi&&(r=i)):r=i;var o=t.length;if(o%2!==0)throw new TypeError("Invalid hex string");r>o/2&&(r=o/2);for(var a=0;a239?4:o>223?3:o>191?2:1;if(i+s<=n){var u,c,l,p;switch(s){case 1:o<128&&(a=o);break;case 2:u=e[i+1],128===(192&u)&&(p=(31&o)<<6|63&u,p>127&&(a=p));break;case 3:u=e[i+1],c=e[i+2],128===(192&u)&&128===(192&c)&&(p=(15&o)<<12|(63&u)<<6|63&c,p>2047&&(p<55296||p>57343)&&(a=p));break;case 4:u=e[i+1],c=e[i+2],l=e[i+3],128===(192&u)&&128===(192&c)&&128===(192&l)&&(p=(15&o)<<18|(63&u)<<12|(63&c)<<6|63&l,p>65535&&p<1114112&&(a=p))}}null===a?(a=65533,s=1):a>65535&&(a-=65536,r.push(a>>>10&1023|55296),a=56320|1023&a),r.push(a),i+=s}return M(r)}function M(e){var t=e.length;if(t<=ee)return String.fromCharCode.apply(String,e);for(var n="",r=0;rr)&&(n=r);for(var i="",o=t;on)throw new RangeError("Trying to access beyond buffer length")}function j(e,t,n,r,i,o){if(!a.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>i||te.length)throw new RangeError("Index out of range")}function F(e,t,n,r){t<0&&(t=65535+t+1);for(var i=0,o=Math.min(e.length-n,2);i>>8*(r?i:1-i)}function B(e,t,n,r){t<0&&(t=4294967295+t+1);for(var i=0,o=Math.min(e.length-n,4);i>>8*(r?i:3-i)&255}function L(e,t,n,r,i,o){if(n+r>e.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function z(e,t,n,r,i){return i||L(e,t,n,4,3.4028234663852886e38,-3.4028234663852886e38),Z.write(e,t,n,r,23,4),n+4}function q(e,t,n,r,i){return i||L(e,t,n,8,1.7976931348623157e308,-1.7976931348623157e308),Z.write(e,t,n,r,52,8),n+8}function U(e){if(e=W(e).replace(te,""),e.length<2)return"";for(;e.length%4!==0;)e+="=";return e}function W(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}function K(e){return e<16?"0"+e.toString(16):e.toString(16)}function V(e,t){t=t||1/0;for(var n,r=e.length,i=null,o=[],a=0;a55295&&n<57344){if(!i){if(n>56319){(t-=3)>-1&&o.push(239,191,189);continue}if(a+1===r){(t-=3)>-1&&o.push(239,191,189);continue}i=n;continue}if(n<56320){(t-=3)>-1&&o.push(239,191,189),i=n;continue}n=(i-55296<<10|n-56320)+65536}else i&&(t-=3)>-1&&o.push(239,191,189);if(i=null,n<128){if((t-=1)<0)break;o.push(n)}else if(n<2048){if((t-=2)<0)break;o.push(n>>6|192,63&n|128)}else if(n<65536){if((t-=3)<0)break;o.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;o.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return o}function H(e){for(var t=[],n=0;n>8,i=n%256,o.push(i),o.push(r);return o}function G(e){return $.toByteArray(U(e))}function X(e,t,n,r){for(var i=0;i=t.length||i>=e.length);++i)t[i+n]=e[i];return i}function Y(e){return e!==e}var $=n(133),Z=n(134),Q=n(135);t.Buffer=a,t.SlowBuffer=v,t.INSPECT_MAX_BYTES=50,a.TYPED_ARRAY_SUPPORT=void 0!==e.TYPED_ARRAY_SUPPORT?e.TYPED_ARRAY_SUPPORT:r(),t.kMaxLength=i(),a.poolSize=8192,a._augment=function(e){return e.__proto__=a.prototype,e},a.from=function(e,t,n){return s(null,e,t,n)},a.TYPED_ARRAY_SUPPORT&&(a.prototype.__proto__=Uint8Array.prototype,a.__proto__=Uint8Array,"undefined"!=typeof Symbol&&Symbol.species&&a[Symbol.species]===a&&Object.defineProperty(a,Symbol.species,{value:null,configurable:!0})),a.alloc=function(e,t,n){return c(null,e,t,n)},a.allocUnsafe=function(e){return l(null,e)},a.allocUnsafeSlow=function(e){return l(null,e)},a.isBuffer=function(e){return!(null==e||!e._isBuffer)},a.compare=function(e,t){if(!a.isBuffer(e)||!a.isBuffer(t))throw new TypeError("Arguments must be Buffers");if(e===t)return 0;for(var n=e.length,r=t.length,i=0,o=Math.min(n,r);i0&&(e=this.toString("hex",0,n).match(/.{2}/g).join(" "),this.length>n&&(e+=" ... ")),""},a.prototype.compare=function(e,t,n,r,i){if(!a.isBuffer(e))throw new TypeError("Argument must be a Buffer");if(void 0===t&&(t=0),void 0===n&&(n=e?e.length:0),void 0===r&&(r=0),void 0===i&&(i=this.length),t<0||n>e.length||r<0||i>this.length)throw new RangeError("out of range index");if(r>=i&&t>=n)return 0;if(r>=i)return-1;if(t>=n)return 1;if(t>>>=0,n>>>=0,r>>>=0,i>>>=0,this===e)return 0;for(var o=i-r,s=n-t,u=Math.min(o,s),c=this.slice(r,i),l=e.slice(t,n),p=0;pi)&&(n=i),e.length>0&&(n<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");for(var o=!1;;)switch(r){case"hex":return w(this,e,t,n);case"utf8":case"utf-8":return k(this,e,t,n);case"ascii":return S(this,e,t,n);case"latin1":case"binary":return E(this,e,t,n);case"base64":return C(this,e,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return A(this,e,t,n);default:if(o)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),o=!0}},a.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var ee=4096;a.prototype.slice=function(e,t){var n=this.length;e=~~e,t=void 0===t?n:~~t,e<0?(e+=n,e<0&&(e=0)):e>n&&(e=n),t<0?(t+=n,t<0&&(t=0)):t>n&&(t=n),t0&&(i*=256);)r+=this[e+--t]*i;return r},a.prototype.readUInt8=function(e,t){return t||R(e,1,this.length),this[e]},a.prototype.readUInt16LE=function(e,t){return t||R(e,2,this.length),this[e]|this[e+1]<<8},a.prototype.readUInt16BE=function(e,t){return t||R(e,2,this.length),this[e]<<8|this[e+1]},a.prototype.readUInt32LE=function(e,t){return t||R(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},a.prototype.readUInt32BE=function(e,t){return t||R(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},a.prototype.readIntLE=function(e,t,n){e|=0,t|=0,n||R(e,t,this.length);for(var r=this[e],i=1,o=0;++o=i&&(r-=Math.pow(2,8*t)),r},a.prototype.readIntBE=function(e,t,n){e|=0,t|=0,n||R(e,t,this.length);for(var r=t,i=1,o=this[e+--r];r>0&&(i*=256);)o+=this[e+--r]*i;return i*=128,o>=i&&(o-=Math.pow(2,8*t)),o},a.prototype.readInt8=function(e,t){return t||R(e,1,this.length),128&this[e]?(255-this[e]+1)*-1:this[e]},a.prototype.readInt16LE=function(e,t){t||R(e,2,this.length);var n=this[e]|this[e+1]<<8;return 32768&n?4294901760|n:n},a.prototype.readInt16BE=function(e,t){t||R(e,2,this.length);var n=this[e+1]|this[e]<<8;return 32768&n?4294901760|n:n},a.prototype.readInt32LE=function(e,t){return t||R(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},a.prototype.readInt32BE=function(e,t){return t||R(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},a.prototype.readFloatLE=function(e,t){return t||R(e,4,this.length),Z.read(this,e,!0,23,4)},a.prototype.readFloatBE=function(e,t){return t||R(e,4,this.length),Z.read(this,e,!1,23,4)},a.prototype.readDoubleLE=function(e,t){return t||R(e,8,this.length),Z.read(this,e,!0,52,8)},a.prototype.readDoubleBE=function(e,t){return t||R(e,8,this.length),Z.read(this,e,!1,52,8)},a.prototype.writeUIntLE=function(e,t,n,r){if(e=+e,t|=0,n|=0,!r){var i=Math.pow(2,8*n)-1;j(this,e,t,n,i,0)}var o=1,a=0;for(this[t]=255&e;++a=0&&(a*=256);)this[t+o]=e/a&255;return t+n},a.prototype.writeUInt8=function(e,t,n){return e=+e,t|=0,n||j(this,e,t,1,255,0),a.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},a.prototype.writeUInt16LE=function(e,t,n){return e=+e,t|=0,n||j(this,e,t,2,65535,0),a.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):F(this,e,t,!0),t+2},a.prototype.writeUInt16BE=function(e,t,n){return e=+e,t|=0,n||j(this,e,t,2,65535,0),a.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):F(this,e,t,!1),t+2},a.prototype.writeUInt32LE=function(e,t,n){return e=+e,t|=0,n||j(this,e,t,4,4294967295,0),a.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):B(this,e,t,!0),t+4},a.prototype.writeUInt32BE=function(e,t,n){return e=+e,t|=0,n||j(this,e,t,4,4294967295,0),a.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):B(this,e,t,!1),t+4},a.prototype.writeIntLE=function(e,t,n,r){if(e=+e,t|=0,!r){var i=Math.pow(2,8*n-1);j(this,e,t,n,i-1,-i)}var o=0,a=1,s=0;for(this[t]=255&e;++o>0)-s&255;return t+n},a.prototype.writeIntBE=function(e,t,n,r){if(e=+e,t|=0,!r){var i=Math.pow(2,8*n-1);j(this,e,t,n,i-1,-i)}var o=n-1,a=1,s=0;for(this[t+o]=255&e;--o>=0&&(a*=256);)e<0&&0===s&&0!==this[t+o+1]&&(s=1),this[t+o]=(e/a>>0)-s&255;return t+n},a.prototype.writeInt8=function(e,t,n){return e=+e,t|=0,n||j(this,e,t,1,127,-128),a.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[t]=255&e,t+1},a.prototype.writeInt16LE=function(e,t,n){return e=+e,t|=0,n||j(this,e,t,2,32767,-32768),a.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):F(this,e,t,!0),t+2},a.prototype.writeInt16BE=function(e,t,n){return e=+e,t|=0,n||j(this,e,t,2,32767,-32768),a.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):F(this,e,t,!1),t+2},a.prototype.writeInt32LE=function(e,t,n){return e=+e,t|=0,n||j(this,e,t,4,2147483647,-2147483648),a.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):B(this,e,t,!0),t+4},a.prototype.writeInt32BE=function(e,t,n){return e=+e,t|=0,n||j(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),a.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):B(this,e,t,!1),t+4},a.prototype.writeFloatLE=function(e,t,n){return z(this,e,t,!0,n)},a.prototype.writeFloatBE=function(e,t,n){return z(this,e,t,!1,n)},a.prototype.writeDoubleLE=function(e,t,n){return q(this,e,t,!0,n)},a.prototype.writeDoubleBE=function(e,t,n){return q(this,e,t,!1,n)},a.prototype.copy=function(e,t,n,r){if(n||(n=0),r||0===r||(r=this.length),t>=e.length&&(t=e.length),t||(t=0),r>0&&r=this.length)throw new RangeError("sourceStart out of bounds");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),e.length-t=0;--i)e[i+t]=this[i+n];else if(o<1e3||!a.TYPED_ARRAY_SUPPORT)for(i=0;i>>=0,n=void 0===n?this.length:n>>>0,e||(e=0);var o;if("number"==typeof e)for(o=t;o0)throw new Error("Invalid string. Length must be a multiple of 4");return"="===e[t-2]?2:"="===e[t-1]?1:0}function r(e){return 3*e.length/4-n(e)}function i(e){var t,r,i,o,a,s=e.length;o=n(e),a=new l(3*s/4-o),r=o>0?s-4:s;var u=0;for(t=0;t>16&255,a[u++]=i>>8&255,a[u++]=255&i;return 2===o?(i=c[e.charCodeAt(t)]<<2|c[e.charCodeAt(t+1)]>>4,a[u++]=255&i):1===o&&(i=c[e.charCodeAt(t)]<<10|c[e.charCodeAt(t+1)]<<4|c[e.charCodeAt(t+2)]>>2,a[u++]=i>>8&255,a[u++]=255&i),a}function o(e){return u[e>>18&63]+u[e>>12&63]+u[e>>6&63]+u[63&e]}function a(e,t,n){for(var r,i=[],a=t;al?l:c+s));return 1===r?(t=e[n-1],i+=u[t>>2],i+=u[t<<4&63],i+="=="):2===r&&(t=(e[n-2]<<8)+e[n-1],i+=u[t>>10],i+=u[t>>4&63],i+=u[t<<2&63],i+="="),o.push(i),o.join("")}t.byteLength=r,t.toByteArray=i,t.fromByteArray=s;for(var u=[],c=[],l="undefined"!=typeof Uint8Array?Uint8Array:Array,p="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",f=0,h=p.length;f>1,l=-7,p=n?i-1:0,f=n?-1:1,h=e[t+p];for(p+=f,o=h&(1<<-l)-1,h>>=-l,l+=s;l>0;o=256*o+e[t+p],p+=f,l-=8);for(a=o&(1<<-l)-1,o>>=-l,l+=r;l>0;a=256*a+e[t+p],p+=f,l-=8);if(0===o)o=1-c;else{if(o===u)return a?NaN:(h?-1:1)*(1/0);a+=Math.pow(2,r),o-=c}return(h?-1:1)*a*Math.pow(2,o-r)},t.write=function(e,t,n,r,i,o){var a,s,u,c=8*o-i-1,l=(1<>1,f=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,h=r?0:o-1,d=r?1:-1,m=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(s=isNaN(t)?1:0,a=l):(a=Math.floor(Math.log(t)/Math.LN2),t*(u=Math.pow(2,-a))<1&&(a--,u*=2),t+=a+p>=1?f/u:f*Math.pow(2,1-p),t*u>=2&&(a++,u/=2),a+p>=l?(s=0,a=l):a+p>=1?(s=(t*u-1)*Math.pow(2,i),a+=p):(s=t*Math.pow(2,p-1)*Math.pow(2,i),a=0));i>=8;e[n+h]=255&s,h+=d,s/=256,i-=8);for(a=a<0;e[n+h]=255&a,h+=d,a/=256,c-=8);e[n+h-d]|=128*m}},function(e,t){var n={}.toString;e.exports=Array.isArray||function(e){return"[object Array]"==n.call(e)}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t,n){var r=[(0,P.systemThunkMiddleware)(n)],i=O.default.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__||x.compose;return(0,x.createStore)(e,t,i(x.applyMiddleware.apply(void 0,r)))}function o(e,t){return(0,P.isObject)(e)&&!(0,P.isArray)(e)?e:(0,P.isFunc)(e)?o(e(t),t):(0,P.isArray)(e)?e.map(function(e){return o(e,t)}).reduce(a,{}):{}}function a(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!(0,P.isObject)(e))return{};if(!(0,P.isObject)(t))return e;var n=e.statePlugins;if((0,P.isObject)(n))for(var r in n){var i=n[r];if((0,P.isObject)(i)&&(0,P.isObject)(i.wrapActions)){var o=i.wrapActions;for(var a in o){var s=o[a];Array.isArray(s)||(s=[s],o[a]=s),t&&t.statePlugins&&t.statePlugins[r]&&t.statePlugins[r].wrapActions&&t.statePlugins[r].wrapActions[a]&&(t.statePlugins[r].wrapActions[a]=o[a].concat(t.statePlugins[r].wrapActions[a]))}}}return(0,E.default)(e,t)}function s(e){var t=(0,P.objMap)(e,function(e){return e.reducers});return u(t)}function u(e){var t=(0,f.default)(e).reduce(function(t,n){return t[n]=c(e[n]),t},{});return(0,f.default)(t).length?(0,C.combineReducers)(t):I}function c(e){return function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:new w.Map,n=arguments[1];if(!e)return t;var r=e[n.type];return r?r(t,n):t}}function l(e,t,n){var r=i(e,t,n);return r}Object.defineProperty(t,"__esModule",{value:!0});var p=n(60),f=r(p),h=n(137),d=r(h),m=n(141),v=r(m),y=n(145),g=r(y),_=n(146),b=r(_),x=n(147),w=n(168),k=r(w),S=n(131),E=r(S),C=n(169),A=n(175),T=r(A),D=n(176),M=n(177),O=r(M),P=n(183),I=function(e){return e},N=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};(0,g.default)(this,e),(0,E.default)(this,{state:{},plugins:[],system:{configs:{},fn:{},components:{},rootInjects:{},statePlugins:{}},boundSystem:{},toolbox:{}},t),this.getSystem=this._getSystem.bind(this),this.store=l(I,(0,w.fromJS)(this.state),this.getSystem),this.buildSystem(!1),this.register(this.plugins)}return(0,b.default)(e,[{key:"getStore",value:function(){return this.store}},{key:"register",value:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=o(e,this.getSystem());a(this.system,n),t&&this.buildSystem()}},{key:"buildSystem",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=this.getStore().dispatch,n=this.getStore().getState;this.boundSystem=(0,v.default)({},this.getRootInjects(),this.getWrappedAndBoundActions(t),this.getBoundSelectors(n,this.getSystem),this.getStateThunks(n),this.getFn(),this.getConfigs()),e&&this.rebuildReducer()}},{key:"_getSystem",value:function(){return this.boundSystem}},{key:"getRootInjects",value:function(){return(0,v.default)({getSystem:this.getSystem,getStore:this.getStore.bind(this),getComponents:this.getComponents.bind(this),getState:this.getStore().getState,getConfigs:this._getConfigs.bind(this),Im:k.default},this.system.rootInjects||{})}},{key:"_getConfigs",value:function(){return this.system.configs}},{key:"getConfigs",value:function(){return{configs:this.system.configs}}},{key:"setConfigs",value:function(e){this.system.configs=e}},{key:"rebuildReducer",value:function(){this.store.replaceReducer(s(this.system.statePlugins))}},{key:"getType",value:function(e){var t=e[0].toUpperCase()+e.slice(1);return(0,P.objReduce)(this.system.statePlugins,function(n,r){var i=n[e];if(i)return(0,d.default)({},r+t,i)})}},{key:"getSelectors",value:function(){return this.getType("selectors")}},{key:"getActions",value:function(){var e=this.getType("actions");return(0,P.objMap)(e,function(e){return(0,P.objReduce)(e,function(e,t){if((0,P.isFn)(e))return(0,d.default)({},t,e)})})}},{key:"getWrappedAndBoundActions",value:function(e){var t=this,n=this.getBoundActions(e);return(0,P.objMap)(n,function(e,n){var r=t.system.statePlugins[n.slice(0,-7)].wrapActions;return r?(0,P.objMap)(e,function(e,n){var i=r[n];return i?(Array.isArray(i)||(i=[i]),i.reduce(function(e,n){var r=function(){return n(e,t.getSystem()).apply(void 0,arguments)};if(!(0,P.isFn)(r))throw new TypeError("wrapActions needs to return a function that returns a new function (ie the wrapped action)");return r},e||Function.prototype)):e}):e})}},{key:"getStates",value:function(e){return(0,f.default)(this.system.statePlugins).reduce(function(t,n){return t[n]=e.get(n),t},{})}},{key:"getStateThunks",value:function(e){return(0,f.default)(this.system.statePlugins).reduce(function(t,n){return t[n]=function(){return e().get(n)},t},{})}},{key:"getFn",value:function(){return{fn:this.system.fn}}},{key:"getComponents",value:function(e){return"undefined"!=typeof e?this.system.components[e]:this.system.components}},{key:"getBoundSelectors",value:function(e,t){return(0,P.objMap)(this.getSelectors(),function(n,r){var i=[r.slice(0,-9)],o=function(){return e().getIn(i)};return(0,P.objMap)(n,function(e){return function(){for(var n=arguments.length,r=Array(n),i=0;ic;)for(var f,h=s(arguments[c++]),d=l?r(h).concat(l(h)):r(h),m=d.length,v=0;m>v;)p.call(h,f=d[v++])&&(n[f]=h[f]);return n}:u},function(e,t){"use strict";t.__esModule=!0,t.default=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var i=n(138),o=r(i);t.default=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{},t=arguments[1];if(u)throw u;for(var r=!1,o={},a=0;a>>0;if(""+n!==t||4294967295===n)return NaN;t=n}return t<0?d(e)+t:t}function v(){return!0}function y(e,t,n){return(0===e||void 0!==n&&e<=-n)&&(void 0===t||void 0!==n&&t>=n)}function g(e,t){return b(e,t,0)}function _(e,t){return b(e,t,t)}function b(e,t,n){return void 0===e?n:e<0?Math.max(0,t+e):void 0===t?e:Math.min(t,e)}function x(e){this.next=e}function w(e,t,n,r){var i=0===e?t:1===e?n:[t,n];return r?r.value=i:r={value:i,done:!1},r}function k(){return{value:void 0,done:!0}}function S(e){return!!A(e)}function E(e){return e&&"function"==typeof e.next}function C(e){var t=A(e);return t&&t.call(e)}function A(e){var t=e&&(kn&&e[kn]||e[Sn]);if("function"==typeof t)return t}function T(e){return e&&"number"==typeof e.length}function D(e){return null===e||void 0===e?B():o(e)?e.toSeq():q(e)}function M(e){return null===e||void 0===e?B().toKeyedSeq():o(e)?a(e)?e.toSeq():e.fromEntrySeq():L(e)}function O(e){return null===e||void 0===e?B():o(e)?a(e)?e.entrySeq():e.toIndexedSeq():z(e)}function P(e){return(null===e||void 0===e?B():o(e)?a(e)?e.entrySeq():e:z(e)).toSetSeq()}function I(e){this._array=e,this.size=e.length}function N(e){var t=Object.keys(e);this._object=e,this._keys=t,this.size=t.length}function R(e){this._iterable=e,this.size=e.length||e.size}function j(e){this._iterator=e,this._iteratorCache=[]}function F(e){return!(!e||!e[Cn])}function B(){return An||(An=new I([]))}function L(e){var t=Array.isArray(e)?new I(e).fromEntrySeq():E(e)?new j(e).fromEntrySeq():S(e)?new R(e).fromEntrySeq():"object"==typeof e?new N(e):void 0;if(!t)throw new TypeError("Expected Array or iterable object of [k, v] entries, or keyed object: "+e);return t}function z(e){var t=U(e);if(!t)throw new TypeError("Expected Array or iterable object of values: "+e);return t}function q(e){var t=U(e)||"object"==typeof e&&new N(e);if(!t)throw new TypeError("Expected Array or iterable object of values, or keyed object: "+e);return t}function U(e){return T(e)?new I(e):E(e)?new j(e):S(e)?new R(e):void 0}function W(e,t,n,r){var i=e._cache;if(i){for(var o=i.length-1,a=0;a<=o;a++){var s=i[n?o-a:a];if(t(s[1],r?s[0]:a,e)===!1)return a+1}return a}return e.__iterateUncached(t,n)}function K(e,t,n,r){var i=e._cache;if(i){var o=i.length-1,a=0;return new x(function(){var e=i[n?o-a:a];return a++>o?k():w(t,r?e[0]:a-1,e[1])})}return e.__iteratorUncached(t,n)}function V(e,t){return t?H(t,e,"",{"":e}):J(e)}function H(e,t,n,r){return Array.isArray(t)?e.call(r,n,O(t).map(function(n,r){return H(e,n,r,t)})):G(t)?e.call(r,n,M(t).map(function(n,r){return H(e,n,r,t)})):t}function J(e){return Array.isArray(e)?O(e).map(J).toList():G(e)?M(e).map(J).toMap():e}function G(e){return e&&(e.constructor===Object||void 0===e.constructor)}function X(e,t){if(e===t||e!==e&&t!==t)return!0;if(!e||!t)return!1;if("function"==typeof e.valueOf&&"function"==typeof t.valueOf){if(e=e.valueOf(),t=t.valueOf(),e===t||e!==e&&t!==t)return!0;if(!e||!t)return!1}return!("function"!=typeof e.equals||"function"!=typeof t.equals||!e.equals(t))}function Y(e,t){if(e===t)return!0;if(!o(t)||void 0!==e.size&&void 0!==t.size&&e.size!==t.size||void 0!==e.__hash&&void 0!==t.__hash&&e.__hash!==t.__hash||a(e)!==a(t)||s(e)!==s(t)||c(e)!==c(t))return!1;if(0===e.size&&0===t.size)return!0;var n=!u(e);if(c(e)){var r=e.entries();return t.every(function(e,t){var i=r.next().value;return i&&X(i[1],e)&&(n||X(i[0],t))})&&r.next().done}var i=!1;if(void 0===e.size)if(void 0===t.size)"function"==typeof e.cacheResult&&e.cacheResult();else{i=!0;var l=e;e=t,t=l}var p=!0,f=t.__iterate(function(t,r){if(n?!e.has(t):i?!X(t,e.get(r,yn)):!X(e.get(r,yn),t))return p=!1,!1});return p&&e.size===f}function $(e,t){if(!(this instanceof $))return new $(e,t);if(this._value=e,this.size=void 0===t?1/0:Math.max(0,t),0===this.size){if(Tn)return Tn;Tn=this}}function Z(e,t){if(!e)throw new Error(t)}function Q(e,t,n){if(!(this instanceof Q))return new Q(e,t,n);if(Z(0!==n,"Cannot step a Range by 0"),e=e||0,void 0===t&&(t=1/0),n=void 0===n?1:Math.abs(n),t>>1&1073741824|3221225471&e}function oe(e){if(e===!1||null===e||void 0===e)return 0;if("function"==typeof e.valueOf&&(e=e.valueOf(),e===!1||null===e||void 0===e))return 0;if(e===!0)return 1;var t=typeof e;if("number"===t){if(e!==e||e===1/0)return 0;var n=0|e;for(n!==e&&(n^=4294967295*e);e>4294967295;)e/=4294967295,n^=e;return ie(n)}if("string"===t)return e.length>Fn?ae(e):se(e);if("function"==typeof e.hashCode)return e.hashCode();if("object"===t)return ue(e);if("function"==typeof e.toString)return se(e.toString());throw new Error("Value type "+t+" cannot be hashed.")}function ae(e){var t=zn[e];return void 0===t&&(t=se(e),Ln===Bn&&(Ln=0,zn={}),Ln++,zn[e]=t),t}function se(e){for(var t=0,n=0;n0)switch(e.nodeType){case 1:return e.uniqueID;case 9:return e.documentElement&&e.documentElement.uniqueID}}function le(e){Z(e!==1/0,"Cannot perform this action with an infinite size.")}function pe(e){return null===e||void 0===e?we():fe(e)&&!c(e)?e:we().withMutations(function(t){var r=n(e);le(r.size),r.forEach(function(e,n){return t.set(n,e)})})}function fe(e){return!(!e||!e[qn])}function he(e,t){this.ownerID=e,this.entries=t}function de(e,t,n){this.ownerID=e,this.bitmap=t,this.nodes=n}function me(e,t,n){this.ownerID=e,this.count=t,this.nodes=n}function ve(e,t,n){this.ownerID=e,this.keyHash=t,this.entries=n}function ye(e,t,n){this.ownerID=e,this.keyHash=t,this.entry=n}function ge(e,t,n){this._type=t,this._reverse=n,this._stack=e._root&&be(e._root)}function _e(e,t){return w(e,t[0],t[1])}function be(e,t){return{node:e,index:0,__prev:t}}function xe(e,t,n,r){var i=Object.create(Un);return i.size=e,i._root=t,i.__ownerID=n,i.__hash=r,i.__altered=!1,i}function we(){return Wn||(Wn=xe(0))}function ke(e,t,n){var r,i;if(e._root){var o=l(gn),a=l(_n);if(r=Se(e._root,e.__ownerID,0,void 0,t,n,o,a),!a.value)return e;i=e.size+(o.value?n===yn?-1:1:0)}else{if(n===yn)return e;i=1,r=new he(e.__ownerID,[[t,n]])}return e.__ownerID?(e.size=i,e._root=r,e.__hash=void 0,e.__altered=!0,e):r?xe(i,r):we()}function Se(e,t,n,r,i,o,a,s){return e?e.update(t,n,r,i,o,a,s):o===yn?e:(p(s),p(a),new ye(t,r,[i,o]))}function Ee(e){return e.constructor===ye||e.constructor===ve}function Ce(e,t,n,r,i){if(e.keyHash===r)return new ve(t,r,[e.entry,i]);var o,a=(0===n?e.keyHash:e.keyHash>>>n)&vn,s=(0===n?r:r>>>n)&vn,u=a===s?[Ce(e,t,n+dn,r,i)]:(o=new ye(t,r,i),a>>=1)a[s]=1&n?t[o++]:void 0;return a[r]=i,new me(e,o+1,a)}function Me(e,t,r){for(var i=[],a=0;a>1&1431655765,e=(858993459&e)+(e>>2&858993459),e=e+(e>>4)&252645135,e+=e>>8,e+=e>>16,127&e}function je(e,t,n,r){var i=r?e:h(e);return i[t]=n,i}function Fe(e,t,n,r){var i=e.length+1;if(r&&t+1===i)return e[t]=n,e;for(var o=new Array(i),a=0,s=0;s0&&io?0:o-n,c=a-n;return c>mn&&(c=mn),function(){if(i===c)return Yn;var e=t?--c:i++;return r&&r[e]}}function i(e,r,i){var s,u=e&&e.array,c=i>o?0:o-i>>r,l=(a-i>>r)+1;return l>mn&&(l=mn),function(){for(;;){if(s){var e=s();if(e!==Yn)return e;s=null}if(c===l)return Yn;var o=t?--l:c++;s=n(u&&u[o],r-dn,i+(o<=e.size||t<0)return e.withMutations(function(e){t<0?Xe(e,t).set(0,n):Xe(e,0,t+1).set(t,n)});t+=e._origin;var r=e._tail,i=e._root,o=l(_n);return t>=$e(e._capacity)?r=He(r,e.__ownerID,0,t,n,o):i=He(i,e.__ownerID,e._level,t,n,o),o.value?e.__ownerID?(e._root=i,e._tail=r,e.__hash=void 0,e.__altered=!0,e):We(e._origin,e._capacity,e._level,i,r):e}function He(e,t,n,r,i,o){var a=r>>>n&vn,s=e&&a0){var c=e&&e.array[a],l=He(c,t,n-dn,r,i,o);return l===c?e:(u=Je(e,t),u.array[a]=l,u)}return s&&e.array[a]===i?e:(p(o),u=Je(e,t),void 0===i&&a===u.array.length-1?u.array.pop():u.array[a]=i,u)}function Je(e,t){return t&&e&&t===e.ownerID?e:new qe(e?e.array.slice():[],t)}function Ge(e,t){if(t>=$e(e._capacity))return e._tail;if(t<1<0;)n=n.array[t>>>r&vn],r-=dn;return n}}function Xe(e,t,n){void 0!==t&&(t|=0),void 0!==n&&(n|=0);var r=e.__ownerID||new f,i=e._origin,o=e._capacity,a=i+t,s=void 0===n?o:n<0?o+n:i+n;if(a===i&&s===o)return e;if(a>=s)return e.clear();for(var u=e._level,c=e._root,l=0;a+l<0;)c=new qe(c&&c.array.length?[void 0,c]:[],r),u+=dn,l+=1<=1<p?new qe([],r):d;if(d&&h>p&&adn;y-=dn){var g=p>>>y&vn;v=v.array[g]=Je(v.array[g],r)}v.array[p>>>dn&vn]=d}if(s=h)a-=h,s-=h,u=dn,c=null,m=m&&m.removeBefore(r,0,a);else if(a>i||h>>u&vn;if(_!==h>>>u&vn)break;_&&(l+=(1<i&&(c=c.removeBefore(r,u,a-l)),c&&ha&&(a=c.size),o(u)||(c=c.map(function(e){return V(e)})),i.push(c)}return a>e.size&&(e=e.setSize(a)),Ie(e,t,i)}function $e(e){return e>>dn<=mn&&a.size>=2*o.size?(i=a.filter(function(e,t){return void 0!==e&&s!==t}),r=i.toKeyedSeq().map(function(e){return e[0]}).flip().toMap(),e.__ownerID&&(r.__ownerID=i.__ownerID=e.__ownerID)):(r=o.remove(t),i=s===a.size-1?a.pop():a.set(s,void 0))}else if(u){if(n===a.get(s)[1])return e;r=o,i=a.set(s,[t,n])}else r=o.set(t,a.size),i=a.set(a.size,[t,n]);return e.__ownerID?(e.size=r.size,e._map=r,e._list=i,e.__hash=void 0,e):et(r,i)}function rt(e,t){this._iter=e,this._useKeys=t,this.size=e.size}function it(e){this._iter=e,this.size=e.size}function ot(e){this._iter=e,this.size=e.size}function at(e){this._iter=e,this.size=e.size}function st(e){var t=Tt(e);return t._iter=e,t.size=e.size,t.flip=function(){return e},t.reverse=function(){var t=e.reverse.apply(this);return t.flip=function(){return e.reverse()},t},t.has=function(t){return e.includes(t)},t.includes=function(t){return e.has(t)},t.cacheResult=Dt,t.__iterateUncached=function(t,n){var r=this;return e.__iterate(function(e,n){return t(n,e,r)!==!1},n)},t.__iteratorUncached=function(t,n){if(t===wn){var r=e.__iterator(t,n);return new x(function(){var e=r.next();if(!e.done){var t=e.value[0];e.value[0]=e.value[1],e.value[1]=t}return e})}return e.__iterator(t===xn?bn:xn,n)},t}function ut(e,t,n){var r=Tt(e);return r.size=e.size,r.has=function(t){return e.has(t)},r.get=function(r,i){var o=e.get(r,yn);return o===yn?i:t.call(n,o,r,e)},r.__iterateUncached=function(r,i){var o=this;return e.__iterate(function(e,i,a){return r(t.call(n,e,i,a),i,o)!==!1},i)},r.__iteratorUncached=function(r,i){var o=e.__iterator(wn,i);return new x(function(){var i=o.next();if(i.done)return i;var a=i.value,s=a[0];return w(r,s,t.call(n,a[1],s,e),i)})},r}function ct(e,t){var n=Tt(e);return n._iter=e,n.size=e.size,n.reverse=function(){return e},e.flip&&(n.flip=function(){var t=st(e);return t.reverse=function(){return e.flip()},t}),n.get=function(n,r){return e.get(t?n:-1-n,r)},n.has=function(n){return e.has(t?n:-1-n)},n.includes=function(t){return e.includes(t)},n.cacheResult=Dt,n.__iterate=function(t,n){var r=this;return e.__iterate(function(e,n){return t(e,n,r)},!n)},n.__iterator=function(t,n){return e.__iterator(t,!n)},n}function lt(e,t,n,r){var i=Tt(e);return r&&(i.has=function(r){var i=e.get(r,yn);return i!==yn&&!!t.call(n,i,r,e)},i.get=function(r,i){var o=e.get(r,yn);return o!==yn&&t.call(n,o,r,e)?o:i}),i.__iterateUncached=function(i,o){var a=this,s=0;return e.__iterate(function(e,o,u){if(t.call(n,e,o,u))return s++,i(e,r?o:s-1,a)},o),s},i.__iteratorUncached=function(i,o){var a=e.__iterator(wn,o),s=0;return new x(function(){for(;;){var o=a.next();if(o.done)return o;var u=o.value,c=u[0],l=u[1];if(t.call(n,l,c,e))return w(i,r?c:s++,l,o)}})},i}function pt(e,t,n){var r=pe().asMutable();return e.__iterate(function(i,o){r.update(t.call(n,i,o,e),0,function(e){return e+1})}),r.asImmutable()}function ft(e,t,n){var r=a(e),i=(c(e)?Ze():pe()).asMutable();e.__iterate(function(o,a){i.update(t.call(n,o,a,e),function(e){return e=e||[],e.push(r?[a,o]:o),e})});var o=At(e);return i.map(function(t){return St(e,o(t))})}function ht(e,t,n,r){var i=e.size;if(void 0!==t&&(t|=0),void 0!==n&&(n===1/0?n=i:n|=0),y(t,n,i))return e;var o=g(t,i),a=_(n,i);if(o!==o||a!==a)return ht(e.toSeq().cacheResult(),t,n,r);var s,u=a-o;u===u&&(s=u<0?0:u);var c=Tt(e);return c.size=0===s?s:e.size&&s||void 0,!r&&F(e)&&s>=0&&(c.get=function(t,n){return t=m(this,t),t>=0&&ts)return k();var e=i.next();return r||t===xn?e:t===bn?w(t,u-1,void 0,e):w(t,u-1,e.value[1],e)})},c}function dt(e,t,n){var r=Tt(e);return r.__iterateUncached=function(r,i){var o=this;if(i)return this.cacheResult().__iterate(r,i);var a=0;return e.__iterate(function(e,i,s){return t.call(n,e,i,s)&&++a&&r(e,i,o)}),a},r.__iteratorUncached=function(r,i){var o=this;if(i)return this.cacheResult().__iterator(r,i);var a=e.__iterator(wn,i),s=!0;return new x(function(){if(!s)return k();var e=a.next();if(e.done)return e;var i=e.value,u=i[0],c=i[1];return t.call(n,c,u,o)?r===wn?e:w(r,u,c,e):(s=!1,k())})},r}function mt(e,t,n,r){var i=Tt(e);return i.__iterateUncached=function(i,o){var a=this;if(o)return this.cacheResult().__iterate(i,o);var s=!0,u=0;return e.__iterate(function(e,o,c){if(!s||!(s=t.call(n,e,o,c)))return u++,i(e,r?o:u-1,a)}),u},i.__iteratorUncached=function(i,o){var a=this;if(o)return this.cacheResult().__iterator(i,o);var s=e.__iterator(wn,o),u=!0,c=0;return new x(function(){var e,o,l;do{if(e=s.next(),e.done)return r||i===xn?e:i===bn?w(i,c++,void 0,e):w(i,c++,e.value[1],e);var p=e.value;o=p[0],l=p[1],u&&(u=t.call(n,l,o,a))}while(u);return i===wn?e:w(i,o,l,e)})},i}function vt(e,t){var r=a(e),i=[e].concat(t).map(function(e){return o(e)?r&&(e=n(e)):e=r?L(e):z(Array.isArray(e)?e:[e]),e}).filter(function(e){return 0!==e.size});if(0===i.length)return e;if(1===i.length){var u=i[0];if(u===e||r&&a(u)||s(e)&&s(u))return u}var c=new I(i);return r?c=c.toKeyedSeq():s(e)||(c=c.toSetSeq()),c=c.flatten(!0),c.size=i.reduce(function(e,t){if(void 0!==e){var n=t.size;if(void 0!==n)return e+n}},0),c}function yt(e,t,n){var r=Tt(e);return r.__iterateUncached=function(r,i){function a(e,c){var l=this;e.__iterate(function(e,i){return(!t||c0}function kt(e,n,r){var i=Tt(e);return i.size=new I(r).map(function(e){return e.size}).min(),i.__iterate=function(e,t){for(var n,r=this.__iterator(xn,t),i=0;!(n=r.next()).done&&e(n.value,i++,this)!==!1;);return i},i.__iteratorUncached=function(e,i){var o=r.map(function(e){return e=t(e),C(i?e.reverse():e)}),a=0,s=!1;return new x(function(){var t;return s||(t=o.map(function(e){return e.next()}),s=t.some(function(e){return e.done})),s?k():w(e,a++,n.apply(null,t.map(function(e){return e.value})))})},i}function St(e,t){return F(e)?t:e.constructor(t)}function Et(e){if(e!==Object(e))throw new TypeError("Expected [K, V] tuple: "+e)}function Ct(e){return le(e.size),d(e)}function At(e){return a(e)?n:s(e)?r:i}function Tt(e){return Object.create((a(e)?M:s(e)?O:P).prototype)}function Dt(){return this._iter.cacheResult?(this._iter.cacheResult(),this.size=this._iter.size,this):D.prototype.cacheResult.call(this)}function Mt(e,t){return e>t?1:et?-1:0}function on(e){if(e.size===1/0)return 0;var t=c(e),n=a(e),r=t?1:0,i=e.__iterate(n?t?function(e,t){r=31*r+sn(oe(e),oe(t))|0}:function(e,t){r=r+sn(oe(e),oe(t))|0}:t?function(e){r=31*r+oe(e)|0}:function(e){r=r+oe(e)|0});return an(i,r)}function an(e,t){return t=On(t,3432918353),t=On(t<<15|t>>>-15,461845907),t=On(t<<13|t>>>-13,5),t=(t+3864292196|0)^e,t=On(t^t>>>16,2246822507),t=On(t^t>>>13,3266489909),t=ie(t^t>>>16)}function sn(e,t){return e^t+2654435769+(e<<6)+(e>>2)|0}var un=Array.prototype.slice;e(n,t),e(r,t),e(i,t),t.isIterable=o,t.isKeyed=a,t.isIndexed=s,t.isAssociative=u,t.isOrdered=c,t.Keyed=n,t.Indexed=r,t.Set=i;var cn="@@__IMMUTABLE_ITERABLE__@@",ln="@@__IMMUTABLE_KEYED__@@",pn="@@__IMMUTABLE_INDEXED__@@",fn="@@__IMMUTABLE_ORDERED__@@",hn="delete",dn=5,mn=1<r?k():w(e,i,n[t?r-i++:i++])})},e(N,M),N.prototype.get=function(e,t){return void 0===t||this.has(e)?this._object[e]:t},N.prototype.has=function(e){return this._object.hasOwnProperty(e)},N.prototype.__iterate=function(e,t){for(var n=this._object,r=this._keys,i=r.length-1,o=0;o<=i;o++){var a=r[t?i-o:o];if(e(n[a],a,this)===!1)return o+1}return o},N.prototype.__iterator=function(e,t){var n=this._object,r=this._keys,i=r.length-1,o=0;return new x(function(){var a=r[t?i-o:o];return o++>i?k():w(e,a,n[a])})},N.prototype[fn]=!0, +e(R,O),R.prototype.__iterateUncached=function(e,t){if(t)return this.cacheResult().__iterate(e,t);var n=this._iterable,r=C(n),i=0;if(E(r))for(var o;!(o=r.next()).done&&e(o.value,i++,this)!==!1;);return i},R.prototype.__iteratorUncached=function(e,t){if(t)return this.cacheResult().__iterator(e,t);var n=this._iterable,r=C(n);if(!E(r))return new x(k);var i=0;return new x(function(){var t=r.next();return t.done?t:w(e,i++,t.value)})},e(j,O),j.prototype.__iterateUncached=function(e,t){if(t)return this.cacheResult().__iterate(e,t);for(var n=this._iterator,r=this._iteratorCache,i=0;i=r.length){var t=n.next();if(t.done)return t;r[i]=t.value}return w(e,i,r[i++])})};var An;e($,O),$.prototype.toString=function(){return 0===this.size?"Repeat []":"Repeat [ "+this._value+" "+this.size+" times ]"},$.prototype.get=function(e,t){return this.has(e)?this._value:t},$.prototype.includes=function(e){return X(this._value,e)},$.prototype.slice=function(e,t){var n=this.size;return y(e,t,n)?this:new $(this._value,_(t,n)-g(e,n))},$.prototype.reverse=function(){return this},$.prototype.indexOf=function(e){return X(this._value,e)?0:-1},$.prototype.lastIndexOf=function(e){return X(this._value,e)?this.size:-1},$.prototype.__iterate=function(e,t){for(var n=0;n=0&&t=0&&nn?k():w(e,o++,a)})},Q.prototype.equals=function(e){return e instanceof Q?this._start===e._start&&this._end===e._end&&this._step===e._step:Y(this,e)};var Dn;e(ee,t),e(te,ee),e(ne,ee),e(re,ee),ee.Keyed=te,ee.Indexed=ne,ee.Set=re;var Mn,On="function"==typeof Math.imul&&Math.imul(4294967295,2)===-2?Math.imul:function(e,t){e|=0,t|=0;var n=65535&e,r=65535&t;return n*r+((e>>>16)*r+n*(t>>>16)<<16>>>0)|0},Pn=Object.isExtensible,In=function(){try{return Object.defineProperty({},"@",{}),!0}catch(e){return!1}}(),Nn="function"==typeof WeakMap;Nn&&(Mn=new WeakMap);var Rn=0,jn="__immutablehash__";"function"==typeof Symbol&&(jn=Symbol(jn));var Fn=16,Bn=255,Ln=0,zn={};e(pe,te),pe.of=function(){var e=un.call(arguments,0);return we().withMutations(function(t){for(var n=0;n=e.length)throw new Error("Missing value for key: "+e[n]);t.set(e[n],e[n+1])}})},pe.prototype.toString=function(){return this.__toString("Map {","}")},pe.prototype.get=function(e,t){return this._root?this._root.get(0,void 0,e,t):t},pe.prototype.set=function(e,t){return ke(this,e,t)},pe.prototype.setIn=function(e,t){return this.updateIn(e,yn,function(){return t})},pe.prototype.remove=function(e){return ke(this,e,yn)},pe.prototype.deleteIn=function(e){return this.updateIn(e,function(){return yn})},pe.prototype.update=function(e,t,n){return 1===arguments.length?e(this):this.updateIn([e],t,n)},pe.prototype.updateIn=function(e,t,n){n||(n=t,t=void 0);var r=Ne(this,Ot(e),t,n);return r===yn?void 0:r},pe.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._root=null,this.__hash=void 0,this.__altered=!0,this):we()},pe.prototype.merge=function(){return Me(this,void 0,arguments)},pe.prototype.mergeWith=function(e){var t=un.call(arguments,1);return Me(this,e,t)},pe.prototype.mergeIn=function(e){var t=un.call(arguments,1);return this.updateIn(e,we(),function(e){return"function"==typeof e.merge?e.merge.apply(e,t):t[t.length-1]})},pe.prototype.mergeDeep=function(){return Me(this,Oe,arguments)},pe.prototype.mergeDeepWith=function(e){var t=un.call(arguments,1);return Me(this,Pe(e),t)},pe.prototype.mergeDeepIn=function(e){var t=un.call(arguments,1);return this.updateIn(e,we(),function(e){return"function"==typeof e.mergeDeep?e.mergeDeep.apply(e,t):t[t.length-1]})},pe.prototype.sort=function(e){return Ze(bt(this,e))},pe.prototype.sortBy=function(e,t){return Ze(bt(this,t,e))},pe.prototype.withMutations=function(e){var t=this.asMutable();return e(t),t.wasAltered()?t.__ensureOwner(this.__ownerID):this},pe.prototype.asMutable=function(){return this.__ownerID?this:this.__ensureOwner(new f)},pe.prototype.asImmutable=function(){return this.__ensureOwner()},pe.prototype.wasAltered=function(){return this.__altered},pe.prototype.__iterator=function(e,t){return new ge(this,e,t)},pe.prototype.__iterate=function(e,t){var n=this,r=0;return this._root&&this._root.iterate(function(t){return r++,e(t[1],t[0],n)},t),r},pe.prototype.__ensureOwner=function(e){return e===this.__ownerID?this:e?xe(this.size,this._root,e,this.__hash):(this.__ownerID=e,this.__altered=!1,this)},pe.isMap=fe;var qn="@@__IMMUTABLE_MAP__@@",Un=pe.prototype;Un[qn]=!0,Un[hn]=Un.remove,Un.removeIn=Un.deleteIn,he.prototype.get=function(e,t,n,r){for(var i=this.entries,o=0,a=i.length;o=Kn)return Ae(e,u,r,i);var d=e&&e===this.ownerID,m=d?u:h(u);return f?s?c===l-1?m.pop():m[c]=m.pop():m[c]=[r,i]:m.push([r,i]),d?(this.entries=m,this):new he(e,m)}},de.prototype.get=function(e,t,n,r){void 0===t&&(t=oe(n));var i=1<<((0===e?t:t>>>e)&vn),o=this.bitmap;return 0===(o&i)?r:this.nodes[Re(o&i-1)].get(e+dn,t,n,r)},de.prototype.update=function(e,t,n,r,i,o,a){void 0===n&&(n=oe(r));var s=(0===t?n:n>>>t)&vn,u=1<=Vn)return De(e,f,c,s,d);if(l&&!d&&2===f.length&&Ee(f[1^p]))return f[1^p];if(l&&d&&1===f.length&&Ee(d))return d;var m=e&&e===this.ownerID,v=l?d?c:c^u:c|u,y=l?d?je(f,p,d,m):Be(f,p,m):Fe(f,p,d,m);return m?(this.bitmap=v,this.nodes=y,this):new de(e,v,y)},me.prototype.get=function(e,t,n,r){void 0===t&&(t=oe(n));var i=(0===e?t:t>>>e)&vn,o=this.nodes[i];return o?o.get(e+dn,t,n,r):r},me.prototype.update=function(e,t,n,r,i,o,a){void 0===n&&(n=oe(r));var s=(0===t?n:n>>>t)&vn,u=i===yn,c=this.nodes,l=c[s];if(u&&!l)return this;var p=Se(l,e,t+dn,n,r,i,o,a);if(p===l)return this;var f=this.count;if(l){if(!p&&(f--,f=0&&e>>t&vn;if(r>=this.array.length)return new qe([],e);var i,o=0===r;if(t>0){var a=this.array[r];if(i=a&&a.removeBefore(e,t-dn,n),i===a&&o)return this}if(o&&!i)return this;var s=Je(this,e);if(!o)for(var u=0;u>>t&vn;if(r>=this.array.length)return this;var i;if(t>0){var o=this.array[r];if(i=o&&o.removeAfter(e,t-dn,n),i===o&&r===this.array.length-1)return this}var a=Je(this,e);return a.array.splice(r+1),i&&(a.array[r]=i),a};var Xn,Yn={};e(Ze,pe),Ze.of=function(){return this(arguments)},Ze.prototype.toString=function(){return this.__toString("OrderedMap {","}")},Ze.prototype.get=function(e,t){var n=this._map.get(e);return void 0!==n?this._list.get(n)[1]:t},Ze.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._map.clear(),this._list.clear(),this):tt()},Ze.prototype.set=function(e,t){return nt(this,e,t)},Ze.prototype.remove=function(e){return nt(this,e,yn)},Ze.prototype.wasAltered=function(){return this._map.wasAltered()||this._list.wasAltered()},Ze.prototype.__iterate=function(e,t){var n=this;return this._list.__iterate(function(t){return t&&e(t[1],t[0],n)},t)},Ze.prototype.__iterator=function(e,t){return this._list.fromEntrySeq().__iterator(e,t)},Ze.prototype.__ensureOwner=function(e){if(e===this.__ownerID)return this;var t=this._map.__ensureOwner(e),n=this._list.__ensureOwner(e);return e?et(t,n,e,this.__hash):(this.__ownerID=e,this._map=t,this._list=n,this)},Ze.isOrderedMap=Qe,Ze.prototype[fn]=!0,Ze.prototype[hn]=Ze.prototype.remove;var $n;e(rt,M),rt.prototype.get=function(e,t){return this._iter.get(e,t)},rt.prototype.has=function(e){return this._iter.has(e)},rt.prototype.valueSeq=function(){return this._iter.valueSeq()},rt.prototype.reverse=function(){var e=this,t=ct(this,!0);return this._useKeys||(t.valueSeq=function(){return e._iter.toSeq().reverse()}),t},rt.prototype.map=function(e,t){var n=this,r=ut(this,e,t);return this._useKeys||(r.valueSeq=function(){return n._iter.toSeq().map(e,t)}),r},rt.prototype.__iterate=function(e,t){var n,r=this;return this._iter.__iterate(this._useKeys?function(t,n){return e(t,n,r)}:(n=t?Ct(this):0,function(i){return e(i,t?--n:n++,r)}),t)},rt.prototype.__iterator=function(e,t){if(this._useKeys)return this._iter.__iterator(e,t);var n=this._iter.__iterator(xn,t),r=t?Ct(this):0;return new x(function(){var i=n.next();return i.done?i:w(e,t?--r:r++,i.value,i)})},rt.prototype[fn]=!0,e(it,O),it.prototype.includes=function(e){return this._iter.includes(e)},it.prototype.__iterate=function(e,t){var n=this,r=0;return this._iter.__iterate(function(t){return e(t,r++,n)},t)},it.prototype.__iterator=function(e,t){var n=this._iter.__iterator(xn,t),r=0;return new x(function(){var t=n.next();return t.done?t:w(e,r++,t.value,t)})},e(ot,P),ot.prototype.has=function(e){return this._iter.includes(e)},ot.prototype.__iterate=function(e,t){var n=this;return this._iter.__iterate(function(t){return e(t,t,n)},t)},ot.prototype.__iterator=function(e,t){var n=this._iter.__iterator(xn,t);return new x(function(){var t=n.next();return t.done?t:w(e,t.value,t.value,t)})},e(at,M),at.prototype.entrySeq=function(){return this._iter.toSeq()},at.prototype.__iterate=function(e,t){var n=this;return this._iter.__iterate(function(t){if(t){Et(t);var r=o(t);return e(r?t.get(1):t[1],r?t.get(0):t[0],n)}},t)},at.prototype.__iterator=function(e,t){var n=this._iter.__iterator(xn,t);return new x(function(){for(;;){var t=n.next();if(t.done)return t;var r=t.value;if(r){Et(r);var i=o(r);return w(e,i?r.get(0):r[0],i?r.get(1):r[1],t)}}})},it.prototype.cacheResult=rt.prototype.cacheResult=ot.prototype.cacheResult=at.prototype.cacheResult=Dt,e(Pt,te),Pt.prototype.toString=function(){return this.__toString(Nt(this)+" {","}")},Pt.prototype.has=function(e){return this._defaultValues.hasOwnProperty(e)},Pt.prototype.get=function(e,t){if(!this.has(e))return t;var n=this._defaultValues[e];return this._map?this._map.get(e,n):n},Pt.prototype.clear=function(){if(this.__ownerID)return this._map&&this._map.clear(),this;var e=this.constructor;return e._empty||(e._empty=It(this,we()))},Pt.prototype.set=function(e,t){if(!this.has(e))throw new Error('Cannot set unknown key "'+e+'" on '+Nt(this));if(this._map&&!this._map.has(e)){var n=this._defaultValues[e];if(t===n)return this}var r=this._map&&this._map.set(e,t);return this.__ownerID||r===this._map?this:It(this,r)},Pt.prototype.remove=function(e){if(!this.has(e))return this;var t=this._map&&this._map.remove(e);return this.__ownerID||t===this._map?this:It(this,t)},Pt.prototype.wasAltered=function(){return this._map.wasAltered()},Pt.prototype.__iterator=function(e,t){var r=this;return n(this._defaultValues).map(function(e,t){return r.get(t)}).__iterator(e,t)},Pt.prototype.__iterate=function(e,t){var r=this;return n(this._defaultValues).map(function(e,t){return r.get(t)}).__iterate(e,t)},Pt.prototype.__ensureOwner=function(e){if(e===this.__ownerID)return this;var t=this._map&&this._map.__ensureOwner(e);return e?It(this,t,e):(this.__ownerID=e,this._map=t,this)};var Zn=Pt.prototype;Zn[hn]=Zn.remove,Zn.deleteIn=Zn.removeIn=Un.removeIn,Zn.merge=Un.merge,Zn.mergeWith=Un.mergeWith,Zn.mergeIn=Un.mergeIn,Zn.mergeDeep=Un.mergeDeep,Zn.mergeDeepWith=Un.mergeDeepWith,Zn.mergeDeepIn=Un.mergeDeepIn,Zn.setIn=Un.setIn,Zn.update=Un.update,Zn.updateIn=Un.updateIn,Zn.withMutations=Un.withMutations,Zn.asMutable=Un.asMutable,Zn.asImmutable=Un.asImmutable,e(Ft,re),Ft.of=function(){return this(arguments)},Ft.fromKeys=function(e){return this(n(e).keySeq())},Ft.prototype.toString=function(){return this.__toString("Set {","}")},Ft.prototype.has=function(e){return this._map.has(e)},Ft.prototype.add=function(e){return Lt(this,this._map.set(e,!0))},Ft.prototype.remove=function(e){return Lt(this,this._map.remove(e))},Ft.prototype.clear=function(){return Lt(this,this._map.clear())},Ft.prototype.union=function(){var e=un.call(arguments,0);return e=e.filter(function(e){return 0!==e.size}),0===e.length?this:0!==this.size||this.__ownerID||1!==e.length?this.withMutations(function(t){for(var n=0;n=0;n--)t={value:arguments[n],next:t};return this.__ownerID?(this.size=e,this._head=t,this.__hash=void 0,this.__altered=!0,this):Gt(e,t)},Ht.prototype.pushAll=function(e){if(e=r(e),0===e.size)return this;le(e.size);var t=this.size,n=this._head;return e.reverse().forEach(function(e){t++,n={value:e,next:n}}),this.__ownerID?(this.size=t,this._head=n,this.__hash=void 0,this.__altered=!0,this):Gt(t,n)},Ht.prototype.pop=function(){return this.slice(1)},Ht.prototype.unshift=function(){return this.push.apply(this,arguments)},Ht.prototype.unshiftAll=function(e){return this.pushAll(e)},Ht.prototype.shift=function(){return this.pop.apply(this,arguments)},Ht.prototype.clear=function(){return 0===this.size?this:this.__ownerID?(this.size=0,this._head=void 0,this.__hash=void 0,this.__altered=!0,this):Xt()},Ht.prototype.slice=function(e,t){if(y(e,t,this.size))return this;var n=g(e,this.size),r=_(t,this.size);if(r!==this.size)return ne.prototype.slice.call(this,e,t);for(var i=this.size-n,o=this._head;n--;)o=o.next;return this.__ownerID?(this.size=i,this._head=o,this.__hash=void 0,this.__altered=!0,this):Gt(i,o)},Ht.prototype.__ensureOwner=function(e){return e===this.__ownerID?this:e?Gt(this.size,this._head,e,this.__hash):(this.__ownerID=e,this.__altered=!1,this)},Ht.prototype.__iterate=function(e,t){if(t)return this.reverse().__iterate(e);for(var n=0,r=this._head;r&&e(r.value,n++,this)!==!1;)r=r.next;return n},Ht.prototype.__iterator=function(e,t){if(t)return this.reverse().__iterator(e);var n=0,r=this._head;return new x(function(){if(r){var t=r.value;return r=r.next,w(e,n++,t)}return k()})},Ht.isStack=Jt;var ir="@@__IMMUTABLE_STACK__@@",or=Ht.prototype;or[ir]=!0,or.withMutations=Un.withMutations,or.asMutable=Un.asMutable,or.asImmutable=Un.asImmutable,or.wasAltered=Un.wasAltered;var ar;t.Iterator=x,Yt(t,{toArray:function(){le(this.size);var e=new Array(this.size||0);return this.valueSeq().__iterate(function(t,n){e[n]=t}),e},toIndexedSeq:function(){return new it(this)},toJS:function(){return this.toSeq().map(function(e){return e&&"function"==typeof e.toJS?e.toJS():e}).__toJS()},toJSON:function(){return this.toSeq().map(function(e){return e&&"function"==typeof e.toJSON?e.toJSON():e}).__toJS()},toKeyedSeq:function(){return new rt(this,!0)},toMap:function(){return pe(this.toKeyedSeq())},toObject:function(){le(this.size);var e={};return this.__iterate(function(t,n){e[n]=t}),e},toOrderedMap:function(){return Ze(this.toKeyedSeq())},toOrderedSet:function(){return Ut(a(this)?this.valueSeq():this)},toSet:function(){return Ft(a(this)?this.valueSeq():this)},toSetSeq:function(){return new ot(this)},toSeq:function(){return s(this)?this.toIndexedSeq():a(this)?this.toKeyedSeq():this.toSetSeq()},toStack:function(){return Ht(a(this)?this.valueSeq():this)},toList:function(){return Le(a(this)?this.valueSeq():this)},toString:function(){return"[Iterable]"},__toString:function(e,t){return 0===this.size?e+t:e+" "+this.toSeq().map(this.__toStringMapper).join(", ")+" "+t},concat:function(){var e=un.call(arguments,0);return St(this,vt(this,e))},includes:function(e){return this.some(function(t){return X(t,e)})},entries:function(){return this.__iterator(wn)},every:function(e,t){le(this.size);var n=!0;return this.__iterate(function(r,i,o){if(!e.call(t,r,i,o))return n=!1,!1}),n},filter:function(e,t){return St(this,lt(this,e,t,!0))},find:function(e,t,n){var r=this.findEntry(e,t);return r?r[1]:n},forEach:function(e,t){return le(this.size),this.__iterate(t?e.bind(t):e)},join:function(e){le(this.size),e=void 0!==e?""+e:",";var t="",n=!0;return this.__iterate(function(r){n?n=!1:t+=e,t+=null!==r&&void 0!==r?r.toString():""}),t},keys:function(){return this.__iterator(bn)},map:function(e,t){return St(this,ut(this,e,t))},reduce:function(e,t,n){le(this.size);var r,i;return arguments.length<2?i=!0:r=t,this.__iterate(function(t,o,a){i?(i=!1,r=t):r=e.call(n,r,t,o,a)}),r},reduceRight:function(e,t,n){var r=this.toKeyedSeq().reverse();return r.reduce.apply(r,arguments)},reverse:function(){return St(this,ct(this,!0))},slice:function(e,t){return St(this,ht(this,e,t,!0))},some:function(e,t){return!this.every(Qt(e),t)},sort:function(e){return St(this,bt(this,e))},values:function(){return this.__iterator(xn)},butLast:function(){return this.slice(0,-1)},isEmpty:function(){return void 0!==this.size?0===this.size:!this.some(function(){return!0})},count:function(e,t){return d(e?this.toSeq().filter(e,t):this)},countBy:function(e,t){return pt(this,e,t)},equals:function(e){return Y(this,e)},entrySeq:function(){var e=this;if(e._cache)return new I(e._cache);var t=e.toSeq().map(Zt).toIndexedSeq();return t.fromEntrySeq=function(){return e.toSeq()},t},filterNot:function(e,t){return this.filter(Qt(e),t)},findEntry:function(e,t,n){var r=n;return this.__iterate(function(n,i,o){if(e.call(t,n,i,o))return r=[i,n],!1}),r},findKey:function(e,t){var n=this.findEntry(e,t);return n&&n[0]},findLast:function(e,t,n){return this.toKeyedSeq().reverse().find(e,t,n)},findLastEntry:function(e,t,n){return this.toKeyedSeq().reverse().findEntry(e,t,n)},findLastKey:function(e,t){return this.toKeyedSeq().reverse().findKey(e,t)},first:function(){return this.find(v)},flatMap:function(e,t){return St(this,gt(this,e,t))},flatten:function(e){return St(this,yt(this,e,!0))},fromEntrySeq:function(){return new at(this)},get:function(e,t){return this.find(function(t,n){return X(n,e)},void 0,t)},getIn:function(e,t){for(var n,r=this,i=Ot(e);!(n=i.next()).done;){var o=n.value;if(r=r&&r.get?r.get(o,yn):yn,r===yn)return t}return r},groupBy:function(e,t){return ft(this,e,t)},has:function(e){return this.get(e,yn)!==yn},hasIn:function(e){return this.getIn(e,yn)!==yn},isSubset:function(e){return e="function"==typeof e.includes?e:t(e),this.every(function(t){return e.includes(t)})},isSuperset:function(e){return e="function"==typeof e.isSubset?e:t(e),e.isSubset(this)},keyOf:function(e){return this.findKey(function(t){return X(t,e)})},keySeq:function(){return this.toSeq().map($t).toIndexedSeq()},last:function(){return this.toSeq().reverse().first()},lastKeyOf:function(e){return this.toKeyedSeq().reverse().keyOf(e)},max:function(e){return xt(this,e)},maxBy:function(e,t){return xt(this,t,e)},min:function(e){return xt(this,e?en(e):rn)},minBy:function(e,t){return xt(this,t?en(t):rn,e)},rest:function(){return this.slice(1)},skip:function(e){return this.slice(Math.max(0,e))},skipLast:function(e){return St(this,this.toSeq().reverse().skip(e).reverse())},skipWhile:function(e,t){return St(this,mt(this,e,t,!0))},skipUntil:function(e,t){return this.skipWhile(Qt(e),t)},sortBy:function(e,t){return St(this,bt(this,t,e))},take:function(e){return this.slice(0,Math.max(0,e))},takeLast:function(e){return St(this,this.toSeq().reverse().take(e).reverse())},takeWhile:function(e,t){return St(this,dt(this,e,t))},takeUntil:function(e,t){return this.takeWhile(Qt(e),t)},valueSeq:function(){return this.toIndexedSeq()},hashCode:function(){return this.__hash||(this.__hash=on(this))}});var sr=t.prototype;sr[cn]=!0,sr[En]=sr.values,sr.__toJS=sr.toArray,sr.__toStringMapper=tn,sr.inspect=sr.toSource=function(){return this.toString()},sr.chain=sr.flatMap,sr.contains=sr.includes,Yt(n,{flip:function(){return St(this,st(this))},mapEntries:function(e,t){var n=this,r=0;return St(this,this.toSeq().map(function(i,o){return e.call(t,[o,i],r++,n)}).fromEntrySeq())},mapKeys:function(e,t){var n=this;return St(this,this.toSeq().flip().map(function(r,i){return e.call(t,r,i,n)}).flip())}});var ur=n.prototype;ur[ln]=!0,ur[En]=sr.entries,ur.__toJS=sr.toObject,ur.__toStringMapper=function(e,t){return JSON.stringify(t)+": "+tn(e)},Yt(r,{toKeyedSeq:function(){return new rt(this,!1)},filter:function(e,t){return St(this,lt(this,e,t,!1))},findIndex:function(e,t){var n=this.findEntry(e,t);return n?n[0]:-1},indexOf:function(e){var t=this.keyOf(e);return void 0===t?-1:t},lastIndexOf:function(e){var t=this.lastKeyOf(e);return void 0===t?-1:t},reverse:function(){return St(this,ct(this,!1))},slice:function(e,t){return St(this,ht(this,e,t,!1))},splice:function(e,t){var n=arguments.length;if(t=Math.max(0|t,0),0===n||2===n&&!t)return this;e=g(e,e<0?this.count():this.size);var r=this.slice(0,e);return St(this,1===n?r:r.concat(h(arguments,2),this.slice(e+t)))},findLastIndex:function(e,t){var n=this.findLastEntry(e,t);return n?n[0]:-1},first:function(){return this.get(0)},flatten:function(e){return St(this,yt(this,e,!1))},get:function(e,t){return e=m(this,e),e<0||this.size===1/0||void 0!==this.size&&e>this.size?t:this.find(function(t,n){return n===e},void 0,t)},has:function(e){return e=m(this,e),e>=0&&(void 0!==this.size?this.size===1/0||e0?"Unexpected "+(1===a.length?"property":"properties")+' "'+a.join('", "')+'" found in '+i+'. Expected to find one of the known reducer property names instead: "'+r.join('", "')+'". Unexpected properties will be ignored.':null; +},e.exports=t.default},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t,n){if(void 0===e)throw new Error('Reducer "'+t+'" returned undefined when handling "'+n.type+'" action. To ignore an action, you must explicitly return the previous state.');return null},e.exports=t.default},function(e,t){"use strict";function n(e,t){var r;return r=Array.isArray(e)?[]:{},t.push(e),Object.keys(e).forEach(function(i){var o=e[i];if("function"!=typeof o)return o&&"object"==typeof o?t.indexOf(e[i])===-1?void(r[i]=n(e[i],t.slice(0))):void(r[i]="[Circular]"):void(r[i]=o)}),r}e.exports=function(e){if("object"==typeof e){var t=n(e,[]);return"string"==typeof e.name&&(t.name=e.name),"string"==typeof e.message&&(t.message=e.message),"string"==typeof e.stack&&(t.stack=e.stack),t}return"function"==typeof e?"[Function: "+(e.name||"anonymous")+"]":e}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){return{type:p,payload:{action:t,error:(0,l.default)(e)}}}function o(e){return{type:f,payload:e}}function a(e){return{type:h,payload:e}}function s(e){return{type:d,payload:e}}function u(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return{type:m,payload:e}}Object.defineProperty(t,"__esModule",{value:!0}),t.CLEAR=t.NEW_AUTH_ERR=t.NEW_SPEC_ERR=t.NEW_THROWN_ERR_BATCH=t.NEW_THROWN_ERR=void 0,t.newThrownErr=i,t.newThrownErrBatch=o,t.newSpecErr=a,t.newAuthErr=s,t.clear=u;var c=n(175),l=r(c),p=t.NEW_THROWN_ERR="err_new_thrown_err",f=t.NEW_THROWN_ERR_BATCH="err_new_thrown_err_batch",h=t.NEW_SPEC_ERR="err_new_spec_err",d=t.NEW_AUTH_ERR="err_new_auth_err",m=t.CLEAR="err_clear"},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){var e={location:{},history:{},open:function(){},close:function(){},File:function(){}};if("undefined"==typeof window)return e;try{e=window;var t=["File","Blob","FormData"],n=!0,r=!1,i=void 0;try{for(var o,s=(0,a.default)(t);!(n=(o=s.next()).done);n=!0){var u=o.value;u in window&&(e[u]=window[u])}}catch(e){r=!0,i=e}finally{try{!n&&s.return&&s.return()}finally{if(r)throw i}}}catch(e){console.error(e)}return e}var o=n(178),a=r(o);e.exports=i()},function(e,t,n){e.exports={default:n(179),__esModule:!0}},function(e,t,n){n(110),n(97),e.exports=n(180)},function(e,t,n){var r=n(86),i=n(181);e.exports=n(59).getIterator=function(e){var t=i(e);if("function"!=typeof t)throw TypeError(e+" is not iterable!");return r(t.call(e))}},function(e,t,n){var r=n(182),i=n(108)("iterator"),o=n(102);e.exports=n(59).getIteratorMethod=function(e){if(void 0!=e)return e[i]||e["@@iterator"]||o[r(e)]}},function(e,t,n){var r=n(70),i=n(108)("toStringTag"),o="Arguments"==r(function(){return arguments}()),a=function(e,t){try{return e[t]}catch(e){}};e.exports=function(e){var t,n,s;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=a(t=Object(e),i))?n:o?r(t):"Object"==(s=r(t))&&"function"==typeof t.callee?"Arguments":s}},function(e,t,n){(function(e){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e){return l(e)?Q(e)?e.toObject():e:{}}function o(e){return e?e.toArray?e.toArray():u(e):[]}function a(e){return Q(e)?e:e instanceof $.default.File?e:l(e)?Array.isArray(e)?j.default.Seq(e).map(a).toList():j.default.Seq(e).map(a).toOrderedMap():e}function s(e,t){var n={};return(0,N.default)(e).filter(function(t){return"function"==typeof e[t]}).forEach(function(r){return n[r]=e[r].bind(null,t)}),n}function u(e){return Array.isArray(e)?e:[e]}function c(e){return"function"==typeof e}function l(e){return!!e&&"object"===("undefined"==typeof e?"undefined":(0,P.default)(e))}function p(e){return"function"==typeof e}function f(e){return Array.isArray(e)}function h(e,t){return(0,N.default)(e).reduce(function(n,r){return n[r]=t(e[r],r),n},{})}function d(e,t){return(0,N.default)(e).reduce(function(n,r){var i=t(e[r],r);return i&&"object"===("undefined"==typeof i?"undefined":(0,P.default)(i))&&(0,M.default)(n,i),n},{})}function m(e){return function(t){t.dispatch,t.getState;return function(t){return function(n){return"function"==typeof n?n(e()):t(n)}}}}function v(e){var t=e.keySeq();return t.contains(Z)?Z:t.filter(function(e){return"2"===(e+"")[0]}).sort().first()}function y(e,t){if(!j.default.Iterable.isIterable(e))return j.default.List();var n=e.getIn(Array.isArray(t)?t:[t]);return j.default.List.isList(n)?n:j.default.List()}function g(e){var t,n,r,i,o,a,s,u,c,l,p,f;for(l=/(>)(<)(\/*)/g,f=/[ ]*(.*)[ ]+\n/g,t=/(<.+>)(.+\n)/g,e=e.replace(/\r\n/g,"\n").replace(l,"$1\n$2$3").replace(f,"$1\n").replace(t,"$1\n$2"),r="",u=e.split("\n"),i=0,a="other",p={"single->single":0,"single->closing":-1,"single->opening":0,"single->other":0,"closing->single":0,"closing->closing":-1,"closing->opening":0,"closing->other":0,"opening->single":1,"opening->closing":0,"opening->opening":1,"opening->other":1,"other->single":0,"other->closing":-1,"other->opening":0,"other->other":0},n=function(e){var t,n,o,s,u,c;u={single:Boolean(e.match(/<.+\/>/)),closing:Boolean(e.match(/<\/.+>/)),opening:Boolean(e.match(/<[^!?].*>/))},s=function(){var e;e=[];for(n in u)c=u[n],c&&e.push(n);return e}()[0],s=void 0===s?"other":s,t=a+"->"+s,a=s,o="",i+=p[t],o=function(){var e,t,n,r;for(n=[],r=e=0,t=i;0<=t?et;r=0<=t?++e:--e)n.push(" ");return n}().join(""),"opening->closing"===t?r=r.substr(0,r.length-1)+e+"\n":r+=o+e+"\n"},o=0,s=u.length;ot)return e.textContent;var o=function(e){for(var t,o,a,s,u,c=e.textContent,l=0,p=c[0],f=1,h=e.innerHTML="",d=0;o=t,t=d<7&&"\\"==t?1:f;){if(f=p,p=c[++l],s=h.length>1,!f||d>8&&"\n"==f||[/\S/[i](f),1,1,!/[$\w]/[i](f),("/"==t||"\n"==t)&&s,'"'==t&&s,"'"==t&&s,c[l-4]+o+t=="-->",o+t=="*/"][d])for(h&&(e[r](u=n.createElement("span")).setAttribute("style",["color: #555; font-weight: bold;","","","color: #555;",""][d?d<3?2:d>6?4:d>3?3:+/^(a(bstract|lias|nd|rguments|rray|s(m|sert)?|uto)|b(ase|egin|ool(ean)?|reak|yte)|c(ase|atch|har|hecked|lass|lone|ompl|onst|ontinue)|de(bugger|cimal|clare|f(ault|er)?|init|l(egate|ete)?)|do|double|e(cho|ls?if|lse(if)?|nd|nsure|num|vent|x(cept|ec|p(licit|ort)|te(nds|nsion|rn)))|f(allthrough|alse|inal(ly)?|ixed|loat|or(each)?|riend|rom|unc(tion)?)|global|goto|guard|i(f|mp(lements|licit|ort)|n(it|clude(_once)?|line|out|stanceof|t(erface|ernal)?)?|s)|l(ambda|et|ock|ong)|m(icrolight|odule|utable)|NaN|n(amespace|ative|ext|ew|il|ot|ull)|o(bject|perator|r|ut|verride)|p(ackage|arams|rivate|rotected|rotocol|ublic)|r(aise|e(adonly|do|f|gister|peat|quire(_once)?|scue|strict|try|turn))|s(byte|ealed|elf|hort|igned|izeof|tatic|tring|truct|ubscript|uper|ynchronized|witch)|t(emplate|hen|his|hrows?|ransient|rue|ry|ype(alias|def|id|name|of))|u(n(checked|def(ined)?|ion|less|signed|til)|se|sing)|v(ar|irtual|oid|olatile)|w(char_t|hen|here|hile|ith)|xor|yield)$/[i](h):0]),u[r](n.createTextNode(h))),a=d&&d<7?d:a,h="",d=11;![1,/[\/{}[(\-+*=<>:;|\\.,?!&@~]/[i](f),/[\])]/[i](f),/[$\w]/[i](f),"/"==f&&a<2&&"<"!=t,'"'==f,"'"==f,f+p+c[l+1]+c[l+2]=="':null;var r=e.$$ref.match(/\S*\/(\S+)$/);e.xml.name=r[1]}return(0,X.memoizedCreateXMLExample)(e,n)}return(0,S.default)((0,X.memoizedSampleFromSchema)(e,n),null,2)},t.parseSeach=function(){var e={},t=window.location.search;if(""!=t){var n=t.substr(1).split("&");for(var r in n)r=n[r].split("="),e[decodeURIComponent(r[0])]=decodeURIComponent(r[1])}return e},t.btoa=function(t){var n=void 0;return n=t instanceof e?t:new e(t.toString(),"utf-8"),n.toString("base64")},t.sorters={operationsSorter:{alpha:function(e,t){return e.get("path").localeCompare(t.get("path"))},method:function(e,t){return e.get("method").localeCompare(t.get("method"))}}},t.buildFormData=function(e){var t=[];for(var n in e){var r=e[n];void 0!==r&&""!==r&&t.push([n,"=",encodeURIComponent(r).replace(/%20/g,"+")].join(""))}return t.join("&")},t.filterConfigs=function(e,t){var n=void 0,r={};for(n in e)t.indexOf(n)!==-1&&(r[n]=e[n]);return r},t.shallowEqualKeys=function(e,t,n){return!!(0,K.default)(n,function(n){return(0,G.default)(e[n],t[n])})}}).call(t,n(132).Buffer)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var i=n(185),o=r(i),a=n(178),s=r(a);t.default=function(){function e(e,t){var n=[],r=!0,i=!1,o=void 0;try{for(var a,u=(0,s.default)(e);!(r=(a=u.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){i=!0,o=e}finally{try{!r&&u.return&&u.return()}finally{if(i)throw o}}return n}return function(t,n){if(Array.isArray(t))return t;if((0,o.default)(Object(t)))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}()},function(e,t,n){e.exports={default:n(186),__esModule:!0}},function(e,t,n){n(110),n(97),e.exports=n(187)},function(e,t,n){var r=n(182),i=n(108)("iterator"),o=n(102);e.exports=n(59).isIterable=function(e){var t=Object(e);return void 0!==t[i]||"@@iterator"in t||o.hasOwnProperty(r(t))}},function(e,t,n){var r=n(189),i=n(203),o=i(function(e,t,n){return t=t.toLowerCase(),e+(n?r(t):t)});e.exports=o},function(e,t,n){function r(e){return o(i(e).toLowerCase())}var i=n(190),o=n(195);e.exports=r},function(e,t,n){function r(e){return null==e?"":i(e)}var i=n(191);e.exports=r},function(e,t,n){function r(e){if("string"==typeof e)return e;if(a(e))return o(e,r)+"";if(s(e))return l?l.call(e):"";var t=e+"";return"0"==t&&1/e==-u?"-0":t}var i=n(151),o=n(192),a=n(193),s=n(194),u=1/0,c=i?i.prototype:void 0,l=c?c.toString:void 0;e.exports=r},function(e,t){function n(e,t){for(var n=-1,r=null==e?0:e.length,i=Array(r);++n=r?e:i(e,t,n)}var i=n(198);e.exports=r},function(e,t){function n(e,t,n){var r=-1,i=e.length;t<0&&(t=-t>i?0:i+t),n=n>i?i:n,n<0&&(n+=i),i=t>n?0:n-t>>>0,t>>>=0;for(var o=Array(i);++rf))return!1;var d=l.get(e);if(d&&l.get(t))return d==t;var m=-1,v=!0,y=n&u?new i:void 0;for(l.set(e,t),l.set(t,e);++m-1&&e%1==0&&e-1&&e%1==0&&e<=r}var r=9007199254740991;e.exports=n},function(e,t){function n(e){return function(t){return e(t)}}e.exports=n},function(e,t,n){(function(e){var r=n(153),i="object"==typeof t&&t&&!t.nodeType&&t,o=i&&"object"==typeof e&&e&&!e.nodeType&&e,a=o&&o.exports===i,s=a&&r.process,u=function(){try{return s&&s.binding&&s.binding("util")}catch(e){}}();e.exports=u}).call(t,n(161)(e))},[1211,283,284],function(e,t){function n(e){var t=e&&e.constructor,n="function"==typeof t&&t.prototype||r;return e===n}var r=Object.prototype;e.exports=n},[1212,157],[1213,220,279],function(e,t,n){var r=n(287),i=n(238),o=n(288),a=n(289),s=n(290),u=n(150),c=n(224),l="[object Map]",p="[object Object]",f="[object Promise]",h="[object Set]",d="[object WeakMap]",m="[object DataView]",v=c(r),y=c(i),g=c(o),_=c(a),b=c(s),x=u;(r&&x(new r(new ArrayBuffer(1)))!=m||i&&x(new i)!=l||o&&x(o.resolve())!=f||a&&x(new a)!=h||s&&x(new s)!=d)&&(x=function(e){var t=u(e),n=t==p?e.constructor:void 0,r=n?c(n):"";if(r)switch(r){case v:return m;case y:return l;case g:return f;case _:return h;case b:return d}return t}),e.exports=x},[1214,218,152],[1215,218,152],[1216,218,152],[1217,218,152],[1218,292,269],[1219,221],function(e,t){function n(e,t){return function(n){return null!=n&&(n[e]===t&&(void 0!==t||e in Object(n)))}}e.exports=n},function(e,t,n){function r(e,t){return s(e)&&u(t)?c(l(e),t):function(n){var r=o(n,e);return void 0===r&&r===t?a(n,e):i(t,r,p|f)}}var i=n(256),o=n(295),a=n(302),s=n(298),u=n(292),c=n(293),l=n(301),p=1,f=2;e.exports=r},[1220,296],function(e,t,n){function r(e,t){t=i(t,e);for(var n=0,r=t.length;null!=e&&n1&&void 0!==arguments[1]?arguments[1]:{},r=(0, +o.objectify)(t),i=r.type,a=r.example,s=r.properties,u=r.additionalProperties,c=r.items,l=n.includeReadOnly;if(void 0!==a)return a;if(!i)if(s)i="object";else{if(!c)return;i="array"}if("object"===i){var f=(0,o.objectify)(s),h={};for(var d in f)f[d].readOnly&&!l||(h[d]=e(f[d],{includeReadOnly:l}));if(u===!0)h.additionalProp1={};else if(u)for(var m=(0,o.objectify)(u),v=e(m,{includeReadOnly:l}),y=1;y<4;y++)h["additionalProp"+y]=v;return h}return"array"===i?[e(c,{includeReadOnly:l})]:t.enum?t.default?t.default:(0,o.normalizeArray)(t.enum)[0]:p(t)},h=(t.inferSchema=function(e){return e.schema&&(e=e.schema),e.properties&&(e.type="object"),e},t.sampleXmlFromSchema=function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=(0,o.objectify)(t),i=r.type,a=r.properties,s=r.additionalProperties,u=r.items,c=r.example,l=n.includeReadOnly,f=r.default,h={},d={},m=t.xml,v=m.name,y=m.prefix,g=m.namespace,_=r.enum,b=void 0,x=void 0;if(!i)if(a||s)i="object";else{if(!u)return;i="array"}if(v=v||"notagname",b=(y?y+":":"")+v,g){var w=y?"xmlns:"+y:"xmlns";d[w]=g}if("array"===i&&u){if(u.xml=u.xml||m||{},u.xml.name=u.xml.name||m.name,m.wrapped)return h[b]=[],Array.isArray(c)?c.forEach(function(t){u.example=t,h[b].push(e(u,n))}):Array.isArray(f)?f.forEach(function(t){u.default=t,h[b].push(e(u,n))}):h[b]=[e(u,n)],d&&h[b].push({_attr:d}),h;var k=[];return Array.isArray(c)?(c.forEach(function(t){u.example=t,k.push(e(u,n))}),k):Array.isArray(f)?(f.forEach(function(t){u.default=t,k.push(e(u,n))}),k):e(u,n)}if("object"===i){var S=(0,o.objectify)(a);h[b]=[],c=c||{};for(var E in S)if(!S[E].readOnly||l)if(S[E].xml=S[E].xml||{},S[E].xml.attribute){var C=Array.isArray(S[E].enum)&&S[E].enum[0],A=S[E].example,T=S[E].default;d[S[E].xml.name||E]=void 0!==A&&A||void 0!==c[E]&&c[E]||void 0!==T&&T||C||p(S[E])}else{S[E].xml.name=S[E].xml.name||E,S[E].example=void 0!==S[E].example?S[E].example:c[E];var D=e(S[E]);Array.isArray(D)?h[b]=h[b].concat(D):h[b].push(D)}return s===!0?h[b].push({additionalProp:"Anything can be here"}):s&&h[b].push({additionalProp:p(s)}),d&&h[b].push({_attr:d}),h}return x=void 0!==c?c:void 0!==f?f:Array.isArray(_)?_[0]:p(t),h[b]=d?[{_attr:d},x]:x,h});t.memoizedCreateXMLExample=(0,c.default)(i),t.memoizedSampleFromSchema=(0,c.default)(f)},function(e,t,n){(function(t){function r(e,n){function r(e){v?t.nextTick(e):e()}function i(e,t){if(void 0!==t&&(h+=t),e&&!d&&(f=f||new l,d=!0),e&&d){var n=h;r(function(){f.emit("data",n)}),h=""}}function o(e,t){s(i,a(e,m,m?1:0),t)}function u(){if(f){var e=h;r(function(){f.emit("data",e),f.emit("end"),f.readable=!1,f.emit("close")})}}function c(e){var t=e.encoding||"UTF-8",n={version:"1.0",encoding:t};e.standalone&&(n.standalone=e.standalone),o({"?xml":{_attr:n}}),h=h.replace("/>","?>")}"object"!=typeof n&&(n={indent:n});var f=n.stream?new l:null,h="",d=!1,m=n.indent?n.indent===!0?p:n.indent:"",v=!0;return r(function(){v=!1}),n.declaration&&c(n.declaration),e&&e.forEach?e.forEach(function(t,n){var r;n+1===e.length&&(r=u),o(t,r)}):o(e,u),f?(f.readable=!0,f):h}function i(){var e=Array.prototype.slice.call(arguments),t={_elem:a(e)};return t.push=function(e){if(!this.append)throw new Error("not assigned to a parent!");var t=this,n=this._elem.indent;s(this.append,a(e,n,this._elem.icount+(n?1:0)),function(){t.append(!0)})},t.close=function(e){void 0!==e&&this.push(e),this.end&&this.end()},t}function o(e,t){return new Array(t||0).join(e||"")}function a(e,t,n){function r(e){var t=Object.keys(e);t.forEach(function(t){d.push(u(t,e[t]))})}n=n||0;var i,s=o(t,n),l=e,p=!1;if("object"==typeof e){var f=Object.keys(e);if(i=f[0],l=e[i],l&&l._elem)return l._elem.name=i,l._elem.icount=n,l._elem.indent=t,l._elem.indents=s,l._elem.interrupt=l,l._elem}var h,d=[],m=[];switch(typeof l){case"object":if(null===l)break;l._attr&&r(l._attr),l._cdata&&m.push(("/g,"]]]]>")+"]]>"),l.forEach&&(h=!1,m.push(""),l.forEach(function(e){if("object"==typeof e){var i=Object.keys(e)[0];"_attr"==i?r(e._attr):m.push(a(e,t,n+1))}else m.pop(),h=!0,m.push(c(e))}),h||m.push(""));break;default:m.push(c(l))}return{name:i,interrupt:p,attributes:d,content:m,icount:n,indents:s,indent:t}}function s(e,t,n){function r(){for(;t.content.length;){var r=t.content.shift();if(void 0!==r){if(i(r))return;s(e,r)}}e(!1,(o>1?t.indents:"")+(t.name?"":"")+(t.indent&&!n?"\n":"")),n&&n()}function i(t){return!!t.interrupt&&(t.interrupt.append=e,t.interrupt.end=r,t.interrupt=!1,e(!0),!0)}if("object"!=typeof t)return e(!1,t);var o=t.interrupt?1:t.content.length;return e(!1,t.indents+(t.name?"<"+t.name:"")+(t.attributes.length?" "+t.attributes.join(" "):"")+(o?t.name?">":"":t.name?"/>":"")+(t.indent&&o>1?"\n":"")),o?void(i(t)||r()):e(!1,t.indent?"\n":"")}function u(e,t){return e+'="'+c(t)+'"'}var c=n(325),l=n(326).Stream,p=" ";e.exports=r,e.exports.element=e.exports.Element=i}).call(t,n(324))},function(e,t){function n(){throw new Error("setTimeout has not been defined")}function r(){throw new Error("clearTimeout has not been defined")}function i(e){if(l===setTimeout)return setTimeout(e,0);if((l===n||!l)&&setTimeout)return l=setTimeout,setTimeout(e,0);try{return l(e,0)}catch(t){try{return l.call(null,e,0)}catch(t){return l.call(this,e,0)}}}function o(e){if(p===clearTimeout)return clearTimeout(e);if((p===r||!p)&&clearTimeout)return p=clearTimeout,clearTimeout(e);try{return p(e)}catch(t){try{return p.call(null,e)}catch(t){return p.call(this,e)}}}function a(){m&&h&&(m=!1,h.length?d=h.concat(d):v=-1,d.length&&s())}function s(){if(!m){var e=i(a);m=!0;for(var t=d.length;t;){for(h=d,d=[];++v1)for(var n=1;n'])/g,function(e,t){return r[t]}):e}var r={"&":"&",'"':""","'":"'","<":"<",">":">"};e.exports=n},function(e,t,n){function r(){i.call(this)}e.exports=r;var i=n(327).EventEmitter,o=n(328);o(r,i),r.Readable=n(329),r.Writable=n(346),r.Duplex=n(347),r.Transform=n(348),r.PassThrough=n(349),r.Stream=r,r.prototype.pipe=function(e,t){function n(t){e.writable&&!1===e.write(t)&&c.pause&&c.pause()}function r(){c.readable&&c.resume&&c.resume()}function o(){l||(l=!0,e.end())}function a(){l||(l=!0,"function"==typeof e.destroy&&e.destroy())}function s(e){if(u(),0===i.listenerCount(this,"error"))throw e}function u(){c.removeListener("data",n),e.removeListener("drain",r),c.removeListener("end",o),c.removeListener("close",a),c.removeListener("error",s),e.removeListener("error",s),c.removeListener("end",u),c.removeListener("close",u),e.removeListener("close",u)}var c=this;c.on("data",n),e.on("drain",r),e._isStdio||t&&t.end===!1||(c.on("end",o),c.on("close",a));var l=!1;return c.on("error",s),e.on("error",s),c.on("end",u),c.on("close",u),e.on("close",u),e.emit("pipe",c),e}},function(e,t){function n(){this._events=this._events||{},this._maxListeners=this._maxListeners||void 0}function r(e){return"function"==typeof e}function i(e){return"number"==typeof e}function o(e){return"object"==typeof e&&null!==e}function a(e){return void 0===e}e.exports=n,n.EventEmitter=n,n.prototype._events=void 0,n.prototype._maxListeners=void 0,n.defaultMaxListeners=10,n.prototype.setMaxListeners=function(e){if(!i(e)||e<0||isNaN(e))throw TypeError("n must be a positive number");return this._maxListeners=e,this},n.prototype.emit=function(e){var t,n,i,s,u,c;if(this._events||(this._events={}),"error"===e&&(!this._events.error||o(this._events.error)&&!this._events.error.length)){if(t=arguments[1],t instanceof Error)throw t;var l=new Error('Uncaught, unspecified "error" event. ('+t+")");throw l.context=t,l}if(n=this._events[e],a(n))return!1;if(r(n))switch(arguments.length){case 1:n.call(this);break;case 2:n.call(this,arguments[1]);break;case 3:n.call(this,arguments[1],arguments[2]);break;default:s=Array.prototype.slice.call(arguments,1),n.apply(this,s)}else if(o(n))for(s=Array.prototype.slice.call(arguments,1),c=n.slice(),i=c.length,u=0;u0&&this._events[e].length>i&&(this._events[e].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[e].length),"function"==typeof console.trace&&console.trace())),this},n.prototype.on=n.prototype.addListener,n.prototype.once=function(e,t){function n(){this.removeListener(e,n),i||(i=!0,t.apply(this,arguments))}if(!r(t))throw TypeError("listener must be a function");var i=!1;return n.listener=t,this.on(e,n),this},n.prototype.removeListener=function(e,t){var n,i,a,s;if(!r(t))throw TypeError("listener must be a function");if(!this._events||!this._events[e])return this;if(n=this._events[e],a=n.length,i=-1,n===t||r(n.listener)&&n.listener===t)delete this._events[e],this._events.removeListener&&this.emit("removeListener",e,t);else if(o(n)){for(s=a;s-- >0;)if(n[s]===t||n[s].listener&&n[s].listener===t){i=s;break}if(i<0)return this;1===n.length?(n.length=0,delete this._events[e]):n.splice(i,1),this._events.removeListener&&this.emit("removeListener",e,t)}return this},n.prototype.removeAllListeners=function(e){var t,n;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[e]&&delete this._events[e],this;if(0===arguments.length){for(t in this._events)"removeListener"!==t&&this.removeAllListeners(t);return this.removeAllListeners("removeListener"),this._events={},this}if(n=this._events[e],r(n))this.removeListener(e,n);else if(n)for(;n.length;)this.removeListener(e,n[n.length-1]);return delete this._events[e],this},n.prototype.listeners=function(e){var t;return t=this._events&&this._events[e]?r(this._events[e])?[this._events[e]]:this._events[e].slice():[]},n.prototype.listenerCount=function(e){if(this._events){var t=this._events[e];if(r(t))return 1;if(t)return t.length}return 0},n.listenerCount=function(e,t){return e.listenerCount(t)}},function(e,t){"function"==typeof Object.create?e.exports=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})}:e.exports=function(e,t){e.super_=t;var n=function(){};n.prototype=t.prototype,e.prototype=new n,e.prototype.constructor=e}},function(e,t,n){t=e.exports=n(330),t.Stream=t,t.Readable=t,t.Writable=n(339),t.Duplex=n(338),t.Transform=n(344),t.PassThrough=n(345)},function(e,t,n){(function(t){"use strict";function r(e){return j.from(e)}function i(e){return"[object Uint8Array]"===Object.prototype.toString.call(e)||j.isBuffer(e)}function o(e,t,n){return"function"==typeof e.prependListener?e.prependListener(t,n):void(e._events&&e._events[t]?I(e._events[t])?e._events[t].unshift(n):e._events[t]=[n,e._events[t]]:e.on(t,n))}function a(e,t){P=P||n(338),e=e||{},this.objectMode=!!e.objectMode,t instanceof P&&(this.objectMode=this.objectMode||!!e.readableObjectMode);var r=e.highWaterMark,i=this.objectMode?16:16384;this.highWaterMark=r||0===r?r:i,this.highWaterMark=Math.floor(this.highWaterMark),this.buffer=new q,this.length=0,this.pipes=null,this.pipesCount=0,this.flowing=null,this.ended=!1,this.endEmitted=!1,this.reading=!1,this.sync=!0,this.needReadable=!1,this.emittedReadable=!1,this.readableListening=!1,this.resumeScheduled=!1,this.destroyed=!1,this.defaultEncoding=e.defaultEncoding||"utf8",this.awaitDrain=0,this.readingMore=!1,this.decoder=null,this.encoding=null,e.encoding&&(z||(z=n(343).StringDecoder),this.decoder=new z(e.encoding),this.encoding=e.encoding)}function s(e){return P=P||n(338),this instanceof s?(this._readableState=new a(e,this),this.readable=!0,e&&("function"==typeof e.read&&(this._read=e.read),"function"==typeof e.destroy&&(this._destroy=e.destroy)),void R.call(this)):new s(e)}function u(e,t,n,i,o){var a=e._readableState;if(null===t)a.reading=!1,d(e,a);else{var s;o||(s=l(a,t)),s?e.emit("error",s):a.objectMode||t&&t.length>0?("string"==typeof t||Object.getPrototypeOf(t)===j.prototype||a.objectMode||(t=r(t)),i?a.endEmitted?e.emit("error",new Error("stream.unshift() after end event")):c(e,a,t,!0):a.ended?e.emit("error",new Error("stream.push() after EOF")):(a.reading=!1,a.decoder&&!n?(t=a.decoder.write(t),a.objectMode||0!==t.length?c(e,a,t,!1):y(e,a)):c(e,a,t,!1))):i||(a.reading=!1)}return p(a)}function c(e,t,n,r){t.flowing&&0===t.length&&!t.sync?(e.emit("data",n),e.read(0)):(t.length+=t.objectMode?1:n.length,r?t.buffer.unshift(n):t.buffer.push(n),t.needReadable&&m(e)),y(e,t)}function l(e,t){var n;return i(t)||"string"==typeof t||void 0===t||e.objectMode||(n=new TypeError("Invalid non-string/buffer chunk")),n}function p(e){return!e.ended&&(e.needReadable||e.length=K?e=K:(e--,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e++),e}function h(e,t){return e<=0||0===t.length&&t.ended?0:t.objectMode?1:e!==e?t.flowing&&t.length?t.buffer.head.data.length:t.length:(e>t.highWaterMark&&(t.highWaterMark=f(e)),e<=t.length?e:t.ended?t.length:(t.needReadable=!0,0))}function d(e,t){if(!t.ended){if(t.decoder){var n=t.decoder.end();n&&n.length&&(t.buffer.push(n),t.length+=t.objectMode?1:n.length)}t.ended=!0,m(e)}}function m(e){var t=e._readableState;t.needReadable=!1,t.emittedReadable||(L("emitReadable",t.flowing),t.emittedReadable=!0,t.sync?O(v,e):v(e))}function v(e){L("emit readable"),e.emit("readable"),k(e)}function y(e,t){t.readingMore||(t.readingMore=!0,O(g,e,t))}function g(e,t){for(var n=t.length;!t.reading&&!t.flowing&&!t.ended&&t.length=t.length?(n=t.decoder?t.buffer.join(""):1===t.buffer.length?t.buffer.head.data:t.buffer.concat(t.length),t.buffer.clear()):n=E(e,t.buffer,t.decoder),n}function E(e,t,n){var r;return eo.length?o.length:e;if(i+=a===o.length?o:o.slice(0,e),e-=a,0===e){a===o.length?(++r,n.next?t.head=n.next:t.head=t.tail=null):(t.head=n,n.data=o.slice(a));break}++r}return t.length-=r,i}function A(e,t){var n=j.allocUnsafe(e),r=t.head,i=1;for(r.data.copy(n),e-=r.data.length;r=r.next;){var o=r.data,a=e>o.length?o.length:e;if(o.copy(n,n.length-e,0,a),e-=a,0===e){a===o.length?(++i,r.next?t.head=r.next:t.head=t.tail=null):(t.head=r,r.data=o.slice(a));break}++i}return t.length-=i,n}function T(e){var t=e._readableState;if(t.length>0)throw new Error('"endReadable()" called on non-empty stream');t.endEmitted||(t.ended=!0,O(D,t,e))}function D(e,t){e.endEmitted||0!==e.length||(e.endEmitted=!0,t.readable=!1,t.emit("end"))}function M(e,t){for(var n=0,r=e.length;n=t.highWaterMark||t.ended))return L("read: emitReadable",t.length,t.ended),0===t.length&&t.ended?T(this):m(this),null;if(e=h(e,t),0===e&&t.ended)return 0===t.length&&T(this),null;var r=t.needReadable;L("need readable",r),(0===t.length||t.length-e0?S(e,t):null,null===i?(t.needReadable=!0,e=0):t.length-=e,0===t.length&&(t.ended||(t.needReadable=!0),n!==e&&t.ended&&T(this)),null!==i&&this.emit("data",i),i},s.prototype._read=function(e){this.emit("error",new Error("_read() is not implemented"))},s.prototype.pipe=function(e,n){function r(e,t){L("onunpipe"),e===f&&t&&t.hasUnpiped===!1&&(t.hasUnpiped=!0,a())}function i(){L("onend"),e.end()}function a(){L("cleanup"),e.removeListener("close",c),e.removeListener("finish",l),e.removeListener("drain",v),e.removeListener("error",u),e.removeListener("unpipe",r),f.removeListener("end",i),f.removeListener("end",p),f.removeListener("data",s),y=!0,!h.awaitDrain||e._writableState&&!e._writableState.needDrain||v()}function s(t){L("ondata"),g=!1;var n=e.write(t);!1!==n||g||((1===h.pipesCount&&h.pipes===e||h.pipesCount>1&&M(h.pipes,e)!==-1)&&!y&&(L("false write response, pause",f._readableState.awaitDrain),f._readableState.awaitDrain++,g=!0),f.pause())}function u(t){L("onerror",t),p(),e.removeListener("error",u),0===N(e,"error")&&e.emit("error",t)}function c(){e.removeListener("finish",l),p()}function l(){L("onfinish"),e.removeListener("close",c),p()}function p(){L("unpipe"),f.unpipe(e)}var f=this,h=this._readableState;switch(h.pipesCount){case 0:h.pipes=e;break;case 1:h.pipes=[h.pipes,e];break;default:h.pipes.push(e)}h.pipesCount+=1,L("pipe count=%d opts=%j",h.pipesCount,n);var d=(!n||n.end!==!1)&&e!==t.stdout&&e!==t.stderr,m=d?i:p;h.endEmitted?O(m):f.once("end",m),e.on("unpipe",r);var v=_(f);e.on("drain",v);var y=!1,g=!1;return f.on("data",s),o(e,"error",u),e.once("close",c),e.once("finish",l),e.emit("pipe",f),h.flowing||(L("pipe resume"),f.resume()),e},s.prototype.unpipe=function(e){var t=this._readableState,n={hasUnpiped:!1};if(0===t.pipesCount)return this;if(1===t.pipesCount)return e&&e!==t.pipes?this:(e||(e=t.pipes),t.pipes=null,t.pipesCount=0,t.flowing=!1,e&&e.emit("unpipe",this,n),this);if(!e){var r=t.pipes,i=t.pipesCount;t.pipes=null,t.pipesCount=0,t.flowing=!1;for(var o=0;o0?this.tail.next=t:this.head=t,this.tail=t,++this.length},e.prototype.unshift=function(e){var t={data:e,next:this.head};0===this.length&&(this.tail=t),this.head=t,++this.length},e.prototype.shift=function(){if(0!==this.length){var e=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,e}},e.prototype.clear=function(){this.head=this.tail=null,this.length=0},e.prototype.join=function(e){if(0===this.length)return"";for(var t=this.head,n=""+t.data;t=t.next;)n+=e+t.data;return n},e.prototype.concat=function(e){if(0===this.length)return o.alloc(0);if(1===this.length)return this.head.data;for(var t=o.allocUnsafe(e>>>0),n=this.head,r=0;n;)i(n.data,t,r),r+=n.data.length,n=n.next;return t},e}()},function(e,t,n){"use strict";function r(e,t){var n=this,r=this._readableState&&this._readableState.destroyed,i=this._writableState&&this._writableState.destroyed;return r||i?void(t?t(e):!e||this._writableState&&this._writableState.errorEmitted||a(o,this,e)):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),void this._destroy(e||null,function(e){!t&&e?(a(o,n,e),n._writableState&&(n._writableState.errorEmitted=!0)):t&&t(e)}))}function i(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}function o(e,t){e.emit("error",t)}var a=n(331);e.exports={destroy:r,undestroy:i}},function(e,t,n){"use strict";function r(e){return this instanceof r?(c.call(this,e),l.call(this,e),e&&e.readable===!1&&(this.readable=!1),e&&e.writable===!1&&(this.writable=!1),this.allowHalfOpen=!0,e&&e.allowHalfOpen===!1&&(this.allowHalfOpen=!1),void this.once("end",i)):new r(e)}function i(){this.allowHalfOpen||this._writableState.ended||a(o,this)}function o(e){e.end()}var a=n(331),s=Object.keys||function(e){var t=[];for(var n in e)t.push(n);return t};e.exports=r;var u=n(334);u.inherits=n(328);var c=n(330),l=n(339);u.inherits(r,c);for(var p=s(l.prototype),f=0;f-1?r:A; +c.WritableState=u;var M=n(334);M.inherits=n(328);var O={deprecate:n(342)},P=n(332),I=n(333).Buffer,N=n(337);M.inherits(c,P),u.prototype.getBuffer=function(){for(var e=this.bufferedRequest,t=[];e;)t.push(e),e=e.next;return t},function(){try{Object.defineProperty(u.prototype,"buffer",{get:O.deprecate(function(){return this.getBuffer()},"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch(e){}}();var R;"function"==typeof Symbol&&Symbol.hasInstance&&"function"==typeof Function.prototype[Symbol.hasInstance]?(R=Function.prototype[Symbol.hasInstance],Object.defineProperty(c,Symbol.hasInstance,{value:function(e){return!!R.call(this,e)||e&&e._writableState instanceof u}})):R=function(e){return e instanceof this},c.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe, not readable"))},c.prototype.write=function(e,t,n){var r=this._writableState,i=!1,u=a(e)&&!r.objectMode;return u&&!I.isBuffer(e)&&(e=o(e)),"function"==typeof t&&(n=t,t=null),u?t="buffer":t||(t=r.defaultEncoding),"function"!=typeof n&&(n=s),r.ended?l(this,n):(u||p(this,r,e,n))&&(r.pendingcb++,i=h(this,r,u,e,t,n)),i},c.prototype.cork=function(){var e=this._writableState;e.corked++},c.prototype.uncork=function(){var e=this._writableState;e.corked&&(e.corked--,e.writing||e.corked||e.finished||e.bufferProcessing||!e.bufferedRequest||b(this,e))},c.prototype.setDefaultEncoding=function(e){if("string"==typeof e&&(e=e.toLowerCase()),!(["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le","raw"].indexOf((e+"").toLowerCase())>-1))throw new TypeError("Unknown encoding: "+e);return this._writableState.defaultEncoding=e,this},c.prototype._write=function(e,t,n){n(new Error("_write() is not implemented"))},c.prototype._writev=null,c.prototype.end=function(e,t,n){var r=this._writableState;"function"==typeof e?(n=e,e=null,t=null):"function"==typeof t&&(n=t,t=null),null!==e&&void 0!==e&&this.write(e,t),r.corked&&(r.corked=1,this.uncork()),r.ending||r.finished||E(this,r,n)},Object.defineProperty(c.prototype,"destroyed",{get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(e){this._writableState&&(this._writableState.destroyed=e)}}),c.prototype.destroy=N.destroy,c.prototype._undestroy=N.undestroy,c.prototype._destroy=function(e,t){this.end(),t(e)}}).call(t,n(324),n(340).setImmediate)},function(e,t,n){function r(e,t){this._id=e,this._clearFn=t}var i=Function.prototype.apply;t.setTimeout=function(){return new r(i.call(setTimeout,window,arguments),clearTimeout)},t.setInterval=function(){return new r(i.call(setInterval,window,arguments),clearInterval)},t.clearTimeout=t.clearInterval=function(e){e&&e.close()},r.prototype.unref=r.prototype.ref=function(){},r.prototype.close=function(){this._clearFn.call(window,this._id)},t.enroll=function(e,t){clearTimeout(e._idleTimeoutId),e._idleTimeout=t},t.unenroll=function(e){clearTimeout(e._idleTimeoutId),e._idleTimeout=-1},t._unrefActive=t.active=function(e){clearTimeout(e._idleTimeoutId);var t=e._idleTimeout;t>=0&&(e._idleTimeoutId=setTimeout(function(){e._onTimeout&&e._onTimeout()},t))},n(341),t.setImmediate=setImmediate,t.clearImmediate=clearImmediate},function(e,t,n){(function(e,t){!function(e,n){"use strict";function r(e){"function"!=typeof e&&(e=new Function(""+e));for(var t=new Array(arguments.length-1),n=0;n>5===6?2:e>>4===14?3:e>>3===30?4:-1}function s(e,t,n){var r=t.length-1;if(r=0?(i>0&&(e.lastNeed=i-1),i):--r=0?(i>0&&(e.lastNeed=i-2),i):--r=0?(i>0&&(2===i?i=0:e.lastNeed=i-3),i):0))}function u(e,t,n){if(128!==(192&t[0]))return e.lastNeed=0,"�".repeat(n);if(e.lastNeed>1&&t.length>1){if(128!==(192&t[1]))return e.lastNeed=1,"�".repeat(n+1);if(e.lastNeed>2&&t.length>2&&128!==(192&t[2]))return e.lastNeed=2,"�".repeat(n+2)}}function c(e){var t=this.lastTotal-this.lastNeed,n=u(this,e,t);return void 0!==n?n:this.lastNeed<=e.length?(e.copy(this.lastChar,t,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(e.copy(this.lastChar,t,0,e.length),void(this.lastNeed-=e.length))}function l(e,t){var n=s(this,e,t);if(!this.lastNeed)return e.toString("utf8",t);this.lastTotal=n;var r=e.length-(n-this.lastNeed);return e.copy(this.lastChar,0,r),e.toString("utf8",t,r)}function p(e){var t=e&&e.length?this.write(e):"";return this.lastNeed?t+"�".repeat(this.lastTotal-this.lastNeed):t}function f(e,t){if((e.length-t)%2===0){var n=e.toString("utf16le",t);if(n){var r=n.charCodeAt(n.length-1);if(r>=55296&&r<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1],n.slice(0,-1)}return n}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=e[e.length-1],e.toString("utf16le",t,e.length-1)}function h(e){var t=e&&e.length?this.write(e):"";if(this.lastNeed){var n=this.lastTotal-this.lastNeed;return t+this.lastChar.toString("utf16le",0,n)}return t}function d(e,t){var n=(e.length-t)%3;return 0===n?e.toString("base64",t):(this.lastNeed=3-n,this.lastTotal=3,1===n?this.lastChar[0]=e[e.length-1]:(this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1]),e.toString("base64",t,e.length-n))}function m(e){var t=e&&e.length?this.write(e):"";return this.lastNeed?t+this.lastChar.toString("base64",0,3-this.lastNeed):t}function v(e){return e.toString(this.encoding)}function y(e){return e&&e.length?this.write(e):""}var g=n(333).Buffer,_=g.isEncoding||function(e){switch(e=""+e,e&&e.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};t.StringDecoder=o,o.prototype.write=function(e){if(0===e.length)return"";var t,n;if(this.lastNeed){if(t=this.fillLast(e),void 0===t)return"";n=this.lastNeed,this.lastNeed=0}else n=0;return n1&&(a.normalizer=n(397)(t)):t===!1?a.normalizer=n(398)():1===t?a.normalizer=n(400)():a.normalizer=n(401)(t))),a.async&&n(402),a.promise&&n(405),a.dispose&&n(407),a.maxAge&&n(408),a.max&&n(411),a.refCounter&&n(413),o(e,a)}},function(e,t){"use strict";var n=Array.prototype.forEach,r=Object.create,i=function(e,t){var n;for(n in e)t[n]=e[n]};e.exports=function(e){var t=r(null);return n.call(arguments,function(e){null!=e&&i(Object(e),t)}),t}},function(e,t,n){"use strict";var r=n(353);e.exports=function(e,t,n){var i;return isNaN(e)?(i=t,i>=0?n&&i?i-1:i:1):e!==!1&&r(e)}},function(e,t,n){"use strict";var r=n(354),i=Math.max;e.exports=function(e){return i(0,r(e))}},function(e,t,n){"use strict";var r=n(355),i=Math.abs,o=Math.floor;e.exports=function(e){return isNaN(e)?0:(e=Number(e),0!==e&&isFinite(e)?r(e)*o(i(e)):e)}},function(e,t,n){"use strict";e.exports=n(356)()?Math.sign:n(357)},function(e,t){"use strict";e.exports=function(){var e=Math.sign;return"function"==typeof e&&(1===e(10)&&e(-20)===-1)}},function(e,t){"use strict";e.exports=function(e){return e=Number(e),isNaN(e)||0===e?e:e>0?1:-1}},function(e,t,n){"use strict";var r=n(359),i=n(360),o=n(363),a=n(364),s=n(352),u=Object.prototype.hasOwnProperty;e.exports=function e(t){var n,c,l;if(r(t),n=Object(arguments[1]),n.async&&n.promise)throw new Error("Options 'async' and 'promise' cannot be used together");return u.call(t,"__memoized__")&&!n.force?t:(c=s(n.length,t.length,n.async&&o.async),l=a(t,c,n),i(o,function(e,t){n[t]&&e(n[t],l,n)}),e.__profiler__&&e.__profiler__(l),l.updateEnv(),l.memoized)}},function(e,t){"use strict";e.exports=function(e){if("function"!=typeof e)throw new TypeError(e+" is not a function");return e}},function(e,t,n){"use strict";e.exports=n(361)("forEach")},function(e,t,n){"use strict";var r=n(359),i=n(362),o=Function.prototype.bind,a=Function.prototype.call,s=Object.keys,u=Object.prototype.propertyIsEnumerable;e.exports=function(e,t){return function(n,c){var l,p=arguments[2],f=arguments[3];return n=Object(i(n)),r(c),l=s(n),f&&l.sort("function"==typeof f?o.call(f,n):void 0),"function"!=typeof e&&(e=l[e]),a.call(e,l,function(e,r){return u.call(n,e)?a.call(c,p,n[e],e,n,r):t})}}},function(e,t){"use strict";e.exports=function(e){if(null==e)throw new TypeError("Cannot use null or undefined");return e}},function(e,t){"use strict"},function(e,t,n){"use strict";var r=n(365),i=n(373),o=n(375),a=n(380).methods,s=n(381),u=n(395),c=Function.prototype.apply,l=Function.prototype.call,p=Object.create,f=Object.prototype.hasOwnProperty,h=Object.defineProperties,d=a.on,m=a.emit;e.exports=function(e,t,n){var a,v,y,g,_,b,x,w,k,S,E,C,A,T=p(null);return v=t!==!1?t:isNaN(e.length)?1:e.length,n.normalizer&&(w=u(n.normalizer),y=w.get,g=w.set,_=w.delete,b=w.clear),null!=n.resolvers&&(A=s(n.resolvers)),C=y?i(function(t){var n,i,o=arguments;if(A&&(o=A(o)),n=y(o),null!==n&&f.call(T,n))return k&&a.emit("get",n,o,this),T[n];if(i=1===o.length?l.call(e,this,o[0]):c.call(e,this,o),null===n){if(n=y(o),null!==n)throw r("Circular invocation","CIRCULAR_INVOCATION");n=g(o)}else if(f.call(T,n))throw r("Circular invocation","CIRCULAR_INVOCATION");return T[n]=i,S&&a.emit("set",n,null,i),i},v):0===t?function(){var t;if(f.call(T,"data"))return k&&a.emit("get","data",arguments,this),T.data;if(t=arguments.length?c.call(e,this,arguments):l.call(e,this),f.call(T,"data"))throw r("Circular invocation","CIRCULAR_INVOCATION");return T.data=t,S&&a.emit("set","data",null,t),t}:function(t){var n,i,o=arguments;if(A&&(o=A(arguments)),i=String(o[0]),f.call(T,i))return k&&a.emit("get",i,o,this),T[i];if(n=1===o.length?l.call(e,this,o[0]):c.call(e,this,o),f.call(T,i))throw r("Circular invocation","CIRCULAR_INVOCATION");return T[i]=n,S&&a.emit("set",i,null,n),n},a={original:e,memoized:C,get:function(e){return A&&(e=A(e)),y?y(e):String(e[0])},has:function(e){return f.call(T,e)},delete:function(e){var t;f.call(T,e)&&(_&&_(e),t=T[e],delete T[e],E&&a.emit("delete",e,t))},clear:function(){var e=T;b&&b(),T=p(null),a.emit("clear",e)},on:function(e,t){return"get"===e?k=!0:"set"===e?S=!0:"delete"===e&&(E=!0),d.call(this,e,t)},emit:m,updateEnv:function(){e=a.original}},x=y?i(function(e){var t,n=arguments;A&&(n=A(n)),t=y(n),null!==t&&a.delete(t)},v):0===t?function(){return a.delete("data")}:function(e){return A&&(e=A(arguments)[0]),a.delete(e)},h(C,{__memoized__:o(!0),delete:o(x),clear:o(a.clear)}),a}},function(e,t,n){"use strict";var r=n(366),i=n(372),o=Error.captureStackTrace;t=e.exports=function(e){var n=new Error(e),a=arguments[1],s=arguments[2];return null==s&&i(a)&&(s=a,a=null),null!=s&&r(n,s),null!=a&&(n.code=a),o&&o(n,t),n}},function(e,t,n){"use strict";e.exports=n(367)()?Object.assign:n(368)},function(e,t){"use strict";e.exports=function(){var e,t=Object.assign;return"function"==typeof t&&(e={foo:"raz"},t(e,{bar:"dwa"},{trzy:"trzy"}),e.foo+e.bar+e.trzy==="razdwatrzy")}},function(e,t,n){"use strict";var r=n(369),i=n(362),o=Math.max;e.exports=function(e,t){var n,a,s,u=o(arguments.length,2);for(e=Object(i(e)),s=function(r){try{e[r]=t[r]}catch(e){n||(n=e)}},a=1;a-1}},function(e,t,n){"use strict";var r,i,o,a,s,u,c,l=n(375),p=n(359),f=Function.prototype.apply,h=Function.prototype.call,d=Object.create,m=Object.defineProperty,v=Object.defineProperties,y=Object.prototype.hasOwnProperty,g={configurable:!0,enumerable:!1,writable:!0};r=function(e,t){var n;return p(t),y.call(this,"__ee__")?n=this.__ee__:(n=g.value=d(null),m(this,"__ee__",g),g.value=null),n[e]?"object"==typeof n[e]?n[e].push(t):n[e]=[n[e],t]:n[e]=t,this},i=function(e,t){var n,i;return p(t),i=this,r.call(this,e,n=function(){o.call(i,e,n),f.call(t,this,arguments)}),n.__eeOnceListener__=t,this},o=function(e,t){var n,r,i,o;if(p(t),!y.call(this,"__ee__"))return this;if(n=this.__ee__,!n[e])return this;if(r=n[e],"object"==typeof r)for(o=0;i=r[o];++o)i!==t&&i.__eeOnceListener__!==t||(2===r.length?n[e]=r[o?0:1]:r.splice(o,1));else r!==t&&r.__eeOnceListener__!==t||delete n[e];return this},a=function(e){var t,n,r,i,o;if(y.call(this,"__ee__")&&(i=this.__ee__[e]))if("object"==typeof i){for(n=arguments.length,o=new Array(n-1),t=1;t=55296&&y<=56319&&(x+=e[++n])),x=w?p.call(w,k,x,d):x,t?(f.value=x,h(m,d,f)):m[d]=x,++d;v=d}if(void 0===v)for(v=a(e.length),t&&(m=new t(v)),n=0;n=0?u(c):r(this.length)-u(s(c)),t=c;ti)throw new TypeError(e+" exceeds maximum possible timeout");return e}},function(e,t){"use strict";e.exports=2147483647},function(e,t,n){"use strict";var r=n(353),i=n(412),o=n(363);o.max=function(e,t,n){var a,s,u;e=r(e),e&&(s=i(e),a=n.async&&o.async||n.promise&&o.promise?"async":"",t.on("set"+a,u=function(e){e=s.hit(e),void 0!==e&&t.delete(e)}),t.on("get"+a,u),t.on("delete"+a,s.delete),t.on("clear"+a,s.clear))}},function(e,t,n){"use strict";var r=n(353),i=Object.create,o=Object.prototype.hasOwnProperty;e.exports=function(e){var t,n=0,a=1,s=i(null),u=i(null),c=0;return e=r(e),{hit:function(r){var i=u[r],l=++c;if(s[l]=r,u[r]=l,!i){if(++n,n<=e)return;return r=s[a],t(r),r}if(delete s[i],a===i)for(;!o.call(s,++a);)continue},delete:t=function(e){var t=u[e];if(t&&(delete s[t],delete u[e],--n,a===t)){if(!n)return c=0,void(a=1);for(;!o.call(s,++a);)continue}},clear:function(){n=0,a=1,s=i(null),u=i(null),c=0}}}},function(e,t,n){"use strict";var r=n(375),i=n(363),o=Object.create,a=Object.defineProperties;i.refCounter=function(e,t,n){var s,u;s=o(null),u=n.async&&i.async||n.promise&&i.promise?"async":"",t.on("set"+u,function(e,t){s[e]=t||1}),t.on("get"+u,function(e){++s[e]}),t.on("delete"+u,function(e){delete s[e]}),t.on("clear"+u,function(){s={}}),a(t.memoized,{deleteRef:r(function(){var e=t.get(arguments);return null===e?null:s[e]?!--s[e]&&(t.delete(e),!0):null}),getRefCount:r(function(){var e=t.get(arguments);return null===e?0:s[e]?s[e]:0})})}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){return[a.default]}Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var o=n(415),a=r(o)},function(e,t,n){"use strict";function r(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}function i(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){var e={components:{App:M.default,authorizationPopup:P.default,authorizeBtn:N.default,authorizeOperationBtn:j.default,auths:B.default,authError:z.default,oauth2:H.default,apiKeyAuth:U.default,basicAuth:K.default,clear:G.default,liveResponse:Y.default,info:Ce.default,onlineValidatorBadge:Z.default,operations:ee.default,operation:ne.default,highlightCode:ie.default,responses:ae.default,response:ue.default,responseBody:le.default,parameters:fe.default,parameterRow:de.default,execute:ve.default,headers:ge.default,errors:be.default,contentType:we.default,overview:Se.default,footer:Te.default,ParamBody:Me.default,curl:Pe.default,schemes:Ne.default,modelExample:je.default,model:Be.default,models:ze.default,TryItOutButton:Ue.default,Markdown:Ke.default,BaseLayout:He.default}},t={components:Ge},n={components:Ye};return[S.default,v.default,f.default,l.default,a.default,u.default,d.default,e,t,b.default,n,w.default,g.default,C.default,T.default]};var o=n(416),a=i(o),s=n(431),u=i(s),c=n(443),l=i(c),p=n(484),f=i(p),h=n(726),d=i(h),m=n(727),v=i(m),y=n(728),g=i(y),_=n(762),b=i(_),x=n(954),w=i(x),k=n(959),S=i(k),E=n(961),C=i(E),A=n(1010),T=i(A),D=n(1011),M=i(D),O=n(1012),P=i(O),I=n(1013),N=i(I),R=n(1014),j=i(R),F=n(1016),B=i(F),L=n(1017),z=i(L),q=n(1018),U=i(q),W=n(1019),K=i(W),V=n(1020),H=i(V),J=n(1022),G=i(J),X=n(1023),Y=i(X),$=n(1024),Z=i($),Q=n(1025),ee=i(Q),te=n(1026),ne=i(te),re=n(1030),ie=i(re),oe=n(1031),ae=i(oe),se=n(1032),ue=i(se),ce=n(1033),le=i(ce),pe=n(1035),fe=i(pe),he=n(1036),de=i(he),me=n(1037),ve=i(me),ye=n(1038),ge=i(ye),_e=n(1039),be=i(_e),xe=n(1064),we=i(xe),ke=n(1065),Se=i(ke),Ee=n(1067),Ce=i(Ee),Ae=n(1068),Te=i(Ae),De=n(1069),Me=i(De),Oe=n(1070),Pe=i(Oe),Ie=n(1072),Ne=i(Ie),Re=n(1073),je=i(Re),Fe=n(1074),Be=i(Fe),Le=n(1075),ze=i(Le),qe=n(1076),Ue=i(qe),We=n(1077),Ke=i(We),Ve=n(1173),He=i(Ve),Je=n(1066),Ge=r(Je),Xe=n(1174),Ye=r(Xe)},function(e,t,n){"use strict";function r(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}function i(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return{statePlugins:{err:{reducers:(0,a.default)(e),actions:u,selectors:l}}}};var o=n(417),a=i(o),s=n(176),u=r(s),c=n(429),l=r(c)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var i=n(137),o=r(i),a=n(141),s=r(a);t.default=function(e){var t;return t={},(0,o.default)(t,u.NEW_THROWN_ERR,function(t,n){var r=n.payload,i=(0,s.default)(m,r,{type:"thrown"});return t.update("errors",function(e){return(e||(0,p.List)()).push((0,p.fromJS)(i))}).update("errors",function(t){return(0,d.default)(t,e.getSystem())})}),(0,o.default)(t,u.NEW_THROWN_ERR_BATCH,function(t,n){var r=n.payload;return r=r.map(function(e){return(0,p.fromJS)((0,s.default)(m,e,{type:"thrown"}))}),t.update("errors",function(e){return(e||(0,p.List)()).concat((0,p.fromJS)(r))}).update("errors",function(t){return(0,d.default)(t,e.getSystem())})}),(0,o.default)(t,u.NEW_SPEC_ERR,function(t,n){var r=n.payload,i=(0,p.fromJS)(r);return i=i.set("type","spec"),t.update("errors",function(e){return(e||(0,p.List)()).push((0,p.fromJS)(i)).sortBy(function(e){return e.get("line")})}).update("errors",function(t){return(0,d.default)(t,e.getSystem())})}),(0,o.default)(t,u.NEW_AUTH_ERR,function(t,n){var r=n.payload,i=(0,p.fromJS)((0,s.default)({},r));return i=i.set("type","auth"),t.update("errors",function(e){return(e||(0,p.List)()).push((0,p.fromJS)(i))}).update("errors",function(t){return(0,d.default)(t,e.getSystem())})}),(0,o.default)(t,u.CLEAR,function(e,t){var n=t.payload;if(n){var r=f.default.fromJS((0,l.default)((e.get("errors")||(0,p.List)()).toJS(),n));return e.merge({errors:r})}}),t};var u=n(176),c=n(418),l=r(c),p=n(168),f=r(p),h=n(422),d=r(h),m={line:0,level:"error",message:"Unknown error"}},function(e,t,n){function r(e,t){var n=s(e)?i:o;return n(e,u(a(t,3)))}var i=n(419),o=n(420),a=n(247),s=n(193),u=n(421);e.exports=r},function(e,t){function n(e,t){for(var n=-1,r=null==e?0:e.length,i=0,o=[];++n-1||c.push({name:o(e).replace(".js","").replace("./",""),transform:u(e).transform}))})},function(e,t,n){function r(e,t,n){var r=u(e)?i:s,c=arguments.length<3;return r(e,a(t,4),n,c,o)}var i=n(204),o=n(316),a=n(247),s=n(424),u=n(193);e.exports=r},function(e,t){function n(e,t,n,r,i){return i(e,function(e,i,o){n=r?(r=!1,e):t(n,e,i,o)}),n}e.exports=n},function(e,t,n){function r(e){return n(i(e))}function i(e){return o[e]||function(){throw new Error("Cannot find module '"+e+"'.")}()}var o={"./not-of-type.js":426,"./parameter-oneof.js":427,"./strip-instance.js":428};r.keys=function(){return Object.keys(o)},r.resolve=i,e.exports=r,r.id=425},function(e,t){"use strict";function n(e){return e.map(function(e){var t="is not of a type(s)",n=e.get("message").indexOf(t);if(n>-1){var i=e.get("message").slice(n+t.length).split(",");return e.set("message",e.get("message").slice(0,n)+r(i))}return e})}function r(e){return e.reduce(function(e,t,n,r){return n===r.length-1&&r.length>1?e+"or "+t:r[n+1]&&r.length>2?e+t+", ":r[n+1]?e+t+" ":e+t},"should be a")}Object.defineProperty(t,"__esModule",{value:!0}),t.transform=n},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){t.jsSpec;return e}Object.defineProperty(t,"__esModule",{value:!0}),t.transform=i;var o=n(295);r(o),n(168)},function(e,t){"use strict";function n(e){return e.map(function(e){return e.set("message",r(e.get("message"),"instance."))})}function r(e,t){return e.replace(new RegExp(t,"g"),"")}Object.defineProperty(t,"__esModule",{value:!0}),t.transform=n},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.lastError=t.allErrors=void 0;var r=n(168),i=n(430),o=function(e){return e},a=t.allErrors=(0,i.createSelector)(o,function(e){return e.get("errors",(0,r.List)())});t.lastError=(0,i.createSelector)(a,function(e){return e.last()})},function(e,t){"use strict";function n(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1?t-1:0),i=1;i2?r-2:0),o=2;o1&&void 0!==arguments[1])||arguments[1];return e=(0,a.normalizeArray)(e),{type:c,payload:{thing:e,shown:t}}}function o(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";return e=(0,a.normalizeArray)(e),{type:u,payload:{thing:e,mode:t}}}Object.defineProperty(t,"__esModule",{value:!0}),t.SHOW=t.UPDATE_MODE=t.UPDATE_LAYOUT=void 0,t.updateLayout=r,t.show=i,t.changeMode=o;var a=n(183),s=t.UPDATE_LAYOUT="layout_update_layout",u=t.UPDATE_MODE="layout_update_mode",c=t.SHOW="layout_show"},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0}),t.showSummary=t.whatMode=t.isShown=t.current=void 0;var i=n(435),o=r(i),a=n(430),s=n(183),u=function(e){return e},c=(t.current=function(e){return e.get("layout")},t.isShown=function(e,t,n){return t=(0,s.normalizeArray)(t),Boolean(e.getIn(["shown"].concat((0,o.default)(t)),n))});t.whatMode=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";return t=(0,s.normalizeArray)(t),e.getIn(["modes"].concat((0,o.default)(t)),n)},t.showSummary=(0,a.createSelector)(u,function(e){return!c(e,"editor")})},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var i=n(436),o=r(i);t.default=function(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t1?arguments[1]:void 0,v=void 0!==m,y=0,g=l(f);if(v&&(m=r(m,d>2?arguments[2]:void 0,2)),void 0==g||h==Array&&s(g))for(t=u(f.length),n=new h(t);t>y;y++)c(n,y,v?m(f[y],y):f[y]);else for(p=g.call(f),n=new h;!(i=p.next()).done;y++)c(n,y,v?a(p,m,[i.value,y],!0):i.value);return n.length=y,n}})},function(e,t,n){var r=n(86);e.exports=function(e,t,n,i){try{return i?t(r(n)[0],n[1]):t(n)}catch(t){var o=e.return;throw void 0!==o&&r(o.call(e)),t}}},function(e,t,n){var r=n(102),i=n(108)("iterator"),o=Array.prototype;e.exports=function(e){return void 0!==e&&(r.Array===e||o[i]===e)}},function(e,t,n){"use strict";var r=n(85),i=n(93);e.exports=function(e,t,n){t in e?r.f(e,t,i(0,n)):e[t]=n}},function(e,t,n){var r=n(108)("iterator"),i=!1;try{var o=[7][r]();o.return=function(){i=!0},Array.from(o,function(){throw 2})}catch(e){}e.exports=function(e,t){if(!t&&!i)return!1;var n=!1;try{var o=[7],a=o[r]();a.next=function(){return{done:n=!0}},o[r]=function(){return a},e(o)}catch(e){}return n}},function(e,t,n){"use strict";function r(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}function i(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){return{statePlugins:{spec:{wrapActions:f,reducers:a.default,actions:u,selectors:l}}}};var o=n(444),a=i(o),s=n(445),u=r(s),c=n(482),l=r(c),p=n(483),f=r(p)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var i,o=n(137),a=r(o),s=n(141),u=r(s),c=n(435),l=r(c),p=n(168),f=n(183),h=n(177),d=r(h),m=n(445);t.default=(i={},(0,a.default)(i,m.UPDATE_SPEC,function(e,t){return"string"==typeof t.payload?e.set("spec",t.payload):e}),(0,a.default)(i,m.UPDATE_URL,function(e,t){return e.set("url",t.payload+"")}),(0,a.default)(i,m.UPDATE_JSON,function(e,t){return e.set("json",(0,f.fromJSOrdered)(t.payload))}),(0,a.default)(i,m.UPDATE_RESOLVED,function(e,t){return e.setIn(["resolved"],(0,f.fromJSOrdered)(t.payload))}),(0,a.default)(i,m.UPDATE_PARAM,function(e,t){var n=t.payload,r=n.path,i=n.paramName,o=n.value,a=n.isXml;return e.updateIn(["resolved","paths"].concat((0,l.default)(r),["parameters"]),(0,p.fromJS)([]),function(e){var t=e.findIndex(function(e){return e.get("name")===i});return o instanceof d.default.File||(o=(0,f.fromJSOrdered)(o)),e.setIn([t,a?"value_xml":"value"],o)})}),(0,a.default)(i,m.VALIDATE_PARAMS,function(e,t){var n=t.payload.pathMethod,r=e.getIn(["resolved","paths"].concat((0,l.default)(n))),i=/xml/i.test(r.get("consumes_value"));return e.updateIn(["resolved","paths"].concat((0,l.default)(n),["parameters"]),(0,p.fromJS)([]),function(e){return e.withMutations(function(e){for(var t=0,n=e.count();t0){var i=n.map(function(e){return console.error(e),e.line=e.fullPath?d(m,e.fullPath):null,e.path=e.fullPath?e.fullPath.join("."):null,e.level="error",e.type="thrown",e.source="resolver",Object.defineProperty(e,"message",{enumerable:!0,value:e.message}),e});o.newThrownErrBatch(i)}return r.updateResolved(t)})}},t.formatIntoYaml=function(){return function(e){var t=e.specActions,n=e.specSelectors,r=n.specStr,i=t.updateSpec;try{var o=E.default.safeDump(E.default.safeLoad(r()),{indent:2});i(o)}catch(e){i(e)}}},t.setResponse=function(e,t,n){return{payload:{path:e,method:t,res:n},type:R}},t.setRequest=function(e,t,n){return{payload:{path:e,method:t,req:n},type:j}},t.logRequest=function(e){return{payload:e,type:F}},t.executeRequest=function(e){return function(t){var n=t.fn,r=t.specActions,i=t.specSelectors,o=e.pathName,a=e.method,s=e.operation,u=s.toJS();e.contextUrl=(0,A.default)(i.url()).toString(),u&&u.operationId?e.operationId=u.operationId:u&&o&&a&&(e.operationId=n.opId(u,o,a));var c=(0,x.default)({},e);return c=n.buildRequest(c),r.setRequest(e.pathName,e.method,c),n.execute(e).then(function(t){return r.setResponse(e.pathName,e.method,t)}).catch(function(t){return r.setResponse(e.pathName,e.method,{error:!0,err:(0,D.default)(t)})})}},function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.path,n=e.method,r=(0,_.default)(e,["path","method"]);return function(e){var i=e.fn.fetch,o=e.specSelectors,a=e.specActions,s=o.spec().toJS(),u=o.operationScheme(t,n),c=o.contentTypeValues([t,n]).toJS(),l=c.requestContentType,p=c.responseContentType,f=/xml/i.test(l),h=o.parameterValues([t,n],f).toJS();return a.executeRequest((0,y.default)({fetch:i,spec:s,pathName:t,method:n,parameters:h,requestContentType:l,scheme:u,responseContentType:p},r))}});t.execute=K},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var i=n(141),o=r(i);t.default=o.default||function(e){for(var t=1;t=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}},function(e,t,n){"use strict";var r=n(449);e.exports=r},function(e,t,n){"use strict";function r(e){return function(){throw new Error("Function "+e+" is deprecated and cannot be used.")}}var i=n(450),o=n(478);e.exports.Type=n(456),e.exports.Schema=n(455),e.exports.FAILSAFE_SCHEMA=n(459),e.exports.JSON_SCHEMA=n(458),e.exports.CORE_SCHEMA=n(457),e.exports.DEFAULT_SAFE_SCHEMA=n(454),e.exports.DEFAULT_FULL_SCHEMA=n(473),e.exports.load=i.load,e.exports.loadAll=i.loadAll,e.exports.safeLoad=i.safeLoad,e.exports.safeLoadAll=i.safeLoadAll,e.exports.dump=o.dump,e.exports.safeDump=o.safeDump,e.exports.YAMLException=n(452),e.exports.MINIMAL_SCHEMA=n(459),e.exports.SAFE_SCHEMA=n(454),e.exports.DEFAULT_SCHEMA=n(473),e.exports.scan=r("scan"),e.exports.parse=r("parse"),e.exports.compose=r("compose"),e.exports.addConstructor=r("addConstructor")},function(e,t,n){"use strict";function r(e){return 10===e||13===e}function i(e){return 9===e||32===e}function o(e){return 9===e||32===e||10===e||13===e}function a(e){return 44===e||91===e||93===e||123===e||125===e}function s(e){var t;return 48<=e&&e<=57?e-48:(t=32|e,97<=t&&t<=102?t-97+10:-1)}function u(e){return 120===e?2:117===e?4:85===e?8:0}function c(e){return 48<=e&&e<=57?e-48:-1}function l(e){return 48===e?"\0":97===e?"":98===e?"\b":116===e?"\t":9===e?"\t":110===e?"\n":118===e?"\v":102===e?"\f":114===e?"\r":101===e?"":32===e?" ":34===e?'"':47===e?"/":92===e?"\\":78===e?"…":95===e?" ":76===e?"\u2028":80===e?"\u2029":""}function p(e){return e<=65535?String.fromCharCode(e):String.fromCharCode((e-65536>>10)+55296,(e-65536&1023)+56320)}function f(e,t){this.input=e,this.filename=t.filename||null,this.schema=t.schema||K,this.onWarning=t.onWarning||null,this.legacy=t.legacy||!1,this.json=t.json||!1,this.listener=t.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=e.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.documents=[]}function h(e,t){return new q(t,new U(e.filename,e.input,e.position,e.line,e.position-e.lineStart))}function d(e,t){throw h(e,t)}function m(e,t){e.onWarning&&e.onWarning.call(null,h(e,t))}function v(e,t,n,r){var i,o,a,s;if(t1&&(e.result+=z.repeat("\n",t-1))}function k(e,t,n){var s,u,c,l,p,f,h,d,m,y=e.kind,g=e.result;if(m=e.input.charCodeAt(e.position),o(m)||a(m)||35===m||38===m||42===m||33===m||124===m||62===m||39===m||34===m||37===m||64===m||96===m)return!1;if((63===m||45===m)&&(u=e.input.charCodeAt(e.position+1),o(u)||n&&a(u)))return!1;for(e.kind="scalar",e.result="",c=l=e.position,p=!1;0!==m;){if(58===m){if(u=e.input.charCodeAt(e.position+1),o(u)||n&&a(u))break}else if(35===m){if(s=e.input.charCodeAt(e.position-1),o(s))break}else{if(e.position===e.lineStart&&x(e)||n&&a(m))break;if(r(m)){if(f=e.line,h=e.lineStart,d=e.lineIndent,b(e,!1,-1),e.lineIndent>=t){p=!0,m=e.input.charCodeAt(e.position);continue}e.position=l,e.line=f,e.lineStart=h,e.lineIndent=d;break}}p&&(v(e,c,l,!1),w(e,e.line-f),c=l=e.position,p=!1),i(m)||(l=e.position+1),m=e.input.charCodeAt(++e.position)}return v(e,c,l,!1),!!e.result||(e.kind=y,e.result=g,!1)}function S(e,t){var n,i,o;if(n=e.input.charCodeAt(e.position),39!==n)return!1;for(e.kind="scalar",e.result="",e.position++,i=o=e.position;0!==(n=e.input.charCodeAt(e.position));)if(39===n){if(v(e,i,e.position,!0),n=e.input.charCodeAt(++e.position),39!==n)return!0;i=e.position,e.position++,o=e.position}else r(n)?(v(e,i,o,!0),w(e,b(e,!1,t)),i=o=e.position):e.position===e.lineStart&&x(e)?d(e,"unexpected end of the document within a single quoted scalar"):(e.position++,o=e.position);d(e,"unexpected end of the stream within a single quoted scalar")}function E(e,t){var n,i,o,a,c,l;if(l=e.input.charCodeAt(e.position),34!==l)return!1;for(e.kind="scalar",e.result="",e.position++,n=i=e.position;0!==(l=e.input.charCodeAt(e.position));){if(34===l)return v(e,n,e.position,!0),e.position++,!0;if(92===l){if(v(e,n,e.position,!0),l=e.input.charCodeAt(++e.position),r(l))b(e,!1,t);else if(l<256&&ie[l])e.result+=oe[l],e.position++;else if((c=u(l))>0){for(o=c,a=0;o>0;o--)l=e.input.charCodeAt(++e.position),(c=s(l))>=0?a=(a<<4)+c:d(e,"expected hexadecimal character");e.result+=p(a),e.position++}else d(e,"unknown escape sequence");n=i=e.position}else r(l)?(v(e,n,i,!0),w(e,b(e,!1,t)),n=i=e.position):e.position===e.lineStart&&x(e)?d(e,"unexpected end of the document within a double quoted scalar"):(e.position++,i=e.position)}d(e,"unexpected end of the stream within a double quoted scalar")}function C(e,t){var n,r,i,a,s,u,c,l,p,f,h,m=!0,v=e.tag,y=e.anchor,_={};if(h=e.input.charCodeAt(e.position),91===h)a=93,c=!1,r=[];else{if(123!==h)return!1;a=125,c=!0,r={}}for(null!==e.anchor&&(e.anchorMap[e.anchor]=r),h=e.input.charCodeAt(++e.position);0!==h;){if(b(e,!0,t),h=e.input.charCodeAt(e.position),h===a)return e.position++,e.tag=v,e.anchor=y,e.kind=c?"mapping":"sequence",e.result=r,!0;m||d(e,"missed comma between flow collection entries"),p=l=f=null,s=u=!1,63===h&&(i=e.input.charCodeAt(e.position+1),o(i)&&(s=u=!0,e.position++,b(e,!0,t))),n=e.line,I(e,t,H,!1,!0),p=e.tag,l=e.result, +b(e,!0,t),h=e.input.charCodeAt(e.position),!u&&e.line!==n||58!==h||(s=!0,h=e.input.charCodeAt(++e.position),b(e,!0,t),I(e,t,H,!1,!0),f=e.result),c?g(e,r,_,p,l,f):s?r.push(g(e,null,_,p,l,f)):r.push(l),b(e,!0,t),h=e.input.charCodeAt(e.position),44===h?(m=!0,h=e.input.charCodeAt(++e.position)):m=!1}d(e,"unexpected end of the stream within a flow collection")}function A(e,t){var n,o,a,s,u=Y,l=!1,p=!1,f=t,h=0,m=!1;if(s=e.input.charCodeAt(e.position),124===s)o=!1;else{if(62!==s)return!1;o=!0}for(e.kind="scalar",e.result="";0!==s;)if(s=e.input.charCodeAt(++e.position),43===s||45===s)Y===u?u=43===s?Z:$:d(e,"repeat of a chomping mode identifier");else{if(!((a=c(s))>=0))break;0===a?d(e,"bad explicit indentation width of a block scalar; it cannot be less than one"):p?d(e,"repeat of an indentation width identifier"):(f=t+a-1,p=!0)}if(i(s)){do s=e.input.charCodeAt(++e.position);while(i(s));if(35===s)do s=e.input.charCodeAt(++e.position);while(!r(s)&&0!==s)}for(;0!==s;){for(_(e),e.lineIndent=0,s=e.input.charCodeAt(e.position);(!p||e.lineIndentf&&(f=e.lineIndent),r(s))h++;else{if(e.lineIndentt)&&0!==i)d(e,"bad indentation of a sequence entry");else if(e.lineIndentt)&&(I(e,t,X,!0,a)&&(_?v=e.result:y=e.result),_||(g(e,f,h,m,v,y,s,u),m=v=y=null),b(e,!0,-1),c=e.input.charCodeAt(e.position)),e.lineIndent>t&&0!==c)d(e,"bad indentation of a mapping entry");else if(e.lineIndentt?h=1:e.lineIndent===t?h=0:e.lineIndentt?h=1:e.lineIndent===t?h=0:e.lineIndent tag; it should be "'+l.kind+'", not "'+e.kind+'"'),l.resolve(e.result)?(e.result=l.construct(e.result),null!==e.anchor&&(e.anchorMap[e.anchor]=e.result)):d(e,"cannot resolve a node with !<"+e.tag+"> explicit tag")):d(e,"unknown tag !<"+e.tag+">");return null!==e.listener&&e.listener("close",e),null!==e.tag||null!==e.anchor||v}function N(e){var t,n,a,s,u=e.position,c=!1;for(e.version=null,e.checkLineBreaks=e.legacy,e.tagMap={},e.anchorMap={};0!==(s=e.input.charCodeAt(e.position))&&(b(e,!0,-1),s=e.input.charCodeAt(e.position),!(e.lineIndent>0||37!==s));){for(c=!0,s=e.input.charCodeAt(++e.position),t=e.position;0!==s&&!o(s);)s=e.input.charCodeAt(++e.position);for(n=e.input.slice(t,e.position),a=[],n.length<1&&d(e,"directive name must not be less than one character in length");0!==s;){for(;i(s);)s=e.input.charCodeAt(++e.position);if(35===s){do s=e.input.charCodeAt(++e.position);while(0!==s&&!r(s));break}if(r(s))break;for(t=e.position;0!==s&&!o(s);)s=e.input.charCodeAt(++e.position);a.push(e.input.slice(t,e.position))}0!==s&&_(e),V.call(se,n)?se[n](e,n,a):m(e,'unknown document directive "'+n+'"')}return b(e,!0,-1),0===e.lineIndent&&45===e.input.charCodeAt(e.position)&&45===e.input.charCodeAt(e.position+1)&&45===e.input.charCodeAt(e.position+2)?(e.position+=3,b(e,!0,-1)):c&&d(e,"directives end mark is expected"),I(e,e.lineIndent-1,X,!1,!0),b(e,!0,-1),e.checkLineBreaks&&ee.test(e.input.slice(u,e.position))&&m(e,"non-ASCII line breaks are interpreted as content"),e.documents.push(e.result),e.position===e.lineStart&&x(e)?void(46===e.input.charCodeAt(e.position)&&(e.position+=3,b(e,!0,-1))):void(e.position0&&"\0\r\n…\u2028\u2029".indexOf(this.buffer.charAt(r-1))===-1;)if(r-=1,this.position-r>t/2-1){n=" ... ",r+=5;break}for(o="",a=this.position;at/2-1){o=" ... ",a-=5;break}return s=this.buffer.slice(r,a),i.repeat(" ",e)+n+s+o+"\n"+i.repeat(" ",e+this.position-r+n.length)+"^"},r.prototype.toString=function(e){var t,n="";return this.name&&(n+='in "'+this.name+'" '),n+="at line "+(this.line+1)+", column "+(this.column+1),e||(t=this.getSnippet(),t&&(n+=":\n"+t)),n},e.exports=r},function(e,t,n){"use strict";var r=n(455);e.exports=new r({include:[n(457)],implicit:[n(467),n(468)],explicit:[n(469),n(470),n(471),n(472)]})},function(e,t,n){"use strict";function r(e,t,n){var i=[];return e.include.forEach(function(e){n=r(e,t,n)}),e[t].forEach(function(e){n.forEach(function(t,n){t.tag===e.tag&&t.kind===e.kind&&i.push(n)}),n.push(e)}),n.filter(function(e,t){return i.indexOf(t)===-1})}function i(){function e(e){r[e.kind][e.tag]=r.fallback[e.tag]=e}var t,n,r={scalar:{},sequence:{},mapping:{},fallback:{}};for(t=0,n=arguments.length;t=0&&(t=t.slice(1)),".inf"===t?1===n?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:".nan"===t?NaN:t.indexOf(":")>=0?(t.split(":").forEach(function(e){i.unshift(parseFloat(e,10))}),t=0,r=1,i.forEach(function(e){t+=e*r,r*=60}),n*t):n*parseFloat(t,10)}function o(e,t){var n;if(isNaN(e))switch(t){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===e)switch(t){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===e)switch(t){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(s.isNegativeZero(e))return"-0.0";return n=e.toString(10),l.test(n)?n.replace("e",".e"):n}function a(e){return"[object Number]"===Object.prototype.toString.call(e)&&(e%1!==0||s.isNegativeZero(e))}var s=n(451),u=n(456),c=new RegExp("^(?:[-+]?(?:0|[1-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$"),l=/^[-+]?[0-9]+e/;e.exports=new u("tag:yaml.org,2002:float",{kind:"scalar",resolve:r,construct:i,predicate:a,represent:o,defaultStyle:"lowercase"})},function(e,t,n){"use strict";function r(e){return null!==e&&(null!==s.exec(e)||null!==u.exec(e))}function i(e){var t,n,r,i,o,a,c,l,p,f,h=0,d=null;if(t=s.exec(e),null===t&&(t=u.exec(e)),null===t)throw new Error("Date resolve error");if(n=+t[1],r=+t[2]-1,i=+t[3],!t[4])return new Date(Date.UTC(n,r,i));if(o=+t[4],a=+t[5],c=+t[6],t[7]){for(h=t[7].slice(0,3);h.length<3;)h+="0";h=+h}return t[9]&&(l=+t[10],p=+(t[11]||0),d=6e4*(60*l+p),"-"===t[9]&&(d=-d)),f=new Date(Date.UTC(n,r,i,o,a,c,h)),d&&f.setTime(f.getTime()-d),f}function o(e){return e.toISOString()}var a=n(456),s=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),u=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");e.exports=new a("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:r,construct:i,instanceOf:Date,represent:o})},function(e,t,n){"use strict";function r(e){return"<<"===e||null===e}var i=n(456);e.exports=new i("tag:yaml.org,2002:merge",{kind:"scalar",resolve:r})},function(e,t,n){function r(e){if(null===e)return!1;var t,n,r=0,i=e.length,o=c;for(n=0;n64)){if(t<0)return!1;r+=6}return r%8===0}function i(e){var t,n,r=e.replace(/[\r\n=]/g,""),i=r.length,o=c,a=0,u=[];for(t=0;t>16&255),u.push(a>>8&255),u.push(255&a)),a=a<<6|o.indexOf(r.charAt(t));return n=i%4*6,0===n?(u.push(a>>16&255),u.push(a>>8&255),u.push(255&a)):18===n?(u.push(a>>10&255),u.push(a>>2&255)):12===n&&u.push(a>>4&255),s?s.from?s.from(u):new s(u):u}function o(e){var t,n,r="",i=0,o=e.length,a=c;for(t=0;t>18&63],r+=a[i>>12&63],r+=a[i>>6&63],r+=a[63&i]),i=(i<<8)+e[t];return n=o%3,0===n?(r+=a[i>>18&63],r+=a[i>>12&63],r+=a[i>>6&63],r+=a[63&i]):2===n?(r+=a[i>>10&63],r+=a[i>>4&63],r+=a[i<<2&63],r+=a[64]):1===n&&(r+=a[i>>2&63],r+=a[i<<4&63],r+=a[64],r+=a[64]),r}function a(e){return s&&s.isBuffer(e)}var s;try{s=n(132).Buffer}catch(e){}var u=n(456),c="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r";e.exports=new u("tag:yaml.org,2002:binary",{kind:"scalar",resolve:r,construct:i,predicate:a,represent:o})},function(e,t,n){"use strict";function r(e){if(null===e)return!0;var t,n,r,i,o,u=[],c=e;for(t=0,n=c.length;t3)return!1;if("/"!==t[t.length-r.length-1])return!1}return!0}function i(e){var t=e,n=/\/([gim]*)$/.exec(e),r="";return"/"===t[0]&&(n&&(r=n[1]),t=t.slice(1,t.length-r.length-1)),new RegExp(t,r)}function o(e){var t="/"+e.source+"/";return e.global&&(t+="g"),e.multiline&&(t+="m"),e.ignoreCase&&(t+="i"),t}function a(e){return"[object RegExp]"===Object.prototype.toString.call(e)}var s=n(456);e.exports=new s("tag:yaml.org,2002:js/regexp",{kind:"scalar",resolve:r,construct:i,predicate:a,represent:o})},function(e,t,n){function r(e){if(null===e)return!1;try{var t="("+e+")",n=s.parse(t,{range:!0});return"Program"===n.type&&1===n.body.length&&"ExpressionStatement"===n.body[0].type&&"FunctionExpression"===n.body[0].expression.type}catch(e){return!1}}function i(e){var t,n="("+e+")",r=s.parse(n,{range:!0}),i=[];if("Program"!==r.type||1!==r.body.length||"ExpressionStatement"!==r.body[0].type||"FunctionExpression"!==r.body[0].expression.type)throw new Error("Failed to resolve function");return r.body[0].expression.params.forEach(function(e){i.push(e.name)}),t=r.body[0].expression.body.range,new Function(i,n.slice(t[0]+1,t[1]-1))}function o(e){return e.toString()}function a(e){return"[object Function]"===Object.prototype.toString.call(e)}var s;try{s=n(477)}catch(e){"undefined"!=typeof window&&(s=window.esprima)}var u=n(456);e.exports=new u("tag:yaml.org,2002:js/function",{kind:"scalar",resolve:r,construct:i,predicate:a,represent:o})},function(e,t,n){!function(t,n){e.exports=n()}(this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){"use strict";function r(e,t,n){var r=null,i=function(e,t){n&&n(e,t),r&&r.visit(e,t)},u="function"==typeof n?i:null,c=!1;if(t){c="boolean"==typeof t.comment&&t.comment;var l="boolean"==typeof t.attachComment&&t.attachComment;(c||l)&&(r=new o.CommentHandler,r.attach=l,t.comment=!0,u=i)}var p;p=t&&"boolean"==typeof t.jsx&&t.jsx?new s.JSXParser(e,t,u):new a.Parser(e,t,u);var f=p.parseProgram();return c&&(f.comments=r.comments),p.config.tokens&&(f.tokens=p.tokens),p.config.tolerant&&(f.errors=p.errorHandler.errors),f}function i(e,t,n){var r,i=new u.Tokenizer(e,t);r=[];try{for(;;){var o=i.getNextToken();if(!o)break;n&&(o=n(o)),r.push(o)}}catch(e){i.errorHandler.tolerate(e)}return i.errorHandler.tolerant&&(r.errors=i.errors()),r}var o=n(1),a=n(3),s=n(11),u=n(15);t.parse=r,t.tokenize=i;var c=n(2);t.Syntax=c.Syntax,t.version="3.1.3"},function(e,t,n){"use strict";var r=n(2),i=function(){function e(){this.attach=!1,this.comments=[],this.stack=[],this.leading=[],this.trailing=[]}return e.prototype.insertInnerComments=function(e,t){if(e.type===r.Syntax.BlockStatement&&0===e.body.length){for(var n=[],i=this.leading.length-1;i>=0;--i){var o=this.leading[i];t.end.offset>=o.start&&(n.unshift(o.comment),this.leading.splice(i,1),this.trailing.splice(i,1))}n.length&&(e.innerComments=n)}},e.prototype.findTrailingComments=function(e,t){var n=[];if(this.trailing.length>0){for(var r=this.trailing.length-1;r>=0;--r){var i=this.trailing[r];i.start>=t.end.offset&&n.unshift(i.comment)}return this.trailing.length=0,n}var o=this.stack[this.stack.length-1];if(o&&o.node.trailingComments){var a=o.node.trailingComments[0];a&&a.range[0]>=t.end.offset&&(n=o.node.trailingComments,delete o.node.trailingComments)}return n},e.prototype.findLeadingComments=function(e,t){for(var n,r=[];this.stack.length>0;){var i=this.stack[this.stack.length-1];if(!(i&&i.start>=t.start.offset))break;n=this.stack.pop().node}if(n){for(var o=n.leadingComments?n.leadingComments.length:0,a=o-1;a>=0;--a){var s=n.leadingComments[a];s.range[1]<=t.start.offset&&(r.unshift(s),n.leadingComments.splice(a,1))}return n.leadingComments&&0===n.leadingComments.length&&delete n.leadingComments,r}for(var a=this.leading.length-1;a>=0;--a){var i=this.leading[a];i.start<=t.start.offset&&(r.unshift(i.comment),this.leading.splice(a,1))}return r},e.prototype.visitNode=function(e,t){if(!(e.type===r.Syntax.Program&&e.body.length>0)){this.insertInnerComments(e,t);var n=this.findTrailingComments(e,t),i=this.findLeadingComments(e,t);i.length>0&&(e.leadingComments=i),n.length>0&&(e.trailingComments=n),this.stack.push({node:e,start:t.start.offset})}},e.prototype.visitComment=function(e,t){var n="L"===e.type[0]?"Line":"Block",r={type:n,value:e.value};if(e.range&&(r.range=e.range),e.loc&&(r.loc=e.loc),this.comments.push(r),this.attach){var i={comment:{type:n,value:e.value,range:[t.start.offset,t.end.offset]},start:t.start.offset};e.loc&&(i.comment.loc=e.loc),e.type=n,this.leading.push(i),this.trailing.push(i)}},e.prototype.visit=function(e,t){"LineComment"===e.type?this.visitComment(e,t):"BlockComment"===e.type?this.visitComment(e,t):this.attach&&this.visitNode(e,t)},e}();t.CommentHandler=i},function(e,t){"use strict";t.Syntax={AssignmentExpression:"AssignmentExpression",AssignmentPattern:"AssignmentPattern",ArrayExpression:"ArrayExpression",ArrayPattern:"ArrayPattern",ArrowFunctionExpression:"ArrowFunctionExpression",BlockStatement:"BlockStatement",BinaryExpression:"BinaryExpression",BreakStatement:"BreakStatement",CallExpression:"CallExpression",CatchClause:"CatchClause",ClassBody:"ClassBody",ClassDeclaration:"ClassDeclaration",ClassExpression:"ClassExpression",ConditionalExpression:"ConditionalExpression",ContinueStatement:"ContinueStatement",DoWhileStatement:"DoWhileStatement",DebuggerStatement:"DebuggerStatement",EmptyStatement:"EmptyStatement",ExportAllDeclaration:"ExportAllDeclaration",ExportDefaultDeclaration:"ExportDefaultDeclaration",ExportNamedDeclaration:"ExportNamedDeclaration",ExportSpecifier:"ExportSpecifier",ExpressionStatement:"ExpressionStatement",ForStatement:"ForStatement",ForOfStatement:"ForOfStatement",ForInStatement:"ForInStatement",FunctionDeclaration:"FunctionDeclaration",FunctionExpression:"FunctionExpression",Identifier:"Identifier",IfStatement:"IfStatement",ImportDeclaration:"ImportDeclaration",ImportDefaultSpecifier:"ImportDefaultSpecifier",ImportNamespaceSpecifier:"ImportNamespaceSpecifier",ImportSpecifier:"ImportSpecifier",Literal:"Literal",LabeledStatement:"LabeledStatement",LogicalExpression:"LogicalExpression",MemberExpression:"MemberExpression",MetaProperty:"MetaProperty",MethodDefinition:"MethodDefinition",NewExpression:"NewExpression",ObjectExpression:"ObjectExpression",ObjectPattern:"ObjectPattern",Program:"Program",Property:"Property",RestElement:"RestElement",ReturnStatement:"ReturnStatement",SequenceExpression:"SequenceExpression",SpreadElement:"SpreadElement",Super:"Super",SwitchCase:"SwitchCase",SwitchStatement:"SwitchStatement",TaggedTemplateExpression:"TaggedTemplateExpression",TemplateElement:"TemplateElement",TemplateLiteral:"TemplateLiteral",ThisExpression:"ThisExpression",ThrowStatement:"ThrowStatement",TryStatement:"TryStatement",UnaryExpression:"UnaryExpression",UpdateExpression:"UpdateExpression",VariableDeclaration:"VariableDeclaration",VariableDeclarator:"VariableDeclarator",WhileStatement:"WhileStatement",WithStatement:"WithStatement",YieldExpression:"YieldExpression"}},function(e,t,n){"use strict";var r=n(4),i=n(5),o=n(6),a=n(7),s=n(8),u=n(2),c=n(10),l="ArrowParameterPlaceHolder",p=function(){function e(e,t,n){void 0===t&&(t={}),this.config={range:"boolean"==typeof t.range&&t.range,loc:"boolean"==typeof t.loc&&t.loc,source:null,tokens:"boolean"==typeof t.tokens&&t.tokens,comment:"boolean"==typeof t.comment&&t.comment,tolerant:"boolean"==typeof t.tolerant&&t.tolerant},this.config.loc&&t.source&&null!==t.source&&(this.config.source=String(t.source)),this.delegate=n,this.errorHandler=new o.ErrorHandler,this.errorHandler.tolerant=this.config.tolerant,this.scanner=new s.Scanner(e,this.errorHandler),this.scanner.trackComment=this.config.comment,this.operatorPrecedence={")":0,";":0,",":0,"=":0,"]":0,"||":1,"&&":2,"|":3,"^":4,"&":5,"==":6,"!=":6,"===":6,"!==":6,"<":7,">":7,"<=":7,">=":7,"<<":8,">>":8,">>>":8,"+":9,"-":9,"*":11,"/":11,"%":11},this.sourceType=t&&"module"===t.sourceType?"module":"script",this.lookahead=null,this.hasLineTerminator=!1,this.context={allowIn:!0,allowYield:!0,firstCoverInitializedNameError:null,isAssignmentTarget:!1,isBindingElement:!1,inFunctionBody:!1,inIteration:!1,inSwitch:!1,labelSet:{},strict:"module"===this.sourceType},this.tokens=[],this.startMarker={index:0,lineNumber:this.scanner.lineNumber, +lineStart:0},this.lastMarker={index:0,lineNumber:this.scanner.lineNumber,lineStart:0},this.nextToken(),this.lastMarker={index:this.scanner.index,lineNumber:this.scanner.lineNumber,lineStart:this.scanner.lineStart}}return e.prototype.throwError=function(e){for(var t=[],n=1;n0&&this.delegate)for(var t=0;t>="===e||">>>="===e||"&="===e||"^="===e||"|="===e},e.prototype.isolateCoverGrammar=function(e){var t=this.context.isBindingElement,n=this.context.isAssignmentTarget,r=this.context.firstCoverInitializedNameError;this.context.isBindingElement=!0,this.context.isAssignmentTarget=!0,this.context.firstCoverInitializedNameError=null;var i=e.call(this);return null!==this.context.firstCoverInitializedNameError&&this.throwUnexpectedToken(this.context.firstCoverInitializedNameError),this.context.isBindingElement=t,this.context.isAssignmentTarget=n,this.context.firstCoverInitializedNameError=r,i},e.prototype.inheritCoverGrammar=function(e){var t=this.context.isBindingElement,n=this.context.isAssignmentTarget,r=this.context.firstCoverInitializedNameError;this.context.isBindingElement=!0,this.context.isAssignmentTarget=!0,this.context.firstCoverInitializedNameError=null;var i=e.call(this);return this.context.isBindingElement=this.context.isBindingElement&&t,this.context.isAssignmentTarget=this.context.isAssignmentTarget&&n,this.context.firstCoverInitializedNameError=r||this.context.firstCoverInitializedNameError,i},e.prototype.consumeSemicolon=function(){this.match(";")?this.nextToken():this.hasLineTerminator||(this.lookahead.type===a.Token.EOF||this.match("}")||this.throwUnexpectedToken(this.lookahead),this.lastMarker.index=this.startMarker.index,this.lastMarker.lineNumber=this.startMarker.lineNumber,this.lastMarker.lineStart=this.startMarker.lineStart)},e.prototype.parsePrimaryExpression=function(){var e,t,n,r,o=this.createNode();switch(this.lookahead.type){case a.Token.Identifier:"module"===this.sourceType&&"await"===this.lookahead.value&&this.tolerateUnexpectedToken(this.lookahead),e=this.finalize(o,new c.Identifier(this.nextToken().value));break;case a.Token.NumericLiteral:case a.Token.StringLiteral:this.context.strict&&this.lookahead.octal&&this.tolerateUnexpectedToken(this.lookahead,i.Messages.StrictOctalLiteral),this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1,n=this.nextToken(),r=this.getTokenRaw(n),e=this.finalize(o,new c.Literal(n.value,r));break;case a.Token.BooleanLiteral:this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1,n=this.nextToken(),n.value="true"===n.value,r=this.getTokenRaw(n),e=this.finalize(o,new c.Literal(n.value,r));break;case a.Token.NullLiteral:this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1,n=this.nextToken(),n.value=null,r=this.getTokenRaw(n),e=this.finalize(o,new c.Literal(n.value,r));break;case a.Token.Template:e=this.parseTemplateLiteral();break;case a.Token.Punctuator:switch(t=this.lookahead.value){case"(":this.context.isBindingElement=!1,e=this.inheritCoverGrammar(this.parseGroupExpression);break;case"[":e=this.inheritCoverGrammar(this.parseArrayInitializer);break;case"{":e=this.inheritCoverGrammar(this.parseObjectInitializer);break;case"/":case"/=":this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1,this.scanner.index=this.startMarker.index,n=this.nextRegexToken(),r=this.getTokenRaw(n),e=this.finalize(o,new c.RegexLiteral(n.value,r,n.regex));break;default:this.throwUnexpectedToken(this.nextToken())}break;case a.Token.Keyword:!this.context.strict&&this.context.allowYield&&this.matchKeyword("yield")?e=this.parseIdentifierName():!this.context.strict&&this.matchKeyword("let")?e=this.finalize(o,new c.Identifier(this.nextToken().value)):(this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1,this.matchKeyword("function")?e=this.parseFunctionExpression():this.matchKeyword("this")?(this.nextToken(),e=this.finalize(o,new c.ThisExpression)):this.matchKeyword("class")?e=this.parseClassExpression():this.throwUnexpectedToken(this.nextToken()));break;default:this.throwUnexpectedToken(this.nextToken())}return e},e.prototype.parseSpreadElement=function(){var e=this.createNode();this.expect("...");var t=this.inheritCoverGrammar(this.parseAssignmentExpression);return this.finalize(e,new c.SpreadElement(t))},e.prototype.parseArrayInitializer=function(){var e=this.createNode(),t=[];for(this.expect("[");!this.match("]");)if(this.match(","))this.nextToken(),t.push(null);else if(this.match("...")){var n=this.parseSpreadElement();this.match("]")||(this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1,this.expect(",")),t.push(n)}else t.push(this.inheritCoverGrammar(this.parseAssignmentExpression)),this.match("]")||this.expect(",");return this.expect("]"),this.finalize(e,new c.ArrayExpression(t))},e.prototype.parsePropertyMethod=function(e){this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1;var t=this.context.strict,n=this.isolateCoverGrammar(this.parseFunctionSourceElements);return this.context.strict&&e.firstRestricted&&this.tolerateUnexpectedToken(e.firstRestricted,e.message),this.context.strict&&e.stricted&&this.tolerateUnexpectedToken(e.stricted,e.message),this.context.strict=t,n},e.prototype.parsePropertyMethodFunction=function(){var e=!1,t=this.createNode(),n=this.context.allowYield;this.context.allowYield=!1;var r=this.parseFormalParameters(),i=this.parsePropertyMethod(r);return this.context.allowYield=n,this.finalize(t,new c.FunctionExpression(null,r.params,i,e))},e.prototype.parseObjectPropertyKey=function(){var e=this.createNode(),t=this.nextToken(),n=null;switch(t.type){case a.Token.StringLiteral:case a.Token.NumericLiteral:this.context.strict&&t.octal&&this.tolerateUnexpectedToken(t,i.Messages.StrictOctalLiteral);var r=this.getTokenRaw(t);n=this.finalize(e,new c.Literal(t.value,r));break;case a.Token.Identifier:case a.Token.BooleanLiteral:case a.Token.NullLiteral:case a.Token.Keyword:n=this.finalize(e,new c.Identifier(t.value));break;case a.Token.Punctuator:"["===t.value?(n=this.isolateCoverGrammar(this.parseAssignmentExpression),this.expect("]")):this.throwUnexpectedToken(t);break;default:this.throwUnexpectedToken(t)}return n},e.prototype.isPropertyKey=function(e,t){return e.type===u.Syntax.Identifier&&e.name===t||e.type===u.Syntax.Literal&&e.value===t},e.prototype.parseObjectProperty=function(e){var t,n,r,o=this.createNode(),s=this.lookahead,u=!1,l=!1,p=!1;s.type===a.Token.Identifier?(this.nextToken(),n=this.finalize(o,new c.Identifier(s.value))):this.match("*")?this.nextToken():(u=this.match("["),n=this.parseObjectPropertyKey());var f=this.qualifiedPropertyName(this.lookahead);if(s.type===a.Token.Identifier&&"get"===s.value&&f)t="get",u=this.match("["),n=this.parseObjectPropertyKey(),this.context.allowYield=!1,r=this.parseGetterMethod();else if(s.type===a.Token.Identifier&&"set"===s.value&&f)t="set",u=this.match("["),n=this.parseObjectPropertyKey(),r=this.parseSetterMethod();else if(s.type===a.Token.Punctuator&&"*"===s.value&&f)t="init",u=this.match("["),n=this.parseObjectPropertyKey(),r=this.parseGeneratorMethod(),l=!0;else if(n||this.throwUnexpectedToken(this.lookahead),t="init",this.match(":"))!u&&this.isPropertyKey(n,"__proto__")&&(e.value&&this.tolerateError(i.Messages.DuplicateProtoProperty),e.value=!0),this.nextToken(),r=this.inheritCoverGrammar(this.parseAssignmentExpression);else if(this.match("("))r=this.parsePropertyMethodFunction(),l=!0;else if(s.type===a.Token.Identifier){var h=this.finalize(o,new c.Identifier(s.value));if(this.match("=")){this.context.firstCoverInitializedNameError=this.lookahead,this.nextToken(),p=!0;var d=this.isolateCoverGrammar(this.parseAssignmentExpression);r=this.finalize(o,new c.AssignmentPattern(h,d))}else p=!0,r=h}else this.throwUnexpectedToken(this.nextToken());return this.finalize(o,new c.Property(t,n,u,r,l,p))},e.prototype.parseObjectInitializer=function(){var e=this.createNode();this.expect("{");for(var t=[],n={value:!1};!this.match("}");)t.push(this.parseObjectProperty(n)),this.match("}")||this.expectCommaSeparator();return this.expect("}"),this.finalize(e,new c.ObjectExpression(t))},e.prototype.parseTemplateHead=function(){r.assert(this.lookahead.head,"Template literal must start with a template head");var e=this.createNode(),t=this.nextToken(),n={raw:t.value.raw,cooked:t.value.cooked};return this.finalize(e,new c.TemplateElement(n,t.tail))},e.prototype.parseTemplateElement=function(){this.lookahead.type!==a.Token.Template&&this.throwUnexpectedToken();var e=this.createNode(),t=this.nextToken(),n={raw:t.value.raw,cooked:t.value.cooked};return this.finalize(e,new c.TemplateElement(n,t.tail))},e.prototype.parseTemplateLiteral=function(){var e=this.createNode(),t=[],n=[],r=this.parseTemplateHead();for(n.push(r);!r.tail;)t.push(this.parseExpression()),r=this.parseTemplateElement(),n.push(r);return this.finalize(e,new c.TemplateLiteral(n,t))},e.prototype.reinterpretExpressionAsPattern=function(e){switch(e.type){case u.Syntax.Identifier:case u.Syntax.MemberExpression:case u.Syntax.RestElement:case u.Syntax.AssignmentPattern:break;case u.Syntax.SpreadElement:e.type=u.Syntax.RestElement,this.reinterpretExpressionAsPattern(e.argument);break;case u.Syntax.ArrayExpression:e.type=u.Syntax.ArrayPattern;for(var t=0;t")||this.expect("=>"),e={type:l,params:[]};else{var t=this.lookahead,n=[];if(this.match("..."))e=this.parseRestElement(n),this.expect(")"),this.match("=>")||this.expect("=>"),e={type:l,params:[e]};else{var r=!1;if(this.context.isBindingElement=!0,e=this.inheritCoverGrammar(this.parseAssignmentExpression),this.match(",")){var i=[];for(this.context.isAssignmentTarget=!1,i.push(e);this.startMarker.index")||this.expect("=>"),this.context.isBindingElement=!1;for(var o=0;o")&&(e.type===u.Syntax.Identifier&&"yield"===e.name&&(r=!0,e={type:l,params:[e]}),!r)){if(this.context.isBindingElement||this.throwUnexpectedToken(this.lookahead),e.type===u.Syntax.SequenceExpression)for(var o=0;o0){this.nextToken(),n.prec=r,this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1;for(var i=[e,this.lookahead],o=t,a=this.isolateCoverGrammar(this.parseExponentiationExpression),s=[o,n,a];;){if(r=this.binaryPrecedence(this.lookahead),r<=0)break;for(;s.length>2&&r<=s[s.length-2].prec;){a=s.pop();var u=s.pop().value;o=s.pop(),i.pop();var l=this.startNode(i[i.length-1]);s.push(this.finalize(l,new c.BinaryExpression(u,o,a)))}n=this.nextToken(),n.prec=r,s.push(n),i.push(this.lookahead),s.push(this.isolateCoverGrammar(this.parseExponentiationExpression))}var p=s.length-1;for(t=s[p],i.pop();p>1;){var l=this.startNode(i.pop());t=this.finalize(l,new c.BinaryExpression(s[p-1].value,s[p-2],t)),p-=2}}return t},e.prototype.parseConditionalExpression=function(){var e=this.lookahead,t=this.inheritCoverGrammar(this.parseBinaryExpression);if(this.match("?")){this.nextToken();var n=this.context.allowIn;this.context.allowIn=!0;var r=this.isolateCoverGrammar(this.parseAssignmentExpression);this.context.allowIn=n,this.expect(":");var i=this.isolateCoverGrammar(this.parseAssignmentExpression);t=this.finalize(this.startNode(e),new c.ConditionalExpression(t,r,i)),this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1}return t},e.prototype.checkPatternParam=function(e,t){switch(t.type){case u.Syntax.Identifier:this.validateParam(e,t,t.name);break;case u.Syntax.RestElement:this.checkPatternParam(e,t.argument);break;case u.Syntax.AssignmentPattern:this.checkPatternParam(e,t.left);break;case u.Syntax.ArrayPattern:for(var n=0;n")){this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1;var r=this.reinterpretAsCoverFormalsList(e);if(r){this.hasLineTerminator&&this.tolerateUnexpectedToken(this.lookahead),this.context.firstCoverInitializedNameError=null;var o=this.context.strict,a=this.context.allowYield;this.context.allowYield=!0;var s=this.startNode(t);this.expect("=>");var p=this.match("{")?this.parseFunctionSourceElements():this.isolateCoverGrammar(this.parseAssignmentExpression),f=p.type!==u.Syntax.BlockStatement;this.context.strict&&r.firstRestricted&&this.throwUnexpectedToken(r.firstRestricted,r.message),this.context.strict&&r.stricted&&this.tolerateUnexpectedToken(r.stricted,r.message),e=this.finalize(s,new c.ArrowFunctionExpression(r.params,p,f)),this.context.strict=o,this.context.allowYield=a}}else if(this.matchAssign()){if(this.context.isAssignmentTarget||this.tolerateError(i.Messages.InvalidLHSInAssignment),this.context.strict&&e.type===u.Syntax.Identifier){var h=e;this.scanner.isRestrictedWord(h.name)&&this.tolerateUnexpectedToken(n,i.Messages.StrictLHSAssignment),this.scanner.isStrictModeReservedWord(h.name)&&this.tolerateUnexpectedToken(n,i.Messages.StrictReservedWord)}this.match("=")?this.reinterpretExpressionAsPattern(e):(this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1),n=this.nextToken();var d=this.isolateCoverGrammar(this.parseAssignmentExpression);e=this.finalize(this.startNode(t),new c.AssignmentExpression(n.value,e,d)),this.context.firstCoverInitializedNameError=null}}return e},e.prototype.parseExpression=function(){var e=this.lookahead,t=this.isolateCoverGrammar(this.parseAssignmentExpression);if(this.match(",")){var n=[];for(n.push(t);this.startMarker.index",t.TokenName[n.Identifier]="Identifier",t.TokenName[n.Keyword]="Keyword",t.TokenName[n.NullLiteral]="Null",t.TokenName[n.NumericLiteral]="Numeric", +t.TokenName[n.Punctuator]="Punctuator",t.TokenName[n.StringLiteral]="String",t.TokenName[n.RegularExpression]="RegularExpression",t.TokenName[n.Template]="Template"},function(e,t,n){"use strict";function r(e){return"0123456789abcdef".indexOf(e.toLowerCase())}function i(e){return"01234567".indexOf(e)}var o=n(4),a=n(5),s=n(9),u=n(7),c=function(){function e(e,t){this.source=e,this.errorHandler=t,this.trackComment=!1,this.length=e.length,this.index=0,this.lineNumber=e.length>0?1:0,this.lineStart=0,this.curlyStack=[]}return e.prototype.eof=function(){return this.index>=this.length},e.prototype.throwUnexpectedToken=function(e){void 0===e&&(e=a.Messages.UnexpectedTokenIllegal),this.errorHandler.throwError(this.index,this.lineNumber,this.index-this.lineStart+1,e)},e.prototype.tolerateUnexpectedToken=function(){this.errorHandler.tolerateError(this.index,this.lineNumber,this.index-this.lineStart+1,a.Messages.UnexpectedTokenIllegal)},e.prototype.skipSingleLineComment=function(e){var t,n,r;for(this.trackComment&&(t=[],n=this.index-e,r={start:{line:this.lineNumber,column:this.index-this.lineStart-e},end:{}});!this.eof();){var i=this.source.charCodeAt(this.index);if(++this.index,s.Character.isLineTerminator(i)){if(this.trackComment){r.end={line:this.lineNumber,column:this.index-this.lineStart-1};var o={multiLine:!1,slice:[n+e,this.index-1],range:[n,this.index-1],loc:r};t.push(o)}return 13===i&&10===this.source.charCodeAt(this.index)&&++this.index,++this.lineNumber,this.lineStart=this.index,t}}if(this.trackComment){r.end={line:this.lineNumber,column:this.index-this.lineStart};var o={multiLine:!1,slice:[n+e,this.index],range:[n,this.index],loc:r};t.push(o)}return t},e.prototype.skipMultiLineComment=function(){var e,t,n;for(this.trackComment&&(e=[],t=this.index-2,n={start:{line:this.lineNumber,column:this.index-this.lineStart-2},end:{}});!this.eof();){var r=this.source.charCodeAt(this.index);if(s.Character.isLineTerminator(r))13===r&&10===this.source.charCodeAt(this.index+1)&&++this.index,++this.lineNumber,++this.index,this.lineStart=this.index;else if(42===r){if(47===this.source.charCodeAt(this.index+1)){if(this.index+=2,this.trackComment){n.end={line:this.lineNumber,column:this.index-this.lineStart};var i={multiLine:!0,slice:[t+2,this.index-2],range:[t,this.index],loc:n};e.push(i)}return e}++this.index}else++this.index}if(this.trackComment){n.end={line:this.lineNumber,column:this.index-this.lineStart};var i={multiLine:!0,slice:[t+2,this.index],range:[t,this.index],loc:n};e.push(i)}return this.tolerateUnexpectedToken(),e},e.prototype.scanComments=function(){var e;this.trackComment&&(e=[]);for(var t=0===this.index;!this.eof();){var n=this.source.charCodeAt(this.index);if(s.Character.isWhiteSpace(n))++this.index;else if(s.Character.isLineTerminator(n))++this.index,13===n&&10===this.source.charCodeAt(this.index)&&++this.index,++this.lineNumber,this.lineStart=this.index,t=!0;else if(47===n)if(n=this.source.charCodeAt(this.index+1),47===n){this.index+=2;var r=this.skipSingleLineComment(2);this.trackComment&&(e=e.concat(r)),t=!0}else{if(42!==n)break;this.index+=2;var r=this.skipMultiLineComment();this.trackComment&&(e=e.concat(r))}else if(t&&45===n){if(45!==this.source.charCodeAt(this.index+1)||62!==this.source.charCodeAt(this.index+2))break;this.index+=3;var r=this.skipSingleLineComment(3);this.trackComment&&(e=e.concat(r))}else{if(60!==n)break;if("!--"!==this.source.slice(this.index+1,this.index+4))break;this.index+=4;var r=this.skipSingleLineComment(4);this.trackComment&&(e=e.concat(r))}}return e},e.prototype.isFutureReservedWord=function(e){switch(e){case"enum":case"export":case"import":case"super":return!0;default:return!1}},e.prototype.isStrictModeReservedWord=function(e){switch(e){case"implements":case"interface":case"package":case"private":case"protected":case"public":case"static":case"yield":case"let":return!0;default:return!1}},e.prototype.isRestrictedWord=function(e){return"eval"===e||"arguments"===e},e.prototype.isKeyword=function(e){switch(e.length){case 2:return"if"===e||"in"===e||"do"===e;case 3:return"var"===e||"for"===e||"new"===e||"try"===e||"let"===e;case 4:return"this"===e||"else"===e||"case"===e||"void"===e||"with"===e||"enum"===e;case 5:return"while"===e||"break"===e||"catch"===e||"throw"===e||"const"===e||"yield"===e||"class"===e||"super"===e;case 6:return"return"===e||"typeof"===e||"delete"===e||"switch"===e||"export"===e||"import"===e;case 7:return"default"===e||"finally"===e||"extends"===e;case 8:return"function"===e||"continue"===e||"debugger"===e;case 10:return"instanceof"===e;default:return!1}},e.prototype.codePointAt=function(e){var t=this.source.charCodeAt(e);if(t>=55296&&t<=56319){var n=this.source.charCodeAt(e+1);if(n>=56320&&n<=57343){var r=t;t=1024*(r-55296)+n-56320+65536}}return t},e.prototype.scanHexEscape=function(e){for(var t="u"===e?4:2,n=0,i=0;i1114111||"}"!==e)&&this.throwUnexpectedToken(),s.Character.fromCodePoint(t)},e.prototype.getIdentifier=function(){for(var e=this.index++;!this.eof();){var t=this.source.charCodeAt(this.index);if(92===t)return this.index=e,this.getComplexIdentifier();if(t>=55296&&t<57343)return this.index=e,this.getComplexIdentifier();if(!s.Character.isIdentifierPart(t))break;++this.index}return this.source.slice(e,this.index)},e.prototype.getComplexIdentifier=function(){var e=this.codePointAt(this.index),t=s.Character.fromCodePoint(e);this.index+=t.length;var n;for(92===e&&(117!==this.source.charCodeAt(this.index)&&this.throwUnexpectedToken(),++this.index,"{"===this.source[this.index]?(++this.index,n=this.scanUnicodeCodePointEscape()):(n=this.scanHexEscape("u"),e=n.charCodeAt(0),n&&"\\"!==n&&s.Character.isIdentifierStart(e)||this.throwUnexpectedToken()),t=n);!this.eof()&&(e=this.codePointAt(this.index),s.Character.isIdentifierPart(e));)n=s.Character.fromCodePoint(e),t+=n,this.index+=n.length,92===e&&(t=t.substr(0,t.length-1),117!==this.source.charCodeAt(this.index)&&this.throwUnexpectedToken(),++this.index,"{"===this.source[this.index]?(++this.index,n=this.scanUnicodeCodePointEscape()):(n=this.scanHexEscape("u"),e=n.charCodeAt(0),n&&"\\"!==n&&s.Character.isIdentifierPart(e)||this.throwUnexpectedToken()),t+=n);return t},e.prototype.octalToDecimal=function(e){var t="0"!==e,n=i(e);return!this.eof()&&s.Character.isOctalDigit(this.source.charCodeAt(this.index))&&(t=!0,n=8*n+i(this.source[this.index++]),"0123".indexOf(e)>=0&&!this.eof()&&s.Character.isOctalDigit(this.source.charCodeAt(this.index))&&(n=8*n+i(this.source[this.index++]))),{code:n,octal:t}},e.prototype.scanIdentifier=function(){var e,t=this.index,n=92===this.source.charCodeAt(t)?this.getComplexIdentifier():this.getIdentifier();return e=1===n.length?u.Token.Identifier:this.isKeyword(n)?u.Token.Keyword:"null"===n?u.Token.NullLiteral:"true"===n||"false"===n?u.Token.BooleanLiteral:u.Token.Identifier,{type:e,value:n,lineNumber:this.lineNumber,lineStart:this.lineStart,start:t,end:this.index}},e.prototype.scanPunctuator=function(){var e={type:u.Token.Punctuator,value:"",lineNumber:this.lineNumber,lineStart:this.lineStart,start:this.index,end:this.index},t=this.source[this.index];switch(t){case"(":case"{":"{"===t&&this.curlyStack.push("{"),++this.index;break;case".":++this.index,"."===this.source[this.index]&&"."===this.source[this.index+1]&&(this.index+=2,t="...");break;case"}":++this.index,this.curlyStack.pop();break;case")":case";":case",":case"[":case"]":case":":case"?":case"~":++this.index;break;default:t=this.source.substr(this.index,4),">>>="===t?this.index+=4:(t=t.substr(0,3),"==="===t||"!=="===t||">>>"===t||"<<="===t||">>="===t||"**="===t?this.index+=3:(t=t.substr(0,2),"&&"===t||"||"===t||"=="===t||"!="===t||"+="===t||"-="===t||"*="===t||"/="===t||"++"===t||"--"===t||"<<"===t||">>"===t||"&="===t||"|="===t||"^="===t||"%="===t||"<="===t||">="===t||"=>"===t||"**"===t?this.index+=2:(t=this.source[this.index],"<>=!+-*%&|^/".indexOf(t)>=0&&++this.index)))}return this.index===e.start&&this.throwUnexpectedToken(),e.end=this.index,e.value=t,e},e.prototype.scanHexLiteral=function(e){for(var t="";!this.eof()&&s.Character.isHexDigit(this.source.charCodeAt(this.index));)t+=this.source[this.index++];return 0===t.length&&this.throwUnexpectedToken(),s.Character.isIdentifierStart(this.source.charCodeAt(this.index))&&this.throwUnexpectedToken(),{type:u.Token.NumericLiteral,value:parseInt("0x"+t,16),lineNumber:this.lineNumber,lineStart:this.lineStart,start:e,end:this.index}},e.prototype.scanBinaryLiteral=function(e){for(var t,n="";!this.eof()&&(t=this.source[this.index],"0"===t||"1"===t);)n+=this.source[this.index++];return 0===n.length&&this.throwUnexpectedToken(),this.eof()||(t=this.source.charCodeAt(this.index),(s.Character.isIdentifierStart(t)||s.Character.isDecimalDigit(t))&&this.throwUnexpectedToken()),{type:u.Token.NumericLiteral,value:parseInt(n,2),lineNumber:this.lineNumber,lineStart:this.lineStart,start:e,end:this.index}},e.prototype.scanOctalLiteral=function(e,t){var n="",r=!1;for(s.Character.isOctalDigit(e.charCodeAt(0))?(r=!0,n="0"+this.source[this.index++]):++this.index;!this.eof()&&s.Character.isOctalDigit(this.source.charCodeAt(this.index));)n+=this.source[this.index++];return r||0!==n.length||this.throwUnexpectedToken(),(s.Character.isIdentifierStart(this.source.charCodeAt(this.index))||s.Character.isDecimalDigit(this.source.charCodeAt(this.index)))&&this.throwUnexpectedToken(),{type:u.Token.NumericLiteral,value:parseInt(n,8),octal:r,lineNumber:this.lineNumber,lineStart:this.lineStart,start:t,end:this.index}},e.prototype.isImplicitOctalLiteral=function(){for(var e=this.index+1;e=0&&(r=r.replace(/\\u\{([0-9a-fA-F]+)\}|\\u([a-fA-F0-9]{4})/g,function(e,t,r){var o=parseInt(t||r,16);return o>1114111&&i.throwUnexpectedToken(a.Messages.InvalidRegExp),o<=65535?String.fromCharCode(o):n}).replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,n));try{RegExp(r)}catch(e){this.throwUnexpectedToken(a.Messages.InvalidRegExp)}try{return new RegExp(e,t)}catch(e){return null}},e.prototype.scanRegExpBody=function(){var e=this.source[this.index];o.assert("/"===e,"Regular expression literal must start with a slash");for(var t=this.source[this.index++],n=!1,r=!1;!this.eof();)if(e=this.source[this.index++],t+=e,"\\"===e)e=this.source[this.index++],s.Character.isLineTerminator(e.charCodeAt(0))&&this.throwUnexpectedToken(a.Messages.UnterminatedRegExp),t+=e;else if(s.Character.isLineTerminator(e.charCodeAt(0)))this.throwUnexpectedToken(a.Messages.UnterminatedRegExp);else if(n)"]"===e&&(n=!1);else{if("/"===e){r=!0;break}"["===e&&(n=!0)}r||this.throwUnexpectedToken(a.Messages.UnterminatedRegExp);var i=t.substr(1,t.length-2);return{value:i,literal:t}},e.prototype.scanRegExpFlags=function(){for(var e="",t="";!this.eof();){var n=this.source[this.index];if(!s.Character.isIdentifierPart(n.charCodeAt(0)))break;if(++this.index,"\\"!==n||this.eof())t+=n,e+=n;else if(n=this.source[this.index],"u"===n){++this.index;var r=this.index;if(n=this.scanHexEscape("u"))for(t+=n,e+="\\u";r=55296&&e<57343&&s.Character.isIdentifierStart(this.codePointAt(this.index))?this.scanIdentifier():this.scanPunctuator()},e}();t.Scanner=c},function(e,t){"use strict";var n={NonAsciiIdentifierStart:/[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B4\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309B-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCA0-\uDCDF\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]/,NonAsciiIdentifierPart:/[\xAA\xB5\xB7\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0-\u08B4\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C81-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1369-\u1371\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1CD0-\u1CD2\u1CD4-\u1CF6\u1CF8\u1CF9\u1D00-\u1DF5\u1DFC-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDCA-\uDDCC\uDDD0-\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE37\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9\uDF00-\uDF19\uDF1D-\uDF2B\uDF30-\uDF39]|\uD806[\uDCA0-\uDCE9\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF]/};t.Character={fromCodePoint:function(e){return e<65536?String.fromCharCode(e):String.fromCharCode(55296+(e-65536>>10))+String.fromCharCode(56320+(e-65536&1023))},isWhiteSpace:function(e){return 32===e||9===e||11===e||12===e||160===e||e>=5760&&[5760,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8239,8287,12288,65279].indexOf(e)>=0},isLineTerminator:function(e){return 10===e||13===e||8232===e||8233===e},isIdentifierStart:function(e){ +return 36===e||95===e||e>=65&&e<=90||e>=97&&e<=122||92===e||e>=128&&n.NonAsciiIdentifierStart.test(t.Character.fromCodePoint(e))},isIdentifierPart:function(e){return 36===e||95===e||e>=65&&e<=90||e>=97&&e<=122||e>=48&&e<=57||92===e||e>=128&&n.NonAsciiIdentifierPart.test(t.Character.fromCodePoint(e))},isDecimalDigit:function(e){return e>=48&&e<=57},isHexDigit:function(e){return e>=48&&e<=57||e>=65&&e<=70||e>=97&&e<=102},isOctalDigit:function(e){return e>=48&&e<=55}}},function(e,t,n){"use strict";var r=n(2),i=function(){function e(e){this.type=r.Syntax.ArrayExpression,this.elements=e}return e}();t.ArrayExpression=i;var o=function(){function e(e){this.type=r.Syntax.ArrayPattern,this.elements=e}return e}();t.ArrayPattern=o;var a=function(){function e(e,t,n){this.type=r.Syntax.ArrowFunctionExpression,this.id=null,this.params=e,this.body=t,this.generator=!1,this.expression=n}return e}();t.ArrowFunctionExpression=a;var s=function(){function e(e,t,n){this.type=r.Syntax.AssignmentExpression,this.operator=e,this.left=t,this.right=n}return e}();t.AssignmentExpression=s;var u=function(){function e(e,t){this.type=r.Syntax.AssignmentPattern,this.left=e,this.right=t}return e}();t.AssignmentPattern=u;var c=function(){function e(e,t,n){var i="||"===e||"&&"===e;this.type=i?r.Syntax.LogicalExpression:r.Syntax.BinaryExpression,this.operator=e,this.left=t,this.right=n}return e}();t.BinaryExpression=c;var l=function(){function e(e){this.type=r.Syntax.BlockStatement,this.body=e}return e}();t.BlockStatement=l;var p=function(){function e(e){this.type=r.Syntax.BreakStatement,this.label=e}return e}();t.BreakStatement=p;var f=function(){function e(e,t){this.type=r.Syntax.CallExpression,this.callee=e,this.arguments=t}return e}();t.CallExpression=f;var h=function(){function e(e,t){this.type=r.Syntax.CatchClause,this.param=e,this.body=t}return e}();t.CatchClause=h;var d=function(){function e(e){this.type=r.Syntax.ClassBody,this.body=e}return e}();t.ClassBody=d;var m=function(){function e(e,t,n){this.type=r.Syntax.ClassDeclaration,this.id=e,this.superClass=t,this.body=n}return e}();t.ClassDeclaration=m;var v=function(){function e(e,t,n){this.type=r.Syntax.ClassExpression,this.id=e,this.superClass=t,this.body=n}return e}();t.ClassExpression=v;var y=function(){function e(e,t){this.type=r.Syntax.MemberExpression,this.computed=!0,this.object=e,this.property=t}return e}();t.ComputedMemberExpression=y;var g=function(){function e(e,t,n){this.type=r.Syntax.ConditionalExpression,this.test=e,this.consequent=t,this.alternate=n}return e}();t.ConditionalExpression=g;var _=function(){function e(e){this.type=r.Syntax.ContinueStatement,this.label=e}return e}();t.ContinueStatement=_;var b=function(){function e(){this.type=r.Syntax.DebuggerStatement}return e}();t.DebuggerStatement=b;var x=function(){function e(e,t){this.type=r.Syntax.ExpressionStatement,this.expression=e,this.directive=t}return e}();t.Directive=x;var w=function(){function e(e,t){this.type=r.Syntax.DoWhileStatement,this.body=e,this.test=t}return e}();t.DoWhileStatement=w;var k=function(){function e(){this.type=r.Syntax.EmptyStatement}return e}();t.EmptyStatement=k;var S=function(){function e(e){this.type=r.Syntax.ExportAllDeclaration,this.source=e}return e}();t.ExportAllDeclaration=S;var E=function(){function e(e){this.type=r.Syntax.ExportDefaultDeclaration,this.declaration=e}return e}();t.ExportDefaultDeclaration=E;var C=function(){function e(e,t,n){this.type=r.Syntax.ExportNamedDeclaration,this.declaration=e,this.specifiers=t,this.source=n}return e}();t.ExportNamedDeclaration=C;var A=function(){function e(e,t){this.type=r.Syntax.ExportSpecifier,this.exported=t,this.local=e}return e}();t.ExportSpecifier=A;var T=function(){function e(e){this.type=r.Syntax.ExpressionStatement,this.expression=e}return e}();t.ExpressionStatement=T;var D=function(){function e(e,t,n){this.type=r.Syntax.ForInStatement,this.left=e,this.right=t,this.body=n,this.each=!1}return e}();t.ForInStatement=D;var M=function(){function e(e,t,n){this.type=r.Syntax.ForOfStatement,this.left=e,this.right=t,this.body=n}return e}();t.ForOfStatement=M;var O=function(){function e(e,t,n,i){this.type=r.Syntax.ForStatement,this.init=e,this.test=t,this.update=n,this.body=i}return e}();t.ForStatement=O;var P=function(){function e(e,t,n,i){this.type=r.Syntax.FunctionDeclaration,this.id=e,this.params=t,this.body=n,this.generator=i,this.expression=!1}return e}();t.FunctionDeclaration=P;var I=function(){function e(e,t,n,i){this.type=r.Syntax.FunctionExpression,this.id=e,this.params=t,this.body=n,this.generator=i,this.expression=!1}return e}();t.FunctionExpression=I;var N=function(){function e(e){this.type=r.Syntax.Identifier,this.name=e}return e}();t.Identifier=N;var R=function(){function e(e,t,n){this.type=r.Syntax.IfStatement,this.test=e,this.consequent=t,this.alternate=n}return e}();t.IfStatement=R;var j=function(){function e(e,t){this.type=r.Syntax.ImportDeclaration,this.specifiers=e,this.source=t}return e}();t.ImportDeclaration=j;var F=function(){function e(e){this.type=r.Syntax.ImportDefaultSpecifier,this.local=e}return e}();t.ImportDefaultSpecifier=F;var B=function(){function e(e){this.type=r.Syntax.ImportNamespaceSpecifier,this.local=e}return e}();t.ImportNamespaceSpecifier=B;var L=function(){function e(e,t){this.type=r.Syntax.ImportSpecifier,this.local=e,this.imported=t}return e}();t.ImportSpecifier=L;var z=function(){function e(e,t){this.type=r.Syntax.LabeledStatement,this.label=e,this.body=t}return e}();t.LabeledStatement=z;var q=function(){function e(e,t){this.type=r.Syntax.Literal,this.value=e,this.raw=t}return e}();t.Literal=q;var U=function(){function e(e,t){this.type=r.Syntax.MetaProperty,this.meta=e,this.property=t}return e}();t.MetaProperty=U;var W=function(){function e(e,t,n,i,o){this.type=r.Syntax.MethodDefinition,this.key=e,this.computed=t,this.value=n,this.kind=i,this.static=o}return e}();t.MethodDefinition=W;var K=function(){function e(e,t){this.type=r.Syntax.NewExpression,this.callee=e,this.arguments=t}return e}();t.NewExpression=K;var V=function(){function e(e){this.type=r.Syntax.ObjectExpression,this.properties=e}return e}();t.ObjectExpression=V;var H=function(){function e(e){this.type=r.Syntax.ObjectPattern,this.properties=e}return e}();t.ObjectPattern=H;var J=function(){function e(e,t){this.type=r.Syntax.Program,this.body=e,this.sourceType=t}return e}();t.Program=J;var G=function(){function e(e,t,n,i,o,a){this.type=r.Syntax.Property,this.key=t,this.computed=n,this.value=i,this.kind=e,this.method=o,this.shorthand=a}return e}();t.Property=G;var X=function(){function e(e,t,n){this.type=r.Syntax.Literal,this.value=e,this.raw=t,this.regex=n}return e}();t.RegexLiteral=X;var Y=function(){function e(e){this.type=r.Syntax.RestElement,this.argument=e}return e}();t.RestElement=Y;var $=function(){function e(e){this.type=r.Syntax.ReturnStatement,this.argument=e}return e}();t.ReturnStatement=$;var Z=function(){function e(e){this.type=r.Syntax.SequenceExpression,this.expressions=e}return e}();t.SequenceExpression=Z;var Q=function(){function e(e){this.type=r.Syntax.SpreadElement,this.argument=e}return e}();t.SpreadElement=Q;var ee=function(){function e(e,t){this.type=r.Syntax.MemberExpression,this.computed=!1,this.object=e,this.property=t}return e}();t.StaticMemberExpression=ee;var te=function(){function e(){this.type=r.Syntax.Super}return e}();t.Super=te;var ne=function(){function e(e,t){this.type=r.Syntax.SwitchCase,this.test=e,this.consequent=t}return e}();t.SwitchCase=ne;var re=function(){function e(e,t){this.type=r.Syntax.SwitchStatement,this.discriminant=e,this.cases=t}return e}();t.SwitchStatement=re;var ie=function(){function e(e,t){this.type=r.Syntax.TaggedTemplateExpression,this.tag=e,this.quasi=t}return e}();t.TaggedTemplateExpression=ie;var oe=function(){function e(e,t){this.type=r.Syntax.TemplateElement,this.value=e,this.tail=t}return e}();t.TemplateElement=oe;var ae=function(){function e(e,t){this.type=r.Syntax.TemplateLiteral,this.quasis=e,this.expressions=t}return e}();t.TemplateLiteral=ae;var se=function(){function e(){this.type=r.Syntax.ThisExpression}return e}();t.ThisExpression=se;var ue=function(){function e(e){this.type=r.Syntax.ThrowStatement,this.argument=e}return e}();t.ThrowStatement=ue;var ce=function(){function e(e,t,n){this.type=r.Syntax.TryStatement,this.block=e,this.handler=t,this.finalizer=n}return e}();t.TryStatement=ce;var le=function(){function e(e,t){this.type=r.Syntax.UnaryExpression,this.operator=e,this.argument=t,this.prefix=!0}return e}();t.UnaryExpression=le;var pe=function(){function e(e,t,n){this.type=r.Syntax.UpdateExpression,this.operator=e,this.argument=t,this.prefix=n}return e}();t.UpdateExpression=pe;var fe=function(){function e(e,t){this.type=r.Syntax.VariableDeclaration,this.declarations=e,this.kind=t}return e}();t.VariableDeclaration=fe;var he=function(){function e(e,t){this.type=r.Syntax.VariableDeclarator,this.id=e,this.init=t}return e}();t.VariableDeclarator=he;var de=function(){function e(e,t){this.type=r.Syntax.WhileStatement,this.test=e,this.body=t}return e}();t.WhileStatement=de;var me=function(){function e(e,t){this.type=r.Syntax.WithStatement,this.object=e,this.body=t}return e}();t.WithStatement=me;var ve=function(){function e(e,t){this.type=r.Syntax.YieldExpression,this.argument=e,this.delegate=t}return e}();t.YieldExpression=ve},function(e,t,n){"use strict";function r(e){var t;switch(e.type){case l.JSXSyntax.JSXIdentifier:var n=e;t=n.name;break;case l.JSXSyntax.JSXNamespacedName:var i=e;t=r(i.namespace)+":"+r(i.name);break;case l.JSXSyntax.JSXMemberExpression:var o=e;t=r(o.object)+"."+r(o.property)}return t}var i,o=this&&this.__extends||function(e,t){function n(){this.constructor=e}for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r]);e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)},a=n(9),s=n(7),u=n(3),c=n(12),l=n(13),p=n(10),f=n(14);!function(e){e[e.Identifier=100]="Identifier",e[e.Text=101]="Text"}(i||(i={})),s.TokenName[i.Identifier]="JSXIdentifier",s.TokenName[i.Text]="JSXText";var h=function(e){function t(t,n,r){e.call(this,t,n,r)}return o(t,e),t.prototype.parsePrimaryExpression=function(){return this.match("<")?this.parseJSXRoot():e.prototype.parsePrimaryExpression.call(this)},t.prototype.startJSX=function(){this.scanner.index=this.startMarker.index,this.scanner.lineNumber=this.startMarker.lineNumber,this.scanner.lineStart=this.startMarker.lineStart},t.prototype.finishJSX=function(){this.nextToken()},t.prototype.reenterJSX=function(){this.startJSX(),this.expectJSX("}"),this.config.tokens&&this.tokens.pop()},t.prototype.createJSXNode=function(){return this.collectComments(),{index:this.scanner.index,line:this.scanner.lineNumber,column:this.scanner.index-this.scanner.lineStart}},t.prototype.createJSXChildNode=function(){return{index:this.scanner.index,line:this.scanner.lineNumber,column:this.scanner.index-this.scanner.lineStart}},t.prototype.scanXHTMLEntity=function(e){for(var t="&",n=!0,r=!1,i=!1,o=!1;!this.scanner.eof()&&n&&!r;){var s=this.scanner.source[this.scanner.index];if(s===e)break;if(r=";"===s,t+=s,++this.scanner.index,!r)switch(t.length){case 2:i="#"===s;break;case 3:i&&(o="x"===s,n=o||a.Character.isDecimalDigit(s.charCodeAt(0)),i=i&&!o);break;default:n=n&&!(i&&!a.Character.isDecimalDigit(s.charCodeAt(0))),n=n&&!(o&&!a.Character.isHexDigit(s.charCodeAt(0)))}}if(n&&r&&t.length>2){var u=t.substr(1,t.length-2);i&&u.length>1?t=String.fromCharCode(parseInt(u.substr(1),10)):o&&u.length>2?t=String.fromCharCode(parseInt("0"+u.substr(1),16)):i||o||!c.XHTMLEntities[u]||(t=c.XHTMLEntities[u])}return t},t.prototype.lexJSX=function(){var e=this.scanner.source.charCodeAt(this.scanner.index);if(60===e||62===e||47===e||58===e||61===e||123===e||125===e){var t=this.scanner.source[this.scanner.index++];return{type:s.Token.Punctuator,value:t,lineNumber:this.scanner.lineNumber,lineStart:this.scanner.lineStart,start:this.scanner.index-1,end:this.scanner.index}}if(34===e||39===e){for(var n=this.scanner.index,r=this.scanner.source[this.scanner.index++],o="";!this.scanner.eof();){var u=this.scanner.source[this.scanner.index++];if(u===r)break;o+="&"===u?this.scanXHTMLEntity(r):u}return{type:s.Token.StringLiteral,value:o,lineNumber:this.scanner.lineNumber,lineStart:this.scanner.lineStart,start:n,end:this.scanner.index}}if(46===e){var c=this.scanner.source.charCodeAt(this.scanner.index+1),l=this.scanner.source.charCodeAt(this.scanner.index+2),t=46===c&&46===l?"...":".",n=this.scanner.index;return this.scanner.index+=t.length,{type:s.Token.Punctuator,value:t,lineNumber:this.scanner.lineNumber,lineStart:this.scanner.lineStart,start:n,end:this.scanner.index}}if(96===e)return{type:s.Token.Template,lineNumber:this.scanner.lineNumber,lineStart:this.scanner.lineStart,start:this.scanner.index,end:this.scanner.index};if(a.Character.isIdentifierStart(e)&&92!==e){var n=this.scanner.index;for(++this.scanner.index;!this.scanner.eof();){var u=this.scanner.source.charCodeAt(this.scanner.index);if(a.Character.isIdentifierPart(u)&&92!==u)++this.scanner.index;else{if(45!==u)break;++this.scanner.index}}var p=this.scanner.source.slice(n,this.scanner.index);return{type:i.Identifier,value:p,lineNumber:this.scanner.lineNumber,lineStart:this.scanner.lineStart,start:n,end:this.scanner.index}}this.scanner.throwUnexpectedToken()},t.prototype.nextJSXToken=function(){this.collectComments(),this.startMarker.index=this.scanner.index,this.startMarker.lineNumber=this.scanner.lineNumber,this.startMarker.lineStart=this.scanner.lineStart;var e=this.lexJSX();return this.lastMarker.index=this.scanner.index,this.lastMarker.lineNumber=this.scanner.lineNumber,this.lastMarker.lineStart=this.scanner.lineStart,this.config.tokens&&this.tokens.push(this.convertToken(e)),e},t.prototype.nextJSXText=function(){this.startMarker.index=this.scanner.index,this.startMarker.lineNumber=this.scanner.lineNumber,this.startMarker.lineStart=this.scanner.lineStart;for(var e=this.scanner.index,t="";!this.scanner.eof();){var n=this.scanner.source[this.scanner.index];if("{"===n||"<"===n)break;++this.scanner.index,t+=n,a.Character.isLineTerminator(n.charCodeAt(0))&&(++this.scanner.lineNumber,"\r"===n&&"\n"===this.scanner.source[this.scanner.index]&&++this.scanner.index,this.scanner.lineStart=this.scanner.index)}this.lastMarker.index=this.scanner.index,this.lastMarker.lineNumber=this.scanner.lineNumber,this.lastMarker.lineStart=this.scanner.lineStart;var r={type:i.Text,value:t,lineNumber:this.scanner.lineNumber,lineStart:this.scanner.lineStart,start:e,end:this.scanner.index};return t.length>0&&this.config.tokens&&this.tokens.push(this.convertToken(r)),r},t.prototype.peekJSXToken=function(){var e=this.scanner.index,t=this.scanner.lineNumber,n=this.scanner.lineStart;this.scanner.scanComments();var r=this.lexJSX();return this.scanner.index=e,this.scanner.lineNumber=t,this.scanner.lineStart=n,r},t.prototype.expectJSX=function(e){var t=this.nextJSXToken();t.type===s.Token.Punctuator&&t.value===e||this.throwUnexpectedToken(t)},t.prototype.matchJSX=function(e){var t=this.peekJSXToken();return t.type===s.Token.Punctuator&&t.value===e},t.prototype.parseJSXIdentifier=function(){var e=this.createJSXNode(),t=this.nextJSXToken();return t.type!==i.Identifier&&this.throwUnexpectedToken(t),this.finalize(e,new f.JSXIdentifier(t.value))},t.prototype.parseJSXElementName=function(){var e=this.createJSXNode(),t=this.parseJSXIdentifier();if(this.matchJSX(":")){var n=t;this.expectJSX(":");var r=this.parseJSXIdentifier();t=this.finalize(e,new f.JSXNamespacedName(n,r))}else if(this.matchJSX("."))for(;this.matchJSX(".");){var i=t;this.expectJSX(".");var o=this.parseJSXIdentifier();t=this.finalize(e,new f.JSXMemberExpression(i,o))}return t},t.prototype.parseJSXAttributeName=function(){var e,t=this.createJSXNode(),n=this.parseJSXIdentifier();if(this.matchJSX(":")){var r=n;this.expectJSX(":");var i=this.parseJSXIdentifier();e=this.finalize(t,new f.JSXNamespacedName(r,i))}else e=n;return e},t.prototype.parseJSXStringLiteralAttribute=function(){var e=this.createJSXNode(),t=this.nextJSXToken();t.type!==s.Token.StringLiteral&&this.throwUnexpectedToken(t);var n=this.getTokenRaw(t);return this.finalize(e,new p.Literal(t.value,n))},t.prototype.parseJSXExpressionAttribute=function(){var e=this.createJSXNode();this.expectJSX("{"),this.finishJSX(),this.match("}")&&this.tolerateError("JSX attributes must only be assigned a non-empty expression");var t=this.parseAssignmentExpression();return this.reenterJSX(),this.finalize(e,new f.JSXExpressionContainer(t))},t.prototype.parseJSXAttributeValue=function(){return this.matchJSX("{")?this.parseJSXExpressionAttribute():this.matchJSX("<")?this.parseJSXElement():this.parseJSXStringLiteralAttribute()},t.prototype.parseJSXNameValueAttribute=function(){var e=this.createJSXNode(),t=this.parseJSXAttributeName(),n=null;return this.matchJSX("=")&&(this.expectJSX("="),n=this.parseJSXAttributeValue()),this.finalize(e,new f.JSXAttribute(t,n))},t.prototype.parseJSXSpreadAttribute=function(){var e=this.createJSXNode();this.expectJSX("{"),this.expectJSX("..."),this.finishJSX();var t=this.parseAssignmentExpression();return this.reenterJSX(),this.finalize(e,new f.JSXSpreadAttribute(t))},t.prototype.parseJSXAttributes=function(){for(var e=[];!this.matchJSX("/")&&!this.matchJSX(">");){var t=this.matchJSX("{")?this.parseJSXSpreadAttribute():this.parseJSXNameValueAttribute();e.push(t)}return e},t.prototype.parseJSXOpeningElement=function(){var e=this.createJSXNode();this.expectJSX("<");var t=this.parseJSXElementName(),n=this.parseJSXAttributes(),r=this.matchJSX("/");return r&&this.expectJSX("/"),this.expectJSX(">"),this.finalize(e,new f.JSXOpeningElement(t,r,n))},t.prototype.parseJSXBoundaryElement=function(){var e=this.createJSXNode();if(this.expectJSX("<"),this.matchJSX("/")){this.expectJSX("/");var t=this.parseJSXElementName();return this.expectJSX(">"),this.finalize(e,new f.JSXClosingElement(t))}var n=this.parseJSXElementName(),r=this.parseJSXAttributes(),i=this.matchJSX("/");return i&&this.expectJSX("/"),this.expectJSX(">"),this.finalize(e,new f.JSXOpeningElement(n,i,r))},t.prototype.parseJSXEmptyExpression=function(){var e=this.createJSXChildNode();return this.collectComments(),this.lastMarker.index=this.scanner.index,this.lastMarker.lineNumber=this.scanner.lineNumber,this.lastMarker.lineStart=this.scanner.lineStart,this.finalize(e,new f.JSXEmptyExpression)},t.prototype.parseJSXExpressionContainer=function(){var e=this.createJSXNode();this.expectJSX("{");var t;return this.matchJSX("}")?(t=this.parseJSXEmptyExpression(),this.expectJSX("}")):(this.finishJSX(),t=this.parseAssignmentExpression(),this.reenterJSX()),this.finalize(e,new f.JSXExpressionContainer(t))},t.prototype.parseJSXChildren=function(){for(var e=[];!this.scanner.eof();){var t=this.createJSXChildNode(),n=this.nextJSXText();if(n.start0))break;var a=this.finalize(e.node,new f.JSXElement(e.opening,e.children,e.closing));e=t.pop(),e.children.push(a)}}return e},t.prototype.parseJSXElement=function(){var e=this.createJSXNode(),t=this.parseJSXOpeningElement(),n=[],r=null;if(!t.selfClosing){var i=this.parseComplexJSXElement({node:e,opening:t,closing:r,children:n});n=i.children,r=i.closing}return this.finalize(e,new f.JSXElement(t,n,r))},t.prototype.parseJSXRoot=function(){this.config.tokens&&this.tokens.pop(),this.startJSX();var e=this.parseJSXElement();return this.finishJSX(),e},t}(u.Parser);t.JSXParser=h},function(e,t){"use strict";t.XHTMLEntities={quot:'"',amp:"&",apos:"'",gt:">",nbsp:" ",iexcl:"¡",cent:"¢",pound:"£",curren:"¤",yen:"¥",brvbar:"¦",sect:"§",uml:"¨",copy:"©",ordf:"ª",laquo:"«",not:"¬",shy:"­",reg:"®",macr:"¯",deg:"°",plusmn:"±",sup2:"²",sup3:"³",acute:"´",micro:"µ",para:"¶",middot:"·",cedil:"¸",sup1:"¹",ordm:"º",raquo:"»",frac14:"¼",frac12:"½",frac34:"¾",iquest:"¿",Agrave:"À",Aacute:"Á",Acirc:"Â",Atilde:"Ã",Auml:"Ä",Aring:"Å",AElig:"Æ",Ccedil:"Ç",Egrave:"È",Eacute:"É",Ecirc:"Ê",Euml:"Ë",Igrave:"Ì",Iacute:"Í",Icirc:"Î",Iuml:"Ï",ETH:"Ð",Ntilde:"Ñ",Ograve:"Ò",Oacute:"Ó",Ocirc:"Ô",Otilde:"Õ",Ouml:"Ö",times:"×",Oslash:"Ø",Ugrave:"Ù",Uacute:"Ú",Ucirc:"Û",Uuml:"Ü",Yacute:"Ý",THORN:"Þ",szlig:"ß",agrave:"à",aacute:"á",acirc:"â",atilde:"ã",auml:"ä",aring:"å",aelig:"æ",ccedil:"ç",egrave:"è",eacute:"é",ecirc:"ê",euml:"ë",igrave:"ì",iacute:"í",icirc:"î",iuml:"ï",eth:"ð",ntilde:"ñ",ograve:"ò",oacute:"ó",ocirc:"ô",otilde:"õ",ouml:"ö",divide:"÷",oslash:"ø",ugrave:"ù",uacute:"ú",ucirc:"û",uuml:"ü",yacute:"ý",thorn:"þ",yuml:"ÿ",OElig:"Œ",oelig:"œ",Scaron:"Š",scaron:"š",Yuml:"Ÿ",fnof:"ƒ",circ:"ˆ",tilde:"˜",Alpha:"Α",Beta:"Β",Gamma:"Γ",Delta:"Δ",Epsilon:"Ε",Zeta:"Ζ",Eta:"Η",Theta:"Θ",Iota:"Ι",Kappa:"Κ",Lambda:"Λ",Mu:"Μ",Nu:"Ν",Xi:"Ξ",Omicron:"Ο",Pi:"Π",Rho:"Ρ",Sigma:"Σ",Tau:"Τ",Upsilon:"Υ",Phi:"Φ",Chi:"Χ",Psi:"Ψ",Omega:"Ω",alpha:"α",beta:"β",gamma:"γ",delta:"δ",epsilon:"ε",zeta:"ζ",eta:"η",theta:"θ",iota:"ι",kappa:"κ",lambda:"λ",mu:"μ",nu:"ν",xi:"ξ",omicron:"ο",pi:"π",rho:"ρ",sigmaf:"ς",sigma:"σ",tau:"τ",upsilon:"υ",phi:"φ",chi:"χ",psi:"ψ",omega:"ω",thetasym:"ϑ",upsih:"ϒ",piv:"ϖ",ensp:" ",emsp:" ",thinsp:" ",zwnj:"‌",zwj:"‍",lrm:"‎",rlm:"‏",ndash:"–",mdash:"—",lsquo:"‘",rsquo:"’",sbquo:"‚",ldquo:"“",rdquo:"”",bdquo:"„",dagger:"†",Dagger:"‡",bull:"•",hellip:"…",permil:"‰",prime:"′",Prime:"″",lsaquo:"‹",rsaquo:"›",oline:"‾",frasl:"⁄",euro:"€",image:"ℑ",weierp:"℘",real:"ℜ",trade:"™",alefsym:"ℵ",larr:"←",uarr:"↑",rarr:"→",darr:"↓",harr:"↔",crarr:"↵",lArr:"⇐",uArr:"⇑",rArr:"⇒",dArr:"⇓",hArr:"⇔",forall:"∀",part:"∂",exist:"∃",empty:"∅",nabla:"∇",isin:"∈",notin:"∉",ni:"∋",prod:"∏",sum:"∑",minus:"−",lowast:"∗",radic:"√",prop:"∝",infin:"∞",ang:"∠",and:"∧",or:"∨",cap:"∩",cup:"∪",int:"∫",there4:"∴",sim:"∼",cong:"≅",asymp:"≈",ne:"≠",equiv:"≡",le:"≤",ge:"≥",sub:"⊂",sup:"⊃",nsub:"⊄",sube:"⊆",supe:"⊇",oplus:"⊕",otimes:"⊗",perp:"⊥",sdot:"⋅",lceil:"⌈",rceil:"⌉",lfloor:"⌊",rfloor:"⌋",loz:"◊",spades:"♠",clubs:"♣",hearts:"♥",diams:"♦",lang:"⟨",rang:"⟩"}},function(e,t){"use strict";t.JSXSyntax={JSXAttribute:"JSXAttribute",JSXClosingElement:"JSXClosingElement",JSXElement:"JSXElement",JSXEmptyExpression:"JSXEmptyExpression",JSXExpressionContainer:"JSXExpressionContainer",JSXIdentifier:"JSXIdentifier",JSXMemberExpression:"JSXMemberExpression",JSXNamespacedName:"JSXNamespacedName",JSXOpeningElement:"JSXOpeningElement",JSXSpreadAttribute:"JSXSpreadAttribute",JSXText:"JSXText"}},function(e,t,n){"use strict";var r=n(13),i=function(){function e(e){this.type=r.JSXSyntax.JSXClosingElement,this.name=e}return e}();t.JSXClosingElement=i;var o=function(){function e(e,t,n){this.type=r.JSXSyntax.JSXElement,this.openingElement=e,this.children=t,this.closingElement=n}return e}();t.JSXElement=o;var a=function(){function e(){this.type=r.JSXSyntax.JSXEmptyExpression}return e}();t.JSXEmptyExpression=a;var s=function(){function e(e){this.type=r.JSXSyntax.JSXExpressionContainer,this.expression=e}return e}();t.JSXExpressionContainer=s;var u=function(){function e(e){this.type=r.JSXSyntax.JSXIdentifier,this.name=e}return e}();t.JSXIdentifier=u;var c=function(){function e(e,t){this.type=r.JSXSyntax.JSXMemberExpression,this.object=e,this.property=t}return e}();t.JSXMemberExpression=c;var l=function(){function e(e,t){this.type=r.JSXSyntax.JSXAttribute,this.name=e,this.value=t}return e}();t.JSXAttribute=l;var p=function(){function e(e,t){this.type=r.JSXSyntax.JSXNamespacedName,this.namespace=e,this.name=t}return e}();t.JSXNamespacedName=p;var f=function(){function e(e,t,n){this.type=r.JSXSyntax.JSXOpeningElement,this.name=e,this.selfClosing=t,this.attributes=n}return e}();t.JSXOpeningElement=f;var h=function(){function e(e){this.type=r.JSXSyntax.JSXSpreadAttribute,this.argument=e}return e}();t.JSXSpreadAttribute=h;var d=function(){function e(e,t){this.type=r.JSXSyntax.JSXText,this.value=e,this.raw=t}return e}();t.JSXText=d},function(e,t,n){"use strict";var r=n(8),i=n(6),o=n(7),a=function(){function e(){this.values=[],this.curly=this.paren=-1}return e.prototype.beforeFunctionExpression=function(e){return["(","{","[","in","typeof","instanceof","new","return","case","delete","throw","void","=","+=","-=","*=","**=","/=","%=","<<=",">>=",">>>=","&=","|=","^=",",","+","-","*","**","/","%","++","--","<<",">>",">>>","&","|","^","!","~","&&","||","?",":","===","==",">=","<=","<",">","!=","!=="].indexOf(e)>=0},e.prototype.isRegexStart=function(){var e=this.values[this.values.length-1],t=null!==e;switch(e){case"this":case"]":t=!1;break;case")":var n=this.values[this.paren-1];t="if"===n||"while"===n||"for"===n||"with"===n;break;case"}":if(t=!1,"function"===this.values[this.curly-3]){var r=this.values[this.curly-4];t=!!r&&!this.beforeFunctionExpression(r)}else if("function"===this.values[this.curly-4]){var i=this.values[this.curly-5];t=!i||!this.beforeFunctionExpression(i)}}return t},e.prototype.push=function(e){e.type===o.Token.Punctuator||e.type===o.Token.Keyword?("{"===e.value?this.curly=this.values.length:"("===e.value&&(this.paren=this.values.length),this.values.push(e.value)):this.values.push(null)},e}(),s=function(){function e(e,t){this.errorHandler=new i.ErrorHandler,this.errorHandler.tolerant=!!t&&("boolean"==typeof t.tolerant&&t.tolerant),this.scanner=new r.Scanner(e,this.errorHandler),this.scanner.trackComment=!!t&&("boolean"==typeof t.comment&&t.comment),this.trackRange=!!t&&("boolean"==typeof t.range&&t.range),this.trackLoc=!!t&&("boolean"==typeof t.loc&&t.loc),this.buffer=[],this.reader=new a}return e.prototype.errors=function(){return this.errorHandler.errors},e.prototype.getNextToken=function(){if(0===this.buffer.length){var e=this.scanner.scanComments();if(this.scanner.trackComment)for(var t=0;tr&&" "!==e[d+1],d=o);else if(!l(a))return le;m=m&&p(a)}u=u||h&&o-d-1>r&&" "!==e[d+1]}return s||u?" "===e[0]&&n>9?le:u?ce:ue:m&&!i(e)?ae:se}function d(e,t,n,r){e.dump=function(){function i(t){return u(e,t)}if(0===t.length)return"''";if(!e.noCompatMode&&oe.indexOf(t)!==-1)return"'"+t+"'";var o=e.indent*Math.max(1,n),s=e.lineWidth===-1?-1:Math.max(Math.min(e.lineWidth,40),e.lineWidth-o),c=r||e.flowLevel>-1&&n>=e.flowLevel;switch(h(t,c,e.indent,s,i)){case ae:return t;case se:return"'"+t.replace(/'/g,"''")+"'";case ue:return"|"+m(t,e.indent)+v(a(t,o));case ce:return">"+m(t,e.indent)+v(a(y(t,s),o));case le:return'"'+_(t,s)+'"';default:throw new O("impossible error: invalid scalar style")}}()}function m(e,t){var n=" "===e[0]?String(t):"",r="\n"===e[e.length-1],i=r&&("\n"===e[e.length-2]||"\n"===e),o=i?"+":r?"":"-";return n+o+"\n"}function v(e){return"\n"===e[e.length-1]?e.slice(0,-1):e}function y(e,t){for(var n,r,i=/(\n+)([^\n]*)/g,o=function(){var n=e.indexOf("\n");return n=n!==-1?n:e.length,i.lastIndex=n,g(e.slice(0,n),t)}(),a="\n"===e[0]||" "===e[0];r=i.exec(e);){var s=r[1],u=r[2];n=" "===u[0],o+=s+(a||n||""===u?"":"\n")+g(u,t),a=n}return o}function g(e,t){if(""===e||" "===e[0])return e;for(var n,r,i=/ [^ ]/g,o=0,a=0,s=0,u="";n=i.exec(e);)s=n.index,s-o>t&&(r=a>o?a:s,u+="\n"+e.slice(o,r),o=r+1),a=s;return u+="\n",u+=e.length-o>t&&a>o?e.slice(o,a)+"\n"+e.slice(a+1):e.slice(o),u.slice(1)}function _(e){for(var t,n,r="",o=0;o1024&&(s+="? "),s+=e.dump+": ",E(e,t,a,!1,!1)&&(s+=e.dump,u+=s));e.tag=c,e.dump="{"+u+"}"}function k(e,t,n,r){var i,o,a,u,c,l,p="",f=e.tag,h=Object.keys(n);if(e.sortKeys===!0)h.sort();else if("function"==typeof e.sortKeys)h.sort(e.sortKeys);else if(e.sortKeys)throw new O("sortKeys must be a boolean or a function");for(i=0,o=h.length;i1024,c&&(l+=e.dump&&F===e.dump.charCodeAt(0)?"?":"? "),l+=e.dump,c&&(l+=s(e,t)),E(e,t+1,u,!0,c)&&(l+=e.dump&&F===e.dump.charCodeAt(0)?":":": ",l+=e.dump,p+=l));e.tag=f, +e.dump=p||"{}"}function S(e,t,n){var r,i,o,a,s,u;for(i=n?e.explicitTypes:e.implicitTypes,o=0,a=i.length;o tag resolver accepts not "'+u+'" style');r=s.represent[u](t,u)}e.dump=r}return!0}return!1}function E(e,t,n,r,i,o){e.tag=null,e.dump=n,S(e,n,!1)||S(e,n,!0);var a=N.call(e.dump);r&&(r=e.flowLevel<0||e.flowLevel>t);var s,u,c="[object Object]"===a||"[object Array]"===a;if(c&&(s=e.duplicates.indexOf(n),u=s!==-1),(null!==e.tag&&"?"!==e.tag||u||2!==e.indent&&t>0)&&(i=!1),u&&e.usedDuplicates[s])e.dump="*ref_"+s;else{if(c&&u&&!e.usedDuplicates[s]&&(e.usedDuplicates[s]=!0),"[object Object]"===a)r&&0!==Object.keys(e.dump).length?(k(e,t,e.dump,i),u&&(e.dump="&ref_"+s+e.dump)):(w(e,t,e.dump),u&&(e.dump="&ref_"+s+" "+e.dump));else if("[object Array]"===a)r&&0!==e.dump.length?(x(e,t,e.dump,i),u&&(e.dump="&ref_"+s+e.dump)):(b(e,t,e.dump),u&&(e.dump="&ref_"+s+" "+e.dump));else{if("[object String]"!==a){if(e.skipInvalid)return!1;throw new O("unacceptable kind of an object to dump "+a)}"?"!==e.tag&&d(e,e.dump,t,o)}null!==e.tag&&"?"!==e.tag&&(e.dump="!<"+e.tag+"> "+e.dump)}return!0}function C(e,t){var n,r,i=[],o=[];for(A(e,i,o),n=0,r=o.length;n1&&void 0!==arguments[1]?arguments[1]:"";if(m.List.isList(e))return e.some(function(e){return m.Map.isMap(e)&&e.get("in")===t})}function s(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";if(m.List.isList(e))return e.some(function(e){return m.Map.isMap(e)&&e.get("type")===t})}function u(e,t){var n=b(e).getIn(["paths"].concat((0,f.default)(t)),(0,m.fromJS)({})),r=n.get("parameters")||new m.List,i=s(r,"file")?"multipart/form-data":a(r,"formData")?"application/x-www-form-urlencoded":n.get("consumes_value");return(0,m.fromJS)({requestContentType:i,responseContentType:n.get("produces_value")})}function c(e,t){return b(e).getIn(["paths"].concat((0,f.default)(t),["consumes"]),(0,m.fromJS)({}))}function l(e){return m.Map.isMap(e)?e:new m.Map}Object.defineProperty(t,"__esModule",{value:!0}),t.validateBeforeExecute=t.canExecuteScheme=t.operationScheme=t.hasHost=t.allowTryItOutFor=t.requestFor=t.responseFor=t.requests=t.responses=t.taggedOperations=t.operationsWithTags=t.tagDetails=t.tags=t.operationsWithRootInherited=t.schemes=t.host=t.basePath=t.definitions=t.findDefinition=t.securityDefinitions=t.security=t.produces=t.consumes=t.operations=t.paths=t.semver=t.version=t.externalDocs=t.info=t.spec=t.specResolved=t.specJson=t.specSource=t.specStr=t.url=t.lastError=void 0;var p=n(435),f=r(p);t.getParameter=i,t.parameterValues=o,t.parametersIncludeIn=a,t.parametersIncludeType=s,t.contentTypeValues=u,t.operationConsumes=c;var h=n(430),d=n(183),m=n(168),v="default",y=["get","put","post","delete","options","head","patch"],g=function(e){return e||(0,m.Map)()},_=(t.lastError=(0,h.createSelector)(g,function(e){return e.get("lastError")}),t.url=(0,h.createSelector)(g,function(e){return e.get("url")}),t.specStr=(0,h.createSelector)(g,function(e){return e.get("spec")||""}),t.specSource=(0,h.createSelector)(g,function(e){return e.get("specSource")||"not-editor"}),t.specJson=(0,h.createSelector)(g,function(e){return e.get("json",(0,m.Map)())}),t.specResolved=(0,h.createSelector)(g,function(e){return e.get("resolved",(0,m.Map)())})),b=t.spec=function(e){var t=_(e);return t},x=t.info=(0,h.createSelector)(b,function(e){return l(e&&e.get("info"))}),w=(t.externalDocs=(0,h.createSelector)(b,function(e){return l(e&&e.get("externalDocs"))}),t.version=(0,h.createSelector)(x,function(e){return e&&e.get("version")})),k=(t.semver=(0,h.createSelector)(w,function(e){return/v?([0-9]*)\.([0-9]*)\.([0-9]*)/i.exec(e).slice(1)}),t.paths=(0,h.createSelector)(b,function(e){return e.get("paths")})),S=t.operations=(0,h.createSelector)(k,function(e){if(!e||e.size<1)return(0,m.List)();var t=(0,m.List)();return e&&e.forEach?(e.forEach(function(e,n){return e&&e.forEach?void e.forEach(function(e,r){y.indexOf(r)!==-1&&(t=t.push((0,m.fromJS)({path:n,method:r,operation:e,id:r+"-"+n})))}):{}}),t):(0,m.List)()}),E=t.consumes=(0,h.createSelector)(b,function(e){return(0,m.Set)(e.get("consumes"))}),C=t.produces=(0,h.createSelector)(b,function(e){return(0,m.Set)(e.get("produces"))}),A=(t.security=(0,h.createSelector)(b,function(e){return e.get("security",(0,m.List)())}),t.securityDefinitions=(0,h.createSelector)(b,function(e){return e.get("securityDefinitions")}),t.findDefinition=function(e,t){return _(e).getIn(["definitions",t],null)},t.definitions=(0,h.createSelector)(b,function(e){return e.get("definitions")||(0,m.Map)()}),t.basePath=(0,h.createSelector)(b,function(e){return e.get("basePath")}),t.host=(0,h.createSelector)(b,function(e){return e.get("host")}),t.schemes=(0,h.createSelector)(b,function(e){return e.get("schemes",(0,m.Map)())}),t.operationsWithRootInherited=(0,h.createSelector)(S,E,C,function(e,t,n){return e.map(function(e){return e.update("operation",function(e){if(e){if(!m.Map.isMap(e))return;return e.withMutations(function(e){return e.get("consumes")||e.update("consumes",function(e){return(0,m.Set)(e).merge(t)}),e.get("produces")||e.update("produces",function(e){return(0,m.Set)(e).merge(n)}),e})}return(0,m.Map)()})})})),T=t.tags=(0,h.createSelector)(b,function(e){return e.get("tags",(0,m.List)())}),D=t.tagDetails=function(e,t){var n=T(e)||(0,m.List)();return n.filter(m.Map.isMap).find(function(e){return e.get("name")===t},(0,m.Map)())},M=t.operationsWithTags=(0,h.createSelector)(A,function(e){return e.reduce(function(e,t){var n=(0,m.Set)(t.getIn(["operation","tags"]));return n.count()<1?e.update(v,(0,m.List)(),function(e){return e.push(t)}):n.reduce(function(e,n){return e.update(n,(0,m.List)(),function(e){return e.push(t)})},e)},(0,m.Map)())}),O=(t.taggedOperations=function(e){return function(t){var n=t.getConfigs,r=n(),i=r.operationsSorter;return M(e).map(function(t,n){var r="function"==typeof i?i:d.sorters.operationsSorter[i],o=r?t.sort(r):t;return(0,m.Map)({tagDetails:D(e,n),operations:o})})}},t.responses=(0,h.createSelector)(g,function(e){return e.get("responses",(0,m.Map)())})),P=t.requests=(0,h.createSelector)(g,function(e){return e.get("requests",(0,m.Map)())}),I=(t.responseFor=function(e,t,n){return O(e).getIn([t,n],null)},t.requestFor=function(e,t,n){return P(e).getIn([t,n],null)},t.allowTryItOutFor=function(){return!0},t.hasHost=(0,h.createSelector)(b,function(e){var t=e.get("host");return"string"==typeof t&&t.length>0&&"/"!==t[0]}),t.operationScheme=function(e,t,n){var r=e.get("url"),i=r.match(/^([a-z][a-z0-9+\-.]*):/),o=Array.isArray(i)?i[1]:null;return e.getIn(["scheme",t,n])||e.getIn(["scheme","_defaultScheme"])||o||""});t.canExecuteScheme=function(e,t,n){return["http","https"].indexOf(I(e,t,n))>-1},t.validateBeforeExecute=function(e,t){var n=b(e).getIn(["paths"].concat((0,f.default)(t),["parameters"]),(0,m.fromJS)([])),r=!0;return n.forEach(function(e){var t=e.get("errors");t&&t.count()&&(r=!1)}),r}},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.updateSpec=function(e,t){var n=t.specActions;return function(){e.apply(void 0,arguments),n.parseToJson.apply(n,arguments)}},t.updateJsonSpec=function(e,t){var n=t.specActions;return function(){e.apply(void 0,arguments),n.resolveSpec.apply(n,arguments)}},t.executeRequest=function(e,t){var n=t.specActions;return function(t){return n.logRequest(t),e(t)}}},function(e,t,n){"use strict";function r(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=e.getComponents,n=e.getStore,r=e.getSystem,i=o.getComponent,s=o.render,u=o.makeMappedContainer,c=(0,a.memoize)(i.bind(null,r,n,t)),l=(0,a.memoize)(u.bind(null,r,n,c,t));return{rootInjects:{getComponent:c,makeMappedContainer:l,render:s.bind(null,r,n,i,t)}}};var i=n(485),o=r(i),a=n(183)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0}),t.getComponent=t.render=t.makeMappedContainer=void 0;var i=n(94),o=r(i),a=n(60),s=r(a),u=n(446),c=r(u),l=n(486),p=r(l),f=n(145),h=r(f),d=n(146),m=r(d),v=n(489),y=r(v),g=n(490),_=r(g),b=n(498),x=r(b),w=n(528),k=r(w),S=n(666),E=n(677),C=r(E),A=function(e,t){return function(n){function r(){return(0,h.default)(this,r),(0,y.default)(this,(r.__proto__||(0,p.default)(r)).apply(this,arguments))}return(0,_.default)(r,n),(0,m.default)(r,[{key:"render",value:function(){return x.default.createElement(t,(0,c.default)({},e(),this.props,this.context))}}]),r}(b.Component)},T=function(e,t){return function(n){function r(){return(0,h.default)(this,r),(0,y.default)(this,(r.__proto__||(0,p.default)(r)).apply(this,arguments))}return(0,_.default)(r,n),(0,m.default)(r,[{key:"render",value:function(){return x.default.createElement(S.Provider,{store:e},x.default.createElement(t,(0,c.default)({},this.props,this.context)))}}]),r}(b.Component)},D=function(e,t,n){var r=A(e,t,n),i=(0,S.connect)(function(e){return{state:e}})(r);return n?T(n,i):i},M=function(e,t,n,r){for(var i in t){var o=t[i];"function"==typeof o&&o(n[i],r[i],e())}},O=(t.makeMappedContainer=function(e,t,n,r,i,o){return function(t){function r(t,n){(0,h.default)(this,r);var i=(0,y.default)(this,(r.__proto__||(0,p.default)(r)).call(this,t,n));return M(e,o,t,{}),i}return(0,_.default)(r,t),(0,m.default)(r,[{key:"componentWillReceiveProps",value:function(t){M(e,o,t,this.props)}},{key:"render",value:function(){var e=(0,C.default)(this.props,o?(0,s.default)(o):[]),t=n(i,"root");return x.default.createElement(t,e)}}]),r}(b.Component)},t.render=function(e,t,n,r,i){var o=document.querySelector(i),a=n(e,t,r,"App","root");k.default.render(x.default.createElement(a,null),o)},function(e){return x.default.createClass({render:function(){return e(this.props)}})}),P=function(e){var t=e.name;return x.default.createElement("div",{style:{padding:"1em",color:"#aaa"}},"😱 ",x.default.createElement("i",null,"Could not render ","t"===t?"this component":t,", see the console."))},I=function(e){var t=function(e){return!(e.prototype&&e.prototype.isReactComponent)},n=t(e)?O(e):e,r=n.prototype.render;return n.prototype.render=function(){try{for(var e=arguments.length,t=Array(e),i=0;i1){for(var v=Array(m),y=0;y1){for(var _=Array(g),b=0;b8&&x<=11),S=32,E=String.fromCharCode(S),C={beforeInput:{phasedRegistrationNames:{bubbled:"onBeforeInput",captured:"onBeforeInputCapture"},dependencies:["topCompositionEnd","topKeyPress","topTextInput","topPaste"]},compositionEnd:{phasedRegistrationNames:{bubbled:"onCompositionEnd",captured:"onCompositionEndCapture"},dependencies:["topBlur","topCompositionEnd","topKeyDown","topKeyPress","topKeyUp","topMouseDown"]},compositionStart:{phasedRegistrationNames:{bubbled:"onCompositionStart",captured:"onCompositionStartCapture"},dependencies:["topBlur","topCompositionStart","topKeyDown","topKeyPress","topKeyUp","topMouseDown"]},compositionUpdate:{phasedRegistrationNames:{bubbled:"onCompositionUpdate",captured:"onCompositionUpdateCapture"},dependencies:["topBlur","topCompositionUpdate","topKeyDown","topKeyPress","topKeyUp","topMouseDown"]}},A=!1,T=null,D={eventTypes:C,extractEvents:function(e,t,n,r){return[c(e,t,n,r),f(e,t,n,r)]}};e.exports=D},function(e,t,n){"use strict";function r(e,t,n){var r=t.dispatchConfig.phasedRegistrationNames[n];return y(e,r)}function i(e,t,n){var i=r(e,n,t);i&&(n._dispatchListeners=m(n._dispatchListeners,i),n._dispatchInstances=m(n._dispatchInstances,e))}function o(e){e&&e.dispatchConfig.phasedRegistrationNames&&d.traverseTwoPhase(e._targetInst,i,e)}function a(e){if(e&&e.dispatchConfig.phasedRegistrationNames){var t=e._targetInst,n=t?d.getParentInstance(t):null;d.traverseTwoPhase(n,i,e)}}function s(e,t,n){if(n&&n.dispatchConfig.registrationName){var r=n.dispatchConfig.registrationName,i=y(e,r);i&&(n._dispatchListeners=m(n._dispatchListeners,i),n._dispatchInstances=m(n._dispatchInstances,e))}}function u(e){e&&e.dispatchConfig.registrationName&&s(e._targetInst,null,e)}function c(e){v(e,o)}function l(e){v(e,a)}function p(e,t,n,r){d.traverseEnterLeave(n,r,s,e,t)}function f(e){v(e,u)}var h=n(538),d=n(540),m=n(542),v=n(543),y=(n(504),h.getListener),g={accumulateTwoPhaseDispatches:c,accumulateTwoPhaseDispatchesSkipTarget:l,accumulateDirectDispatches:f,accumulateEnterLeaveDispatches:p};e.exports=g},function(e,t,n){"use strict";function r(e){return"button"===e||"input"===e||"select"===e||"textarea"===e}function i(e,t,n){switch(e){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":return!(!n.disabled||!r(t));default:return!1}}var o=n(531),a=n(539),s=n(540),u=n(541),c=n(542),l=n(543),p=(n(508),{}),f=null,h=function(e,t){e&&(s.executeDispatchesInOrder(e,t),e.isPersistent()||e.constructor.release(e))},d=function(e){return h(e,!0)},m=function(e){return h(e,!1)},v=function(e){return"."+e._rootNodeID},y={injection:{injectEventPluginOrder:a.injectEventPluginOrder,injectEventPluginsByName:a.injectEventPluginsByName},putListener:function(e,t,n){"function"!=typeof n?o("94",t,typeof n):void 0;var r=v(e),i=p[t]||(p[t]={});i[r]=n;var s=a.registrationNameModules[t];s&&s.didPutListener&&s.didPutListener(e,t,n)},getListener:function(e,t){var n=p[t];if(i(t,e._currentElement.type,e._currentElement.props))return null;var r=v(e);return n&&n[r]},deleteListener:function(e,t){var n=a.registrationNameModules[t];n&&n.willDeleteListener&&n.willDeleteListener(e,t);var r=p[t];if(r){var i=v(e);delete r[i]}},deleteAllListeners:function(e){var t=v(e);for(var n in p)if(p.hasOwnProperty(n)&&p[n][t]){var r=a.registrationNameModules[n];r&&r.willDeleteListener&&r.willDeleteListener(e,n),delete p[n][t]}},extractEvents:function(e,t,n,r){for(var i,o=a.plugins,s=0;s-1?void 0:a("96",e),!c.plugins[n]){t.extractEvents?void 0:a("97",e),c.plugins[n]=t;var r=t.eventTypes;for(var o in r)i(r[o],t,o)?void 0:a("98",o,e)}}}function i(e,t,n){c.eventNameDispatchConfigs.hasOwnProperty(n)?a("99",n):void 0,c.eventNameDispatchConfigs[n]=e;var r=e.phasedRegistrationNames;if(r){for(var i in r)if(r.hasOwnProperty(i)){var s=r[i];o(s,t,n)}return!0}return!!e.registrationName&&(o(e.registrationName,t,n),!0)}function o(e,t,n){c.registrationNameModules[e]?a("100",e):void 0,c.registrationNameModules[e]=t,c.registrationNameDependencies[e]=t.eventTypes[n].dependencies}var a=n(531),s=(n(508),null),u={},c={plugins:[],eventNameDispatchConfigs:{},registrationNameModules:{},registrationNameDependencies:{},possibleRegistrationNames:null,injectEventPluginOrder:function(e){s?a("101"):void 0,s=Array.prototype.slice.call(e),r()},injectEventPluginsByName:function(e){var t=!1;for(var n in e)if(e.hasOwnProperty(n)){var i=e[n];u.hasOwnProperty(n)&&u[n]===i||(u[n]?a("102",n):void 0,u[n]=i,t=!0)}t&&r()},getPluginModuleForEvent:function(e){var t=e.dispatchConfig;if(t.registrationName)return c.registrationNameModules[t.registrationName]||null;if(void 0!==t.phasedRegistrationNames){var n=t.phasedRegistrationNames;for(var r in n)if(n.hasOwnProperty(r)){var i=c.registrationNameModules[n[r]];if(i)return i}}return null},_resetEventPlugins:function(){s=null;for(var e in u)u.hasOwnProperty(e)&&delete u[e];c.plugins.length=0;var t=c.eventNameDispatchConfigs;for(var n in t)t.hasOwnProperty(n)&&delete t[n];var r=c.registrationNameModules;for(var i in r)r.hasOwnProperty(i)&&delete r[i]}};e.exports=c},function(e,t,n){"use strict";function r(e){return"topMouseUp"===e||"topTouchEnd"===e||"topTouchCancel"===e}function i(e){return"topMouseMove"===e||"topTouchMove"===e}function o(e){return"topMouseDown"===e||"topTouchStart"===e}function a(e,t,n,r){var i=e.type||"unknown-event";e.currentTarget=y.getNodeFromInstance(r),t?m.invokeGuardedCallbackWithCatch(i,n,e):m.invokeGuardedCallback(i,n,e),e.currentTarget=null}function s(e,t){var n=e._dispatchListeners,r=e._dispatchInstances;if(Array.isArray(n))for(var i=0;i1?1-t:void 0;return this._fallbackText=i.slice(e,s),this._fallbackText}}),o.addPoolingTo(r),e.exports=r},[1231,531],function(e,t,n){"use strict";function r(){return!o&&i.canUseDOM&&(o="textContent"in document.documentElement?"textContent":"innerText"),o}var i=n(544),o=null;e.exports=r},function(e,t,n){"use strict";function r(e,t,n,r){return i.call(this,e,t,n,r)}var i=n(549),o={data:null};i.augmentClass(r,o),e.exports=r},function(e,t,n){"use strict";function r(e,t,n,r){this.dispatchConfig=e,this._targetInst=t,this.nativeEvent=n;var i=this.constructor.Interface;for(var o in i)if(i.hasOwnProperty(o)){var s=i[o];s?this[o]=s(n):"target"===o?this.target=r:this[o]=n[o]}var u=null!=n.defaultPrevented?n.defaultPrevented:n.returnValue===!1;return u?this.isDefaultPrevented=a.thatReturnsTrue:this.isDefaultPrevented=a.thatReturnsFalse,this.isPropagationStopped=a.thatReturnsFalse,this}var i=n(500),o=n(546),a=n(505),s=(n(504),"function"==typeof Proxy,["dispatchConfig","_targetInst","nativeEvent","isDefaultPrevented","isPropagationStopped","_dispatchListeners","_dispatchInstances"]),u={type:null,target:null,currentTarget:a.thatReturnsNull,eventPhase:null,bubbles:null,cancelable:null,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:null,isTrusted:null};i(r.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=a.thatReturnsTrue)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=a.thatReturnsTrue)},persist:function(){this.isPersistent=a.thatReturnsTrue},isPersistent:a.thatReturnsFalse,destructor:function(){var e=this.constructor.Interface;for(var t in e)this[t]=null;for(var n=0;n8));var R=!1;k.canUseDOM&&(R=D("input")&&(!("documentMode"in document)||document.documentMode>9));var j={eventTypes:O,_allowSimulatedPassThrough:!0,_isInputEventSupported:R,extractEvents:function(e,t,n,o){var a,s,u=t?S.getNodeFromInstance(t):window;if(i(u)?N?a=l:s=p:M(u)?R?a=_:(a=v,s=m):y(u)&&(a=g),a){var c=a(e,t,n);if(c){var f=r(c,n,o);return f}}s&&s(e,u,t),"topBlur"===e&&b(t,u)}};e.exports=j},function(e,t,n){"use strict";function r(){A.ReactReconcileTransaction&&x?void 0:l("123")}function i(){this.reinitializeTransaction(),this.dirtyComponentsLength=null,this.callbackQueue=f.getPooled(),this.reconcileTransaction=A.ReactReconcileTransaction.getPooled(!0)}function o(e,t,n,i,o,a){return r(),x.batchedUpdates(e,t,n,i,o,a)}function a(e,t){return e._mountOrder-t._mountOrder}function s(e){var t=e.dirtyComponentsLength;t!==y.length?l("124",t,y.length):void 0,y.sort(a),g++;for(var n=0;n]/,u=n(576),c=u(function(e,t){if(e.namespaceURI!==o.svg||"innerHTML"in e)e.innerHTML=t;else{r=r||document.createElement("div"),r.innerHTML=""+t+"";for(var n=r.firstChild;n.firstChild;)e.appendChild(n.firstChild)}});if(i.canUseDOM){var l=document.createElement("div");l.innerHTML=" ",""===l.innerHTML&&(c=function(e,t){if(e.parentNode&&e.parentNode.replaceChild(e,e),a.test(t)||"<"===t[0]&&s.test(t)){e.innerHTML=String.fromCharCode(65279)+t;var n=e.firstChild;1===n.data.length?e.removeChild(n):n.deleteData(0,1)}else e.innerHTML=t}),l=null}e.exports=c},function(e,t){"use strict";var n=function(e){return"undefined"!=typeof MSApp&&MSApp.execUnsafeLocalFunction?function(t,n,r,i){MSApp.execUnsafeLocalFunction(function(){return e(t,n,r,i)})}:e};e.exports=n},function(e,t,n){"use strict";var r=n(544),i=n(578),o=n(575),a=function(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.nodeType)return void(n.nodeValue=t)}e.textContent=t};r.canUseDOM&&("textContent"in document.documentElement||(a=function(e,t){return 3===e.nodeType?void(e.nodeValue=t):void o(e,i(t))})),e.exports=a},function(e,t){"use strict";function n(e){var t=""+e,n=i.exec(t);if(!n)return t;var r,o="",a=0,s=0;for(a=n.index;a]/;e.exports=r},function(e,t,n){"use strict";var r=n(531),i=n(573),o=n(544),a=n(580),s=n(505),u=(n(508),{dangerouslyReplaceNodeWithMarkup:function(e,t){if(o.canUseDOM?void 0:r("56"),t?void 0:r("57"),"HTML"===e.nodeName?r("58"):void 0,"string"==typeof t){var n=a(t,s)[0];e.parentNode.replaceChild(n,e)}else i.replaceChildWithTree(e,t)}});e.exports=u},function(e,t,n){"use strict";function r(e){var t=e.match(l);return t&&t[1].toLowerCase()}function i(e,t){var n=c;c?void 0:u(!1);var i=r(e),o=i&&s(i);if(o){n.innerHTML=o[1]+e+o[2];for(var l=o[0];l--;)n=n.lastChild}else n.innerHTML=e;var p=n.getElementsByTagName("script");p.length&&(t?void 0:u(!1),a(p).forEach(t));for(var f=Array.from(n.childNodes);n.lastChild;)n.removeChild(n.lastChild);return f}var o=n(544),a=n(581),s=n(582),u=n(508),c=o.canUseDOM?document.createElement("div"):null,l=/^\s*<(\w+)/;e.exports=i},function(e,t,n){"use strict";function r(e){var t=e.length;if(Array.isArray(e)||"object"!=typeof e&&"function"!=typeof e?a(!1):void 0,"number"!=typeof t?a(!1):void 0,0===t||t-1 in e?void 0:a(!1),"function"==typeof e.callee?a(!1):void 0,e.hasOwnProperty)try{return Array.prototype.slice.call(e)}catch(e){}for(var n=Array(t),r=0;r":a.innerHTML="<"+e+">",s[e]=!a.firstChild),s[e]?f[e]:null}var i=n(544),o=n(508),a=i.canUseDOM?document.createElement("div"):null,s={},u=[1,'"],c=[1,"","
                "],l=[3,"","
                "],p=[1,'',""],f={"*":[1,"?
                ","
                "],area:[1,"",""],col:[2,"","
                "],legend:[1,"
                ","
                "],param:[1,"",""],tr:[2,"","
                "],optgroup:u,option:u,caption:c,colgroup:c,tbody:c,tfoot:c,thead:c,td:l,th:l},h=["circle","clipPath","defs","ellipse","g","image","line","linearGradient","mask","path","pattern","polygon","polyline","radialGradient","rect","stop","text","tspan"];h.forEach(function(e){f[e]=p,s[e]=!0}),e.exports=r},function(e,t,n){"use strict";var r=n(572),i=n(530),o={dangerouslyProcessChildrenUpdates:function(e,t){var n=i.getNodeFromInstance(e);r.processUpdates(n,t)}};e.exports=o},function(e,t,n){"use strict";function r(e){if(e){var t=e._currentElement._owner||null;if(t){var n=t.getName();if(n)return" This DOM node was rendered by `"+n+"`."}}return""}function i(e,t){t&&(Y[e._tag]&&(null!=t.children||null!=t.dangerouslySetInnerHTML?v("137",e._tag,e._currentElement._owner?" Check the render method of "+e._currentElement._owner.getName()+".":""):void 0),null!=t.dangerouslySetInnerHTML&&(null!=t.children?v("60"):void 0,"object"==typeof t.dangerouslySetInnerHTML&&K in t.dangerouslySetInnerHTML?void 0:v("61")),null!=t.style&&"object"!=typeof t.style?v("62",r(e)):void 0)}function o(e,t,n,r){if(!(r instanceof N)){var i=e._hostContainerInfo,o=i._node&&i._node.nodeType===H,s=o?i._node:i._ownerDocument;z(t,s),r.getReactMountReady().enqueue(a,{inst:e,registrationName:t,listener:n})}}function a(){var e=this;S.putListener(e.inst,e.registrationName,e.listener)}function s(){var e=this;D.postMountWrapper(e)}function u(){var e=this;P.postMountWrapper(e)}function c(){var e=this;M.postMountWrapper(e)}function l(){j.track(this)}function p(){var e=this;e._rootNodeID?void 0:v("63");var t=L(e);switch(t?void 0:v("64"),e._tag){case"iframe":case"object":e._wrapperState.listeners=[C.trapBubbledEvent("topLoad","load",t)];break;case"video":case"audio":e._wrapperState.listeners=[];for(var n in J)J.hasOwnProperty(n)&&e._wrapperState.listeners.push(C.trapBubbledEvent(n,J[n],t));break;case"source":e._wrapperState.listeners=[C.trapBubbledEvent("topError","error",t)];break;case"img":e._wrapperState.listeners=[C.trapBubbledEvent("topError","error",t),C.trapBubbledEvent("topLoad","load",t)];break;case"form":e._wrapperState.listeners=[C.trapBubbledEvent("topReset","reset",t),C.trapBubbledEvent("topSubmit","submit",t)];break;case"input":case"select":case"textarea":e._wrapperState.listeners=[C.trapBubbledEvent("topInvalid","invalid",t)]}}function f(){O.postUpdateWrapper(this)}function h(e){Q.call(Z,e)||($.test(e)?void 0:v("65",e),Z[e]=!0)}function d(e,t){return e.indexOf("-")>=0||null!=t.is}function m(e){var t=e.type;h(t),this._currentElement=e,this._tag=t.toLowerCase(),this._namespaceURI=null,this._renderedChildren=null,this._previousStyle=null,this._previousStyleCopy=null,this._hostNode=null,this._hostParent=null,this._rootNodeID=0,this._domID=0,this._hostContainerInfo=null,this._wrapperState=null,this._topLevelWrapper=null,this._flags=0}var v=n(531),y=n(500),g=n(585),_=n(587),b=n(573),x=n(574),w=n(532),k=n(595),S=n(538),E=n(539),C=n(597),A=n(533),T=n(530),D=n(600),M=n(603),O=n(604),P=n(605),I=(n(558),n(606)),N=n(624),R=(n(505),n(578)),j=(n(508),n(562),n(613),n(560)),F=(n(627),n(504),A),B=S.deleteListener,L=T.getNodeFromInstance,z=C.listenTo,q=E.registrationNameModules,U={string:!0,number:!0},W="style",K="__html",V={children:null,dangerouslySetInnerHTML:null,suppressContentEditableWarning:null},H=11,J={topAbort:"abort",topCanPlay:"canplay",topCanPlayThrough:"canplaythrough",topDurationChange:"durationchange",topEmptied:"emptied",topEncrypted:"encrypted",topEnded:"ended",topError:"error",topLoadedData:"loadeddata",topLoadedMetadata:"loadedmetadata",topLoadStart:"loadstart",topPause:"pause",topPlay:"play",topPlaying:"playing",topProgress:"progress",topRateChange:"ratechange",topSeeked:"seeked",topSeeking:"seeking",topStalled:"stalled",topSuspend:"suspend",topTimeUpdate:"timeupdate",topVolumeChange:"volumechange",topWaiting:"waiting"},G={area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0},X={listing:!0,pre:!0,textarea:!0},Y=y({menuitem:!0},G),$=/^[a-zA-Z][a-zA-Z:_\.\-\d]*$/,Z={},Q={}.hasOwnProperty,ee=1;m.displayName="ReactDOMComponent",m.Mixin={mountComponent:function(e,t,n,r){this._rootNodeID=ee++,this._domID=n._idCounter++,this._hostParent=t,this._hostContainerInfo=n;var o=this._currentElement.props;switch(this._tag){case"audio":case"form":case"iframe":case"img":case"link":case"object":case"source":case"video":this._wrapperState={listeners:null},e.getReactMountReady().enqueue(p,this);break;case"input":D.mountWrapper(this,o,t),o=D.getHostProps(this,o),e.getReactMountReady().enqueue(l,this),e.getReactMountReady().enqueue(p,this);break;case"option":M.mountWrapper(this,o,t),o=M.getHostProps(this,o);break;case"select":O.mountWrapper(this,o,t),o=O.getHostProps(this,o),e.getReactMountReady().enqueue(p,this);break;case"textarea":P.mountWrapper(this,o,t),o=P.getHostProps(this,o),e.getReactMountReady().enqueue(l,this),e.getReactMountReady().enqueue(p,this)}i(this,o);var a,f;null!=t?(a=t._namespaceURI,f=t._tag):n._tag&&(a=n._namespaceURI,f=n._tag),(null==a||a===x.svg&&"foreignobject"===f)&&(a=x.html),a===x.html&&("svg"===this._tag?a=x.svg:"math"===this._tag&&(a=x.mathml)),this._namespaceURI=a;var h;if(e.useCreateElement){var d,m=n._ownerDocument;if(a===x.html)if("script"===this._tag){var v=m.createElement("div"),y=this._currentElement.type;v.innerHTML="<"+y+">",d=v.removeChild(v.firstChild)}else d=o.is?m.createElement(this._currentElement.type,o.is):m.createElement(this._currentElement.type);else d=m.createElementNS(a,this._currentElement.type);T.precacheNode(this,d),this._flags|=F.hasCachedChildNodes,this._hostParent||k.setAttributeForRoot(d),this._updateDOMProperties(null,o,e);var _=b(d);this._createInitialChildren(e,o,r,_),h=_}else{var w=this._createOpenTagMarkupAndPutListeners(e,o),S=this._createContentMarkup(e,o,r);h=!S&&G[this._tag]?w+"/>":w+">"+S+""}switch(this._tag){case"input":e.getReactMountReady().enqueue(s,this),o.autoFocus&&e.getReactMountReady().enqueue(g.focusDOMComponent,this);break;case"textarea":e.getReactMountReady().enqueue(u,this),o.autoFocus&&e.getReactMountReady().enqueue(g.focusDOMComponent,this);break;case"select":o.autoFocus&&e.getReactMountReady().enqueue(g.focusDOMComponent,this);break;case"button":o.autoFocus&&e.getReactMountReady().enqueue(g.focusDOMComponent,this);break;case"option":e.getReactMountReady().enqueue(c,this)}return h},_createOpenTagMarkupAndPutListeners:function(e,t){var n="<"+this._currentElement.type;for(var r in t)if(t.hasOwnProperty(r)){var i=t[r];if(null!=i)if(q.hasOwnProperty(r))i&&o(this,r,i,e);else{r===W&&(i&&(i=this._previousStyleCopy=y({},t.style)),i=_.createMarkupForStyles(i,this));var a=null;null!=this._tag&&d(this._tag,t)?V.hasOwnProperty(r)||(a=k.createMarkupForCustomAttribute(r,i)):a=k.createMarkupForProperty(r,i),a&&(n+=" "+a)}}return e.renderToStaticMarkup?n:(this._hostParent||(n+=" "+k.createMarkupForRoot()),n+=" "+k.createMarkupForID(this._domID))},_createContentMarkup:function(e,t,n){var r="",i=t.dangerouslySetInnerHTML;if(null!=i)null!=i.__html&&(r=i.__html);else{var o=U[typeof t.children]?t.children:null,a=null!=o?null:t.children;if(null!=o)r=R(o);else if(null!=a){var s=this.mountChildren(a,e,n);r=s.join("")}}return X[this._tag]&&"\n"===r.charAt(0)?"\n"+r:r},_createInitialChildren:function(e,t,n,r){var i=t.dangerouslySetInnerHTML;if(null!=i)null!=i.__html&&b.queueHTML(r,i.__html);else{var o=U[typeof t.children]?t.children:null,a=null!=o?null:t.children;if(null!=o)""!==o&&b.queueText(r,o);else if(null!=a)for(var s=this.mountChildren(a,e,n),u=0;u0&&r.length<20?n+" (keys: "+r.join(", ")+")":n}function o(e,t){var n=s.get(e);if(!n){return null}return n}var a=n(531),s=(n(513),n(608)),u=(n(558),n(552)),c=(n(508),n(504),{isMounted:function(e){var t=s.get(e);return!!t&&!!t._renderedComponent},enqueueCallback:function(e,t,n){c.validateCallback(t,n);var i=o(e);return i?(i._pendingCallbacks?i._pendingCallbacks.push(t):i._pendingCallbacks=[t],void r(i)):null},enqueueCallbackInternal:function(e,t){e._pendingCallbacks?e._pendingCallbacks.push(t):e._pendingCallbacks=[t],r(e)},enqueueForceUpdate:function(e){var t=o(e,"forceUpdate");t&&(t._pendingForceUpdate=!0,r(t))},enqueueReplaceState:function(e,t,n){var i=o(e,"replaceState");i&&(i._pendingStateQueue=[t],i._pendingReplaceState=!0,void 0!==n&&null!==n&&(c.validateCallback(n,"replaceState"),i._pendingCallbacks?i._pendingCallbacks.push(n):i._pendingCallbacks=[n]),r(i))},enqueueSetState:function(e,t){var n=o(e,"setState");if(n){var i=n._pendingStateQueue||(n._pendingStateQueue=[]);i.push(t),r(n)}},enqueueElementInternal:function(e,t,n){e._pendingElement=t,e._context=n,r(e)},validateCallback:function(e,t){e&&"function"!=typeof e?a("122",t,i(e)):void 0}});e.exports=c},function(e,t,n){"use strict";var r=(n(500),n(505)),i=(n(504),r);e.exports=i},function(e,t,n){"use strict";var r=n(500),i=n(573),o=n(530),a=function(e){this._currentElement=null,this._hostNode=null,this._hostParent=null,this._hostContainerInfo=null,this._domID=0};r(a.prototype,{mountComponent:function(e,t,n,r){var a=n._idCounter++;this._domID=a,this._hostParent=t,this._hostContainerInfo=n;var s=" react-empty: "+this._domID+" ";if(e.useCreateElement){var u=n._ownerDocument,c=u.createComment(s);return o.precacheNode(this,c),i(c)}return e.renderToStaticMarkup?"":""},receiveComponent:function(){},getHostNode:function(){return o.getNodeFromInstance(this)},unmountComponent:function(){o.uncacheNode(this)}}),e.exports=a},function(e,t,n){"use strict";function r(e,t){"_hostNode"in e?void 0:u("33"),"_hostNode"in t?void 0:u("33");for(var n=0,r=e;r;r=r._hostParent)n++;for(var i=0,o=t;o;o=o._hostParent)i++;for(;n-i>0;)e=e._hostParent,n--;for(;i-n>0;)t=t._hostParent,i--;for(var a=n;a--;){if(e===t)return e;e=e._hostParent,t=t._hostParent}return null}function i(e,t){"_hostNode"in e?void 0:u("35"),"_hostNode"in t?void 0:u("35");for(;t;){if(t===e)return!0;t=t._hostParent}return!1}function o(e){return"_hostNode"in e?void 0:u("36"),e._hostParent}function a(e,t,n){for(var r=[];e;)r.push(e),e=e._hostParent;var i;for(i=r.length;i-- >0;)t(r[i],"captured",n);for(i=0;i0;)n(u[c],"captured",o)}var u=n(531);n(508);e.exports={isAncestor:i,getLowestCommonAncestor:r,getParentInstance:o,traverseTwoPhase:a,traverseEnterLeave:s}},function(e,t,n){"use strict";var r=n(531),i=n(500),o=n(572),a=n(573),s=n(530),u=n(578),c=(n(508),n(627),function(e){this._currentElement=e,this._stringText=""+e,this._hostNode=null,this._hostParent=null,this._domID=0,this._mountIndex=0,this._closingComment=null,this._commentNodes=null});i(c.prototype,{mountComponent:function(e,t,n,r){var i=n._idCounter++,o=" react-text: "+i+" ",c=" /react-text ";if(this._domID=i,this._hostParent=t,e.useCreateElement){var l=n._ownerDocument,p=l.createComment(o),f=l.createComment(c),h=a(l.createDocumentFragment());return a.queueChild(h,a(p)),this._stringText&&a.queueChild(h,a(l.createTextNode(this._stringText))),a.queueChild(h,a(f)),s.precacheNode(this,p),this._closingComment=f,h}var d=u(this._stringText);return e.renderToStaticMarkup?d:""+d+""},receiveComponent:function(e,t){if(e!==this._currentElement){this._currentElement=e;var n=""+e;if(n!==this._stringText){this._stringText=n;var r=this.getHostNode();o.replaceDelimitedText(r[0],r[1],n)}}},getHostNode:function(){var e=this._commentNodes;if(e)return e;if(!this._closingComment)for(var t=s.getNodeFromInstance(this),n=t.nextSibling;;){if(null==n?r("67",this._domID):void 0,8===n.nodeType&&" /react-text "===n.nodeValue){this._closingComment=n;break}n=n.nextSibling}return e=[this._hostNode,this._closingComment],this._commentNodes=e,e},unmountComponent:function(){this._closingComment=null,this._commentNodes=null,s.uncacheNode(this)}}),e.exports=c},function(e,t,n){"use strict";function r(){this.reinitializeTransaction()}var i=n(500),o=n(552),a=n(559),s=n(505),u={initialize:s,close:function(){f.isBatchingUpdates=!1}},c={initialize:s,close:o.flushBatchedUpdates.bind(o)},l=[c,u];i(r.prototype,a,{getTransactionWrappers:function(){return l}});var p=new r,f={isBatchingUpdates:!1,batchedUpdates:function(e,t,n,r,i,o){var a=f.isBatchingUpdates;return f.isBatchingUpdates=!0,a?e(t,n,r,i,o):p.perform(e,null,t,n,r,i,o)}};e.exports=f},function(e,t,n){"use strict";function r(e){for(;e._hostParent;)e=e._hostParent;var t=p.getNodeFromInstance(e),n=t.parentNode;return p.getClosestInstanceFromNode(n)}function i(e,t){this.topLevelType=e,this.nativeEvent=t,this.ancestors=[]}function o(e){var t=h(e.nativeEvent),n=p.getClosestInstanceFromNode(t),i=n;do e.ancestors.push(i),i=i&&r(i);while(i);for(var o=0;ot.end?(n=t.end,r=t.start):(n=t.start,r=t.end),i.moveToElementText(e),i.moveStart("character",n),i.setEndPoint("EndToStart",i),i.moveEnd("character",r-n),i.select()}function s(e,t){if(window.getSelection){var n=window.getSelection(),r=e[l()].length,i=Math.min(t.start,r),o=void 0===t.end?i:Math.min(t.end,r);if(!n.extend&&i>o){var a=o;o=i,i=a}var s=c(e,i),u=c(e,o);if(s&&u){var p=document.createRange();p.setStart(s.node,s.offset),n.removeAllRanges(),i>o?(n.addRange(p),n.extend(u.node,u.offset)):(p.setEnd(u.node,u.offset),n.addRange(p))}}}var u=n(544),c=n(639),l=n(547),p=u.canUseDOM&&"selection"in document&&!("getSelection"in window),f={getOffsets:p?i:o,setOffsets:p?a:s};e.exports=f},function(e,t){"use strict";function n(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function r(e){for(;e;){if(e.nextSibling)return e.nextSibling;e=e.parentNode}}function i(e,t){for(var i=n(e),o=0,a=0;i;){if(3===i.nodeType){if(a=o+i.textContent.length,o<=t&&a>=t)return{node:i,offset:t-o};o=a}i=n(r(i))}}e.exports=i},function(e,t,n){"use strict";function r(e,t){return!(!e||!t)&&(e===t||!i(e)&&(i(t)?r(e,t.parentNode):"contains"in e?e.contains(t):!!e.compareDocumentPosition&&!!(16&e.compareDocumentPosition(t))))}var i=n(641);e.exports=r},function(e,t,n){"use strict";function r(e){return i(e)&&3==e.nodeType}var i=n(642);e.exports=r},function(e,t){"use strict";function n(e){var t=e?e.ownerDocument||e:document,n=t.defaultView||window;return!(!e||!("function"==typeof n.Node?e instanceof n.Node:"object"==typeof e&&"number"==typeof e.nodeType&&"string"==typeof e.nodeName))}e.exports=n},function(e,t){"use strict";function n(e){if(e=e||("undefined"!=typeof document?document:void 0),"undefined"==typeof e)return null;try{return e.activeElement||e.body}catch(t){return e.body}}e.exports=n},function(e,t){"use strict";var n={xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace"},r={accentHeight:"accent-height",accumulate:0,additive:0,alignmentBaseline:"alignment-baseline",allowReorder:"allowReorder",alphabetic:0,amplitude:0,arabicForm:"arabic-form",ascent:0,attributeName:"attributeName",attributeType:"attributeType",autoReverse:"autoReverse",azimuth:0,baseFrequency:"baseFrequency",baseProfile:"baseProfile",baselineShift:"baseline-shift",bbox:0,begin:0,bias:0,by:0,calcMode:"calcMode",capHeight:"cap-height",clip:0,clipPath:"clip-path",clipRule:"clip-rule",clipPathUnits:"clipPathUnits",colorInterpolation:"color-interpolation",colorInterpolationFilters:"color-interpolation-filters",colorProfile:"color-profile",colorRendering:"color-rendering",contentScriptType:"contentScriptType",contentStyleType:"contentStyleType",cursor:0,cx:0,cy:0,d:0,decelerate:0,descent:0,diffuseConstant:"diffuseConstant",direction:0,display:0,divisor:0,dominantBaseline:"dominant-baseline",dur:0,dx:0,dy:0,edgeMode:"edgeMode",elevation:0,enableBackground:"enable-background",end:0,exponent:0,externalResourcesRequired:"externalResourcesRequired",fill:0,fillOpacity:"fill-opacity",fillRule:"fill-rule",filter:0,filterRes:"filterRes",filterUnits:"filterUnits",floodColor:"flood-color",floodOpacity:"flood-opacity",focusable:0,fontFamily:"font-family",fontSize:"font-size",fontSizeAdjust:"font-size-adjust",fontStretch:"font-stretch",fontStyle:"font-style",fontVariant:"font-variant",fontWeight:"font-weight",format:0,from:0,fx:0,fy:0,g1:0,g2:0,glyphName:"glyph-name",glyphOrientationHorizontal:"glyph-orientation-horizontal",glyphOrientationVertical:"glyph-orientation-vertical",glyphRef:"glyphRef",gradientTransform:"gradientTransform",gradientUnits:"gradientUnits",hanging:0,horizAdvX:"horiz-adv-x",horizOriginX:"horiz-origin-x",ideographic:0,imageRendering:"image-rendering",in:0,in2:0,intercept:0,k:0,k1:0,k2:0,k3:0,k4:0,kernelMatrix:"kernelMatrix",kernelUnitLength:"kernelUnitLength",kerning:0,keyPoints:"keyPoints",keySplines:"keySplines",keyTimes:"keyTimes",lengthAdjust:"lengthAdjust",letterSpacing:"letter-spacing",lightingColor:"lighting-color",limitingConeAngle:"limitingConeAngle",local:0,markerEnd:"marker-end",markerMid:"marker-mid",markerStart:"marker-start",markerHeight:"markerHeight",markerUnits:"markerUnits",markerWidth:"markerWidth",mask:0,maskContentUnits:"maskContentUnits",maskUnits:"maskUnits",mathematical:0,mode:0,numOctaves:"numOctaves",offset:0,opacity:0,operator:0,order:0,orient:0,orientation:0,origin:0,overflow:0,overlinePosition:"overline-position",overlineThickness:"overline-thickness",paintOrder:"paint-order",panose1:"panose-1",pathLength:"pathLength",patternContentUnits:"patternContentUnits",patternTransform:"patternTransform",patternUnits:"patternUnits",pointerEvents:"pointer-events",points:0,pointsAtX:"pointsAtX",pointsAtY:"pointsAtY",pointsAtZ:"pointsAtZ",preserveAlpha:"preserveAlpha",preserveAspectRatio:"preserveAspectRatio",primitiveUnits:"primitiveUnits",r:0,radius:0,refX:"refX",refY:"refY",renderingIntent:"rendering-intent",repeatCount:"repeatCount",repeatDur:"repeatDur",requiredExtensions:"requiredExtensions",requiredFeatures:"requiredFeatures",restart:0,result:0,rotate:0,rx:0,ry:0,scale:0,seed:0,shapeRendering:"shape-rendering",slope:0,spacing:0,specularConstant:"specularConstant",specularExponent:"specularExponent",speed:0,spreadMethod:"spreadMethod",startOffset:"startOffset",stdDeviation:"stdDeviation",stemh:0,stemv:0,stitchTiles:"stitchTiles",stopColor:"stop-color",stopOpacity:"stop-opacity",strikethroughPosition:"strikethrough-position",strikethroughThickness:"strikethrough-thickness",string:0,stroke:0,strokeDasharray:"stroke-dasharray",strokeDashoffset:"stroke-dashoffset",strokeLinecap:"stroke-linecap",strokeLinejoin:"stroke-linejoin",strokeMiterlimit:"stroke-miterlimit",strokeOpacity:"stroke-opacity",strokeWidth:"stroke-width",surfaceScale:"surfaceScale",systemLanguage:"systemLanguage",tableValues:"tableValues",targetX:"targetX",targetY:"targetY",textAnchor:"text-anchor",textDecoration:"text-decoration",textRendering:"text-rendering",textLength:"textLength",to:0,transform:0,u1:0,u2:0,underlinePosition:"underline-position",underlineThickness:"underline-thickness",unicode:0,unicodeBidi:"unicode-bidi",unicodeRange:"unicode-range",unitsPerEm:"units-per-em",vAlphabetic:"v-alphabetic",vHanging:"v-hanging",vIdeographic:"v-ideographic",vMathematical:"v-mathematical",values:0,vectorEffect:"vector-effect",version:0,vertAdvY:"vert-adv-y",vertOriginX:"vert-origin-x",vertOriginY:"vert-origin-y",viewBox:"viewBox",viewTarget:"viewTarget",visibility:0,widths:0,wordSpacing:"word-spacing",writingMode:"writing-mode",x:0,xHeight:"x-height",x1:0,x2:0,xChannelSelector:"xChannelSelector",xlinkActuate:"xlink:actuate",xlinkArcrole:"xlink:arcrole",xlinkHref:"xlink:href",xlinkRole:"xlink:role",xlinkShow:"xlink:show",xlinkTitle:"xlink:title",xlinkType:"xlink:type",xmlBase:"xml:base",xmlns:0,xmlnsXlink:"xmlns:xlink",xmlLang:"xml:lang",xmlSpace:"xml:space",y:0,y1:0,y2:0,yChannelSelector:"yChannelSelector",z:0,zoomAndPan:"zoomAndPan"},i={Properties:{},DOMAttributeNamespaces:{xlinkActuate:n.xlink,xlinkArcrole:n.xlink,xlinkHref:n.xlink,xlinkRole:n.xlink,xlinkShow:n.xlink,xlinkTitle:n.xlink,xlinkType:n.xlink,xmlBase:n.xml,xmlLang:n.xml,xmlSpace:n.xml},DOMAttributeNames:{}};Object.keys(r).forEach(function(e){i.Properties[e]=0,r[e]&&(i.DOMAttributeNames[e]=r[e])}),e.exports=i},function(e,t,n){"use strict";function r(e){if("selectionStart"in e&&u.hasSelectionCapabilities(e))return{start:e.selectionStart,end:e.selectionEnd};if(window.getSelection){var t=window.getSelection();return{anchorNode:t.anchorNode,anchorOffset:t.anchorOffset,focusNode:t.focusNode,focusOffset:t.focusOffset}}if(document.selection){var n=document.selection.createRange();return{parentElement:n.parentElement(),text:n.text,top:n.boundingTop,left:n.boundingLeft}}}function i(e,t){if(g||null==m||m!==l())return null;var n=r(m);if(!y||!f(y,n)){y=n;var i=c.getPooled(d.select,v,e,t);return i.type="select",i.target=m,o.accumulateTwoPhaseDispatches(i),i}return null}var o=n(537),a=n(544),s=n(530),u=n(637),c=n(549),l=n(643),p=n(563),f=n(613),h=a.canUseDOM&&"documentMode"in document&&document.documentMode<=11,d={select:{phasedRegistrationNames:{bubbled:"onSelect",captured:"onSelectCapture"},dependencies:["topBlur","topContextMenu","topFocus","topKeyDown","topKeyUp","topMouseDown","topMouseUp","topSelectionChange"]}},m=null,v=null,y=null,g=!1,_=!1,b={eventTypes:d,extractEvents:function(e,t,n,r){if(!_)return null;var o=t?s.getNodeFromInstance(t):window;switch(e){case"topFocus":(p(o)||"true"===o.contentEditable)&&(m=o,v=t,y=null);break;case"topBlur":m=null,v=null,y=null;break;case"topMouseDown":g=!0;break;case"topContextMenu":case"topMouseUp":return g=!1,i(n,r);case"topSelectionChange":if(h)break;case"topKeyDown":case"topKeyUp":return i(n,r)}return null},didPutListener:function(e,t,n){"onSelect"===t&&(_=!0)}};e.exports=b},function(e,t,n){"use strict";function r(e){return"."+e._rootNodeID}function i(e){return"button"===e||"input"===e||"select"===e||"textarea"===e}var o=n(531),a=n(633),s=n(537),u=n(530),c=n(647),l=n(648),p=n(549),f=n(649),h=n(650),d=n(566),m=n(653),v=n(654),y=n(655),g=n(567),_=n(656),b=n(505),x=n(651),w=(n(508),{}),k={};["abort","animationEnd","animationIteration","animationStart","blur","canPlay","canPlayThrough","click","contextMenu","copy","cut","doubleClick","drag","dragEnd","dragEnter","dragExit","dragLeave","dragOver","dragStart","drop","durationChange","emptied","encrypted","ended","error","focus","input","invalid","keyDown","keyPress","keyUp","load","loadedData","loadedMetadata","loadStart","mouseDown","mouseMove","mouseOut","mouseOver","mouseUp","paste","pause","play","playing","progress","rateChange","reset","scroll","seeked","seeking","stalled","submit","suspend","timeUpdate","touchCancel","touchEnd","touchMove","touchStart","transitionEnd","volumeChange","waiting","wheel"].forEach(function(e){var t=e[0].toUpperCase()+e.slice(1),n="on"+t,r="top"+t,i={phasedRegistrationNames:{bubbled:n,captured:n+"Capture"},dependencies:[r]};w[e]=i,k[r]=i});var S={},E={eventTypes:w,extractEvents:function(e,t,n,r){var i=k[e];if(!i)return null;var a;switch(e){case"topAbort":case"topCanPlay":case"topCanPlayThrough":case"topDurationChange":case"topEmptied":case"topEncrypted":case"topEnded":case"topError":case"topInput":case"topInvalid":case"topLoad":case"topLoadedData":case"topLoadedMetadata":case"topLoadStart":case"topPause":case"topPlay":case"topPlaying":case"topProgress":case"topRateChange":case"topReset":case"topSeeked":case"topSeeking":case"topStalled":case"topSubmit":case"topSuspend":case"topTimeUpdate":case"topVolumeChange":case"topWaiting":a=p;break;case"topKeyPress":if(0===x(n))return null;case"topKeyDown":case"topKeyUp":a=h;break;case"topBlur":case"topFocus":a=f;break;case"topClick":if(2===n.button)return null;case"topDoubleClick":case"topMouseDown":case"topMouseMove":case"topMouseUp":case"topMouseOut":case"topMouseOver":case"topContextMenu":a=d;break;case"topDrag":case"topDragEnd":case"topDragEnter":case"topDragExit":case"topDragLeave":case"topDragOver":case"topDragStart":case"topDrop":a=m;break;case"topTouchCancel":case"topTouchEnd":case"topTouchMove":case"topTouchStart":a=v;break;case"topAnimationEnd":case"topAnimationIteration":case"topAnimationStart":a=c;break;case"topTransitionEnd":a=y;break;case"topScroll":a=g;break;case"topWheel":a=_;break;case"topCopy":case"topCut":case"topPaste":a=l}a?void 0:o("86",e);var u=a.getPooled(i,t,n,r);return s.accumulateTwoPhaseDispatches(u),u},didPutListener:function(e,t,n){if("onClick"===t&&!i(e._tag)){var o=r(e),s=u.getNodeFromInstance(e);S[o]||(S[o]=a.listen(s,"click",b))}},willDeleteListener:function(e,t){if("onClick"===t&&!i(e._tag)){var n=r(e);S[n].remove(),delete S[n]}}};e.exports=E},function(e,t,n){"use strict";function r(e,t,n,r){return i.call(this,e,t,n,r)}var i=n(549),o={animationName:null,elapsedTime:null,pseudoElement:null};i.augmentClass(r,o),e.exports=r},function(e,t,n){"use strict";function r(e,t,n,r){return i.call(this,e,t,n,r)}var i=n(549),o={clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}};i.augmentClass(r,o),e.exports=r},function(e,t,n){"use strict";function r(e,t,n,r){return i.call(this,e,t,n,r)}var i=n(567),o={relatedTarget:null};i.augmentClass(r,o),e.exports=r},function(e,t,n){"use strict";function r(e,t,n,r){return i.call(this,e,t,n,r)}var i=n(567),o=n(651),a=n(652),s=n(569),u={key:a,location:null,ctrlKey:null,shiftKey:null,altKey:null,metaKey:null,repeat:null,locale:null,getModifierState:s,charCode:function(e){return"keypress"===e.type?o(e):0},keyCode:function(e){return"keydown"===e.type||"keyup"===e.type?e.keyCode:0},which:function(e){return"keypress"===e.type?o(e):"keydown"===e.type||"keyup"===e.type?e.keyCode:0}};i.augmentClass(r,u),e.exports=r},function(e,t){"use strict";function n(e){var t,n=e.keyCode;return"charCode"in e?(t=e.charCode,0===t&&13===n&&(t=13)):t=n,t>=32||13===t?t:0}e.exports=n},function(e,t,n){"use strict";function r(e){if(e.key){var t=o[e.key]||e.key;if("Unidentified"!==t)return t}if("keypress"===e.type){var n=i(e);return 13===n?"Enter":String.fromCharCode(n)}return"keydown"===e.type||"keyup"===e.type?a[e.keyCode]||"Unidentified":""}var i=n(651),o={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},a={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"};e.exports=r},function(e,t,n){"use strict";function r(e,t,n,r){return i.call(this,e,t,n,r)}var i=n(566),o={dataTransfer:null};i.augmentClass(r,o),e.exports=r},function(e,t,n){"use strict";function r(e,t,n,r){return i.call(this,e,t,n,r)}var i=n(567),o=n(569),a={touches:null,targetTouches:null,changedTouches:null,altKey:null,metaKey:null,ctrlKey:null,shiftKey:null,getModifierState:o};i.augmentClass(r,a),e.exports=r},function(e,t,n){"use strict";function r(e,t,n,r){return i.call(this,e,t,n,r)}var i=n(549),o={propertyName:null,elapsedTime:null,pseudoElement:null};i.augmentClass(r,o),e.exports=r},function(e,t,n){"use strict";function r(e,t,n,r){return i.call(this,e,t,n,r)}var i=n(566),o={deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:null,deltaMode:null};i.augmentClass(r,o),e.exports=r},function(e,t,n){"use strict";function r(e,t){for(var n=Math.min(e.length,t.length),r=0;r.":"function"==typeof t?" Instead of passing a class like Foo, pass React.createElement(Foo) or .":null!=t&&void 0!==t.props?" This may be caused by unintentionally loading two independent copies of React.":"");var a,s=v.createElement(B,{child:t});if(e){var u=w.get(e);a=u._processChildContext(u._context)}else a=A;var l=f(n);if(l){var p=l._currentElement,d=p.props.child;if(M(d,t)){var m=l._renderedComponent.getPublicInstance(),y=r&&function(){r.call(m)};return L._updateRootComponent(l,s,a,n,y),m}L.unmountComponentAtNode(n)}var g=i(n),_=g&&!!o(g),b=c(n),x=_&&!l&&!b,k=L._renderNewRootComponent(s,n,x,a)._renderedComponent.getPublicInstance();return r&&r.call(k),k},render:function(e,t,n){return L._renderSubtreeIntoContainer(null,e,t,n)},unmountComponentAtNode:function(e){l(e)?void 0:h("40");var t=f(e);if(!t){c(e),1===e.nodeType&&e.hasAttribute(P);return!1}return delete j[t._instance.rootID],C.batchedUpdates(u,t,e,!1),!0},_mountImageIntoNode:function(e,t,n,o,a){if(l(t)?void 0:h("41"),o){var s=i(t);if(k.canReuseMarkup(e,s))return void g.precacheNode(n,s);var u=s.getAttribute(k.CHECKSUM_ATTR_NAME);s.removeAttribute(k.CHECKSUM_ATTR_NAME);var c=s.outerHTML;s.setAttribute(k.CHECKSUM_ATTR_NAME,u);var p=e,f=r(p,c),m=" (client) "+p.substring(f-20,f+20)+"\n (server) "+c.substring(f-20,f+20);t.nodeType===N?h("42",m):void 0}if(t.nodeType===N?h("43"):void 0,a.useCreateElement){for(;t.lastChild;)t.removeChild(t.lastChild);d.insertTreeBefore(t,e,null)}else D(t,e),g.precacheNode(n,t.firstChild)}};e.exports=L},function(e,t,n){"use strict";function r(e,t){var n={_topLevelWrapper:e,_idCounter:1,_ownerDocument:t?t.nodeType===i?t:t.ownerDocument:null,_node:t,_tag:t?t.nodeName.toLowerCase():null,_namespaceURI:t?t.namespaceURI:null};return n}var i=(n(627),9);e.exports=r},function(e,t){"use strict";var n={useCreateElement:!0,useFiber:!1};e.exports=n},function(e,t,n){"use strict";var r=n(661),i=/\/?>/,o=/^<\!\-\-/,a={CHECKSUM_ATTR_NAME:"data-react-checksum",addChecksumToMarkup:function(e){var t=r(e);return o.test(e)?e:e.replace(i," "+a.CHECKSUM_ATTR_NAME+'="'+t+'"$&')},canReuseMarkup:function(e,t){var n=t.getAttribute(a.CHECKSUM_ATTR_NAME);n=n&&parseInt(n,10);var i=r(e);return i===n}};e.exports=a},function(e,t){"use strict";function n(e){for(var t=1,n=0,i=0,o=e.length,a=o&-4;i3&&void 0!==arguments[3]?arguments[3]:{},c=Boolean(e),f=e||S,d=void 0;d="function"==typeof t?t:t?(0,y.default)(t):E;var v=n||C,g=r.pure,_=void 0===g||g,b=r.withRef,w=void 0!==b&&b,D=_&&v!==C,M=T++;return function(e){function t(e,t,n){var r=v(e,t,n);return r}var n="Connect("+s(e)+")",r=function(r){function s(e,t){i(this,s);var a=o(this,r.call(this,e,t));a.version=M,a.store=e.store||t.store,(0,k.default)(a.store,'Could not find "store" in either the context or '+('props of "'+n+'". ')+"Either wrap the root component in a , "+('or explicitly pass "store" as a prop to "'+n+'".'));var u=a.store.getState();return a.state={storeState:u},a.clearCache(),a}return a(s,r),s.prototype.shouldComponentUpdate=function(){return!_||this.haveOwnPropsChanged||this.hasStoreStateChanged},s.prototype.computeStateProps=function(e,t){if(!this.finalMapStateToProps)return this.configureFinalMapState(e,t);var n=e.getState(),r=this.doStatePropsDependOnOwnProps?this.finalMapStateToProps(n,t):this.finalMapStateToProps(n); +return r},s.prototype.configureFinalMapState=function(e,t){var n=f(e.getState(),t),r="function"==typeof n;return this.finalMapStateToProps=r?n:f,this.doStatePropsDependOnOwnProps=1!==this.finalMapStateToProps.length,r?this.computeStateProps(e,t):n},s.prototype.computeDispatchProps=function(e,t){if(!this.finalMapDispatchToProps)return this.configureFinalMapDispatch(e,t);var n=e.dispatch,r=this.doDispatchPropsDependOnOwnProps?this.finalMapDispatchToProps(n,t):this.finalMapDispatchToProps(n);return r},s.prototype.configureFinalMapDispatch=function(e,t){var n=d(e.dispatch,t),r="function"==typeof n;return this.finalMapDispatchToProps=r?n:d,this.doDispatchPropsDependOnOwnProps=1!==this.finalMapDispatchToProps.length,r?this.computeDispatchProps(e,t):n},s.prototype.updateStatePropsIfNeeded=function(){var e=this.computeStateProps(this.store,this.props);return(!this.stateProps||!(0,m.default)(e,this.stateProps))&&(this.stateProps=e,!0)},s.prototype.updateDispatchPropsIfNeeded=function(){var e=this.computeDispatchProps(this.store,this.props);return(!this.dispatchProps||!(0,m.default)(e,this.dispatchProps))&&(this.dispatchProps=e,!0)},s.prototype.updateMergedPropsIfNeeded=function(){var e=t(this.stateProps,this.dispatchProps,this.props);return!(this.mergedProps&&D&&(0,m.default)(e,this.mergedProps))&&(this.mergedProps=e,!0)},s.prototype.isSubscribed=function(){return"function"==typeof this.unsubscribe},s.prototype.trySubscribe=function(){c&&!this.unsubscribe&&(this.unsubscribe=this.store.subscribe(this.handleChange.bind(this)),this.handleChange())},s.prototype.tryUnsubscribe=function(){this.unsubscribe&&(this.unsubscribe(),this.unsubscribe=null)},s.prototype.componentDidMount=function(){this.trySubscribe()},s.prototype.componentWillReceiveProps=function(e){_&&(0,m.default)(e,this.props)||(this.haveOwnPropsChanged=!0)},s.prototype.componentWillUnmount=function(){this.tryUnsubscribe(),this.clearCache()},s.prototype.clearCache=function(){this.dispatchProps=null,this.stateProps=null,this.mergedProps=null,this.haveOwnPropsChanged=!0,this.hasStoreStateChanged=!0,this.haveStatePropsBeenPrecalculated=!1,this.statePropsPrecalculationError=null,this.renderedElement=null,this.finalMapDispatchToProps=null,this.finalMapStateToProps=null},s.prototype.handleChange=function(){if(this.unsubscribe){var e=this.store.getState(),t=this.state.storeState;if(!_||t!==e){if(_&&!this.doStatePropsDependOnOwnProps){var n=u(this.updateStatePropsIfNeeded,this);if(!n)return;n===A&&(this.statePropsPrecalculationError=A.value),this.haveStatePropsBeenPrecalculated=!0}this.hasStoreStateChanged=!0,this.setState({storeState:e})}}},s.prototype.getWrappedInstance=function(){return(0,k.default)(w,"To access the wrapped instance, you need to specify { withRef: true } as the fourth argument of the connect() call."),this.refs.wrappedInstance},s.prototype.render=function(){var t=this.haveOwnPropsChanged,n=this.hasStoreStateChanged,r=this.haveStatePropsBeenPrecalculated,i=this.statePropsPrecalculationError,o=this.renderedElement;if(this.haveOwnPropsChanged=!1,this.hasStoreStateChanged=!1,this.haveStatePropsBeenPrecalculated=!1,this.statePropsPrecalculationError=null,i)throw i;var a=!0,s=!0;_&&o&&(a=n||t&&this.doStatePropsDependOnOwnProps,s=t&&this.doDispatchPropsDependOnOwnProps);var u=!1,c=!1;r?u=!0:a&&(u=this.updateStatePropsIfNeeded()),s&&(c=this.updateDispatchPropsIfNeeded());var f=!0;return f=!!(u||c||t)&&this.updateMergedPropsIfNeeded(),!f&&o?o:(w?this.renderedElement=(0,p.createElement)(e,l({},this.mergedProps,{ref:"wrappedInstance"})):this.renderedElement=(0,p.createElement)(e,this.mergedProps),this.renderedElement)},s}(p.Component);return r.displayName=n,r.WrappedComponent=e,r.contextTypes={store:h.default},r.propTypes={store:h.default},(0,x.default)(r,e)}}t.__esModule=!0;var l=Object.assign||function(e){for(var t=1;t1),t}),s(e,c(e),n),u&&(n=i(n,l|p|f));for(var h=t.length;h--;)o(n,t[h]);return n});e.exports=h},function(e,t,n){function r(e,t,n,A,T,D){var M,I=t&k,N=t&S,j=t&E;if(n&&(M=T?n(e,A,T,D):n(e)),void 0!==M)return M;if(!x(e))return e;var F=_(e);if(F){if(M=v(e),!I)return l(e,M)}else{var B=m(e),L=B==O||B==P;if(b(e))return c(e,I);if(B==R||B==C||L&&!T){if(M=N||L?{}:g(e),!I)return N?f(e,u(M,e)):p(e,s(M,e))}else{if(!Z[B])return T?e:{};M=y(e,B,r,I)}}D||(D=new i);var z=D.get(e);if(z)return z;D.set(e,M);var q=j?N?d:h:N?keysIn:w,U=F?void 0:q(e);return o(U||e,function(i,o){U&&(o=i,i=e[o]),a(M,o,r(i,t,n,o,e,D))}),M}var i=n(250),o=n(679),a=n(680),s=n(683),u=n(685),c=n(689),l=n(690),p=n(691),f=n(694),h=n(697),d=n(699),m=n(286),v=n(700),y=n(701),g=n(711),_=n(193),b=n(274),x=n(221),w=n(269),k=1,S=2,E=4,C="[object Arguments]",A="[object Array]",T="[object Boolean]",D="[object Date]",M="[object Error]",O="[object Function]",P="[object GeneratorFunction]",I="[object Map]",N="[object Number]",R="[object Object]",j="[object RegExp]",F="[object Set]",B="[object String]",L="[object Symbol]",z="[object WeakMap]",q="[object ArrayBuffer]",U="[object DataView]",W="[object Float32Array]",K="[object Float64Array]",V="[object Int8Array]",H="[object Int16Array]",J="[object Int32Array]",G="[object Uint8Array]",X="[object Uint8ClampedArray]",Y="[object Uint16Array]",$="[object Uint32Array]",Z={};Z[C]=Z[A]=Z[q]=Z[U]=Z[T]=Z[D]=Z[W]=Z[K]=Z[V]=Z[H]=Z[J]=Z[I]=Z[N]=Z[R]=Z[j]=Z[F]=Z[B]=Z[L]=Z[G]=Z[X]=Z[Y]=Z[$]=!0,Z[M]=Z[O]=Z[z]=!1,e.exports=r},function(e,t){function n(e,t){for(var n=-1,r=null==e?0:e.length;++n0){if(++t>=r)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}var r=800,i=16,o=Date.now;e.exports=n},function(e,t,n){"use strict";function r(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){return{fn:o}};var i=n(322),o=r(i)},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){function t(e){for(var t,n=arguments.length,r=Array(n>1?n-1:0),o=1;o=a&&(t=console)[e].apply(t,r)}var n=e.configs,r={debug:0,info:1,log:2,warn:3,error:4},i=function(e){return r[e]||-1},o=n.logLevel,a=i(o);return t.warn=t.bind(null,"warn"),t.error=t.bind(null,"error"),t.info=t.bind(null,"info"),t.debug=t.bind(null,"debug"),{rootInjects:{log:t}}}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){return{fn:{AST:a},components:{JumpToPath:u.default}}};var o=n(729),a=i(o),s=n(761),u=r(s)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){function n(e,t,i){if(!e)return i&&i.start_mark?i.start_mark.line:0;if(t.length&&e.tag===b)for(r=0;r=t.column:t.line===e.start_mark.line?t.column>=e.start_mark.column:t.line===e.end_mark.line?t.column<=e.end_mark.column:e.start_mark.linet.line}var o=0;if(!e||[b,x].indexOf(e.tag)===-1)return i;if(e.tag===b)for(o=0;oo;)a(n[o++]);e._c=[],e._n=!1,t&&!e._h&&O(e)})}},O=function(e){v.call(s,function(){var t,n,r,i=e._v;if(P(e)&&(t=D(function(){w?b.emit("unhandledRejection",i,e):(n=s.onunhandledrejection)?n({promise:e,reason:i}):(r=s.console)&&r.error&&r.error("Unhandled promise rejection",i)}),e._h=w||P(e)?2:1),e._a=void 0,t)throw t.error})},P=function(e){if(1==e._h)return!1;for(var t,n=e._a||e._c,r=0;n.length>r;)if(t=n[r++],t.fail||!P(t.promise))return!1;return!0},I=function(e){v.call(s,function(){var t;w?b.emit("rejectionHandled",e):(t=s.onrejectionhandled)&&t({promise:e,reason:e._v})})},N=function(e){var t=this;t._d||(t._d=!0,t=t._w||t,t._v=e,t._s=2,t._a||(t._a=t._c.slice()),M(t,!0))},R=function(e){var t,n=this;if(!n._d){n._d=!0,n=n._w||n;try{if(n===e)throw _("Promise can't be resolved itself");(t=C(e))?y(function(){var r={_w:n,_d:!1};try{t.call(e,u(R,r,1),u(N,r,1))}catch(e){N.call(r,e)}}):(n._v=e,n._s=1,M(n,!1))}catch(e){N.call({_w:n,_d:!1},e)}}};S||(x=function(e){h(this,x,g,"_h"),f(e),r.call(this);try{e(u(R,this,1),u(N,this,1))}catch(e){N.call(this,e)}},r=function(e){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1},r.prototype=n(739)(x.prototype,{then:function(e,t){var n=A(m(this,x));return n.ok="function"!=typeof e||e,n.fail="function"==typeof t&&t,n.domain=w?b.domain:void 0,this._c.push(n),this._a&&this._a.push(n),this._s&&M(this,!1),n.promise},catch:function(e){return this.then(void 0,e)}}),T=function(){var e=new r;this.promise=e,this.resolve=u(R,e,1),this.reject=u(N,e,1)}),l(l.G+l.W+l.F*!S,{Promise:x}),n(107)(x,g),n(740)(g),o=n(59)[g],l(l.S+l.F*!S,g,{reject:function(e){var t=A(this),n=t.reject;return n(e),t.promise}}),l(l.S+l.F*(a||!S),g,{resolve:function(e){if(e instanceof x&&E(e.constructor,this))return e;var t=A(this),n=t.resolve;return n(e),t.promise}}),l(l.S+l.F*!(S&&n(442)(function(e){x.all(e).catch(k)})),g,{all:function(e){var t=this,n=A(t),r=n.resolve,i=n.reject,o=D(function(){var n=[],o=0,a=1;d(e,!1,function(e){var s=o++,u=!1;n.push(void 0),a++,t.resolve(e).then(function(e){u||(u=!0,n[s]=e,--a||r(n))},i)}),--a||r(n)});return o&&i(o.error),n.promise},race:function(e){var t=this,n=A(t),r=n.reject,i=D(function(){d(e,!1,function(e){t.resolve(e).then(n.resolve,r)})});return i&&r(i.error),n.promise}})},function(e,t){e.exports=function(e,t,n,r){if(!(e instanceof t)||void 0!==r&&r in e)throw TypeError(n+": incorrect invocation!");return e}},function(e,t,n){var r=n(82),i=n(439),o=n(440),a=n(86),s=n(72),u=n(181),c={},l={},t=e.exports=function(e,t,n,p,f){var h,d,m,v,y=f?function(){return e}:u(e),g=r(n,p,t?2:1),_=0;if("function"!=typeof y)throw TypeError(e+" is not iterable!");if(o(y)){for(h=s(e.length);h>_;_++)if(v=t?g(a(d=e[_])[0],d[1]):g(e[_]),v===c||v===l)return v}else for(m=y.call(e);!(d=m.next()).done;)if(v=i(m,g,d.value,t),v===c||v===l)return v};t.BREAK=c,t.RETURN=l},function(e,t,n){var r=n(86),i=n(83),o=n(108)("species");e.exports=function(e,t){var n,a=r(e).constructor;return void 0===a||void 0==(n=r(a)[o])?t:i(n)}},function(e,t,n){var r,i,o,a=n(82),s=n(737),u=n(106),c=n(91),l=n(77),p=l.process,f=l.setImmediate,h=l.clearImmediate,d=l.MessageChannel,m=0,v={},y="onreadystatechange",g=function(){var e=+this;if(v.hasOwnProperty(e)){var t=v[e];delete v[e],t()}},_=function(e){g.call(e.data)};f&&h||(f=function(e){for(var t=[],n=1;arguments.length>n;)t.push(arguments[n++]);return v[++m]=function(){s("function"==typeof e?e:Function(e),t)},r(m),m},h=function(e){delete v[e]},"process"==n(70)(p)?r=function(e){p.nextTick(a(g,e,1))}:d?(i=new d,o=i.port2,i.port1.onmessage=_,r=a(o.postMessage,o,1)):l.addEventListener&&"function"==typeof postMessage&&!l.importScripts?(r=function(e){l.postMessage(e+"","*")},l.addEventListener("message",_,!1)):r=y in c("script")?function(e){u.appendChild(c("script"))[y]=function(){u.removeChild(this),g.call(e)}}:function(e){setTimeout(a(g,e,1),0)}),e.exports={set:f,clear:h}},50,function(e,t,n){var r=n(77),i=n(736).set,o=r.MutationObserver||r.WebKitMutationObserver,a=r.process,s=r.Promise,u="process"==n(70)(a);e.exports=function(){var e,t,n,c=function(){var r,i;for(u&&(r=a.domain)&&r.exit();e;){i=e.fn,e=e.next;try{i()}catch(r){throw e?n():t=void 0,r}}t=void 0,r&&r.enter()};if(u)n=function(){a.nextTick(c)};else if(o){var l=!0,p=document.createTextNode("");new o(c).observe(p,{characterData:!0}),n=function(){p.data=l=!l}}else if(s&&s.resolve){var f=s.resolve();n=function(){f.then(c)}}else n=function(){i.call(r,c)};return function(r){var i={fn:r,next:void 0};t&&(t.next=i),e||(e=i,n()),t=i}}},function(e,t,n){var r=n(84);e.exports=function(e,t,n){for(var i in t)n&&e[i]?e[i]=t[i]:r(e,i,t[i]);return e}},function(e,t,n){"use strict";var r=n(77),i=n(59),o=n(85),a=n(89),s=n(108)("species");e.exports=function(e){var t="function"==typeof i[e]?i[e]:r[e];a&&t&&!t[s]&&o.f(t,s,{configurable:!0,get:function(){return this}})}},function(e,t,n){(function(){var e,r,i,o,a,s,u,c,l,p,f,h,d;e=this.composer=n(742),r=this.constructor=n(746),i=this.dumper=n(751),o=this.errors=n(744),a=this.events=n(743),s=this.loader=n(756),u=this.nodes=n(745),c=this.parser=n(760),l=this.reader=n(757),p=this.resolver=n(755),f=this.scanner=n(758),h=this.tokens=n(759),d=n(747),this.scan=function(e,t){var n,r;for(null==t&&(t=s.Loader),n=new t(e),r=[];n.check_token();)r.push(n.get_token());return r},this.parse=function(e,t){var n,r;for(null==t&&(t=s.Loader),n=new t(e),r=[];n.check_event();)r.push(n.get_event());return r},this.compose=function(e,t){var n;return null==t&&(t=s.Loader),n=new t(e),n.get_single_node()},this.compose_all=function(e,t){var n,r;for(null==t&&(t=s.Loader),n=new t(e),r=[];n.check_node();)r.push(n.get_node());return r},this.load=function(e,t){var n;return null==t&&(t=s.Loader),n=new t(e),n.get_single_data()},this.load_all=function(e,t){var n,r;for(null==t&&(t=s.Loader),n=new t(e),r=[];n.check_data();)r.push(n.get_data());return r},this.emit=function(e,t,n,r){var o,a,s,u,c;null==n&&(n=i.Dumper),null==r&&(r={}),a=t||new d.StringStream,o=new n(a,r);try{for(u=0,c=e.length;u0&&(a=this.buffer[u-1],e.call(r,a)<0);)if(u--,this.pointer-u>n/2-1){o=" ... ",u+=5;break}for(c="",i=this.pointer;in/2-1){c=" ... ",i-=5;break}return""+new Array(t).join(" ")+o+this.buffer.slice(u,i)+c+"\n"+new Array(t+this.pointer-u+o.length).join(" ")+"^"},t.prototype.toString=function(){var e,t;return e=this.get_snippet(),t=" on line "+(this.line+1)+", column "+(this.column+1),e?t:t+":\n"+e},t}(),this.YAMLError=function(e){function n(e){this.message=e,n.__super__.constructor.call(this),this.stack=this.toString()+"\n"+(new Error).stack.split("\n").slice(1).join("\n")}return t(n,e),n.prototype.toString=function(){return this.message},n}(Error),this.MarkedYAMLError=function(e){function n(e,t,r,i,o){this.context=e,this.context_mark=t,this.problem=r,this.problem_mark=i,this.note=o,n.__super__.constructor.call(this)}return t(n,e),n.prototype.toString=function(){var e;return e=[],null!=this.context&&e.push(this.context),null==this.context_mark||null!=this.problem&&null!=this.problem_mark&&this.context_mark.line===this.problem_mark.line&&this.context_mark.column===this.problem_mark.column||e.push(this.context_mark.toString()),null!=this.problem&&e.push(this.problem),null!=this.problem_mark&&e.push(this.problem_mark.toString()),null!=this.note&&e.push(this.note),e.join("\n")},n}(this.YAMLError)}).call(this)},function(e,t){(function(){var e,t=function(e,t){function r(){this.constructor=e}for(var i in t)n.call(t,i)&&(e[i]=t[i]);return r.prototype=t.prototype,e.prototype=new r,e.__super__=t.prototype,e},n={}.hasOwnProperty;e=0,this.Node=function(){function t(t,n,r,i){this.tag=t,this.value=n,this.start_mark=r,this.end_mark=i,this.unique_id="node_"+e++}return t}(),this.ScalarNode=function(e){function n(e,t,r,i,o){this.tag=e,this.value=t,this.start_mark=r,this.end_mark=i,this.style=o,n.__super__.constructor.apply(this,arguments)}return t(n,e),n.prototype.id="scalar",n}(this.Node),this.CollectionNode=function(e){function n(e,t,r,i,o){this.tag=e,this.value=t,this.start_mark=r,this.end_mark=i,this.flow_style=o,n.__super__.constructor.apply(this,arguments)}return t(n,e),n}(this.Node),this.SequenceNode=function(e){function n(){return n.__super__.constructor.apply(this,arguments)}return t(n,e),n.prototype.id="sequence",n}(this.CollectionNode),this.MappingNode=function(e){function n(){return n.__super__.constructor.apply(this,arguments)}return t(n,e),n.prototype.id="mapping",n}(this.CollectionNode)}).call(this)},function(e,t,n){(function(e){(function(){var r,i,o,a=function(e,t){function n(){this.constructor=e}for(var r in t)s.call(t,r)&&(e[r]=t[r]);return n.prototype=t.prototype,e.prototype=new n,e.__super__=t.prototype,e},s={}.hasOwnProperty,u=[].indexOf||function(e){for(var t=0,n=this.length;t=0)throw new t.ConstructorError(null,null,"found unconstructable recursive node",e.start_mark);if(this.constructing_nodes.push(e.unique_id),n=null,s=null,e.tag in this.yaml_constructors)n=this.yaml_constructors[e.tag];else{for(a in this.yaml_multi_constructors)if(e.tag.indexOf(0===a)){s=e.tag.slice(a.length),n=this.yaml_multi_constructors[a];break}null==n&&(null in this.yaml_multi_constructors?(s=e.tag,n=this.yaml_multi_constructors[null]):null in this.yaml_constructors?n=this.yaml_constructors[null]:e instanceof i.ScalarNode?n=this.construct_scalar:e instanceof i.SequenceNode?n=this.construct_sequence:e instanceof i.MappingNode&&(n=this.construct_mapping))}return r=n.call(this,null!=s?s:e,e),this.constructed_objects[e.unique_id]=r,this.constructing_nodes.pop(),r},e.prototype.construct_scalar=function(e){if(!(e instanceof i.ScalarNode))throw new t.ConstructorError(null,null,"expected a scalar node but found "+e.id,e.start_mark);return e.value},e.prototype.construct_sequence=function(e){var n,r,o,a,s;if(!(e instanceof i.SequenceNode))throw new t.ConstructorError(null,null,"expected a sequence node but found "+e.id,e.start_mark);for(a=e.value,s=[],r=0,o=a.length;r=0&&(l=l.slice(1)),"0"===l)return 0;if(0===l.indexOf("0b"))return c*parseInt(l.slice(2),2);if(0===l.indexOf("0x"))return c*parseInt(l.slice(2),16);if(0===l.indexOf("0o"))return c*parseInt(l.slice(2),8);if("0"===l[0])return c*parseInt(l,8);if(u.call(l,":")>=0){for(r=function(){var e,t,n,r;for(n=l.split(/:/g),r=[],e=0,t=n.length;e=0&&(l=l.slice(1)),".inf"===l)return Infinity*c;if(".nan"===l)return NaN;if(u.call(l,":")>=0){for(r=function(){var e,t,n,r;for(n=l.split(/:/g),r=[],e=0,t=n.length;e=n?e:e.length+1===n?""+t+e:""+new Array(n-e.length+1).join(t)+e},this.to_hex=function(e){return"string"==typeof e&&(e=e.charCodeAt(0)),e.toString(16)}}).call(this)}).call(t,function(){return this}())},function(e,t,n){(function(e,r){function i(e,n){var r={seen:[],stylize:a};return arguments.length>=3&&(r.depth=arguments[2]),arguments.length>=4&&(r.colors=arguments[3]),m(n)?r.showHidden=n:n&&t._extend(r,n),x(r.showHidden)&&(r.showHidden=!1),x(r.depth)&&(r.depth=2),x(r.colors)&&(r.colors=!1),x(r.customInspect)&&(r.customInspect=!0),r.colors&&(r.stylize=o),u(r,e,r.depth)}function o(e,t){var n=i.styles[t];return n?"["+i.colors[n][0]+"m"+e+"["+i.colors[n][1]+"m":e}function a(e,t){return e}function s(e){var t={};return e.forEach(function(e,n){t[e]=!0}),t}function u(e,n,r){if(e.customInspect&&n&&C(n.inspect)&&n.inspect!==t.inspect&&(!n.constructor||n.constructor.prototype!==n)){var i=n.inspect(r,e);return _(i)||(i=u(e,i,r)),i}var o=c(e,n);if(o)return o;var a=Object.keys(n),m=s(a);if(e.showHidden&&(a=Object.getOwnPropertyNames(n)),E(n)&&(a.indexOf("message")>=0||a.indexOf("description")>=0))return l(n);if(0===a.length){if(C(n)){var v=n.name?": "+n.name:"";return e.stylize("[Function"+v+"]","special")}if(w(n))return e.stylize(RegExp.prototype.toString.call(n),"regexp");if(S(n))return e.stylize(Date.prototype.toString.call(n),"date");if(E(n))return l(n)}var y="",g=!1,b=["{","}"];if(d(n)&&(g=!0,b=["[","]"]),C(n)){var x=n.name?": "+n.name:"";y=" [Function"+x+"]"}if(w(n)&&(y=" "+RegExp.prototype.toString.call(n)),S(n)&&(y=" "+Date.prototype.toUTCString.call(n)),E(n)&&(y=" "+l(n)),0===a.length&&(!g||0==n.length))return b[0]+y+b[1];if(r<0)return w(n)?e.stylize(RegExp.prototype.toString.call(n),"regexp"):e.stylize("[Object]","special");e.seen.push(n);var k;return k=g?p(e,n,r,m,a):a.map(function(t){return f(e,n,r,m,t,g)}),e.seen.pop(),h(k,y,b)}function c(e,t){if(x(t))return e.stylize("undefined","undefined");if(_(t)){var n="'"+JSON.stringify(t).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return e.stylize(n,"string")}return g(t)?e.stylize(""+t,"number"):m(t)?e.stylize(""+t,"boolean"):v(t)?e.stylize("null","null"):void 0}function l(e){return"["+Error.prototype.toString.call(e)+"]"}function p(e,t,n,r,i){for(var o=[],a=0,s=t.length;a-1&&(s=o?s.split("\n").map(function(e){return" "+e}).join("\n").substr(2):"\n"+s.split("\n").map(function(e){return" "+e}).join("\n"))):s=e.stylize("[Circular]","special")),x(a)){if(o&&i.match(/^\d+$/))return s;a=JSON.stringify(""+i),a.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(a=a.substr(1,a.length-2),a=e.stylize(a,"name")):(a=a.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),a=e.stylize(a,"string"))}return a+": "+s}function h(e,t,n){var r=0,i=e.reduce(function(e,t){return r++,t.indexOf("\n")>=0&&r++,e+t.replace(/\u001b\[\d\d?m/g,"").length+1},0);return i>60?n[0]+(""===t?"":t+"\n ")+" "+e.join(",\n ")+" "+n[1]:n[0]+t+" "+e.join(", ")+" "+n[1]}function d(e){return Array.isArray(e)}function m(e){return"boolean"==typeof e}function v(e){return null===e}function y(e){return null==e}function g(e){return"number"==typeof e}function _(e){return"string"==typeof e}function b(e){return"symbol"==typeof e}function x(e){return void 0===e}function w(e){return k(e)&&"[object RegExp]"===T(e)}function k(e){return"object"==typeof e&&null!==e}function S(e){return k(e)&&"[object Date]"===T(e)}function E(e){return k(e)&&("[object Error]"===T(e)||e instanceof Error)}function C(e){return"function"==typeof e}function A(e){return null===e||"boolean"==typeof e||"number"==typeof e||"string"==typeof e||"symbol"==typeof e||"undefined"==typeof e}function T(e){return Object.prototype.toString.call(e)}function D(e){return e<10?"0"+e.toString(10):e.toString(10)}function M(){var e=new Date,t=[D(e.getHours()),D(e.getMinutes()),D(e.getSeconds())].join(":");return[e.getDate(),R[e.getMonth()],t].join(" ")}function O(e,t){return Object.prototype.hasOwnProperty.call(e,t)}var P=/%[sdj%]/g;t.format=function(e){if(!_(e)){for(var t=[],n=0;n=o)return e;switch(e){case"%s":return String(r[n++]);case"%d":return Number(r[n++]);case"%j":try{return JSON.stringify(r[n++])}catch(e){return"[Circular]"}default:return e}}),s=r[n];n2*this.indent?t.width:80,this.best_line_break="\r"===(n=t.line_break)||"\n"===n||"\r\n"===n?t.line_break:"\n",this.tag_prefixes=null,this.prepared_anchor=null,this.prepared_tag=null,this.analysis=null,this.style=null}var r,a,c;return r="\0 \t\r\n…\u2028\u2029",a={"!":"!","tag:yaml.org,2002:":"!!"},c={"\0":"0","":"a","\b":"b","\t":"t","\n":"n","\v":"v","\f":"f","\r":"r","":"e",'"':'"',"\\":"\\","…":"N"," ":"_","\u2028":"L","\u2029":"P"},n.prototype.dispose=function(){return this.states=[],this.state=null},n.prototype.emit=function(e){var t;for(this.events.push(e),t=[];!this.need_more_events();)this.event=this.events.shift(),this.state(),t.push(this.event=null);return t},n.prototype.need_more_events=function(){var e;return 0===this.events.length||(e=this.events[0],e instanceof i.DocumentStartEvent?this.need_events(1):e instanceof i.SequenceStartEvent?this.need_events(2):e instanceof i.MappingStartEvent&&this.need_events(3))},n.prototype.need_events=function(e){var t,n,r,o,a;for(o=0,a=this.events.slice(1),n=0,r=a.length;nthis.best_width)&&this.write_indent(),this.states.push(this.expect_flow_sequence_item),this.expect_node({sequence:!0}))},n.prototype.expect_flow_sequence_item=function(){return this.event instanceof i.SequenceEndEvent?(this.indent=this.indents.pop(),this.flow_level--,this.canonical&&(this.write_indicator(",",!1),this.write_indent()),this.write_indicator("]",!1),this.state=this.states.pop()):(this.write_indicator(",",!1),(this.canonical||this.column>this.best_width)&&this.write_indent(),this.states.push(this.expect_flow_sequence_item),this.expect_node({sequence:!0}))},n.prototype.expect_flow_mapping=function(){return this.write_indicator("{",!0,{whitespace:!0}),this.flow_level++,this.increase_indent({flow:!0}),this.state=this.expect_first_flow_mapping_key},n.prototype.expect_first_flow_mapping_key=function(){return this.event instanceof i.MappingEndEvent?(this.indent=this.indents.pop(),this.flow_level--,this.write_indicator("}",!1),this.state=this.states.pop()):((this.canonical||this.column>this.best_width)&&this.write_indent(),!this.canonical&&this.check_simple_key()?(this.states.push(this.expect_flow_mapping_simple_value),this.expect_node({mapping:!0,simple_key:!0})):(this.write_indicator("?",!0),this.states.push(this.expect_flow_mapping_value),this.expect_node({mapping:!0})))},n.prototype.expect_flow_mapping_key=function(){return this.event instanceof i.MappingEndEvent?(this.indent=this.indents.pop(),this.flow_level--,this.canonical&&(this.write_indicator(",",!1),this.write_indent()),this.write_indicator("}",!1),this.state=this.states.pop()):(this.write_indicator(",",!1),(this.canonical||this.column>this.best_width)&&this.write_indent(),!this.canonical&&this.check_simple_key()?(this.states.push(this.expect_flow_mapping_simple_value),this.expect_node({mapping:!0,simple_key:!0})):(this.write_indicator("?",!0),this.states.push(this.expect_flow_mapping_value),this.expect_node({mapping:!0})))},n.prototype.expect_flow_mapping_simple_value=function(){return this.write_indicator(":",!1),this.states.push(this.expect_flow_mapping_key),this.expect_node({mapping:!0})},n.prototype.expect_flow_mapping_value=function(){return(this.canonical||this.column>this.best_width)&&this.write_indent(),this.write_indicator(":",!0),this.states.push(this.expect_flow_mapping_key),this.expect_node({mapping:!0})},n.prototype.expect_block_sequence=function(){var e;return e=this.mapping_context&&!this.indentation,this.increase_indent({indentless:e}),this.state=this.expect_first_block_sequence_item},n.prototype.expect_first_block_sequence_item=function(){return this.expect_block_sequence_item(!0)},n.prototype.expect_block_sequence_item=function(e){return null==e&&(e=!1),!e&&this.event instanceof i.SequenceEndEvent?(this.indent=this.indents.pop(),this.state=this.states.pop()):(this.write_indent(),this.write_indicator("-",!0,{indentation:!0}),this.states.push(this.expect_block_sequence_item),this.expect_node({sequence:!0}))},n.prototype.expect_block_mapping=function(){return this.increase_indent(),this.state=this.expect_first_block_mapping_key},n.prototype.expect_first_block_mapping_key=function(){return this.expect_block_mapping_key(!0)},n.prototype.expect_block_mapping_key=function(e){return null==e&&(e=!1),!e&&this.event instanceof i.MappingEndEvent?(this.indent=this.indents.pop(),this.state=this.states.pop()):(this.write_indent(),this.check_simple_key()?(this.states.push(this.expect_block_mapping_simple_value),this.expect_node({mapping:!0,simple_key:!0})):(this.write_indicator("?",!0,{indentation:!0}),this.states.push(this.expect_block_mapping_value),this.expect_node({mapping:!0})))},n.prototype.expect_block_mapping_simple_value=function(){return this.write_indicator(":",!1),this.states.push(this.expect_block_mapping_key),this.expect_node({mapping:!0})},n.prototype.expect_block_mapping_value=function(){return this.write_indent(),this.write_indicator(":",!0,{indentation:!0}),this.states.push(this.expect_block_mapping_key),this.expect_node({mapping:!0})},n.prototype.check_empty_document=function(){var e;return this.event instanceof i.DocumentStartEvent&&0!==this.events.length&&(e=this.events[0],e instanceof i.ScalarEvent&&null==e.anchor&&null==e.tag&&e.implicit&&""===e.value)},n.prototype.check_empty_sequence=function(){return this.event instanceof i.SequenceStartEvent&&this.events[0]instanceof i.SequenceEndEvent},n.prototype.check_empty_mapping=function(){return this.event instanceof i.MappingStartEvent&&this.events[0]instanceof i.MappingEndEvent},n.prototype.check_simple_key=function(){var e;return e=0,this.event instanceof i.NodeEvent&&null!=this.event.anchor&&(null==this.prepared_anchor&&(this.prepared_anchor=this.prepare_anchor(this.event.anchor)),e+=this.prepared_anchor.length),null!=this.event.tag&&(this.event instanceof i.ScalarEvent||this.event instanceof i.CollectionStartEvent)&&(null==this.prepared_tag&&(this.prepared_tag=this.prepare_tag(this.event.tag)),e+=this.prepared_tag.length),this.event instanceof i.ScalarEvent&&(null==this.analysis&&(this.analysis=this.analyze_scalar(this.event.value)),e+=this.analysis.scalar.length),e<128&&(this.event instanceof i.AliasEvent||this.event instanceof i.ScalarEvent&&!this.analysis.empty&&!this.analysis.multiline||this.check_empty_sequence()||this.check_empty_mapping())},n.prototype.process_anchor=function(e){return null==this.event.anchor?void(this.prepared_anchor=null):(null==this.prepared_anchor&&(this.prepared_anchor=this.prepare_anchor(this.event.anchor)),this.prepared_anchor&&this.write_indicator(""+e+this.prepared_anchor,!0),this.prepared_anchor=null)},n.prototype.process_tag=function(){var e;if(e=this.event.tag,this.event instanceof i.ScalarEvent){if(null==this.style&&(this.style=this.choose_scalar_style()),(!this.canonical||null==e)&&(""===this.style&&this.event.implicit[0]||""!==this.style&&this.event.implicit[1]))return void(this.prepared_tag=null);this.event.implicit[0]&&null==e&&(e="!",this.prepared_tag=null)}else if((!this.canonical||null==e)&&this.event.implicit)return void(this.prepared_tag=null);return null==e&&this.error("tag is not specified"),null==this.prepared_tag&&(this.prepared_tag=this.prepare_tag(e)),this.write_indicator(this.prepared_tag,!0),this.prepared_tag=null},n.prototype.process_scalar=function(){var e;switch(null==this.analysis&&(this.analysis=this.analyze_scalar(this.event.value)),null==this.style&&(this.style=this.choose_scalar_style()),e=!this.simple_key_context,this.style){case'"':this.write_double_quoted(this.analysis.scalar,e);break;case"'":this.write_single_quoted(this.analysis.scalar,e);break;case">":this.write_folded(this.analysis.scalar);break;case"|":this.write_literal(this.analysis.scalar);break;default:this.write_plain(this.analysis.scalar,e)}return this.analysis=null,this.style=null},n.prototype.choose_scalar_style=function(){var e;return null==this.analysis&&(this.analysis=this.analyze_scalar(this.event.value)),'"'===this.event.style||this.canonical?'"':this.event.style||!this.event.implicit[0]||this.simple_key_context&&(this.analysis.empty||this.analysis.multiline)||!(this.flow_level&&this.analysis.allow_flow_plain||!this.flow_level&&this.analysis.allow_block_plain)?this.event.style&&(e=this.event.style, +u.call("|>",e)>=0)&&!this.flow_level&&!this.simple_key_context&&this.analysis.allow_block?this.event.style:this.event.style&&"'"!==this.event.style||!this.analysis.allow_single_quoted||this.simple_key_context&&this.analysis.multiline?'"':"'":""},n.prototype.prepare_version=function(e){var t,n,r;return t=e[0],n=e[1],r=t+"."+n,1===t?r:this.error("unsupported YAML version",r)},n.prototype.prepare_tag_handle=function(e){var t,n,r,i;for(e||this.error("tag handle must not be empty"),"!"===e[0]&&"!"===e.slice(-1)||this.error("tag handle must start and end with '!':",e),i=e.slice(1,-1),n=0,r=i.length;n=0||this.error("invalid character '"+t+"' in the tag handle:",e);return e},n.prototype.prepare_tag_prefix=function(e){var t,n,r,i;for(e||this.error("tag prefix must not be empty"),n=[],i=0,r=+("!"===e[0]);r=0?r++:(i=0||"!"===t&&"!"!==i?r++:(f"},n.prototype.prepare_anchor=function(e){var t,n,r;for(e||this.error("anchor must not be empty"),n=0,r=e.length;n=0||this.error("invalid character '"+t+"' in the anchor:",e);return e},n.prototype.analyze_scalar=function(t){var n,i,o,a,s,c,l,p,f,h,d,m,v,y,g,_,b,x,w,k,S,E,C,A,T,D;for(t||new e(t,!0,!1,!1,!0,!0,!0,!1),c=!1,f=!1,_=!1,C=!1,D=!1,y=!1,v=!1,T=!1,A=!1,l=!1,E=!1,0!==t.indexOf("---")&&0!==t.indexOf("...")||(c=!0,f=!0),b=!0,h=1===t.length||(k=t[1],u.call("\0 \t\r\n…\u2028\u2029",k)>=0),w=!1,x=!1,m=0,m=d=0,g=t.length;d'\"%@`",p)>=0||"-"===p&&h?(f=!0,c=!0):u.call("?:",p)>=0&&(f=!0,h&&(c=!0)):u.call(",?[]{}",p)>=0?f=!0:":"===p?(f=!0,h&&(c=!0)):"#"===p&&b&&(f=!0,c=!0),u.call("\n…\u2028\u2029",p)>=0&&(_=!0),"\n"===p||" "<=p&&p<="~"||("\ufeff"!==p&&("…"===p||" "<=p&&p<="퟿"||""<=p&&p<="�")?(D=!0,this.allow_unicode||(C=!0)):C=!0)," "===p?(0===m&&(y=!0),m===t.length-1&&(T=!0),x&&(l=!0),x=!1,w=!0):u.call("\n…\u2028\u2029",p)>=0?(0===m&&(v=!0),m===t.length-1&&(A=!0),w&&(E=!0),x=!0,w=!1):(x=!1,w=!1),b=u.call(r,p)>=0,h=m+2>=t.length||(S=t[m+2],u.call(r,S)>=0);return a=!0,i=!0,s=!0,o=!0,n=!0,(y||v||T||A)&&(a=i=!1),T&&(n=!1),l&&(a=i=s=!1),(E||C)&&(a=i=s=n=!1),_&&(a=i=!1),f&&(a=!1),c&&(i=!1),new e(t,!1,_,a,i,s,o,n)},n.prototype.write_stream_start=function(){if(this.encoding&&0===this.encoding.indexOf("utf-16"))return this.stream.write("\ufeff",this.encoding)},n.prototype.write_stream_end=function(){return this.flush_stream()},n.prototype.write_indicator=function(e,t,n){var r;return null==n&&(n={}),r=this.whitespace||!t?e:" "+e,this.whitespace=!!n.whitespace,this.indentation&&(this.indentation=!!n.indentation),this.column+=r.length,this.open_ended=!1,this.stream.write(r,this.encoding)},n.prototype.write_indent=function(){var e,t,n;if(t=null!=(n=this.indent)?n:0,(!this.indentation||this.column>t||this.column===t&&!this.whitespace)&&this.write_line_break(),this.columnthis.best_width&&t&&0!==f&&a!==e.length?this.write_indent():(o=e.slice(f,a),this.column+=o.length,this.stream.write(o,this.encoding)),f=a);else if(r){if(null==i||u.call("\n…\u2028\u2029",i)<0){for("\n"===e[f]&&this.write_line_break(),l=e.slice(f,a),s=0,c=l.length;s=0||"'"===i)&&f=0),a++}return this.write_indicator("'",!1)},n.prototype.write_double_quoted=function(e,t){var n,r,i,a;for(null==t&&(t=!0),this.write_indicator('"',!0),a=i=0;i<=e.length;)n=e[i],(null==n||u.call('"\\…\u2028\u2029\ufeff',n)>=0||!(" "<=n&&n<="~"||this.allow_unicode&&(" "<=n&&n<="퟿"||""<=n&&n<="�")))&&(a=i)&&this.column+(i-a)>this.best_width&&(r=e.slice(a,i)+"\\",a"+a,!0),"+"===a.slice(-1)&&(this.open_ended=!0),this.write_line_break(),c=!0,n=!0,h=!1,d=o=0,f=[];o<=e.length;){if(r=e[o],n){if(null==r||u.call("\n…\u2028\u2029",r)<0){for(c||null==r||" "===r||"\n"!==e[d]||this.write_line_break(),c=" "===r,p=e.slice(d,o),s=0,l=p.length;sthis.best_width?this.write_indent():(i=e.slice(d,o),this.column+=i.length,this.stream.write(i,this.encoding)),d=o):(null==r||u.call(" \n…\u2028\u2029",r)>=0)&&(i=e.slice(d,o),this.column+=i.length,this.stream.write(i,this.encoding),null==r&&this.write_line_break(),d=o);null!=r&&(n=u.call("\n…\u2028\u2029",r)>=0,h=" "===r),f.push(o++)}return f},n.prototype.write_literal=function(e){var t,n,r,i,o,a,s,c,l,p,f;for(a=this.determine_block_hints(e),this.write_indicator("|"+a,!0),"+"===a.slice(-1)&&(this.open_ended=!0),this.write_line_break(),n=!0,f=o=0,p=[];o<=e.length;){if(r=e[o],n){if(null==r||u.call("\n…\u2028\u2029",r)<0){for(l=e.slice(f,o),s=0,c=l.length;s=0)&&(i=e.slice(f,o),this.stream.write(i,this.encoding),null==r&&this.write_line_break(),f=o);null!=r&&(n=u.call("\n…\u2028\u2029",r)>=0),p.push(o++)}return p},n.prototype.write_plain=function(e,t){var n,r,i,o,a,s,c,l,p,f,h;if(null==t&&(t=!0),e){for(this.root_context&&(this.open_ended=!0),this.whitespace||(o=" ",this.column+=o.length,this.stream.write(o,this.encoding)),this.whitespace=!1,this.indentation=!1,f=!1,r=!1,h=a=0,p=[];a<=e.length;){if(i=e[a],f)" "!==i&&(h+1===a&&this.column>this.best_width&&t?(this.write_indent(),this.whitespace=!1,this.indentation=!1):(o=e.slice(h,a),this.column+=o.length,this.stream.write(o,this.encoding)),h=a);else if(r){if(u.call("\n…\u2028\u2029",i)<0){for("\n"===e[h]&&this.write_line_break(),l=e.slice(h,a),s=0,c=l.length;s=0)&&(o=e.slice(h,a),this.column+=o.length,this.stream.write(o,this.encoding),h=a);null!=i&&(f=" "===i,r=u.call("\n…\u2028\u2029",i)>=0),p.push(a++)}return p}},n.prototype.determine_block_hints=function(e){var t,n,r,i,o;return n="",t=e[0],r=e.length-2,o=e[r++],i=e[r++],u.call(" \n…\u2028\u2029",t)>=0&&(n+=this.best_indent),u.call("\n…\u2028\u2029",i)<0?n+="-":(1===e.length||u.call("\n…\u2028\u2029",o)>=0)&&(n+="+"),n},n.prototype.flush_stream=function(){var e;return"function"==typeof(e=this.stream).flush?e.flush():void 0},n.prototype.error=function(e,n){var r,i;throw n&&(n=null!=(r=null!=n&&null!=(i=n.constructor)?i.name:void 0)?r:o.inspect(n)),new t.EmitterError(""+e+(n?" "+n:""))},n}(),e=function(){function e(e,t,n,r,i,o,a,s){this.scalar=e,this.empty=t,this.multiline=n,this.allow_flow_plain=r,this.allow_block_plain=i,this.allow_single_quoted=o,this.allow_double_quoted=a,this.allow_block=s}return e}()}).call(this)},function(e,t,n){(function(){var e,t,r,i,o=function(e,t){function n(){this.constructor=e}for(var r in t)a.call(t,r)&&(e[r]=t[r]);return n.prototype=t.prototype,e.prototype=new n,e.__super__=t.prototype,e},a={}.hasOwnProperty;t=n(743),r=n(745),i=n(747),e=n(744).YAMLError,this.SerializerError=function(e){function t(){return t.__super__.constructor.apply(this,arguments)}return o(t,e),t}(e),this.Serializer=function(){function e(e){var t;t=null!=e?e:{},this.encoding=t.encoding,this.explicit_start=t.explicit_start,this.explicit_end=t.explicit_end,this.version=t.version,this.tags=t.tags,this.serialized_nodes={},this.anchors={},this.last_anchor_id=0,this.closed=null}return e.prototype.open=function(){if(null===this.closed)return this.emit(new t.StreamStartEvent(this.encoding)),this.closed=!1;throw this.closed?new SerializerError("serializer is closed"):new SerializerError("serializer is already open")},e.prototype.close=function(){if(null===this.closed)throw new SerializerError("serializer is not opened");if(!this.closed)return this.emit(new t.StreamEndEvent),this.closed=!0},e.prototype.serialize=function(e){if(null===this.closed)throw new SerializerError("serializer is not opened");if(this.closed)throw new SerializerError("serializer is closed");return null!=e&&(this.emit(new t.DocumentStartEvent(void 0,void 0,this.explicit_start,this.version,this.tags)),this.anchor_node(e),this.serialize_node(e),this.emit(new t.DocumentEndEvent(void 0,void 0,this.explicit_end))),this.serialized_nodes={},this.anchors={},this.last_anchor_id=0},e.prototype.anchor_node=function(e){var t,n,i,o,a,s,u,c,l,p,f,h,d,m;if(e.unique_id in this.anchors)return null!=(t=this.anchors)[c=e.unique_id]?t[c]:t[c]=this.generate_anchor(e);if(this.anchors[e.unique_id]=null,e instanceof r.SequenceNode){for(l=e.value,h=[],n=0,s=l.length;nn?p.push([l,s]):i[s]=this.yaml_path_resolvers[l][s]);else for(d=this.yaml_path_resolvers,a=0,c=d.length;a=0)return c[e];if(a.call(c,null)>=0)return c[null]}return e===t.ScalarNode?i:e===t.SequenceNode?o:e===t.MappingNode?n:void 0},e}(),this.Resolver=function(e){function t(){return t.__super__.constructor.apply(this,arguments)}return i(t,e),t}(this.BaseResolver),this.Resolver.add_implicit_resolver("tag:yaml.org,2002:bool",/^(?:yes|Yes|YES|true|True|TRUE|on|On|ON|no|No|NO|false|False|FALSE|off|Off|OFF)$/,"yYnNtTfFoO"),this.Resolver.add_implicit_resolver("tag:yaml.org,2002:float",/^(?:[-+]?(?:[0-9][0-9_]*)\.[0-9_]*(?:[eE][-+][0-9]+)?|\.[0-9_]+(?:[eE][-+][0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\.[0-9_]*|[-+]?\.(?:inf|Inf|INF)|\.(?:nan|NaN|NAN))$/,"-+0123456789."),this.Resolver.add_implicit_resolver("tag:yaml.org,2002:int",/^(?:[-+]?0b[01_]+|[-+]?0[0-7_]+|[-+]?(?:0|[1-9][0-9_]*)|[-+]?0x[0-9a-fA-F_]+|[-+]?0o[0-7_]+|[-+]?[1-9][0-9_]*(?::[0-5]?[0-9])+)$/,"-+0123456789"),this.Resolver.add_implicit_resolver("tag:yaml.org,2002:merge",/^(?:<<)$/,"<"),this.Resolver.add_implicit_resolver("tag:yaml.org,2002:null",/^(?:~|null|Null|NULL|)$/,["~","n","N",""]),this.Resolver.add_implicit_resolver("tag:yaml.org,2002:timestamp",/^(?:[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]|[0-9][0-9][0-9][0-9]-[0-9][0-9]?-[0-9][0-9]?(?:[Tt]|[\x20\t]+)[0-9][0-9]?:[0-9][0-9]:[0-9][0-9](?:\.[0-9]*)?(?:[\x20\t]*(?:Z|[-+][0-9][0-9]?(?::[0-9][0-9])?))?)$/,"0123456789"),this.Resolver.add_implicit_resolver("tag:yaml.org,2002:value",/^(?:=)$/,"="),this.Resolver.add_implicit_resolver("tag:yaml.org,2002:yaml",/^(?:!|&|\*)$/,"!&*")}).call(this)},function(e,t,n){(function(){var e,t,r,i,o,a,s,u=[].slice;s=n(747),i=n(757),a=n(758),r=n(760),e=n(742),o=n(755),t=n(746),this.make_loader=function(n,c,l,p,f,h){var d,m;return null==n&&(n=i.Reader),null==c&&(c=a.Scanner),null==l&&(l=r.Parser),null==p&&(p=e.Composer),null==f&&(f=o.Resolver),null==h&&(h=t.Constructor),m=[n,c,l,p,f,h],d=function(){function e(e){var n,r,i;for(m[0].call(this,e),i=m.slice(1),n=0,r=i.length;n=0||"\r"===t&&"\n"!==this.string[this.index]?(this.line++,this.column=0):this.column++,n.push(e--);return n},n.prototype.get_mark=function(){return new e(this.line,this.column,this.string,this.index)},n.prototype.check_printable=function(){var e,n,i;if(n=r.exec(this.string))throw e=n[0],i=this.string.length-this.index+n.index,new t.ReaderError(i,e,"special characters are not allowed")},n}()}).call(this)},function(e,t,n){(function(){var e,r,i,o,a=function(e,t){function n(){this.constructor=e}for(var r in t)s.call(t,r)&&(e[r]=t[r]);return n.prototype=t.prototype,e.prototype=new n,e.__super__=t.prototype,e},s={}.hasOwnProperty,u=[].slice,c=[].indexOf||function(e){for(var t=0,n=this.length;t"===e&&0===this.flow_level)return this.fetch_folded();if("'"===e)return this.fetch_single();if('"'===e)return this.fetch_double();if(this.check_plain())return this.fetch_plain();throw new t.ScannerError("while scanning for the next token",null,"found character "+e+" that cannot start any token",this.get_mark())},e.prototype.next_possible_simple_key=function(){var e,t,n,r;n=null,r=this.possible_simple_keys;for(t in r)s.call(r,t)&&(e=r[t],(null===n||e.token_numbere;)t=this.get_mark(),this.indent=this.indents.pop(),n.push(this.tokens.push(new i.BlockEndToken(t,t)));return n}},e.prototype.add_indent=function(e){return e>this.indent&&(this.indents.push(this.indent),this.indent=e,!0)},e.prototype.fetch_stream_start=function(){var e;return e=this.get_mark(),this.tokens.push(new i.StreamStartToken(e,e,this.encoding))},e.prototype.fetch_stream_end=function(){var e;return this.unwind_indent(-1),this.remove_possible_simple_key(),this.allow_possible_simple_key=!1,this.possible_simple_keys={},e=this.get_mark(),this.tokens.push(new i.StreamEndToken(e,e)),this.done=!0},e.prototype.fetch_directive=function(){return this.unwind_indent(-1),this.remove_possible_simple_key(),this.allow_simple_key=!1,this.tokens.push(this.scan_directive())},e.prototype.fetch_document_start=function(){return this.fetch_document_indicator(i.DocumentStartToken)},e.prototype.fetch_document_end=function(){return this.fetch_document_indicator(i.DocumentEndToken)},e.prototype.fetch_document_indicator=function(e){var t;return this.unwind_indent(-1),this.remove_possible_simple_key(),this.allow_simple_key=!1,t=this.get_mark(),this.forward(3),this.tokens.push(new e(t,this.get_mark()))},e.prototype.fetch_flow_sequence_start=function(){return this.fetch_flow_collection_start(i.FlowSequenceStartToken)},e.prototype.fetch_flow_mapping_start=function(){return this.fetch_flow_collection_start(i.FlowMappingStartToken)},e.prototype.fetch_flow_collection_start=function(e){var t;return this.save_possible_simple_key(),this.flow_level++,this.allow_simple_key=!0,t=this.get_mark(),this.forward(),this.tokens.push(new e(t,this.get_mark()))},e.prototype.fetch_flow_sequence_end=function(){return this.fetch_flow_collection_end(i.FlowSequenceEndToken)},e.prototype.fetch_flow_mapping_end=function(){return this.fetch_flow_collection_end(i.FlowMappingEndToken)},e.prototype.fetch_flow_collection_end=function(e){var t;return this.remove_possible_simple_key(),this.flow_level--,this.allow_simple_key=!1,t=this.get_mark(),this.forward(),this.tokens.push(new e(t,this.get_mark()))},e.prototype.fetch_flow_entry=function(){var e;return this.allow_simple_key=!0,this.remove_possible_simple_key(),e=this.get_mark(),this.forward(),this.tokens.push(new i.FlowEntryToken(e,this.get_mark()))},e.prototype.fetch_block_entry=function(){var e,n;if(0===this.flow_level){if(!this.allow_simple_key)throw new t.ScannerError(null,null,"sequence entries are not allowed here",this.get_mark());this.add_indent(this.column)&&(e=this.get_mark(),this.tokens.push(new i.BlockSequenceStartToken(e,e)))}return this.allow_simple_key=!0,this.remove_possible_simple_key(),n=this.get_mark(),this.forward(),this.tokens.push(new i.BlockEntryToken(n,this.get_mark()))},e.prototype.fetch_key=function(){var e,n;if(0===this.flow_level){if(!this.allow_simple_key)throw new t.ScannerError(null,null,"mapping keys are not allowed here",this.get_mark());this.add_indent(this.column)&&(e=this.get_mark(), +this.tokens.push(new i.BlockMappingStartToken(e,e)))}return this.allow_simple_key=!this.flow_level,this.remove_possible_simple_key(),n=this.get_mark(),this.forward(),this.tokens.push(new i.KeyToken(n,this.get_mark()))},e.prototype.fetch_value=function(){var e,n,r;if(e=this.possible_simple_keys[this.flow_level])delete this.possible_simple_keys[this.flow_level],this.tokens.splice(e.token_number-this.tokens_taken,0,new i.KeyToken(e.mark,e.mark)),0===this.flow_level&&this.add_indent(e.column)&&this.tokens.splice(e.token_number-this.tokens_taken,0,new i.BlockMappingStartToken(e.mark,e.mark)),this.allow_simple_key=!1;else{if(0===this.flow_level){if(!this.allow_simple_key)throw new t.ScannerError(null,null,"mapping values are not allowed here",this.get_mark());this.add_indent(this.column)&&(n=this.get_mark(),this.tokens.push(new i.BlockMappingStartToken(n,n)))}this.allow_simple_key=!this.flow_level,this.remove_possible_simple_key()}return r=this.get_mark(),this.forward(),this.tokens.push(new i.ValueToken(r,this.get_mark()))},e.prototype.fetch_alias=function(){return this.save_possible_simple_key(),this.allow_simple_key=!1,this.tokens.push(this.scan_anchor(i.AliasToken))},e.prototype.fetch_anchor=function(){return this.save_possible_simple_key(),this.allow_simple_key=!1,this.tokens.push(this.scan_anchor(i.AnchorToken))},e.prototype.fetch_tag=function(){return this.save_possible_simple_key(),this.allow_simple_key=!1,this.tokens.push(this.scan_tag())},e.prototype.fetch_literal=function(){return this.fetch_block_scalar("|")},e.prototype.fetch_folded=function(){return this.fetch_block_scalar(">")},e.prototype.fetch_block_scalar=function(e){return this.allow_simple_key=!0,this.remove_possible_simple_key(),this.tokens.push(this.scan_block_scalar(e))},e.prototype.fetch_single=function(){return this.fetch_flow_scalar("'")},e.prototype.fetch_double=function(){return this.fetch_flow_scalar('"')},e.prototype.fetch_flow_scalar=function(e){return this.save_possible_simple_key(),this.allow_simple_key=!1,this.tokens.push(this.scan_flow_scalar(e))},e.prototype.fetch_plain=function(){return this.save_possible_simple_key(),this.allow_simple_key=!1,this.tokens.push(this.scan_plain())},e.prototype.check_directive=function(){return 0===this.column},e.prototype.check_document_start=function(){var e;return 0===this.column&&"---"===this.prefix(3)&&(e=this.peek(3),c.call(n+l+"\0",e)>=0)},e.prototype.check_document_end=function(){var e;return 0===this.column&&"..."===this.prefix(3)&&(e=this.peek(3),c.call(n+l+"\0",e)>=0)},e.prototype.check_block_entry=function(){var e;return e=this.peek(1),c.call(n+l+"\0",e)>=0},e.prototype.check_key=function(){var e;return 0!==this.flow_level||(e=this.peek(1),c.call(n+l+"\0",e)>=0)},e.prototype.check_value=function(){var e;return 0!==this.flow_level||(e=this.peek(1),c.call(n+l+"\0",e)>=0)},e.prototype.check_plain=function(){var e,t;return e=this.peek(),c.call(n+l+"\0-?:,[]{}#&*!|>'\"%@`",e)<0||(t=this.peek(1),c.call(n+l+"\0",t)<0&&("-"===e||0===this.flow_level&&c.call("?:",e)>=0))},e.prototype.scan_to_next_token=function(){var e,t,r;for(0===this.index&&"\ufeff"===this.peek()&&this.forward(),e=!1,r=[];!e;){for(;" "===this.peek();)this.forward();if("#"===this.peek())for(;t=this.peek(),c.call(n+"\0",t)<0;)this.forward();this.scan_line_break()?0===this.flow_level?r.push(this.allow_simple_key=!0):r.push(void 0):r.push(e=!0)}return r},e.prototype.scan_directive=function(){var e,t,r,o,a;if(o=this.get_mark(),this.forward(),t=this.scan_directive_name(o),a=null,"YAML"===t)a=this.scan_yaml_directive_value(o),e=this.get_mark();else if("TAG"===t)a=this.scan_tag_directive_value(o),e=this.get_mark();else for(e=this.get_mark();r=this.peek(),c.call(n+"\0",r)<0;)this.forward();return this.scan_directive_ignored_line(o),new i.DirectiveToken(t,a,o,e)},e.prototype.scan_directive_name=function(e){var r,i,o;for(i=0,r=this.peek(i);"0"<=r&&r<="9"||"A"<=r&&r<="Z"||"a"<=r&&r<="z"||c.call("-_",r)>=0;)i++,r=this.peek(i);if(0===i)throw new t.ScannerError("while scanning a directive",e,"expected alphanumeric or numeric character but found "+r,this.get_mark());if(o=this.prefix(i),this.forward(i),r=this.peek(),c.call(n+"\0 ",r)<0)throw new t.ScannerError("while scanning a directive",e,"expected alphanumeric or numeric character but found "+r,this.get_mark());return o},e.prototype.scan_yaml_directive_value=function(e){for(var r,i,o;" "===this.peek();)this.forward();if(r=this.scan_yaml_directive_number(e),"."!==this.peek())throw new t.ScannerError("while scanning a directive",e,"expected a digit or '.' but found "+this.peek(),this.get_mark());if(this.forward(),i=this.scan_yaml_directive_number(e),o=this.peek(),c.call(n+"\0 ",o)<0)throw new t.ScannerError("while scanning a directive",e,"expected a digit or ' ' but found "+this.peek(),this.get_mark());return[r,i]},e.prototype.scan_yaml_directive_number=function(e){var n,r,i,o;if(n=this.peek(),!("0"<=n&&n<="9"))throw new t.ScannerError("while scanning a directive",e,"expected a digit but found "+n,this.get_mark());for(r=0;"0"<=(i=this.peek(r))&&i<="9";)r++;return o=parseInt(this.prefix(r)),this.forward(r),o},e.prototype.scan_tag_directive_value=function(e){for(var t,n;" "===this.peek();)this.forward();for(t=this.scan_tag_directive_handle(e);" "===this.peek();)this.forward();return n=this.scan_tag_directive_prefix(e),[t,n]},e.prototype.scan_tag_directive_handle=function(e){var n,r;if(r=this.scan_tag_handle("directive",e),n=this.peek()," "!==n)throw new t.ScannerError("while scanning a directive",e,"expected ' ' but found "+n,this.get_mark());return r},e.prototype.scan_tag_directive_prefix=function(e){var r,i;if(i=this.scan_tag_uri("directive",e),r=this.peek(),c.call(n+"\0 ",r)<0)throw new t.ScannerError("while scanning a directive",e,"expected ' ' but found "+r,this.get_mark());return i},e.prototype.scan_directive_ignored_line=function(e){for(var r,i;" "===this.peek();)this.forward();if("#"===this.peek())for(;i=this.peek(),c.call(n+"\0",i)<0;)this.forward();if(r=this.peek(),c.call(n+"\0",r)<0)throw new t.ScannerError("while scanning a directive",e,"expected a comment or a line break but found "+r,this.get_mark());return this.scan_line_break()},e.prototype.scan_anchor=function(e){var r,i,o,a,s,u;for(s=this.get_mark(),i=this.peek(),a="*"===i?"alias":"anchor",this.forward(),o=0,r=this.peek(o);"0"<=r&&r<="9"||"A"<=r&&r<="Z"||"a"<=r&&r<="z"||c.call("-_",r)>=0;)o++,r=this.peek(o);if(0===o)throw new t.ScannerError("while scanning an "+a,s,"expected alphabetic or numeric character but found '"+r+"'",this.get_mark());if(u=this.prefix(o),this.forward(o),r=this.peek(),c.call(n+l+"\0?:,]}%@`",r)<0)throw new t.ScannerError("while scanning an "+a,s,"expected alphabetic or numeric character but found '"+r+"'",this.get_mark());return new e(u,s,this.get_mark())},e.prototype.scan_tag=function(){var e,r,o,a,s,u;if(a=this.get_mark(),e=this.peek(1),"<"===e){if(r=null,this.forward(2),s=this.scan_tag_uri("tag",a),">"!==this.peek())throw new t.ScannerError("while parsing a tag",a,"expected '>' but found "+this.peek(),this.get_mark());this.forward()}else if(c.call(n+l+"\0",e)>=0)r=null,s="!",this.forward();else{for(o=1,u=!1;c.call(n+"\0 ",e)<0;){if("!"===e){u=!0;break}o++,e=this.peek(o)}u?r=this.scan_tag_handle("tag",a):(r="!",this.forward()),s=this.scan_tag_uri("tag",a)}if(e=this.peek(),c.call(n+"\0 ",e)<0)throw new t.ScannerError("while scanning a tag",a,"expected ' ' but found "+e,this.get_mark());return new i.TagToken([r,s],a,this.get_mark())},e.prototype.scan_block_scalar=function(e){var t,r,a,s,u,l,p,f,h,d,m,v,y,g,_,b,x,w,k,S;for(u=">"===e,a=[],S=this.get_mark(),this.forward(),y=this.scan_block_scalar_indicators(S),r=y[0],l=y[1],this.scan_block_scalar_ignored_line(S),v=this.indent+1,v<1&&(v=1),null==l?(g=this.scan_block_scalar_indentation(),t=g[0],m=g[1],s=g[2],p=Math.max(v,m)):(p=v+l-1,_=this.scan_block_scalar_breaks(p),t=_[0],s=_[1]),d="";this.column===p&&"\0"!==this.peek();){for(a=a.concat(t),b=this.peek(),f=c.call(" \t",b)<0,h=0;x=this.peek(h),c.call(n+"\0",x)<0;)h++;if(a.push(this.prefix(h)),this.forward(h),d=this.scan_line_break(),w=this.scan_block_scalar_breaks(p),t=w[0],s=w[1],this.column!==p||"\0"===this.peek())break;u&&"\n"===d&&f&&(k=this.peek(),c.call(" \t",k)<0)?o.is_empty(t)&&a.push(" "):a.push(d)}return r!==!1&&a.push(d),r===!0&&(a=a.concat(t)),new i.ScalarToken(a.join(""),!1,S,s,e)},e.prototype.scan_block_scalar_indicators=function(e){var r,i,o;if(i=null,o=null,r=this.peek(),c.call("+-",r)>=0){if(i="+"===r,this.forward(),r=this.peek(),c.call(a,r)>=0){if(o=parseInt(r),0===o)throw new t.ScannerError("while scanning a block scalar",e,"expected indentation indicator in the range 1-9 but found 0",this.get_mark());this.forward()}}else if(c.call(a,r)>=0){if(o=parseInt(r),0===o)throw new t.ScannerError("while scanning a block scalar",e,"expected indentation indicator in the range 1-9 but found 0",this.get_mark());this.forward(),r=this.peek(),c.call("+-",r)>=0&&(i="+"===r,this.forward())}if(r=this.peek(),c.call(n+"\0 ",r)<0)throw new t.ScannerError("while scanning a block scalar",e,"expected chomping or indentation indicators, but found "+r,this.get_mark());return[i,o]},e.prototype.scan_block_scalar_ignored_line=function(e){for(var r,i;" "===this.peek();)this.forward();if("#"===this.peek())for(;i=this.peek(),c.call(n+"\0",i)<0;)this.forward();if(r=this.peek(),c.call(n+"\0",r)<0)throw new t.ScannerError("while scanning a block scalar",e,"expected a comment or a line break but found "+r,this.get_mark());return this.scan_line_break()},e.prototype.scan_block_scalar_indentation=function(){var e,t,r,i;for(e=[],r=0,t=this.get_mark();i=this.peek(),c.call(n+" ",i)>=0;)" "!==this.peek()?(e.push(this.scan_line_break()),t=this.get_mark()):(this.forward(),this.column>r&&(r=this.column));return[e,r,t]},e.prototype.scan_block_scalar_breaks=function(e){var t,r,i;for(t=[],r=this.get_mark();this.column=0;)for(t.push(this.scan_line_break()),r=this.get_mark();this.column=0)o.push(i),this.forward();else{if(!e||"\\"!==i)return o;if(this.forward(),i=this.peek(),i in f)o.push(f[i]),this.forward();else if(i in p){for(d=p[i],this.forward(),h=u=0,v=d;0<=v?uv;h=0<=v?++u:--u)if(y=this.peek(h),c.call(a+"ABCDEFabcdef",y)<0)throw new t.ScannerError("while scanning a double-quoted scalar",r,"expected escape sequence of "+d+" hexadecimal numbers, but found "+this.peek(h),this.get_mark());s=parseInt(this.prefix(d),16),o.push(String.fromCharCode(s)),this.forward(d)}else{if(!(c.call(n,i)>=0))throw new t.ScannerError("while scanning a double-quoted scalar",r,"found unknown escape character "+i,this.get_mark());this.scan_line_break(),o=o.concat(this.scan_flow_scalar_breaks(e,r))}}else o.push("'"),this.forward(2)}},e.prototype.scan_flow_scalar_spaces=function(e,r){var i,o,a,s,u,p,f;for(a=[],s=0;p=this.peek(s),c.call(l,p)>=0;)s++;if(f=this.prefix(s),this.forward(s),o=this.peek(),"\0"===o)throw new t.ScannerError("while scanning a quoted scalar",r,"found unexpected end of stream",this.get_mark());return c.call(n,o)>=0?(u=this.scan_line_break(),i=this.scan_flow_scalar_breaks(e,r),"\n"!==u?a.push(u):0===i.length&&a.push(" "),a=a.concat(i)):a.push(f),a},e.prototype.scan_flow_scalar_breaks=function(e,r){var i,o,a,s,u;for(i=[];;){if(o=this.prefix(3),"---"===o||"..."===o&&(a=this.peek(3),c.call(n+l+"\0",a)>=0))throw new t.ScannerError("while scanning a quoted scalar",r,"found unexpected document separator",this.get_mark());for(;s=this.peek(),c.call(l,s)>=0;)this.forward();if(u=this.peek(),!(c.call(n,u)>=0))return i;i.push(this.scan_line_break())}},e.prototype.scan_plain=function(){var e,r,o,a,s,u,p,f,h;for(r=[],h=o=this.get_mark(),a=this.indent+1,f=[];;){if(s=0,"#"===this.peek())break;for(;;){if(e=this.peek(s),c.call(n+l+"\0",e)>=0||0===this.flow_level&&":"===e&&(u=this.peek(s+1),c.call(n+l+"\0",u)>=0)||0!==this.flow_level&&c.call(",:?[]{}",e)>=0)break;s++}if(0!==this.flow_level&&":"===e&&(p=this.peek(s+1),c.call(n+l+"\0,[]{}",p)<0))throw this.forward(s),new t.ScannerError("while scanning a plain scalar",h,"found unexpected ':'",this.get_mark(),"Please check http://pyyaml.org/wiki/YAMLColonInFlowContext");if(0===s)break;if(this.allow_simple_key=!1,r=r.concat(f),r.push(this.prefix(s)),this.forward(s),o=this.get_mark(),f=this.scan_plain_spaces(a,h),null==f||0===f.length||"#"===this.peek()||0===this.flow_level&&this.column=0;)a++;if(m=this.prefix(a),this.forward(a),i=this.peek(),c.call(n,i)>=0){if(s=this.scan_line_break(),this.allow_simple_key=!0,u=this.prefix(3),"---"===u||"..."===u&&(f=this.peek(3),c.call(n+l+"\0",f)>=0))return;for(r=[];d=this.peek(),c.call(n+" ",d)>=0;)if(" "===this.peek())this.forward();else if(r.push(this.scan_line_break()),u=this.prefix(3),"---"===u||"..."===u&&(h=this.peek(3),c.call(n+l+"\0",h)>=0))return;"\n"!==s?o.push(s):0===r.length&&o.push(" "),o=o.concat(r)}else m&&o.push(m);return o},e.prototype.scan_tag_handle=function(e,n){var r,i,o;if(r=this.peek(),"!"!==r)throw new t.ScannerError("while scanning a "+e,n,"expected '!' but found "+r,this.get_mark());if(i=1,r=this.peek(i)," "!==r){for(;"0"<=r&&r<="9"||"A"<=r&&r<="Z"||"a"<=r&&r<="z"||c.call("-_",r)>=0;)i++,r=this.peek(i);if("!"!==r)throw this.forward(i),new t.ScannerError("while scanning a "+e,n,"expected '!' but found "+r,this.get_mark());i++}return o=this.prefix(i),this.forward(i),o},e.prototype.scan_tag_uri=function(e,n){var r,i,o;for(i=[],o=0,r=this.peek(o);"0"<=r&&r<="9"||"A"<=r&&r<="Z"||"a"<=r&&r<="z"||c.call("-;/?:@&=+$,_.!~*'()[]%",r)>=0;)"%"===r?(i.push(this.prefix(o)),this.forward(o),o=0,i.push(this.scan_uri_escapes(e,n))):o++,r=this.peek(o);if(0!==o&&(i.push(this.prefix(o)),this.forward(o),o=0),0===i.length)throw new t.ScannerError("while parsing a "+e,n,"expected URI but found "+r,this.get_mark());return i.join("")},e.prototype.scan_uri_escapes=function(e,n){var r,i,o,a;for(r=[],a=this.get_mark();"%"===this.peek();){for(this.forward(),o=i=0;i<=2;o=++i)throw new t.ScannerError("while scanning a "+e,n,"expected URI escape sequence of 2 hexadecimal numbers but found "+this.peek(o),this.get_mark());r.push(String.fromCharCode(parseInt(this.prefix(2),16))),this.forward(2)}return r.join("")},e.prototype.scan_line_break=function(){var e;return e=this.peek(),c.call("\r\n…",e)>=0?("\r\n"===this.prefix(2)?this.forward(2):this.forward(),"\n"):c.call("\u2028\u2029",e)>=0?(this.forward(),e):""},e}()}).call(this)},function(e,t){(function(){var e=function(e,n){function r(){this.constructor=e}for(var i in n)t.call(n,i)&&(e[i]=n[i]);return r.prototype=n.prototype,e.prototype=new r,e.__super__=n.prototype,e},t={}.hasOwnProperty;this.Token=function(){function e(e,t){this.start_mark=e,this.end_mark=t}return e}(),this.DirectiveToken=function(t){function n(e,t,n,r){this.name=e,this.value=t,this.start_mark=n,this.end_mark=r}return e(n,t),n.prototype.id="",n}(this.Token),this.DocumentStartToken=function(t){function n(){return n.__super__.constructor.apply(this,arguments)}return e(n,t),n.prototype.id="",n}(this.Token),this.DocumentEndToken=function(t){function n(){return n.__super__.constructor.apply(this,arguments)}return e(n,t),n.prototype.id="",n}(this.Token),this.StreamStartToken=function(t){function n(e,t,n){this.start_mark=e,this.end_mark=t,this.encoding=n}return e(n,t),n.prototype.id="",n}(this.Token),this.StreamEndToken=function(t){function n(){return n.__super__.constructor.apply(this,arguments)}return e(n,t),n.prototype.id="",n}(this.Token),this.BlockSequenceStartToken=function(t){function n(){return n.__super__.constructor.apply(this,arguments)}return e(n,t),n.prototype.id="",n}(this.Token),this.BlockMappingStartToken=function(t){function n(){return n.__super__.constructor.apply(this,arguments)}return e(n,t),n.prototype.id="",n}(this.Token),this.BlockEndToken=function(t){function n(){return n.__super__.constructor.apply(this,arguments)}return e(n,t),n.prototype.id="",n}(this.Token),this.FlowSequenceStartToken=function(t){function n(){return n.__super__.constructor.apply(this,arguments)}return e(n,t),n.prototype.id="[",n}(this.Token),this.FlowMappingStartToken=function(t){function n(){return n.__super__.constructor.apply(this,arguments)}return e(n,t),n.prototype.id="{",n}(this.Token),this.FlowSequenceEndToken=function(t){function n(){return n.__super__.constructor.apply(this,arguments)}return e(n,t),n.prototype.id="]",n}(this.Token),this.FlowMappingEndToken=function(t){function n(){return n.__super__.constructor.apply(this,arguments)}return e(n,t),n.prototype.id="}",n}(this.Token),this.KeyToken=function(t){function n(){return n.__super__.constructor.apply(this,arguments)}return e(n,t),n.prototype.id="?",n}(this.Token),this.ValueToken=function(t){function n(){return n.__super__.constructor.apply(this,arguments)}return e(n,t),n.prototype.id=":",n}(this.Token),this.BlockEntryToken=function(t){function n(){return n.__super__.constructor.apply(this,arguments)}return e(n,t),n.prototype.id="-",n}(this.Token),this.FlowEntryToken=function(t){function n(){return n.__super__.constructor.apply(this,arguments)}return e(n,t),n.prototype.id=",",n}(this.Token),this.AliasToken=function(t){function n(e,t,n){this.value=e,this.start_mark=t,this.end_mark=n}return e(n,t),n.prototype.id="",n}(this.Token),this.AnchorToken=function(t){function n(e,t,n){this.value=e,this.start_mark=t,this.end_mark=n}return e(n,t),n.prototype.id="",n}(this.Token),this.TagToken=function(t){function n(e,t,n){this.value=e,this.start_mark=t,this.end_mark=n}return e(n,t),n.prototype.id="",n}(this.Token),this.ScalarToken=function(t){function n(e,t,n,r,i){this.value=e,this.plain=t,this.start_mark=n,this.end_mark=r,this.style=i}return e(n,t),n.prototype.id="",n}(this.Token)}).call(this)},function(e,t,n){(function(){var e,r,i,o=function(e,t){function n(){this.constructor=e}for(var r in t)a.call(t,r)&&(e[r]=t[r]);return n.prototype=t.prototype,e.prototype=new n,e.__super__=t.prototype,e},a={}.hasOwnProperty,s=[].slice;r=n(743),e=n(744).MarkedYAMLError,i=n(759),this.ParserError=function(e){function t(){return t.__super__.constructor.apply(this,arguments)}return o(t,e),t}(e),this.Parser=function(){function e(){this.current_event=null,this.yaml_version=null,this.tag_handles={},this.states=[],this.marks=[],this.state="parse_stream_start"}var n;return n={"!":"!","!!":"tag:yaml.org,2002:"},e.prototype.dispose=function(){return this.states=[],this.state=null},e.prototype.check_event=function(){var e,t,n,r;if(t=1<=arguments.length?s.call(arguments,0):[],null===this.current_event&&null!=this.state&&(this.current_event=this[this.state]()),null!==this.current_event){if(0===t.length)return!0;for(n=0,r=t.length;n', but found "+this.peek_token().id,this.peek_token().start_mark);u=this.get_token(),e=u.end_mark,n=new r.DocumentStartEvent(a,e,!0,c,s),this.states.push("parse_document_end"),this.state="parse_document_content"}return n},e.prototype.parse_document_end=function(){var e,t,n,o,a;return a=this.peek_token(),o=e=a.start_mark,n=!1,this.check_token(i.DocumentEndToken)&&(a=this.get_token(),e=a.end_mark,n=!0),t=new r.DocumentEndEvent(o,e,n),this.state="parse_document_start",t},e.prototype.parse_document_content=function(){var e;return this.check_token(i.DirectiveToken,i.DocumentStartToken,i.DocumentEndToken,i.StreamEndToken)?(e=this.process_empty_scalar(this.peek_token().start_mark),this.state=this.states.pop(),e):this.parse_block_node()},e.prototype.process_directives=function(){var e,r,o,s,u,c,l,p,f,h;for(this.yaml_version=null,this.tag_handles={};this.check_token(i.DirectiveToken);)if(f=this.get_token(),"YAML"===f.name){if(null!==this.yaml_version)throw new t.ParserError(null,null,"found duplicate YAML directive",f.start_mark);if(u=f.value,r=u[0],o=u[1],1!==r)throw new t.ParserError(null,null,"found incompatible YAML document (version 1.* is required)",f.start_mark);this.yaml_version=f.value}else if("TAG"===f.name){if(c=f.value,e=c[0],s=c[1],e in this.tag_handles)throw new t.ParserError(null,null,"duplicate tag handle "+e,f.start_mark);this.tag_handles[e]=s}p=null,l=this.tag_handles;for(e in l)a.call(l,e)&&(s=l[e],null==p&&(p={}),p[e]=s);h=[this.yaml_version,p];for(e in n)a.call(n,e)&&(s=n[e],s in this.tag_handles||(this.tag_handles[e]=s));return h},e.prototype.parse_block_node=function(){return this.parse_node(!0)},e.prototype.parse_flow_node=function(){return this.parse_node()},e.prototype.parse_block_node_or_indentless_sequence=function(){return this.parse_node(!0,!0)},e.prototype.parse_node=function(e,n){var o,a,s,u,c,l,p,f,h,d,m;if(null==e&&(e=!1),null==n&&(n=!1),this.check_token(i.AliasToken))m=this.get_token(),s=new r.AliasEvent(m.value,m.start_mark,m.end_mark),this.state=this.states.pop();else{if(o=null,h=null,p=a=d=null,this.check_token(i.AnchorToken)?(m=this.get_token(),p=m.start_mark,a=m.end_mark,o=m.value,this.check_token(i.TagToken)&&(m=this.get_token(),d=m.start_mark,a=m.end_mark,h=m.value)):this.check_token(i.TagToken)&&(m=this.get_token(),p=d=m.start_mark,a=m.end_mark,h=m.value,this.check_token(i.AnchorToken)&&(m=this.get_token(),a=m.end_mark,o=m.value)),null!==h)if(u=h[0],f=h[1],null!==u){if(!(u in this.tag_handles))throw new t.ParserError("while parsing a node",p,"found undefined tag handle "+u,d);h=this.tag_handles[u]+f}else h=f;if(null===p&&(p=a=this.peek_token().start_mark),s=null,c=null===h||"!"===h,n&&this.check_token(i.BlockEntryToken))a=this.peek_token().end_mark,s=new r.SequenceStartEvent(o,h,c,p,a),this.state="parse_indentless_sequence_entry";else if(this.check_token(i.ScalarToken))m=this.get_token(),a=m.end_mark,c=m.plain&&null===h||"!"===h?[!0,!1]:null===h?[!1,!0]:[!1,!1],s=new r.ScalarEvent(o,h,c,m.value,p,a,m.style),this.state=this.states.pop();else if(this.check_token(i.FlowSequenceStartToken))a=this.peek_token().end_mark,s=new r.SequenceStartEvent(o,h,c,p,a,!0),this.state="parse_flow_sequence_first_entry";else if(this.check_token(i.FlowMappingStartToken))a=this.peek_token().end_mark,s=new r.MappingStartEvent(o,h,c,p,a,!0),this.state="parse_flow_mapping_first_key";else if(e&&this.check_token(i.BlockSequenceStartToken))a=this.peek_token().end_mark,s=new r.SequenceStartEvent(o,h,c,p,a,!1),this.state="parse_block_sequence_first_entry";else if(e&&this.check_token(i.BlockMappingStartToken))a=this.peek_token().end_mark,s=new r.MappingStartEvent(o,h,c,p,a,!1),this.state="parse_block_mapping_first_key";else{if(null===o&&null===h)throw l=e?"block":"flow",m=this.peek_token(),new t.ParserError("while parsing a "+l+" node",p,"expected the node content, but found "+m.id,m.start_mark);s=new r.ScalarEvent(o,h,[c,!1],"",p,a),this.state=this.states.pop()}}return s},e.prototype.parse_block_sequence_first_entry=function(){var e;return e=this.get_token(),this.marks.push(e.start_mark),this.parse_block_sequence_entry()},e.prototype.parse_block_sequence_entry=function(){var e,n;if(this.check_token(i.BlockEntryToken))return n=this.get_token(),this.check_token(i.BlockEntryToken,i.BlockEndToken)?(this.state="parse_block_sequence_entry",this.process_empty_scalar(n.end_mark)):(this.states.push("parse_block_sequence_entry"),this.parse_block_node());if(!this.check_token(i.BlockEndToken))throw n=this.peek_token(),new t.ParserError("while parsing a block collection",this.marks.slice(-1)[0],"expected , but found "+n.id,n.start_mark);return n=this.get_token(),e=new r.SequenceEndEvent(n.start_mark,n.end_mark),this.state=this.states.pop(),this.marks.pop(),e},e.prototype.parse_indentless_sequence_entry=function(){var e,t;return this.check_token(i.BlockEntryToken)?(t=this.get_token(),this.check_token(i.BlockEntryToken,i.KeyToken,i.ValueToken,i.BlockEndToken)?(this.state="parse_indentless_sequence_entry",this.process_empty_scalar(t.end_mark)):(this.states.push("parse_indentless_sequence_entry"),this.parse_block_node())):(t=this.peek_token(),e=new r.SequenceEndEvent(t.start_mark,t.start_mark),this.state=this.states.pop(),e)},e.prototype.parse_block_mapping_first_key=function(){var e;return e=this.get_token(),this.marks.push(e.start_mark),this.parse_block_mapping_key()},e.prototype.parse_block_mapping_key=function(){var e,n;if(this.check_token(i.KeyToken))return n=this.get_token(),this.check_token(i.KeyToken,i.ValueToken,i.BlockEndToken)?(this.state="parse_block_mapping_value",this.process_empty_scalar(n.end_mark)):(this.states.push("parse_block_mapping_value"),this.parse_block_node_or_indentless_sequence());if(!this.check_token(i.BlockEndToken))throw n=this.peek_token(),new t.ParserError("while parsing a block mapping",this.marks.slice(-1)[0],"expected , but found "+n.id,n.start_mark);return n=this.get_token(),e=new r.MappingEndEvent(n.start_mark,n.end_mark),this.state=this.states.pop(),this.marks.pop(),e},e.prototype.parse_block_mapping_value=function(){var e;return this.check_token(i.ValueToken)?(e=this.get_token(),this.check_token(i.KeyToken,i.ValueToken,i.BlockEndToken)?(this.state="parse_block_mapping_key",this.process_empty_scalar(e.end_mark)):(this.states.push("parse_block_mapping_key"),this.parse_block_node_or_indentless_sequence())):(this.state="parse_block_mapping_key",e=this.peek_token(),this.process_empty_scalar(e.start_mark))},e.prototype.parse_flow_sequence_first_entry=function(){var e;return e=this.get_token(),this.marks.push(e.start_mark),this.parse_flow_sequence_entry(!0)},e.prototype.parse_flow_sequence_entry=function(e){var n,o;if(null==e&&(e=!1),!this.check_token(i.FlowSequenceEndToken)){if(!e){if(!this.check_token(i.FlowEntryToken))throw o=this.peek_token(),new t.ParserError("while parsing a flow sequence",this.marks.slice(-1)[0],"expected ',' or ']', but got "+o.id,o.start_mark);this.get_token()}if(this.check_token(i.KeyToken))return o=this.peek_token(),n=new r.MappingStartEvent(null,null,!0,o.start_mark,o.end_mark,!0),this.state="parse_flow_sequence_entry_mapping_key",n;if(!this.check_token(i.FlowSequenceEndToken))return this.states.push("parse_flow_sequence_entry"),this.parse_flow_node()}return o=this.get_token(),n=new r.SequenceEndEvent(o.start_mark,o.end_mark),this.state=this.states.pop(),this.marks.pop(),n},e.prototype.parse_flow_sequence_entry_mapping_key=function(){var e;return e=this.get_token(),this.check_token(i.ValueToken,i.FlowEntryToken,i.FlowSequenceEndToken)?(this.state="parse_flow_sequence_entry_mapping_value",this.process_empty_scalar(e.end_mark)):(this.states.push("parse_flow_sequence_entry_mapping_value"),this.parse_flow_node())},e.prototype.parse_flow_sequence_entry_mapping_value=function(){var e;return this.check_token(i.ValueToken)?(e=this.get_token(),this.check_token(i.FlowEntryToken,i.FlowSequenceEndToken)?(this.state="parse_flow_sequence_entry_mapping_end",this.process_empty_scalar(e.end_mark)):(this.states.push("parse_flow_sequence_entry_mapping_end"),this.parse_flow_node())):(this.state="parse_flow_sequence_entry_mapping_end",e=this.peek_token(),this.process_empty_scalar(e.start_mark))},e.prototype.parse_flow_sequence_entry_mapping_end=function(){var e;return this.state="parse_flow_sequence_entry",e=this.peek_token(),new r.MappingEndEvent(e.start_mark,e.start_mark)},e.prototype.parse_flow_mapping_first_key=function(){var e;return e=this.get_token(),this.marks.push(e.start_mark),this.parse_flow_mapping_key(!0)},e.prototype.parse_flow_mapping_key=function(e){var n,o;if(null==e&&(e=!1),!this.check_token(i.FlowMappingEndToken)){if(!e){if(!this.check_token(i.FlowEntryToken))throw o=this.peek_token(),new t.ParserError("while parsing a flow mapping",this.marks.slice(-1)[0],"expected ',' or '}', but got "+o.id,o.start_mark);this.get_token()}if(this.check_token(i.KeyToken))return o=this.get_token(),this.check_token(i.ValueToken,i.FlowEntryToken,i.FlowMappingEndToken)?(this.state="parse_flow_mapping_value",this.process_empty_scalar(o.end_mark)):(this.states.push("parse_flow_mapping_value"),this.parse_flow_node());if(!this.check_token(i.FlowMappingEndToken))return this.states.push("parse_flow_mapping_empty_value"),this.parse_flow_node()}return o=this.get_token(),n=new r.MappingEndEvent(o.start_mark,o.end_mark),this.state=this.states.pop(),this.marks.pop(),n},e.prototype.parse_flow_mapping_value=function(){var e;return this.check_token(i.ValueToken)?(e=this.get_token(),this.check_token(i.FlowEntryToken,i.FlowMappingEndToken)?(this.state="parse_flow_mapping_key",this.process_empty_scalar(e.end_mark)):(this.states.push("parse_flow_mapping_key"),this.parse_flow_node())):(this.state="parse_flow_mapping_key",e=this.peek_token(),this.process_empty_scalar(e.start_mark))},e.prototype.parse_flow_mapping_empty_value=function(){return this.state="parse_flow_mapping_key",this.process_empty_scalar(this.peek_token().start_mark)},e.prototype.process_empty_scalar=function(e){return new r.ScalarEvent(null,null,[!0,!1],"",e,e)},e}()}).call(this)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var i=n(486),o=r(i),a=n(145),s=r(a),u=n(146),c=r(u),l=n(489),p=r(l),f=n(490),h=r(f),d=n(498),m=r(d),v=function(e){function t(){return(0,s.default)(this,t),(0,p.default)(this,(t.__proto__||(0,o.default)(t)).apply(this,arguments))}return(0,h.default)(t,e),(0,c.default)(t,[{key:"render",value:function(){return null}}]),t}(m.default.Component);t.default=v},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}var i=n(763),o=r(i);e.exports=function(e){var t=e.configs;return{fn:{fetch:o.default.makeHttp(t.preFetch,t.postFetch),buildRequest:o.default.buildRequest,execute:o.default.execute,resolve:o.default.resolve,serializeRes:o.default.serializeRes,opId:o.default.helpers.opId}}}},function(e,t,n){ +e.exports=function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,t),i.l=!0,i.exports}var n={};return t.m=e,t.c=n,t.i=function(e){return e},t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=46)}([function(e,t){e.exports=n(60)},function(e,t){e.exports=n(141)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";return(e.operationId||"").replace(/\s/g,"").length?b(e.operationId):o(t,n)}function o(e,t){return""+_(t)+b(e)}function a(e,t){return _(t)+"-"+e}function s(e,t){return e&&e.paths?u(e,function(e){var n=e.pathName,r=e.method,o=e.operation;if(!o||"object"!==(void 0===o?"undefined":(0,v.default)(o)))return!1;var s=o.operationId;return[i(o,n,r),a(n,r),s].some(function(e){return e&&e===t})}):null}function u(e,t){return c(e,t,!0)||null}function c(e,t,n){if(!e||"object"!==(void 0===e?"undefined":(0,v.default)(e))||!e.paths||"object"!==(0,v.default)(e.paths))return null;var r=e.paths;for(var i in r)for(var o in r[i])if("PARAMETERS"!==o.toUpperCase()){var a=r[i][o];if(a&&"object"===(void 0===a?"undefined":(0,v.default)(a))){var s={spec:e,pathName:i,method:o.toUpperCase(),operation:a},u=t(s);if(n&&u)return s}}}function l(e){var t=e.spec,n=t.paths,r={};if(!n)return e;for(var o in n){var a=n[o];if((0,g.default)(a)){var s=a.parameters;for(var u in a)!function(e){var n=a[e];if(!(0,g.default)(n))return"continue";var u=i(n,o,e);if(u&&(r[u]?r[u].push(n):r[u]=[n],(0,d.default)(r).forEach(function(e){if(r[e].length>1)r[e].forEach(function(t,n){t.__originalOperationId=t.__originalOperationId||t.operationId,t.operationId=""+e+(n+1)});else if(void 0!==n.operationId){var t=r[e][0];t.__originalOperationId=t.__originalOperationId||n.operationId,t.operationId=e}})),"parameters"!==e){var c=[],l={};for(var p in t)"produces"!==p&&"consumes"!==p&&"security"!==p||(l[p]=t[p],c.push(l));if(s&&(l.parameters=s,c.push(l)),c.length){var h=!0,m=!1,v=void 0;try{for(var y,_=(0,f.default)(c);!(h=(y=_.next()).done);h=!0){var b=y.value;for(var x in b)if(n[x]){if("parameters"===x){var w=!0,k=!1,S=void 0;try{for(var E,C=(0,f.default)(b[x]);!(w=(E=C.next()).done);w=!0)!function(){var e=E.value;n[x].some(function(t){return t.name===e.name})||n[x].push(e)}()}catch(e){k=!0,S=e}finally{try{!w&&C.return&&C.return()}finally{if(k)throw S}}}}else n[x]=b[x]}}catch(e){m=!0,v=e}finally{try{!h&&_.return&&_.return()}finally{if(m)throw v}}}}}(u)}}return e}Object.defineProperty(t,"__esModule",{value:!0});var p=n(11),f=r(p),h=n(0),d=r(h),m=n(5),v=r(m);t.opId=i,t.idFromPathMethod=o,t.legacyIdFromPathMethod=a,t.getOperationRaw=s,t.findOperation=u,t.eachOperation=c,t.normalizeSwagger=l;var y=n(41),g=r(y),_=function(e){return String.prototype.toLowerCase.call(e)},b=function(e){return e.replace(/[^\w]/gi,"_")}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t,n){if(n=n||{},t=(0,q.default)({},t,{path:t.path&&o(t.path)}),"merge"===t.op){var r=s(t.path);W.default.apply(e,[r]),(0,q.default)(r.value,t.value)}else if("mergeDeep"===t.op){var i=s(t.path);W.default.apply(e,[i]),(0,J.default)(i.value,t.value)}else if(W.default.apply(e,[t]),n.allowMetaPatches&&t.meta&&O(t)&&(Array.isArray(t.value)||S(t.value))){var a=s(t.path);W.default.apply(e,[a]),(0,q.default)(a.value,t.meta)}return e}function o(e){return Array.isArray(e)?e.length<1?"":"/"+e.map(function(e){return(e+"").replace(/~/g,"~0").replace(/\//g,"~1")}).join("/"):e}function a(e,t){return{op:"add",path:e,value:t}}function s(e){return{op:"_get",path:e}}function u(e,t,n){return{op:"replace",path:e,value:t,meta:n}}function c(e,t){return{op:"remove",path:e}}function l(e,t){return{type:"mutation",op:"merge",path:e,value:t}}function p(e,t){return{type:"mutation",op:"mergeDeep",path:e,value:t}}function f(e,t){return{type:"context",path:e,value:t}}function h(e,t){try{return m(e,y,t)}catch(e){return e}}function d(e,t){try{return m(e,v,t)}catch(e){return e}}function m(e,t,n){return k(w(e.filter(O).map(function(e){return t(e.value,n,e.path)})||[]))}function v(e,t,n){return n=n||[],Array.isArray(e)?e.map(function(e,r){return v(e,t,n.concat(r))}):S(e)?(0,L.default)(e).map(function(r){return v(e[r],t,n.concat(r))}):t(e,n[n.length-1],n)}function y(e,t,n){n=n||[];var r=[];if(n.length>0){var i=t(e,n[n.length-1],n);i&&(r=r.concat(i))}if(Array.isArray(e)){var o=e.map(function(e,r){return y(e,t,n.concat(r))});o&&(r=r.concat(o))}else if(S(e)){var a=(0,L.default)(e).map(function(r){return y(e[r],t,n.concat(r))});a&&(r=r.concat(a))}return r=w(r)}function g(e,t){if(!Array.isArray(t))return!1;for(var n=0,r=t.length;n1&&void 0!==arguments[1]?arguments[1]:{};return"object"===(void 0===e?"undefined":(0,b.default)(e))&&(t=e,e=t.url),t.headers=t.headers||{},T.mergeInQueryOrForm(t),t.requestInterceptor&&(t=t.requestInterceptor(t)||t),/multipart\/form-data/i.test(t.headers["content-type"]||t.headers["Content-Type"])&&(delete t.headers["content-type"],delete t.headers["Content-Type"]),fetch(t.url,t).then(function(n){var r=T.serializeRes(n,e,t).then(function(e){return t.responseInterceptor&&(e=t.responseInterceptor(e)||e),e});if(!n.ok){var i=new Error(n.statusText);return i.statusCode=i.status=n.status,r.then(function(e){throw i.response=e,i},function(e){throw i.responseError=e,i})}return r})}function o(e){return/json/.test(e)||/xml/.test(e)||/yaml/.test(e)||/text/.test(e)}function a(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=n.loadSpec,i=void 0!==r&&r,a={ok:e.ok,url:e.url||t,status:e.status,statusText:e.statusText,headers:s(e.headers)},u=i||o(a.headers["content-type"]);return(u?e.text:e.blob||e.buffer).call(e).then(function(e){if(a.text=e,a.data=e,u)try{var t=S.default.safeLoad(e);a.body=t,a.obj=t}catch(e){a.parseError=e}return a})}function s(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t={};return"function"==typeof e.forEach?(e.forEach(function(e,n){void 0!==t[n]?(t[n]=Array.isArray(t[n])?t[n]:[t[n]],t[n].push(e)):t[n]=e}),t):t}function u(e){return"undefined"!=typeof File?e instanceof File:null!==e&&"object"===(void 0===e?"undefined":(0,b.default)(e))&&"function"==typeof e.pipe}function c(e,t){var n=e.value,r=e.collectionFormat,i=e.allowEmptyValue,o={csv:",",ssv:"%20",tsv:"%09",pipes:"|"};if(void 0===n&&i)return"";if(u(n))return n;var a=encodeURIComponent;return t&&(a=(0,A.default)(n)?function(e){return e}:function(e){return(0,g.default)(e)}),n&&!Array.isArray(n)?a(n):Array.isArray(n)&&!r?n.map(a).join(","):"multi"===r?n.map(a):n.map(a).join(o[r])}function l(e){var t=(0,v.default)(e).reduce(function(t,n){var r=e[n],i=encodeURIComponent(n),o=function(e){return e&&"object"===(void 0===e?"undefined":(0,b.default)(e))}(r)&&!Array.isArray(r);return t[i]=c(o?r:{value:r}),t},{});return w.default.stringify(t,{encode:!1,indices:!1})||""}function p(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.url,r=void 0===t?"":t,i=e.query,o=e.form;if(o){var a=(0,v.default)(o).some(function(e){return u(o[e].value)}),s=e.headers["content-type"]||e.headers["Content-Type"];if(a||/multipart\/form-data/i.test(s)){var p=n(35);e.body=new p,(0,v.default)(o).forEach(function(t){e.body.append(t,c(o[t],!0))})}else e.body=l(o);delete e.form}if(i){var f=r.split("?"),h=(0,d.default)(f,2),m=h[0],y=h[1],g="";if(y){var _=w.default.parse(y);(0,v.default)(i).forEach(function(e){return delete _[e]}),g=w.default.stringify(_,{encode:!0})}var b=function(){for(var e=arguments.length,t=Array(e),n=0;n1&&void 0!==arguments[1]?arguments[1]:{};if("string"==typeof e?n.url=e:n=e,!(this instanceof i))return new i(n);(0,c.default)(this,n);var r=this.resolve().then(function(){return t.disableInterfaces||(0,c.default)(t,i.makeApisTagOperation(t)),t});return r.client=this,r}var o=n(4),a=r(o),s=n(37),u=(r(s),n(8)),c=r(u),l=n(6),p=r(l),f=n(20),h=r(f),d=n(9),m=r(d),v=n(19),y=n(18),g=n(2);i.http=p.default,i.makeHttp=l.makeHttp.bind(null,i.http),i.resolve=h.default,i.execute=y.execute,i.serializeRes=l.serializeRes,i.serializeHeaders=l.serializeHeaders,i.clearCache=f.clearCache,i.parameterBuilders=y.PARAMETER_BUILDERS,i.makeApisTagOperation=v.makeApisTagOperation,i.buildRequest=y.buildRequest,i.helpers={opId:g.opId},e.exports=i,i.prototype={http:p.default,execute:function(e){return this.applyDefaults(),i.execute((0,a.default)({spec:this.spec,http:this.http.bind(this),securities:{authorized:this.authorizations}},e))},resolve:function(){var e=this;return i.resolve({spec:this.spec,url:this.url,allowMetaPatches:this.allowMetaPatches}).then(function(t){return e.originalSpec=e.spec,e.spec=t.spec,e.errors=t.errors,e})}},i.prototype.applyDefaults=function(){var e=this.spec,t=this.url;if(t&&t.startsWith("http")){var n=m.default.parse(t);e.host||(e.host=n.host),e.schemes||(e.schemes=[n.protocol.replace(":","")]),e.basePath||(e.basePath="/")}}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e){var t=e.http,n=e.fetch,r=e.spec,i=e.operationId,o=e.pathName,a=e.method,s=e.parameters,u=e.securities,c=(0,b.default)(e,["http","fetch","spec","operationId","pathName","method","parameters","securities"]);t=t||n||R.default,o&&a&&!i&&(i=(0,j.legacyIdFromPathMethod)(o,a));var l=q.buildRequest((0,g.default)({spec:r,operationId:i,parameters:s,securities:u},c));return l.body&&((0,A.default)(l.body)||(0,D.default)(l.body))&&(l.body=(0,v.default)(l.body)),t(l)}function o(e){var t=e.spec,n=e.operationId,r=e.parameters,i=e.securities,o=e.requestContentType,a=e.responseContentType,s=e.parameterBuilders,u=e.scheme,c=e.requestInterceptor,l=e.responseInterceptor,h=e.contextUrl;s=s||U;var d={url:p({spec:t,scheme:u,contextUrl:h}),credentials:"same-origin",headers:{}};if(c&&(d.requestInterceptor=c),l&&(d.responseInterceptor=l),!n)return d;var m=(0,j.getOperationRaw)(t,n);if(!m)throw new z("Operation "+n+" not found");var v=m.operation,y=void 0===v?{}:v,g=m.method,_=m.pathName;d.url+=_,d.method=(""+g).toUpperCase(),r=r||{};var b=t.paths[_]||{};return a&&(d.headers.accept=a),L(y.parameters).concat(L(b.parameters)).forEach(function(e){var n=s[e.in],i=void 0;if("body"===e.in&&e.schema&&e.schema.properties&&(i=r),i=e&&e.name&&r[e.name],void 0!==e.default&&void 0===i&&(i=e.default),void 0===i&&e.required&&!e.allowEmptyValue)throw new Error("Required parameter "+e.name+" is not provided");n&&n({req:d,parameter:e,value:i,operation:y,spec:t})}),d=f({request:d,securities:i,operation:y,spec:t}),(d.body||d.form)&&(o?d.headers["content-type"]=o:Array.isArray(y.consumes)?d.headers["content-type"]=y.consumes[0]:Array.isArray(t.consumes)?d.headers["content-type"]=t.consumes[0]:y.parameters.filter(function(e){return"file"===e.type}).length?d.headers["content-type"]="multipart/form-data":y.parameters.filter(function(e){return"formData"===e.in}).length&&(d.headers["content-type"]="application/x-www-form-urlencoded")),(0,N.mergeInQueryOrForm)(d),d}function a(e){var t=e.req,n=e.value;t.body=n}function s(e){var t=e.req,n=e.value,r=e.parameter;t.form=t.form||{},(n||r.allowEmptyValue)&&(t.form[r.name]={value:n,allowEmptyValue:r.allowEmptyValue,collectionFormat:r.collectionFormat})}function u(e){var t=e.req,n=e.parameter,r=e.value;t.headers=t.headers||{},void 0!==r&&(t.headers[n.name]=r)}function c(e){var t=e.req,n=e.value,r=e.parameter;t.url=t.url.replace("{"+r.name+"}",encodeURIComponent(n))}function l(e){var t=e.req,n=e.value,r=e.parameter;if(t.query=t.query||{},!1===n&&"boolean"===r.type&&(n="false"),n)t.query[r.name]={collectionFormat:r.collectionFormat,value:n};else if(r.allowEmptyValue){var i=r.name;t.query[i]=t.query[i]||{},t.query[i].allowEmptyValue=!0}}function p(e){var t=e.spec,n=e.scheme,r=e.contextUrl,i=void 0===r?"":r,o=I.default.parse(i),a=Array.isArray(t.schemes)?t.schemes[0]:null,s=n||a||W(o.protocol)||"http",u=t.host||o.host||"",c=t.basePath||"";if(s&&u){var l=s+"://"+(u+c);return"/"===l[l.length-1]?l.slice(0,-1):l}return""}function f(e){var t=e.request,n=e.securities,r=void 0===n?{}:n,i=e.operation,o=void 0===i?{}:i,a=e.spec,s=(0,S.default)({},t),u=r.authorized,c=void 0===u?{}:u,l=r.specSecurity,p=void 0===l?[]:l,f=o.security||p,h=c&&!!(0,d.default)(c).length,m=a.securityDefinitions;return s.headers=s.headers||{},s.query=s.query||{},(0,d.default)(r).length&&h&&f&&(!Array.isArray(o.security)||o.security.length)?(f.forEach(function(e,t){for(var n in e){var r=c[n];if(r){var i=r.token,o=r.value||r,a=m[n],u=a.type,l=i&&i.access_token,p=i&&i.token_type;if(r)if("apiKey"===u){var f="query"===a.in?"query":"headers";s[f]=s[f]||{},s[f][a.name]=o}else"basic"===u?o.header?s.headers.authorization=o.header:(o.base64=(0,O.default)(o.username+":"+o.password),s.headers.authorization="Basic "+o.base64):"oauth2"===u&&(s.headers.authorization=(p||"Bearer")+" "+l)}}}),s):t}Object.defineProperty(t,"__esModule",{value:!0}),t.PARAMETER_BUILDERS=t.self=void 0;var h=n(0),d=r(h),m=n(7),v=r(m),y=n(4),g=r(y),_=n(29),b=r(_),x=n(1),w=r(x);t.execute=i,t.buildRequest=o,t.bodyBuilder=a,t.formDataBuilder=s,t.headerBuilder=u,t.pathBuilder=c,t.queryBuilder=l,t.baseUrl=p,t.applySecurities=f;var k=n(8),S=r(k),E=n(39),C=(r(E),n(42)),A=r(C),T=n(40),D=r(T),M=n(32),O=r(M),P=n(9),I=r(P),N=n(6),R=r(N),j=n(2),F=n(10),B=r(F),L=function(e){return Array.isArray(e)?e:[]},z=(0,B.default)("OperationNotFoundError",function(e,t,n){this.originalError=n,(0,w.default)(this,t||{})}),q=t.self={buildRequest:o},U=t.PARAMETER_BUILDERS={body:a,header:u,query:l,path:c,formData:s},W=function(e){return e?e.replace(/\W/g,""):null}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return function(t){var n=t.pathName,r=t.method,i=t.operationId;return function(t){var o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return e.execute((0,c.default)({spec:e.spec},(0,p.default)(e,"requestInterceptor","responseInterceptor"),{pathName:n,method:r,parameters:t,operationId:i},o))}}}function o(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=m.makeExecute(e),n=m.mapTagOperations({spec:e.spec,cb:t}),r={};for(var i in n){r[i]={operations:{}};for(var o in n[i])r[i].operations[o]={execute:n[i][o]}}return{apis:r}}function a(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=m.makeExecute(e);return{apis:m.mapTagOperations({spec:e.spec,cb:t})}}function s(e){var t=e.spec,n=e.cb,r=void 0===n?h:n,i=e.defaultTag,o=void 0===i?"default":i,a={},s={};return(0,f.eachOperation)(t,function(e){var n=e.pathName,i=e.method,u=e.operation;(u.tags?d(u.tags):[o]).forEach(function(e){if("string"==typeof e){var o=s[e]=s[e]||{},c=(0,f.opId)(u,n,i),l=r({spec:t,pathName:n,method:i,operation:u,operationId:c});if(a[c])a[c]=a[c]+1,o[""+c+a[c]]=l;else if(void 0!==o[c]){var p=a[c]||1;a[c]=p+1,o[""+c+a[c]]=l;var h=o[c];delete o[c],o[""+c+p]=h}else o[c]=l}})}),s}Object.defineProperty(t,"__esModule",{value:!0}),t.self=void 0;var u=n(4),c=r(u);t.makeExecute=i,t.makeApisTagOperationsOperationExecute=o,t.makeApisTagOperation=a,t.mapTagOperations=s;var l=n(44),p=r(l),f=n(2),h=function(){return null},d=function(e){return Array.isArray(e)?e:[e]},m=t.self={mapTagOperations:s,makeExecute:i}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e){return function(t){return e({url:t,loadSpec:!0,headers:{Accept:"application/json"},credentials:"same-origin"}).then(function(e){return e.body})}}function o(){c.plugins.refs.clearCache()}function a(e){function t(e){s&&(c.plugins.refs.docCache[s]=e),c.plugins.refs.fetchJSON=i(n);var t=[c.plugins.refs];return"function"==typeof v&&t.push(c.plugins.parameters),"function"==typeof m&&t.push(c.plugins.properties),"strict"!==f&&t.push(c.plugins.allOf),(0,l.default)({spec:e,context:{baseDoc:s},plugins:t,allowMetaPatches:d,parameterMacro:v,modelPropertyMacro:m}).then(p.normalizeSwagger)}var n=e.http,r=e.fetch,o=e.spec,a=e.url,s=e.baseDoc,f=e.mode,h=e.allowMetaPatches,d=void 0===h||h,m=e.modelPropertyMacro,v=e.parameterMacro;return s=s||a,n=r||n||u.default,o?t(o):i(n)(s).then(t)}Object.defineProperty(t,"__esModule",{value:!0}),t.makeFetchJSON=i,t.clearCache=o,t.default=a;var s=n(6),u=r(s),c=n(21),l=r(c),p=n(2)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e){return new F(e).dispatch()}Object.defineProperty(t,"__esModule",{value:!0}),t.plugins=t.SpecMap=void 0;var o=n(7),a=r(o),s=n(12),u=r(s),c=n(15),l=r(c),p=n(0),f=r(p),h=n(11),d=r(h),m=n(27),v=r(m),y=n(1),g=r(y),_=n(13),b=r(_),x=n(14),w=r(x);t.default=i;var k=n(38),S=r(k),E=n(3),C=r(E),A=n(26),T=r(A),D=n(22),M=r(D),O=n(24),P=r(O),I=n(25),N=r(I),R=n(23),j=r(R),F=function(){function e(t){(0,b.default)(this,e),(0,g.default)(this,{spec:"",debugLevel:"info",plugins:[],pluginHistory:{},errors:[],mutations:[],promisedPatches:[],state:{},patches:[],context:{},contextTree:new j.default,showDebug:!1,allPatches:[],pluginProp:"specMap",libMethods:(0,g.default)((0,v.default)(this),C.default),allowMetaPatches:!1},t),this.get=this._get.bind(this),this.getContext=this._getContext.bind(this),this.hasRun=this._hasRun.bind(this),this.wrappedPlugins=this.plugins.map(this.wrapPlugin.bind(this)).filter(C.default.isFunction),this.patches.push(C.default.add([],this.spec)),this.patches.push(C.default.context([],this.context)),this.updatePatches(this.patches)}return(0,w.default)(e,[{key:"debug",value:function(e){if(this.debugLevel===e){for(var t,n=arguments.length,r=Array(n>1?n-1:0),i=1;i1?n-1:0),i=1;i0})}},{key:"nextPromisedPatch",value:function(){if(this.promisedPatches.length>0)return u.default.race(this.promisedPatches.map(function(e){return e.value}))}},{key:"getPluginHistory",value:function(e){var t=this.getPluginName(e);return this.pluginHistory[t]||[]}},{key:"getPluginRunCount",value:function(e){return this.getPluginHistory(e).length}},{key:"getPluginHistoryTip",value:function(e){var t=this.getPluginHistory(e);return t&&t[t.length-1]||{}}},{key:"getPluginMutationIndex",value:function(e){var t=this.getPluginHistoryTip(e).mutationIndex;return"number"!=typeof t?-1:t}},{key:"getPluginName",value:function(e){return e.pluginName}},{key:"updatePluginHistory",value:function(e,t){var n=this.getPluginName(e);(this.pluginHistory[n]=this.pluginHistory[n]||[]).push(t)}},{key:"updatePatches",value:function(e,t){var n=this;C.default.normalizeArray(e).forEach(function(e){if(e instanceof Error)return void n.errors.push(e);try{if(!C.default.isObject(e))return void n.debug("updatePatches","Got a non-object patch",e);if(n.showDebug&&n.allPatches.push(e),C.default.isPromise(e.value))return n.promisedPatches.push(e),void n.promisedPatchThen(e);if(C.default.isContextPatch(e))return void n.setContext(e.path,e.value);if(C.default.isMutation(e))return void n.updateMutations(e)}catch(e){n.errors.push(e)}})}},{key:"updateMutations",value:function(e){C.default.applyPatch(this.state,e,{allowMetaPatches:this.allowMetaPatches})&&this.mutations.push(e)}},{key:"removePromisedPatch",value:function(e){var t=this.promisedPatches.indexOf(e);return t<0?void this.debug("Tried to remove a promisedPatch that isn't there!"):void this.promisedPatches.splice(t,1)}},{key:"promisedPatchThen",value:function(e){var t=this;return e.value=e.value.then(function(n){var r=(0,g.default)({},e,{value:n});t.removePromisedPatch(e),t.updatePatches(r)}).catch(function(n){t.removePromisedPatch(e),t.updatePatches(n)})}},{key:"getMutations",value:function(e,t){return e=e||0,"number"!=typeof t&&(t=this.mutations.length),this.mutations.slice(e,t)}},{key:"getCurrentMutations",value:function(){return this.getMutationsForPlugin(this.getCurrentPlugin())}},{key:"getMutationsForPlugin",value:function(e){var t=this.getPluginMutationIndex(e);return this.getMutations(t+1)}},{key:"getCurrentPlugin",value:function(){return this.currentPlugin}},{key:"getPatchesOfType",value:function(e,t){return e.filter(t)}},{key:"getLib",value:function(){return this.libMethods}},{key:"_get",value:function(e){return C.default.getIn(this.state,e)}},{key:"_getContext",value:function(e){return this.contextTree.get(e)}},{key:"setContext",value:function(e,t){return this.contextTree.set(e,t)}},{key:"_hasRun",value:function(e){return this.getPluginRunCount(this.getCurrentPlugin())>(e||0)}},{key:"_clone",value:function(e){return JSON.parse((0,a.default)(e))}},{key:"dispatch",value:function(){function e(e){e&&(e=C.default.fullyNormalizeArray(e),n.updatePatches(e,r))}var t=this,n=this,r=this.nextPlugin();if(!r){var i=this.nextPromisedPatch();if(i)return i.then(function(){return t.dispatch()}).catch(function(){return t.dispatch()});var o={spec:this.state,errors:this.errors};return this.showDebug&&(o.patches=this.allPatches),u.default.resolve(o)}if(n.pluginCount=n.pluginCount||{},n.pluginCount[r]=(n.pluginCount[r]||0)+1,n.pluginCount[r]>100)return u.default.resolve({spec:n.state,errors:n.errors.concat(new Error("We've reached a hard limit of 100 plugin runs"))});if(r!==this.currentPlugin&&this.promisedPatches.length){var a=this.promisedPatches.map(function(e){return e.value});return u.default.all(a.map(function(e){return e.then(Function,Function)})).then(function(){return t.dispatch()})}return function(){n.currentPlugin=r;var t=n.getCurrentMutations(),i=n.mutations.length-1;try{if(r.isGenerator){var o=!0,a=!1,s=void 0;try{for(var u,c=(0,d.default)(r(t,n.getLib()));!(o=(u=c.next()).done);o=!0)e(u.value)}catch(e){a=!0,s=e}finally{try{!o&&c.return&&c.return()}finally{if(a)throw s}}}else e(r(t,n.getLib()))}catch(t){e([(0,g.default)((0,v.default)(t),{plugin:r})])}finally{n.updatePluginHistory(r,{mutationIndex:i})}return n.dispatch()}()}}]),e}(),B={refs:T.default,allOf:M.default,parameters:P.default,properties:N.default};t.SpecMap=F,t.plugins=B},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={key:"allOf",plugin:function(e,t,n,r,i){if(!i.meta||!i.meta.$$ref){if(!Array.isArray(e)){var o=new TypeError("allOf must be an array");return o.fullPath=n,o}var a=n.slice(0,-1),s=!1;return[r.replace(a,{})].concat(e.map(function(e,t){if(!r.isObject(e)){if(s)return null;s=!0;var i=new TypeError("Elements in allOf must be objects");return i.fullPath=n,i}return r.mergeDeep(a,e)}))}}}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){return o({children:{}},e,t)}function o(e,t,n){return e.value=t||{},e.protoValue=n?(0,c.default)({},n.protoValue,e.value):e.value,(0,s.default)(e.children).forEach(function(t){var n=e.children[t];e.children[t]=o(n,n.value,e)}),e}Object.defineProperty(t,"__esModule",{value:!0});var a=n(0),s=r(a),u=n(4),c=r(u),l=n(13),p=r(l),f=n(14),h=r(f),d=function(){function e(t){(0,p.default)(this,e),this.root=i(t||{})}return(0,h.default)(e,[{key:"set",value:function(e,t){var n=this.getParent(e,!0);if(!n)return void o(this.root,t,null);var r=e[e.length-1],a=n.children;return a[r]?void o(a[r],t,n):void(a[r]=i(t,n))}},{key:"get",value:function(e){if(e=e||[],e.length<1)return this.root.value;for(var t=this.root,n=void 0,r=void 0,i=0;i")+"#"+e;if(t==r.contextTree.get([]).baseDoc&&v(o,e))return!0;var s="";return!!n.some(function(e){return s=s+"/"+d(e),i[s]&&i[s].some(function(e){return v(e,a)||v(a,e)})})||void(i[o]=(i[o]||[]).concat(a))}function g(e,t){function n(e){return N.default.isObject(e)&&(r.indexOf(e)>=0||(0,w.default)(e).some(function(t){return n(e[t])}))}var r=[e];return t.path.reduce(function(e,t){return r.push(e[t]),e[t]},e),n(t.value)}Object.defineProperty(t,"__esModule",{value:!0});var _=n(5),b=r(_),x=n(0),w=r(x),k=n(12),S=r(k),E=n(28),C=r(E),A=n(1),T=r(A),D=n(16),M=r(D),O=n(9),P=r(O),I=n(3),N=r(I),R=n(10),j=r(R),F=new RegExp("^([a-z]+://|//)","i"),B=(0, +j.default)("JSONRefError",function(e,t,n){this.originalError=n,(0,T.default)(this,t||{})}),L={},z=new C.default,q={key:"$ref",plugin:function(e,t,n,r){var u=n.slice(0,-1),c=r.getContext(n).baseDoc;if("string"!=typeof e)return new B("$ref: must be a string (JSON-Ref)",{$ref:e,baseDoc:c,fullPath:n});var l=a(e),p=l[0],h=l[1]||"",d=void 0;try{d=c||p?i(p,c):null}catch(t){return o(t,{pointer:h,$ref:e,basePath:d,fullPath:n})}var m=void 0,v=void 0;if(!y(h,d,u,r)){if(null==d?(v=f(h),void 0===(m=r.get(v))&&(m=new B("Could not resolve reference: "+e,{pointer:h,$ref:e,baseDoc:c,fullPath:n}))):(m=s(d,h),m=null!=m.__value?m.__value:m.catch(function(t){throw o(t,{pointer:h,$ref:e,baseDoc:c,fullPath:n})})),m instanceof Error)return[N.default.remove(n),m];var _=N.default.replace(u,m,{$$ref:e});return d&&d!==c?[_,N.default.context(u,{baseDoc:d})]:g(r.state,_)?void 0:_}}},U=(0,T.default)(q,{docCache:L,absoluteify:i,clearCache:u,JSONRefError:B,wrapError:o,getDoc:c,split:a,extractFromDoc:s,fetchJSON:l,extract:p,jsonPointerToArray:f,unescapeJsonPointerToken:h});t.default=U;var W=function(e){return!e||"/"===e||"#"===e}},function(e,t){e.exports=n(495)},function(e,t){e.exports=n(815)},function(e,t){e.exports=n(447)},function(e,t){e.exports=n(184)},function(e,t){e.exports=n(435)},function(e,t){e.exports=n(823)},function(e,t){e.exports=n(131)},function(e,t){e.exports=n(824)},function(e,t){e.exports=n(825)},function(e,t){e.exports=n(448)},function(e,t){e.exports=n(826)},function(e,t){e.exports=n(894)},function(e,t){e.exports=n(917)},function(e,t){e.exports=n(800)},function(e,t){e.exports=n(781)},function(e,t){e.exports=n(939)},function(e,t){e.exports=n(940)},function(e,t){e.exports=n(941)},function(e,t){e.exports=n(949)},function(e,t,n){e.exports=n(17)}])},function(e,t,n){var r=n(765),i=n(768),o=n(769),a=n(790),s=n(793),u=n(794),c=Object.prototype,l=c.hasOwnProperty,p=o(function(e,t){if(s(t)||a(t))return void i(t,u(t),e);for(var n in t)l.call(t,n)&&r(e,n,t[n])});e.exports=p},[1233,766,767],function(e,t){function n(e,t,n){"__proto__"==t&&r?r(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}var r=Object.defineProperty;e.exports=n},234,[1235,765,766],function(e,t,n){function r(e){return i(function(t,n){var r=-1,i=n.length,a=i>1?n[i-1]:void 0,s=i>2?n[2]:void 0;for(a=e.length>3&&"function"==typeof a?(i--,a):void 0,s&&o(n[0],n[1],s)&&(a=i<3?void 0:a,i=1),t=Object(t);++r0){if(++t>=r)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}var r=500,i=16,o=Date.now;e.exports=n},[1230,767,790,792,781],[1213,780,791],279,276,283,[1208,795,801,790],function(e,t,n){function r(e,t){var n=a(e)||o(e)?i(e.length,String):[],r=n.length,u=!!r;for(var l in e)!t&&!c.call(e,l)||u&&("length"==l||s(l,r))||n.push(l);return n}var i=n(796),o=n(797),a=n(800),s=n(792),u=Object.prototype,c=u.hasOwnProperty;e.exports=r},271,function(e,t,n){function r(e){return i(e)&&s.call(e,"callee")&&(!c.call(e,"callee")||u.call(e)==o)}var i=n(798),o="[object Arguments]",a=Object.prototype,s=a.hasOwnProperty,u=a.toString,c=a.propertyIsEnumerable;e.exports=r},function(e,t,n){function r(e){return o(e)&&i(e)}var i=n(790),o=n(799);e.exports=r},158,193,[1211,793,802],[1212,803],157,function(e,t,n){"use strict";function r(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null}function i(e,t,n){if(e&&c.isObject(e)&&e instanceof r)return e;var i=new r;return i.parse(e,t,n),i}function o(e){return c.isString(e)&&(e=i(e)),e instanceof r?e.format():r.prototype.format.call(e)}function a(e,t){return i(e,!1,!0).resolve(t)}function s(e,t){return e?i(e,!1,!0).resolveObject(t):t}var u=n(805),c=n(806);t.parse=i,t.resolve=a,t.resolveObject=s,t.format=o,t.Url=r;var l=/^([a-z0-9.+-]+:)/i,p=/:[0-9]*$/,f=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,h=["<",">",'"',"`"," ","\r","\n","\t"],d=["{","}","|","\\","^","`"].concat(h),m=["'"].concat(d),v=["%","/","?",";","#"].concat(m),y=["/","?","#"],g=255,_=/^[+a-z0-9A-Z_-]{0,63}$/,b=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,x={javascript:!0,"javascript:":!0},w={javascript:!0,"javascript:":!0},k={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},S=n(807);r.prototype.parse=function(e,t,n){if(!c.isString(e))throw new TypeError("Parameter 'url' must be a string, not "+typeof e);var r=e.indexOf("?"),i=r!==-1&&r127?"x":N[j];if(!R.match(_)){var B=P.slice(0,A),L=P.slice(A+1),z=N.match(b);z&&(B.push(z[1]),L.unshift(z[2])),L.length&&(s="/"+L.join(".")+s),this.hostname=B.join(".");break}}}this.hostname.length>g?this.hostname="":this.hostname=this.hostname.toLowerCase(),O||(this.hostname=u.toASCII(this.hostname));var q=this.port?":"+this.port:"",U=this.hostname||"";this.host=U+q,this.href+=this.host,O&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),"/"!==s[0]&&(s="/"+s))}if(!x[d])for(var A=0,I=m.length;A0)&&n.host.split("@");E&&(n.auth=E.shift(),n.host=n.hostname=E.shift())}return n.search=e.search,n.query=e.query,c.isNull(n.pathname)&&c.isNull(n.search)||(n.path=(n.pathname?n.pathname:"")+(n.search?n.search:"")),n.href=n.format(),n}if(!x.length)return n.pathname=null,n.search?n.path="/"+n.search:n.path=null,n.href=n.format(),n;for(var C=x.slice(-1)[0],A=(n.host||e.host||x.length>1)&&("."===C||".."===C)||""===C,T=0,D=x.length;D>=0;D--)C=x[D],"."===C?x.splice(D,1):".."===C?(x.splice(D,1),T++):T&&(x.splice(D,1),T--);if(!_&&!b)for(;T--;T)x.unshift("..");!_||""===x[0]||x[0]&&"/"===x[0].charAt(0)||x.unshift(""),A&&"/"!==x.join("/").substr(-1)&&x.push("");var M=""===x[0]||x[0]&&"/"===x[0].charAt(0);if(S){n.hostname=n.host=M?"":x.length?x.shift():"";var E=!!(n.host&&n.host.indexOf("@")>0)&&n.host.split("@");E&&(n.auth=E.shift(),n.host=n.hostname=E.shift())}return _=_||n.host&&x.length,_&&!M&&x.unshift(""),x.length?n.pathname=x.join("/"):(n.pathname=null,n.path=null),c.isNull(n.pathname)&&c.isNull(n.search)||(n.path=(n.pathname?n.pathname:"")+(n.search?n.search:"")),n.auth=e.auth||n.auth,n.slashes=n.slashes||e.slashes,n.href=n.format(),n},r.prototype.parseHost=function(){var e=this.host,t=p.exec(e);t&&(t=t[0],":"!==t&&(this.port=t.substr(1)),e=e.substr(0,e.length-t.length)),e&&(this.hostname=e)}},function(e,t,n){var r;(function(e,i){!function(o){function a(e){throw RangeError(P[e])}function s(e,t){for(var n=e.length,r=[];n--;)r[n]=t(e[n]);return r}function u(e,t){var n=e.split("@"),r="";n.length>1&&(r=n[0]+"@",e=n[1]),e=e.replace(O,".");var i=e.split("."),o=s(i,t).join(".");return r+o}function c(e){for(var t,n,r=[],i=0,o=e.length;i=55296&&t<=56319&&i65535&&(e-=65536,t+=R(e>>>10&1023|55296),e=56320|1023&e),t+=R(e)}).join("")}function p(e){return e-48<10?e-22:e-65<26?e-65:e-97<26?e-97:x}function f(e,t){return e+22+75*(e<26)-((0!=t)<<5)}function h(e,t,n){var r=0;for(e=n?N(e/E):e>>1,e+=N(e/t);e>I*k>>1;r+=x)e=N(e/I);return N(r+(I+1)*e/(e+S))}function d(e){var t,n,r,i,o,s,u,c,f,d,m=[],v=e.length,y=0,g=A,_=C;for(n=e.lastIndexOf(T),n<0&&(n=0),r=0;r=128&&a("not-basic"),m.push(e.charCodeAt(r));for(i=n>0?n+1:0;i=v&&a("invalid-input"),c=p(e.charCodeAt(i++)),(c>=x||c>N((b-y)/s))&&a("overflow"),y+=c*s,f=u<=_?w:u>=_+k?k:u-_,!(cN(b/d)&&a("overflow"),s*=d;t=m.length+1,_=h(y-o,t,0==o),N(y/t)>b-g&&a("overflow"),g+=N(y/t),y%=t,m.splice(y++,0,g)}return l(m)}function m(e){var t,n,r,i,o,s,u,l,p,d,m,v,y,g,_,S=[];for(e=c(e),v=e.length,t=A,n=0,o=C,s=0;s=t&&mN((b-n)/y)&&a("overflow"),n+=(u-t)*y,t=u,s=0;sb&&a("overflow"),m==t){for(l=n,p=x;d=p<=o?w:p>=o+k?k:p-o,!(l= 0x80 (not a basic code point)","invalid-input":"Invalid input"},I=x-w,N=Math.floor,R=String.fromCharCode;_={version:"1.3.2",ucs2:{decode:c,encode:l},decode:d,encode:m,toASCII:y,toUnicode:v},r=function(){return _}.call(t,n,t,e),!(void 0!==r&&(e.exports=r))}(this)}).call(t,n(161)(e),function(){return this}())},function(e,t){"use strict";e.exports={isString:function(e){return"string"==typeof e},isObject:function(e){return"object"==typeof e&&null!==e},isNull:function(e){return null===e},isNullOrUndefined:function(e){return null==e}}},function(e,t,n){"use strict";t.decode=t.parse=n(808),t.encode=t.stringify=n(809)},function(e,t){"use strict";function n(e,t){return Object.prototype.hasOwnProperty.call(e,t)}e.exports=function(e,t,r,i){t=t||"&",r=r||"=";var o={};if("string"!=typeof e||0===e.length)return o;var a=/\+/g;e=e.split(t);var s=1e3;i&&"number"==typeof i.maxKeys&&(s=i.maxKeys);var u=e.length;s>0&&u>s&&(u=s);for(var c=0;c=0?(l=d.substr(0,m),p=d.substr(m+1)):(l=d,p=""),f=decodeURIComponent(l),h=decodeURIComponent(p),n(o,f)?Array.isArray(o[f])?o[f].push(h):o[f]=[o[f],h]:o[f]=h}return o}},function(e,t){"use strict";var n=function(e){switch(typeof e){case"string":return e;case"boolean":return e?"true":"false";case"number":return isFinite(e)?e:"";default:return""}};e.exports=function(e,t,r,i){return t=t||"&",r=r||"=",null===e&&(e=void 0),"object"==typeof e?Object.keys(e).map(function(i){var o=encodeURIComponent(n(i))+r;return Array.isArray(e[i])?e[i].map(function(e){return o+encodeURIComponent(n(e))}).join(t):o+encodeURIComponent(n(e[i]))}).join(t):i?encodeURIComponent(n(i))+r+encodeURIComponent(n(e)):""}},function(e,t,n){e.exports=n(811)},function(e,t,n){(function(t){var r="object"==typeof t?t:"object"==typeof window?window:"object"==typeof self?self:this,i=r.regeneratorRuntime&&Object.getOwnPropertyNames(r).indexOf("regeneratorRuntime")>=0,o=i&&r.regeneratorRuntime;if(r.regeneratorRuntime=void 0,e.exports=n(812),i)r.regeneratorRuntime=o;else try{delete r.regeneratorRuntime}catch(e){r.regeneratorRuntime=void 0}}).call(t,function(){return this}())},function(e,t){(function(t){!function(t){"use strict";function n(e,t,n,r){var o=t&&t.prototype instanceof i?t:i,a=Object.create(o.prototype),s=new h(r||[]);return a._invoke=c(e,n,s),a}function r(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}function i(){}function o(){}function a(){}function s(e){["next","throw","return"].forEach(function(t){e[t]=function(e){return this._invoke(t,e)}})}function u(e){function n(t,i,o,a){var s=r(e[t],e,i);if("throw"!==s.type){var u=s.arg,c=u.value;return c&&"object"==typeof c&&g.call(c,"__await")?Promise.resolve(c.__await).then(function(e){n("next",e,o,a)},function(e){n("throw",e,o,a)}):Promise.resolve(c).then(function(e){u.value=e,o(u)},a)}a(s.arg)}function i(e,t){function r(){return new Promise(function(r,i){n(e,t,r,i)})}return o=o?o.then(r,r):r()}"object"==typeof t.process&&t.process.domain&&(n=t.process.domain.bind(n));var o;this._invoke=i}function c(e,t,n){var i=E;return function(o,a){if(i===A)throw new Error("Generator is already running");if(i===T){if("throw"===o)throw a;return m()}for(n.method=o,n.arg=a;;){var s=n.delegate;if(s){var u=l(s,n);if(u){if(u===D)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(i===E)throw i=T,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);i=A;var c=r(e,t,n);if("normal"===c.type){if(i=n.done?T:C,c.arg===D)continue;return{value:c.arg,done:n.done}}"throw"===c.type&&(i=T,n.method="throw",n.arg=c.arg)}}}function l(e,t){var n=e.iterator[t.method];if(n===v){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=v,l(e,t),"throw"===t.method))return D;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return D}var i=r(n,e.iterator,t.arg);if("throw"===i.type)return t.method="throw",t.arg=i.arg,t.delegate=null,D;var o=i.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=v),t.delegate=null,D):o:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,D)}function p(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function f(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function h(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(p,this),this.reset(!0)}function d(e){if(e){var t=e[b];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,r=function t(){for(;++n=0;--r){var i=this.tryEntries[r],o=i.completion;if("root"===i.tryLoc)return t("end");if(i.tryLoc<=this.prev){var a=g.call(i,"catchLoc"),s=g.call(i,"finallyLoc");if(a&&s){if(this.prev=0;--n){var r=this.tryEntries[n];if(r.tryLoc<=this.prev&&g.call(r,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),f(n),D}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var i=r.arg;f(n)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:d(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=v),D}}}("object"==typeof t?t:"object"==typeof window?window:"object"==typeof self?self:this)}).call(t,function(){return this}())},function(e,t,n){n(814),e.exports=self.fetch.bind(self)},function(e,t){!function(e){"use strict";function t(e){if("string"!=typeof e&&(e=String(e)),/[^a-z0-9\-#$%&'*+.\^_`|~]/i.test(e))throw new TypeError("Invalid character in header field name");return e.toLowerCase()}function n(e){return"string"!=typeof e&&(e=String(e)),e}function r(e){this.map={},e instanceof r?e.forEach(function(e,t){this.append(t,e)},this):e&&Object.getOwnPropertyNames(e).forEach(function(t){this.append(t,e[t])},this)}function i(e){return e.bodyUsed?Promise.reject(new TypeError("Already read")):void(e.bodyUsed=!0)}function o(e){return new Promise(function(t,n){e.onload=function(){t(e.result)},e.onerror=function(){n(e.error)}})}function a(e){var t=new FileReader;return t.readAsArrayBuffer(e),o(t)}function s(e){var t=new FileReader;return t.readAsText(e),o(t)}function u(){return this.bodyUsed=!1,this._initBody=function(e){if(this._bodyInit=e,"string"==typeof e)this._bodyText=e;else if(d.blob&&Blob.prototype.isPrototypeOf(e))this._bodyBlob=e;else if(d.formData&&FormData.prototype.isPrototypeOf(e))this._bodyFormData=e;else if(e){if(!d.arrayBuffer||!ArrayBuffer.prototype.isPrototypeOf(e))throw new Error("unsupported BodyInit type")}else this._bodyText="";this.headers.get("content-type")||("string"==typeof e?this.headers.set("content-type","text/plain;charset=UTF-8"):this._bodyBlob&&this._bodyBlob.type&&this.headers.set("content-type",this._bodyBlob.type))},d.blob?(this.blob=function(){var e=i(this);if(e)return e;if(this._bodyBlob)return Promise.resolve(this._bodyBlob);if(this._bodyFormData)throw new Error("could not read FormData body as blob");return Promise.resolve(new Blob([this._bodyText]))},this.arrayBuffer=function(){return this.blob().then(a)},this.text=function(){var e=i(this);if(e)return e;if(this._bodyBlob)return s(this._bodyBlob);if(this._bodyFormData)throw new Error("could not read FormData body as text");return Promise.resolve(this._bodyText)}):this.text=function(){var e=i(this);return e?e:Promise.resolve(this._bodyText)},d.formData&&(this.formData=function(){return this.text().then(p)}),this.json=function(){return this.text().then(JSON.parse)},this}function c(e){var t=e.toUpperCase();return m.indexOf(t)>-1?t:e}function l(e,t){t=t||{};var n=t.body;if(l.prototype.isPrototypeOf(e)){if(e.bodyUsed)throw new TypeError("Already read");this.url=e.url,this.credentials=e.credentials,t.headers||(this.headers=new r(e.headers)),this.method=e.method,this.mode=e.mode,n||(n=e._bodyInit,e.bodyUsed=!0)}else this.url=e;if(this.credentials=t.credentials||this.credentials||"omit",!t.headers&&this.headers||(this.headers=new r(t.headers)),this.method=c(t.method||this.method||"GET"),this.mode=t.mode||this.mode||null,this.referrer=null,("GET"===this.method||"HEAD"===this.method)&&n)throw new TypeError("Body not allowed for GET or HEAD requests");this._initBody(n)}function p(e){var t=new FormData;return e.trim().split("&").forEach(function(e){if(e){var n=e.split("="),r=n.shift().replace(/\+/g," "),i=n.join("=").replace(/\+/g," ");t.append(decodeURIComponent(r),decodeURIComponent(i))}}),t}function f(e){var t=new r,n=(e.getAllResponseHeaders()||"").trim().split("\n");return n.forEach(function(e){var n=e.trim().split(":"),r=n.shift().trim(),i=n.join(":").trim();t.append(r,i)}),t}function h(e,t){t||(t={}),this.type="default",this.status=t.status,this.ok=this.status>=200&&this.status<300,this.statusText=t.statusText,this.headers=t.headers instanceof r?t.headers:new r(t.headers),this.url=t.url||"",this._initBody(e)}if(!e.fetch){r.prototype.append=function(e,r){e=t(e),r=n(r);var i=this.map[e];i||(i=[],this.map[e]=i),i.push(r)},r.prototype.delete=function(e){delete this.map[t(e)]},r.prototype.get=function(e){var n=this.map[t(e)];return n?n[0]:null},r.prototype.getAll=function(e){return this.map[t(e)]||[]},r.prototype.has=function(e){return this.map.hasOwnProperty(t(e))},r.prototype.set=function(e,r){this.map[t(e)]=[n(r)]},r.prototype.forEach=function(e,t){Object.getOwnPropertyNames(this.map).forEach(function(n){this.map[n].forEach(function(r){e.call(t,r,n,this)},this)},this)};var d={blob:"FileReader"in e&&"Blob"in e&&function(){try{return new Blob,!0}catch(e){return!1}}(),formData:"FormData"in e,arrayBuffer:"ArrayBuffer"in e},m=["DELETE","GET","HEAD","OPTIONS","POST","PUT"];l.prototype.clone=function(){return new l(this)},u.call(l.prototype),u.call(h.prototype),h.prototype.clone=function(){return new h(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new r(this.headers),url:this.url})},h.error=function(){var e=new h(null,{status:0,statusText:""});return e.type="error",e};var v=[301,302,303,307,308];h.redirect=function(e,t){if(v.indexOf(t)===-1)throw new RangeError("Invalid status code");return new h(null,{status:t,headers:{location:e}})},e.Headers=r,e.Request=l,e.Response=h,e.fetch=function(e,t){return new Promise(function(n,r){function i(){return"responseURL"in a?a.responseURL:/^X-Request-URL:/m.test(a.getAllResponseHeaders())?a.getResponseHeader("X-Request-URL"):void 0}var o;o=l.prototype.isPrototypeOf(e)&&!t?e:new l(e,t);var a=new XMLHttpRequest;a.onload=function(){var e=1223===a.status?204:a.status;if(e<100||e>599)return void r(new TypeError("Network request failed"));var t={status:e,statusText:a.statusText,headers:f(a),url:i()},o="response"in a?a.response:a.responseText;n(new h(o,t))},a.onerror=function(){r(new TypeError("Network request failed"))},a.ontimeout=function(){r(new TypeError("Network request failed"))},a.open(o.method,o.url,!0),"include"===o.credentials&&(a.withCredentials=!0),"responseType"in a&&d.blob&&(a.responseType="blob"),o.headers.forEach(function(e,t){a.setRequestHeader(t,e)}),a.send("undefined"==typeof o._bodyInit?null:o._bodyInit)})},e.fetch.polyfill=!0}}("undefined"!=typeof self?self:this)},function(e,t,n){e.exports={default:n(816),__esModule:!0}},function(e,t,n){n(128),n(110),n(817),e.exports=n(59).WeakMap},function(e,t,n){"use strict";var r,i=n(818)(0),o=n(101),a=n(118),s=n(144),u=n(821),c=n(87),l=a.getWeak,p=Object.isExtensible,f=u.ufstore,h={},d=function(e){return function(){return e(this,arguments.length>0?arguments[0]:void 0)}},m={get:function(e){if(c(e)){var t=l(e);return t===!0?f(this).get(e):t?t[this._i]:void 0}},set:function(e,t){return u.def(this,e,t)}},v=e.exports=n(822)("WeakMap",d,m,u,!0,!0);7!=(new v).set((Object.freeze||Object)(h),7).get(h)&&(r=u.getConstructor(d),s(r.prototype,m),a.NEED=!0,i(["delete","has","get","set"],function(e){var t=v.prototype,n=t[e];o(t,e,function(t,i){if(c(t)&&!p(t)){this._f||(this._f=new r);var o=this._f[e](t,i);return"set"==e?this:o}return n.call(this,t,i)})}))},function(e,t,n){var r=n(82),i=n(69),o=n(63),a=n(72),s=n(819);e.exports=function(e,t){var n=1==e,u=2==e,c=3==e,l=4==e,p=6==e,f=5==e||p,h=t||s;return function(t,s,d){for(var m,v,y=o(t),g=i(y),_=r(s,d,3),b=a(g.length),x=0,w=n?h(t,b):u?h(t,0):void 0;b>x;x++)if((f||x in g)&&(m=g[x],v=_(m,x,y),e))if(n)w[x]=v;else if(v)switch(e){case 3:return!0;case 5:return m;case 6:return x;case 2:w.push(m)}else if(l)return!1;return p?-1:c||l?l:w}}},function(e,t,n){var r=n(820);e.exports=function(e,t){return new(r(e))(t)}},function(e,t,n){var r=n(87),i=n(124),o=n(108)("species");e.exports=function(e){var t;return i(e)&&(t=e.constructor,"function"!=typeof t||t!==Array&&!i(t.prototype)||(t=void 0),r(t)&&(t=t[o],null===t&&(t=void 0))),void 0===t?Array:t}},function(e,t,n){"use strict";var r=n(739),i=n(118).getWeak,o=n(86),a=n(87),s=n(733),u=n(734),c=n(818),l=n(67),p=c(5),f=c(6),h=0,d=function(e){return e._l||(e._l=new m)},m=function(){this.a=[]},v=function(e,t){return p(e.a,function(e){return e[0]===t})};m.prototype={get:function(e){var t=v(this,e);if(t)return t[1]},has:function(e){return!!v(this,e)},set:function(e,t){var n=v(this,e);n?n[1]=t:this.a.push([e,t])},delete:function(e){var t=f(this.a,function(t){return t[0]===e});return~t&&this.a.splice(t,1),!!~t}},e.exports={getConstructor:function(e,t,n,o){var c=e(function(e,r){s(e,c,t,"_i"),e._i=h++,e._l=void 0,void 0!=r&&u(r,n,e[o],e)});return r(c.prototype,{delete:function(e){if(!a(e))return!1;var t=i(e);return t===!0?d(this).delete(e):t&&l(t,this._i)&&delete t[this._i]},has:function(e){if(!a(e))return!1;var t=i(e);return t===!0?d(this).has(e):t&&l(t,this._i)}}),c},def:function(e,t,n){var r=i(o(t),!0);return r===!0?d(e).set(t,n):r[e._i]=n,e},ufstore:d}},function(e,t,n){"use strict";var r=n(77),i=n(81),o=n(118),a=n(90),s=n(84),u=n(739),c=n(734),l=n(733),p=n(87),f=n(107),h=n(85).f,d=n(818)(0),m=n(89);e.exports=function(e,t,n,v,y,g){var _=r[e],b=_,x=y?"set":"add",w=b&&b.prototype,k={};return m&&"function"==typeof b&&(g||w.forEach&&!a(function(){(new b).entries().next()}))?(b=t(function(t,n){l(t,b,e,"_c"),t._c=new _,void 0!=n&&c(n,y,t[x],t)}),d("add,clear,delete,forEach,get,has,set,keys,values,entries,toJSON".split(","),function(e){var t="add"==e||"set"==e;e in w&&(!g||"clear"!=e)&&s(b.prototype,e,function(n,r){if(l(this,b,e),!t&&g&&!p(n))return"get"==e&&void 0;var i=this._c[e](0===n?0:n,r);return t?this:i})}),"size"in w&&h(b.prototype,"size",{get:function(){return this._c.size}})):(b=v.getConstructor(t,e,y,x),u(b.prototype,n),o.NEED=!0),f(b,e),k[e]=b,i(i.G+i.W+i.F,k),g||v.setStrong(b,e,y),b}},function(e,t,n){(function(t){!function(){"use strict";function n(e){var n;return n=e instanceof t?e:new t(e.toString(),"binary"),n.toString("base64")}e.exports=n}()}).call(t,n(132).Buffer)},function(e,t,n){/*! + * https://github.com/Starcounter-Jack/JSON-Patch + * json-patch-duplex.js version: 1.1.10 + * (c) 2013 Joachim Wester + * MIT license + */ +var r;!function(e){function t(e,n){switch(typeof e){case"undefined":case"boolean":case"string":case"number":return e===n;case"object":if(null===e)return null===n;if(E(e)){if(!E(n)||e.length!==n.length)return!1;for(var r=0,i=e.length;r0&&(e.patches=[],e.callback&&e.callback(i)),i}function l(e,t,r,i){if(t!==e){"function"==typeof t.toJSON&&(t=t.toJSON());for(var o=g(t),a=g(e),u=!1,c=!1,p=a.length-1;p>=0;p--){var f=a[p],h=e[f];if(!t.hasOwnProperty(f)||void 0===t[f]&&void 0!==h&&E(t)===!1)r.push({op:"remove",path:i+"/"+n(f)}),c=!0;else{var d=t[f];"object"==typeof h&&null!=h&&"object"==typeof d&&null!=d?l(h,d,r,i+"/"+n(f)):h!==d&&(u=!0,r.push({op:"replace",path:i+"/"+n(f),value:s(d)}))}}if(c||o.length!=a.length)for(var p=0;p=48&&t<=57))return!1;n++}}return!0}function f(e,t,n){for(var r,i,o=[],a=0,s=t.length;a=h){o.push(x[r.op].call(r,l,i,e));break}if(E(l)){if("-"===i)i=l.length;else{if(n&&!p(i))throw new C("Expected an unsigned base-10 integer value, making the new referenced value the array element with the zero-based index","OPERATION_PATH_ILLEGAL_ARRAY_INDEX",a-1,r.path,r);i=parseInt(i,10)}if(f>=h){if(n&&"add"===r.op&&i>l.length)throw new C("The specified index MUST NOT be greater than the number of elements in the array","OPERATION_VALUE_OUT_OF_BOUNDS",a-1,r.path,r);o.push(b[r.op].call(r,l,i,e));break}}else if(i&&i.indexOf("~")!=-1&&(i=i.replace(/~1/g,"/").replace(/~0/g,"~")),f>=h){o.push(_[r.op].call(r,l,i,e));break}l=l[i]}}return o}function h(e,t){var n=[];return l(e,t,n,""),n}function d(e,t){function n(){this.constructor=e}for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r]);e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}function m(e){if(void 0===e)return!0;if(e)if(E(e)){for(var t=0,n=e.length;t0)throw new C('Operation `path` property must start with "/"',"OPERATION_PATH_INVALID",n,t,r);if(("move"===t.op||"copy"===t.op)&&"string"!=typeof t.from)throw new C("Operation `from` property is not present (applicable in `move` and `copy` operations)","OPERATION_FROM_REQUIRED",n,t,r);if(("add"===t.op||"replace"===t.op||"test"===t.op)&&void 0===t.value)throw new C("Operation `value` property is not present (applicable in `add`, `replace` and `test` operations)","OPERATION_VALUE_REQUIRED",n,t,r);if(("add"===t.op||"replace"===t.op||"test"===t.op)&&m(t.value))throw new C("Operation `value` property is not present (applicable in `add`, `replace` and `test` operations)","OPERATION_VALUE_CANNOT_CONTAIN_UNDEFINED",n,t,r);if(r)if("add"==t.op){var o=t.path.split("/").length,a=i.split("/").length;if(o!==a+1&&o!==a)throw new C("Cannot perform an `add` operation at the desired path","OPERATION_PATH_CANNOT_ADD",n,t,r)}else if("replace"===t.op||"remove"===t.op||"_get"===t.op){if(t.path!==i)throw new C("Cannot perform the operation at a path that does not exist","OPERATION_PATH_UNRESOLVABLE",n,t,r)}else if("move"===t.op||"copy"===t.op){var s={op:"_get",path:t.from,value:void 0},u=e.validate([s],r);if(u&&"OPERATION_PATH_UNRESOLVABLE"===u.name)throw new C("Cannot perform the operation from a path that does not exist","OPERATION_FROM_UNRESOLVABLE",n,t,r)}}function y(e,t){try{if(!E(e))throw new C("Patch sequence must be an array","SEQUENCE_NOT_AN_ARRAY");if(t)t=JSON.parse(JSON.stringify(t)),f.call(this,t,e,!0);else for(var n=0;nf))return!1;var d=l.get(e);if(d&&l.get(t))return d==t;var m=-1,v=!0,y=c&s?new i:void 0;for(l.set(e,t),l.set(t,e);++m=48&&o<=57||o>=65&&o<=90||o>=97&&o<=122?n+=t.charAt(i):o<128?n+=r[o]:o<2048?n+=r[192|o>>6]+r[128|63&o]:o<55296||o>=57344?n+=r[224|o>>12]+r[128|o>>6&63]+r[128|63&o]:(i+=1,o=65536+((1023&o)<<10|1023&t.charCodeAt(i)),n+=r[240|o>>18]+r[128|o>>12&63]+r[128|o>>6&63]+r[128|63&o])}return n},t.compact=function(e,n){if("object"!=typeof e||null===e)return e;var r=n||[],i=r.indexOf(e);if(i!==-1)return r[i];if(r.push(e),Array.isArray(e)){for(var o=[],a=0;a=0&&n.parseArrays&&a<=n.arrayLimit?(r=[],r[a]=s(e,t,n)):r[o]=s(e,t,n)}return r},u=function(e,t,n){if(e){var r=n.allowDots?e.replace(/\.([^.[]+)/g,"[$1]"):e,o=/(\[[^[\]]*])/,a=/(\[[^[\]]*])/g,u=o.exec(r),c=u?r.slice(0,u.index):r,l=[];if(c){if(!n.plainObjects&&i.call(Object.prototype,c)&&!n.allowPrototypes)return;l.push(c)}for(var p=0;null!==(u=a.exec(r))&&pp?d=p:this.setState({position:a,resized:!0}),this.props.onChange&&this.props.onChange(d),this.setState({draggedSize:d}),n.setState({size:d})}}}}},{key:"onMouseUp",value:function(){this.props.allowResize&&this.state.active&&("function"==typeof this.props.onDragFinished&&this.props.onDragFinished(this.state.draggedSize),this.setState({active:!1}))}},{key:"setSize",value:function(e,t){var n="first"===this.props.primary?this.pane1:this.pane2,r=void 0;n&&(r=e.size||t&&t.draggedSize||e.defaultSize||e.minSize,n.setState({size:r}),e.size!==t.draggedSize&&this.setState({draggedSize:r}))}},{key:"render",value:function(){var e=this,t=this.props,n=t.split,r=t.allowResize,i=r?"":"disabled",o=u({},this.props.style||{},{display:"flex",flex:1,position:"relative",outline:"none",overflow:"hidden",MozUserSelect:"text",WebkitUserSelect:"text",msUserSelect:"text",userSelect:"text"});"vertical"===n?u(o,{flexDirection:"row",height:"100%",position:"absolute",left:0,right:0}):u(o,{flexDirection:"column",height:"100%",minHeight:"100%",position:"absolute",top:0,bottom:0,width:"100%"});var a=this.props.children,s=["SplitPane",this.props.className,n,i],c=this.props.prefixer.prefix(u({},this.props.paneStyle||{},this.props.pane1Style||{})),l=this.props.prefixer.prefix(u({},this.props.paneStyle||{},this.props.pane2Style||{}));return p.default.createElement("div",{className:s.join(" "),style:this.props.prefixer.prefix(o),ref:function(t){e.splitPane=t}},p.default.createElement(_.default,{ref:function(t){e.pane1=t},key:"pane1",className:"Pane1",style:c,split:n,size:"first"===this.props.primary?this.props.size||this.props.defaultSize||this.props.minSize:void 0},a[0]),p.default.createElement(x.default,{ref:function(t){e.resizer=t},key:"resizer",className:i,resizerClassName:this.props.resizerClassName,onMouseDown:this.onMouseDown,onTouchStart:this.onTouchStart,onTouchEnd:this.onMouseUp,style:this.props.resizerStyle||{},split:n}),p.default.createElement(_.default,{ref:function(t){e.pane2=t},key:"pane2",className:"Pane2",style:l,split:n,size:"second"===this.props.primary?this.props.size||this.props.defaultSize||this.props.minSize:void 0},a[1]))}}]),t}(l.Component);k.propTypes={primary:l.PropTypes.oneOf(["first","second"]),minSize:l.PropTypes.oneOfType([p.default.PropTypes.string,p.default.PropTypes.number]),maxSize:l.PropTypes.oneOfType([p.default.PropTypes.string,p.default.PropTypes.number]),defaultSize:l.PropTypes.oneOfType([p.default.PropTypes.string,p.default.PropTypes.number]),size:l.PropTypes.oneOfType([p.default.PropTypes.string,p.default.PropTypes.number]),allowResize:l.PropTypes.bool,split:l.PropTypes.oneOf(["vertical","horizontal"]),onDragStarted:l.PropTypes.func,onDragFinished:l.PropTypes.func,onChange:l.PropTypes.func,prefixer:l.PropTypes.instanceOf(m.default).isRequired,style:y.default,resizerStyle:y.default,paneStyle:y.default,pane1Style:y.default,pane2Style:y.default,className:l.PropTypes.string,resizerClassName:l.PropTypes.string,children:l.PropTypes.arrayOf(l.PropTypes.node).isRequired},k.defaultProps={split:"vertical",minSize:50,allowResize:!0,prefixer:new m.default({userAgent:w}),primary:"first"},t.default=k,e.exports=t.default},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e){var t=arguments.length<=1||void 0===arguments[1]?{}:arguments[1],n=arguments[2],r=arguments[3];Object.keys(t).forEach(function(i){var o=e[i];Array.isArray(o)?[].concat(t[i]).forEach(function(t){e[i].indexOf(t)===-1&&e[i].splice(o.indexOf(n),r?0:1,t)}):e[i]=t[i]})}Object.defineProperty(t,"__esModule",{value:!0});var a=function(){function e(e,t){for(var n=0;n=t._browserInfo.version}).reduce(function(e,t){return e[t]=!0,e},{}),this._hasPropsRequiringPrefix=Object.keys(this._requiresPrefix).length>0):this._usePrefixAllFallback=!0}return a(e,[{key:"prefix",value:function(e){var t=this;return this._usePrefixAllFallback?(0,u.default)(e):this._hasPropsRequiringPrefix?(Object.keys(e).forEach(function(n){var r=e[n];r instanceof Object&&!Array.isArray(r)?e[n]=t.prefix(r):t._requiresPrefix[n]&&(e[t.jsPrefix+(0,d.default)(n)]=r,t._keepUnprefixed||delete e[n])}),Object.keys(e).forEach(function(n){[].concat(e[n]).forEach(function(r){L.forEach(function(i){o(e,i({property:n,value:r,styles:e,browserInfo:t._browserInfo,prefix:{js:t.jsPrefix,css:t.cssPrefix,keyframes:t.prefixedKeyframes},keepUnprefixed:t._keepUnprefixed,requiresPrefix:t._requiresPrefix}),r,t._keepUnprefixed)})})}),(0,v.default)(e)):e}}],[{key:"prefixAll",value:function(e){return(0,u.default)(e)}}]),e}();t.default=z,e.exports=t.default},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e){return Object.keys(e).forEach(function(t){var n=e[t];n instanceof Object&&!Array.isArray(n)?e[t]=i(n):Object.keys(s.default).forEach(function(r){var i=s.default[r];i[t]&&(e[r+(0,c.default)(t)]=n)})}),Object.keys(e).forEach(function(t){[].concat(e[t]).forEach(function(n,r){M.forEach(function(r){return o(e,r(t,n))})})}),(0,p.default)(e)}function o(e){var t=arguments.length<=1||void 0===arguments[1]?{}:arguments[1];Object.keys(t).forEach(function(n){var r=e[n];Array.isArray(r)?[].concat(t[n]).forEach(function(t){var i=r.indexOf(t);i>-1&&e[n].splice(i,1),e[n].push(t)}):e[n]=t[n]})}Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var a=n(969),s=r(a),u=n(970),c=r(u),l=n(971),p=r(l),f=n(973),h=r(f),d=n(974),m=r(d),v=n(977),y=r(v),g=n(978),_=r(g),b=n(979),x=r(b),w=n(980),k=r(w),S=n(981),E=r(S),C=n(983),A=r(C),T=n(984),D=r(T),M=[h.default,m.default,y.default,x.default,k.default,E.default,A.default,D.default,_.default];e.exports=t.default},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default={Webkit:{transform:!0,transformOrigin:!0,transformOriginX:!0,transformOriginY:!0,backfaceVisibility:!0,perspective:!0,perspectiveOrigin:!0,transformStyle:!0,transformOriginZ:!0,animation:!0,animationDelay:!0,animationDirection:!0,animationFillMode:!0,animationDuration:!0,animationIterationCount:!0,animationName:!0,animationPlayState:!0,animationTimingFunction:!0,appearance:!0,userSelect:!0,fontKerning:!0,textEmphasisPosition:!0,textEmphasis:!0,textEmphasisStyle:!0,textEmphasisColor:!0,boxDecorationBreak:!0,clipPath:!0,maskImage:!0,maskMode:!0,maskRepeat:!0,maskPosition:!0,maskClip:!0,maskOrigin:!0,maskSize:!0,maskComposite:!0,mask:!0,maskBorderSource:!0,maskBorderMode:!0,maskBorderSlice:!0,maskBorderWidth:!0,maskBorderOutset:!0,maskBorderRepeat:!0,maskBorder:!0,maskType:!0,textDecorationStyle:!0,textDecorationSkip:!0,textDecorationLine:!0,textDecorationColor:!0,filter:!0,fontFeatureSettings:!0,breakAfter:!0,breakBefore:!0,breakInside:!0,columnCount:!0,columnFill:!0,columnGap:!0,columnRule:!0,columnRuleColor:!0,columnRuleStyle:!0,columnRuleWidth:!0,columns:!0,columnSpan:!0,columnWidth:!0,flex:!0,flexBasis:!0,flexDirection:!0,flexGrow:!0,flexFlow:!0,flexShrink:!0,flexWrap:!0,alignContent:!0,alignItems:!0,alignSelf:!0,justifyContent:!0,order:!0,transition:!0,transitionDelay:!0,transitionDuration:!0,transitionProperty:!0,transitionTimingFunction:!0,backdropFilter:!0,scrollSnapType:!0,scrollSnapPointsX:!0,scrollSnapPointsY:!0,scrollSnapDestination:!0,scrollSnapCoordinate:!0,shapeImageThreshold:!0,shapeImageMargin:!0,shapeImageOutside:!0,hyphens:!0,flowInto:!0,flowFrom:!0,regionFragment:!0,textSizeAdjust:!0},Moz:{appearance:!0,userSelect:!0,boxSizing:!0,textAlignLast:!0,textDecorationStyle:!0,textDecorationSkip:!0,textDecorationLine:!0,textDecorationColor:!0,tabSize:!0,hyphens:!0,fontFeatureSettings:!0,breakAfter:!0,breakBefore:!0,breakInside:!0,columnCount:!0,columnFill:!0,columnGap:!0,columnRule:!0,columnRuleColor:!0,columnRuleStyle:!0,columnRuleWidth:!0,columns:!0,columnSpan:!0,columnWidth:!0},ms:{flex:!0,flexBasis:!1,flexDirection:!0,flexGrow:!1,flexFlow:!0,flexShrink:!1,flexWrap:!0,alignContent:!1,alignItems:!1,alignSelf:!1,justifyContent:!1,order:!1,transform:!0,transformOrigin:!0,transformOriginX:!0,transformOriginY:!0,userSelect:!0,wrapFlow:!0,wrapThrough:!0,wrapMargin:!0,scrollSnapType:!0,scrollSnapPointsX:!0,scrollSnapPointsY:!0,scrollSnapDestination:!0,scrollSnapCoordinate:!0,touchAction:!0,hyphens:!0,flowInto:!0,flowFrom:!0,breakBefore:!0,breakAfter:!0,breakInside:!0,regionFragment:!0,gridTemplateColumns:!0,gridTemplateRows:!0,gridTemplateAreas:!0,gridTemplate:!0,gridAutoColumns:!0,gridAutoRows:!0,gridAutoFlow:!0,grid:!0,gridRowStart:!0,gridColumnStart:!0,gridRowEnd:!0,gridRow:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnGap:!0,gridRowGap:!0,gridArea:!0,gridGap:!0,textSizeAdjust:!0}},e.exports=t.default},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return e.charAt(0).toUpperCase()+e.slice(1)},e.exports=t.default},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e){return Object.keys(e).sort(function(e,t){return(0,a.default)(e)&&!(0,a.default)(t)?-1:!(0,a.default)(e)&&(0,a.default)(t)?1:0}).reduce(function(t,n){return t[n]=e[n],t},{})}Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var o=n(972),a=r(o);e.exports=t.default},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return null!==e.match(/^(Webkit|Moz|O|ms)/)},e.exports=t.default},function(e,t){"use strict";function n(e,t){if("position"===e&&"sticky"===t)return{position:["-webkit-sticky","sticky"]}}Object.defineProperty(t,"__esModule",{value:!0}),t.default=n,e.exports=t.default},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if("string"==typeof t&&!(0,u.default)(t)&&t.indexOf("calc(")>-1)return(0,a.default)(e,t,function(e,t){return t.replace(/calc\(/g,e+"calc(")})}Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var o=n(975),a=r(o),s=n(976),u=r(s);e.exports=t.default},function(e,t){"use strict";function n(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){var r=arguments.length<=2||void 0===arguments[2]?function(e,t){return e+t}:arguments[2];return n({},e,["-webkit-","-moz-",""].map(function(e){return r(e,t)}))},e.exports=t.default},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return Array.isArray(e)&&(e=e.join(",")),null!==e.match(/-webkit-|-moz-|-ms-/)},e.exports=t.default},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if("cursor"===e&&s[t])return(0,a.default)(e,t)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var o=n(975),a=r(o),s={"zoom-in":!0,"zoom-out":!0,grab:!0,grabbing:!0};e.exports=t.default},function(e,t){"use strict";function n(e,t){if("display"===e&&r[t])return{display:["-webkit-box","-moz-box","-ms-"+t+"box","-webkit-"+t,t]}}Object.defineProperty(t,"__esModule",{value:!0}),t.default=n;var r={flex:!0,"inline-flex":!0};e.exports=t.default},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(s[e]&&u[t])return(0,a.default)(e,t)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var o=n(975),a=r(o),s={maxHeight:!0,maxWidth:!0,width:!0,height:!0,columnWidth:!0,minWidth:!0,minHeight:!0},u={"min-content":!0,"max-content":!0,"fill-available":!0,"fit-content":!0,"contain-floats":!0};e.exports=t.default},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if("string"==typeof t&&!(0,u.default)(t)&&null!==t.match(c))return(0,a.default)(e,t)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var o=n(975),a=r(o),s=n(976),u=r(s),c=/linear-gradient|radial-gradient|repeating-linear-gradient|repeating-radial-gradient/;e.exports=t.default},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){if("string"==typeof t&&m[e]){var n,r=a(t),o=r.split(/,(?![^()]*(?:\([^()]*\))?\))/g).filter(function(e){return null===e.match(/-moz-|-ms-/)}).join(",");return e.indexOf("Webkit")>-1?i({},e,o):(n={},i(n,"Webkit"+(0,l.default)(e),o),i(n,e,r),n)}}function a(e){if((0,f.default)(e))return e;var t=e.split(/,(?![^()]*(?:\([^()]*\))?\))/g);return t.forEach(function(e,n){t[n]=Object.keys(d.default).reduce(function(t,n){var r="-"+n.toLowerCase()+"-";return Object.keys(d.default[n]).forEach(function(n){var i=(0,u.default)(n);e.indexOf(i)>-1&&"order"!==i&&(t=e.replace(i,r+i)+","+t)}),t},e)}),t.join(",")}Object.defineProperty(t,"__esModule",{value:!0}),t.default=o;var s=n(982),u=r(s),c=n(970),l=r(c),p=n(976),f=r(p),h=n(969),d=r(h),m={transition:!0,transitionProperty:!0,WebkitTransition:!0,WebkitTransitionProperty:!0};e.exports=t.default},function(e,t){"use strict";function n(e){return e in o?o[e]:o[e]=e.replace(r,"-$&").toLowerCase().replace(i,"-ms-")}var r=/[A-Z]/g,i=/^ms-/,o={};e.exports=n},function(e,t){"use strict";function n(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){if(o[e])return n({},o[e],i[t]||t)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=r;var i={"space-around":"distribute","space-between":"justify","flex-start":"start","flex-end":"end"},o={alignContent:"msFlexLinePack",alignSelf:"msFlexItemAlign",alignItems:"msFlexAlign",justifyContent:"msFlexPack",order:"msFlexOrder",flexGrow:"msFlexPositive",flexShrink:"msFlexNegative",flexBasis:"msPreferredSize"};e.exports=t.default},function(e,t){"use strict";function n(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){return"flexDirection"===e&&"string"==typeof t?{WebkitBoxOrient:t.indexOf("column")>-1?"vertical":"horizontal",WebkitBoxDirection:t.indexOf("reverse")>-1?"reverse":"normal"}:o[e]?n({},o[e],i[t]||t):void 0}Object.defineProperty(t,"__esModule",{value:!0}),t.default=r;var i={"space-around":"justify","space-between":"justify","flex-start":"start","flex-end":"end","wrap-reverse":"multiple",wrap:"multiple"},o={alignItems:"WebkitBoxAlign",justifyContent:"WebkitBoxPack",flexWrap:"WebkitBoxLines"};e.exports=t.default},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var i=n(986),o=r(i),a={Webkit:["chrome","safari","ios","android","phantom","opera","webos","blackberry","bada","tizen","chromium","vivaldi"],Moz:["firefox","seamonkey","sailfish"],ms:["msie","msedge"]},s={chrome:[["chrome"],["chromium"]],safari:[["safari"]],firefox:[["firefox"]],edge:[["msedge"]],opera:[["opera"],["vivaldi"]],ios_saf:[["ios","mobile"],["ios","tablet"]],ie:[["msie"]],op_mini:[["opera","mobile"],["opera","tablet"]],and_uc:[["android","mobile"],["android","tablet"]],android:[["android","mobile"],["android","tablet"]]},u=function(e){if(e.firefox)return"firefox";var t="";return Object.keys(s).forEach(function(n){s[n].forEach(function(r){var i=0;r.forEach(function(t){e[t]&&(i+=1)}),r.length===i&&(t=n)})}),t};t.default=function(e){if(!e)return!1;var t=o.default._detect(e);return Object.keys(a).forEach(function(e){a[e].forEach(function(n){t[n]&&(t.prefix={inline:e,css:"-"+e.toLowerCase()+"-"})})}),t.browser=u(t),t.version=t.version?parseFloat(t.version):parseInt(parseFloat(t.osversion),10),t.osversion=parseFloat(t.osversion),"ios_saf"===t.browser&&t.version>t.osversion&&(t.version=t.osversion,t.safari=!0),"android"===t.browser&&t.chrome&&t.version>37&&(t.browser="and_chr"),"android"===t.browser&&t.osversion<5&&(t.version=t.osversion),t},e.exports=t.default},function(e,t,n){/*! + * Bowser - a browser detector + * https://github.com/ded/bowser + * MIT License | (c) Dustin Diaz 2015 + */ +!function(t,r,i){"undefined"!=typeof e&&e.exports?e.exports=i():n(987)(r,i)}(this,"bowser",function(){function e(e){function t(t){var n=e.match(t);return n&&n.length>1&&n[1]||""}function n(t){var n=e.match(t);return n&&n.length>1&&n[2]||""}function r(e){switch(e){case"NT":return"NT";case"XP":return"XP";case"NT 5.0":return"2000";case"NT 5.1":return"XP";case"NT 5.2":return"2003";case"NT 6.0":return"Vista";case"NT 6.1":return"7";case"NT 6.2":return"8";case"NT 6.3":return"8.1";case"NT 10.0":return"10";default:return}}var i,o=t(/(ipod|iphone|ipad)/i).toLowerCase(),s=/like android/i.test(e),u=!s&&/android/i.test(e),c=/nexus\s*[0-6]\s*/i.test(e),l=!c&&/nexus\s*[0-9]+/i.test(e),p=/CrOS/.test(e),f=/silk/i.test(e),h=/sailfish/i.test(e),d=/tizen/i.test(e),m=/(web|hpw)os/i.test(e),v=/windows phone/i.test(e),y=(/SamsungBrowser/i.test(e),!v&&/windows/i.test(e)),g=!o&&!f&&/macintosh/i.test(e),_=!u&&!h&&!d&&!m&&/linux/i.test(e),b=t(/edge\/(\d+(\.\d+)?)/i),x=t(/version\/(\d+(\.\d+)?)/i),w=/tablet/i.test(e),k=!w&&/[^-]mobi/i.test(e),S=/xbox/i.test(e);/opera/i.test(e)?i={name:"Opera",opera:a,version:x||t(/(?:opera|opr|opios)[\s\/](\d+(\.\d+)?)/i)}:/opr|opios/i.test(e)?i={name:"Opera",opera:a,version:t(/(?:opr|opios)[\s\/](\d+(\.\d+)?)/i)||x}:/SamsungBrowser/i.test(e)?i={name:"Samsung Internet for Android",samsungBrowser:a,version:x||t(/(?:SamsungBrowser)[\s\/](\d+(\.\d+)?)/i)}:/coast/i.test(e)?i={name:"Opera Coast",coast:a,version:x||t(/(?:coast)[\s\/](\d+(\.\d+)?)/i)}:/yabrowser/i.test(e)?i={name:"Yandex Browser",yandexbrowser:a,version:x||t(/(?:yabrowser)[\s\/](\d+(\.\d+)?)/i)}:/ucbrowser/i.test(e)?i={name:"UC Browser",ucbrowser:a,version:t(/(?:ucbrowser)[\s\/](\d+(?:\.\d+)+)/i)}:/mxios/i.test(e)?i={name:"Maxthon",maxthon:a,version:t(/(?:mxios)[\s\/](\d+(?:\.\d+)+)/i)}:/epiphany/i.test(e)?i={name:"Epiphany",epiphany:a,version:t(/(?:epiphany)[\s\/](\d+(?:\.\d+)+)/i)}:/puffin/i.test(e)?i={name:"Puffin",puffin:a,version:t(/(?:puffin)[\s\/](\d+(?:\.\d+)?)/i)}:/sleipnir/i.test(e)?i={name:"Sleipnir",sleipnir:a,version:t(/(?:sleipnir)[\s\/](\d+(?:\.\d+)+)/i)}:/k-meleon/i.test(e)?i={name:"K-Meleon",kMeleon:a,version:t(/(?:k-meleon)[\s\/](\d+(?:\.\d+)+)/i)}:v?(i={name:"Windows Phone",windowsphone:a},b?(i.msedge=a,i.version=b):(i.msie=a,i.version=t(/iemobile\/(\d+(\.\d+)?)/i))):/msie|trident/i.test(e)?i={name:"Internet Explorer",msie:a,version:t(/(?:msie |rv:)(\d+(\.\d+)?)/i)}:p?i={name:"Chrome",chromeos:a,chromeBook:a,chrome:a,version:t(/(?:chrome|crios|crmo)\/(\d+(\.\d+)?)/i)}:/chrome.+? edge/i.test(e)?i={name:"Microsoft Edge",msedge:a,version:b}:/vivaldi/i.test(e)?i={name:"Vivaldi",vivaldi:a,version:t(/vivaldi\/(\d+(\.\d+)?)/i)||x}:h?i={name:"Sailfish",sailfish:a,version:t(/sailfish\s?browser\/(\d+(\.\d+)?)/i)}:/seamonkey\//i.test(e)?i={name:"SeaMonkey",seamonkey:a,version:t(/seamonkey\/(\d+(\.\d+)?)/i)}:/firefox|iceweasel|fxios/i.test(e)?(i={name:"Firefox",firefox:a,version:t(/(?:firefox|iceweasel|fxios)[ \/](\d+(\.\d+)?)/i)},/\((mobile|tablet);[^\)]*rv:[\d\.]+\)/i.test(e)&&(i.firefoxos=a)):f?i={name:"Amazon Silk",silk:a,version:t(/silk\/(\d+(\.\d+)?)/i)}:/phantom/i.test(e)?i={name:"PhantomJS",phantom:a,version:t(/phantomjs\/(\d+(\.\d+)?)/i)}:/slimerjs/i.test(e)?i={name:"SlimerJS",slimer:a,version:t(/slimerjs\/(\d+(\.\d+)?)/i)}:/blackberry|\bbb\d+/i.test(e)||/rim\stablet/i.test(e)?i={name:"BlackBerry",blackberry:a,version:x||t(/blackberry[\d]+\/(\d+(\.\d+)?)/i)}:m?(i={name:"WebOS",webos:a,version:x||t(/w(?:eb)?osbrowser\/(\d+(\.\d+)?)/i)},/touchpad\//i.test(e)&&(i.touchpad=a)):/bada/i.test(e)?i={name:"Bada",bada:a,version:t(/dolfin\/(\d+(\.\d+)?)/i)}:d?i={name:"Tizen",tizen:a,version:t(/(?:tizen\s?)?browser\/(\d+(\.\d+)?)/i)||x}:/qupzilla/i.test(e)?i={name:"QupZilla",qupzilla:a,version:t(/(?:qupzilla)[\s\/](\d+(?:\.\d+)+)/i)||x}:/chromium/i.test(e)?i={name:"Chromium",chromium:a,version:t(/(?:chromium)[\s\/](\d+(?:\.\d+)?)/i)||x}:/chrome|crios|crmo/i.test(e)?i={name:"Chrome",chrome:a,version:t(/(?:chrome|crios|crmo)\/(\d+(\.\d+)?)/i)}:u?i={name:"Android",version:x}:/safari|applewebkit/i.test(e)?(i={name:"Safari",safari:a},x&&(i.version=x)):o?(i={name:"iphone"==o?"iPhone":"ipad"==o?"iPad":"iPod"},x&&(i.version=x)):i=/googlebot/i.test(e)?{name:"Googlebot",googlebot:a,version:t(/googlebot\/(\d+(\.\d+))/i)||x}:{name:t(/^(.*)\/(.*) /),version:n(/^(.*)\/(.*) /)},!i.msedge&&/(apple)?webkit/i.test(e)?(/(apple)?webkit\/537\.36/i.test(e)?(i.name=i.name||"Blink",i.blink=a):(i.name=i.name||"Webkit",i.webkit=a),!i.version&&x&&(i.version=x)):!i.opera&&/gecko\//i.test(e)&&(i.name=i.name||"Gecko",i.gecko=a,i.version=i.version||t(/gecko\/(\d+(\.\d+)?)/i)),i.windowsphone||i.msedge||!u&&!i.silk?i.windowsphone||i.msedge||!o?g?i.mac=a:S?i.xbox=a:y?i.windows=a:_&&(i.linux=a):(i[o]=a,i.ios=a):i.android=a;var E="";i.windows?E=r(t(/Windows ((NT|XP)( \d\d?.\d)?)/i)):i.windowsphone?E=t(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i):i.mac?(E=t(/Mac OS X (\d+([_\.\s]\d+)*)/i),E=E.replace(/[_\s]/g,".")):o?(E=t(/os (\d+([_\s]\d+)*) like mac os x/i),E=E.replace(/[_\s]/g,".")):u?E=t(/android[ \/-](\d+(\.\d+)*)/i):i.webos?E=t(/(?:web|hpw)os\/(\d+(\.\d+)*)/i):i.blackberry?E=t(/rim\stablet\sos\s(\d+(\.\d+)*)/i):i.bada?E=t(/bada\/(\d+(\.\d+)*)/i):i.tizen&&(E=t(/tizen[\/\s](\d+(\.\d+)*)/i)),E&&(i.osversion=E);var C=!i.windows&&E.split(".")[0];return w||l||"ipad"==o||u&&(3==C||C>=4&&!k)||i.silk?i.tablet=a:(k||"iphone"==o||"ipod"==o||u||c||i.blackberry||i.webos||i.bada)&&(i.mobile=a),i.msedge||i.msie&&i.version>=10||i.yandexbrowser&&i.version>=15||i.vivaldi&&i.version>=1||i.chrome&&i.version>=20||i.samsungBrowser&&i.version>=4||i.firefox&&i.version>=20||i.safari&&i.version>=6||i.opera&&i.version>=10||i.ios&&i.osversion&&i.osversion.split(".")[0]>=6||i.blackberry&&i.version>=10.1||i.chromium&&i.version>=20?i.a=a:i.msie&&i.version<10||i.chrome&&i.version<20||i.firefox&&i.version<20||i.safari&&i.version<6||i.opera&&i.version<10||i.ios&&i.osversion&&i.osversion.split(".")[0]<6||i.chromium&&i.version<20?i.c=a:i.x=a,i}function t(e){return e.split(".").length}function n(e,t){var n,r=[];if(Array.prototype.map)return Array.prototype.map.call(e,t);for(n=0;n=0;){if(i[0][r]>i[1][r])return 1;if(i[0][r]!==i[1][r])return-1;if(0===r)return 0}}function i(t,n,i){var o=s;"string"==typeof n&&(i=n,n=void 0),void 0===n&&(n=!1),i&&(o=e(i));var a=""+o.version;for(var u in t)if(t.hasOwnProperty(u)&&o[u]){if("string"!=typeof t[u])throw new Error("Browser version in the minVersion map should be a string: "+u+": "+String(t));return r([a,t[u]])<0}return n}function o(e,t,n){return!i(e,t,n)}var a=!0,s=e("undefined"!=typeof navigator?navigator.userAgent||"":"");return s.test=function(e){for(var t=0;t-1&&("firefox"===o&&a<15||"chrome"===o&&a<25||"safari"===o&&a<6.1||"ios_saf"===o&&a<7))return i({},t,(0,s.default)(n.replace(/calc\(/g,u+"calc("),n,c))}Object.defineProperty(t,"__esModule",{value:!0}),t.default=o;var a=n(991),s=r(a);e.exports=t.default},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e){var t=e.property,n=e.value,r=e.browserInfo,i=r.browser,o=r.version,u=e.prefix.css,c=e.keepUnprefixed;if("cursor"===t&&s[n]&&("firefox"===i&&o<24||"chrome"===i&&o<37||"safari"===i&&o<9||"opera"===i&&o<24))return{cursor:(0,a.default)(u+n,n,c)}}Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var o=n(991),a=r(o),s={"zoom-in":!0,"zoom-out":!0};e.exports=t.default},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e){var t=e.property,n=e.value,r=e.browserInfo.browser,i=e.prefix.css,o=e.keepUnprefixed;if("cursor"===t&&s[n]&&("firefox"===r||"chrome"===r||"safari"===r||"opera"===r))return{cursor:(0,a.default)(i+n,n,o)}}Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var o=n(991),a=r(o),s={grab:!0,grabbing:!0};e.exports=t.default},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e){var t=e.property,n=e.value,r=e.browserInfo,i=r.browser,o=r.version,u=e.prefix.css,c=e.keepUnprefixed;if("display"===t&&s[n]&&("chrome"===i&&o<29&&o>20||("safari"===i||"ios_saf"===i)&&o<9&&o>6||"opera"===i&&(15==o||16==o)))return{display:(0,a.default)(u+n,n,c)}}Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var o=n(991),a=r(o),s={flex:!0,"inline-flex":!0};e.exports=t.default},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e){var t=e.property,n=e.value,r=e.prefix.css,o=e.keepUnprefixed;if(u[t]&&c[n])return i({},t,(0,s.default)(r+n,n,o))}Object.defineProperty(t,"__esModule",{value:!0}),t.default=o;var a=n(991),s=r(a),u={maxHeight:!0,maxWidth:!0,width:!0,height:!0,columnWidth:!0,minWidth:!0,minHeight:!0},c={"min-content":!0,"max-content":!0,"fill-available":!0,"fit-content":!0,"contain-floats":!0};e.exports=t.default},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e){var t=e.property,n=e.value,r=e.browserInfo,o=r.browser,a=r.version,c=e.prefix.css,l=e.keepUnprefixed;if("string"==typeof n&&null!==n.match(u)&&("firefox"===o&&a<16||"chrome"===o&&a<26||("safari"===o||"ios_saf"===o)&&a<7||("opera"===o||"op_mini"===o)&&a<12.1||"android"===o&&a<4.4||"and_uc"===o))return i({},t,(0,s.default)(c+n,n,l))}Object.defineProperty(t,"__esModule",{value:!0}),t.default=o;var a=n(991),s=r(a),u=/linear-gradient|radial-gradient|repeating-linear-gradient|repeating-radial-gradient/;e.exports=t.default},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e){var t=e.property,n=e.value,r=e.prefix.css,o=e.requiresPrefix,s=e.keepUnprefixed,c=(0,l.default)(t);if("string"==typeof n&&p[c]){var f=function(){var e=Object.keys(o).map(function(e){return(0,u.default)(e)}),a=n.split(/,(?![^()]*(?:\([^()]*\))?\))/g);return e.forEach(function(e){a.forEach(function(t,n){t.indexOf(e)>-1&&"order"!==e&&(a[n]=t.replace(e,r+e)+(s?","+t:""))})}),{v:i({},t,a.join(","))}}();if("object"===("undefined"==typeof f?"undefined":a(f)))return f.v}}Object.defineProperty(t,"__esModule",{value:!0});var a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e};t.default=o;var s=n(982),u=r(s),c=n(999),l=r(c),p={transition:!0,transitionProperty:!0};e.exports=t.default},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){var t=e.replace(/^(ms|Webkit|Moz|O)/,"");return t.charAt(0).toLowerCase()+t.slice(1)},e.exports=t.default},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e){var t=e.property,n=e.value,r=e.styles,o=e.browserInfo,a=o.browser,l=o.version,p=e.prefix.css,f=e.keepUnprefixed;if((c[t]||"display"===t&&"string"==typeof n&&n.indexOf("flex")>-1)&&("ie_mob"===a||"ie"===a)&&10==l){if(f||Array.isArray(r[t])||delete r[t],"display"===t&&u[n])return{display:(0,s.default)(p+u[n],n,f)};if(c[t])return i({},c[t],u[n]||n)}}Object.defineProperty(t,"__esModule",{value:!0}),t.default=o;var a=n(991),s=r(a),u={"space-around":"distribute","space-between":"justify","flex-start":"start","flex-end":"end",flex:"flexbox","inline-flex":"inline-flexbox"},c={alignContent:"msFlexLinePack",alignSelf:"msFlexItemAlign",alignItems:"msFlexAlign",justifyContent:"msFlexPack",order:"msFlexOrder",flexGrow:"msFlexPositive",flexShrink:"msFlexNegative",flexBasis:"msPreferredSize"};e.exports=t.default},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e){var t=e.property,n=e.value,r=e.styles,o=e.browserInfo,a=o.browser,l=o.version,f=e.prefix.css,h=e.keepUnprefixed;if((p.indexOf(t)>-1||"display"===t&&"string"==typeof n&&n.indexOf("flex")>-1)&&("firefox"===a&&l<22||"chrome"===a&&l<21||("safari"===a||"ios_saf"===a)&&l<=6.1||"android"===a&&l<4.4||"and_uc"===a)){if(h||Array.isArray(r[t])||delete r[t],"flexDirection"===t&&"string"==typeof n)return{WebkitBoxOrient:n.indexOf("column")>-1?"vertical":"horizontal",WebkitBoxDirection:n.indexOf("reverse")>-1?"reverse":"normal"};if("display"===t&&u[n])return{display:(0,s.default)(f+u[n],n,h)};if(c[t])return i({},c[t],u[n]||n)}}Object.defineProperty(t,"__esModule",{value:!0}),t.default=o;var a=n(991),s=r(a),u={"space-around":"justify","space-between":"justify","flex-start":"start","flex-end":"end","wrap-reverse":"multiple",wrap:"multiple",flex:"box","inline-flex":"inline-box"},c={alignItems:"WebkitBoxAlign",justifyContent:"WebkitBoxPack",flexWrap:"WebkitBoxLines"},l=["alignContent","alignSelf","order","flexGrow","flexShrink","flexBasis","flexDirection"],p=Object.keys(c).concat(l);e.exports=t.default},function(e,t,n){var r=n(1003),i=n(498);e.exports=function(e,t,n){var i=e[t];if(i){var o=[];if(Object.keys(i).forEach(function(e){r.indexOf(e)===-1&&o.push(e)}),o.length)throw new Error("Prop "+t+" passed to "+n+". Has invalid keys "+o.join(", "))}},e.exports.isRequired=function(t,n,r){if(!t[n])throw new Error("Prop "+n+" passed to "+r+" is required");return e.exports(t,n,r)},e.exports.supportingArrays=i.PropTypes.oneOfType([i.PropTypes.arrayOf(e.exports),e.exports])},function(e,t){e.exports=["alignContent","MozAlignContent","WebKitAlignContent","MSAlignContent","OAlignContent","alignItems","MozAlignItems","WebKitAlignItems","MSAlignItems","OAlignItems","alignSelf","MozAlignSelf","WebKitAlignSelf","MSAlignSelf","OAlignSelf","all","MozAll","WebKitAll","MSAll","OAll","animation","MozAnimation","WebKitAnimation","MSAnimation","OAnimation","animationDelay","MozAnimationDelay","WebKitAnimationDelay","MSAnimationDelay","OAnimationDelay","animationDirection","MozAnimationDirection","WebKitAnimationDirection","MSAnimationDirection","OAnimationDirection","animationDuration","MozAnimationDuration","WebKitAnimationDuration","MSAnimationDuration","OAnimationDuration","animationFillMode","MozAnimationFillMode","WebKitAnimationFillMode","MSAnimationFillMode","OAnimationFillMode","animationIterationCount","MozAnimationIterationCount","WebKitAnimationIterationCount","MSAnimationIterationCount","OAnimationIterationCount","animationName","MozAnimationName","WebKitAnimationName","MSAnimationName","OAnimationName","animationPlayState","MozAnimationPlayState","WebKitAnimationPlayState","MSAnimationPlayState","OAnimationPlayState","animationTimingFunction","MozAnimationTimingFunction","WebKitAnimationTimingFunction","MSAnimationTimingFunction","OAnimationTimingFunction","backfaceVisibility","MozBackfaceVisibility","WebKitBackfaceVisibility","MSBackfaceVisibility","OBackfaceVisibility","background","MozBackground","WebKitBackground","MSBackground","OBackground","backgroundAttachment","MozBackgroundAttachment","WebKitBackgroundAttachment","MSBackgroundAttachment","OBackgroundAttachment","backgroundBlendMode","MozBackgroundBlendMode","WebKitBackgroundBlendMode","MSBackgroundBlendMode","OBackgroundBlendMode","backgroundClip","MozBackgroundClip","WebKitBackgroundClip","MSBackgroundClip","OBackgroundClip","backgroundColor","MozBackgroundColor","WebKitBackgroundColor","MSBackgroundColor","OBackgroundColor","backgroundImage","MozBackgroundImage","WebKitBackgroundImage","MSBackgroundImage","OBackgroundImage","backgroundOrigin","MozBackgroundOrigin","WebKitBackgroundOrigin","MSBackgroundOrigin","OBackgroundOrigin","backgroundPosition","MozBackgroundPosition","WebKitBackgroundPosition","MSBackgroundPosition","OBackgroundPosition","backgroundRepeat","MozBackgroundRepeat","WebKitBackgroundRepeat","MSBackgroundRepeat","OBackgroundRepeat","backgroundSize","MozBackgroundSize","WebKitBackgroundSize","MSBackgroundSize","OBackgroundSize","blockSize","MozBlockSize","WebKitBlockSize","MSBlockSize","OBlockSize","border","MozBorder","WebKitBorder","MSBorder","OBorder","borderBlockEnd","MozBorderBlockEnd","WebKitBorderBlockEnd","MSBorderBlockEnd","OBorderBlockEnd","borderBlockEndColor","MozBorderBlockEndColor","WebKitBorderBlockEndColor","MSBorderBlockEndColor","OBorderBlockEndColor","borderBlockEndStyle","MozBorderBlockEndStyle","WebKitBorderBlockEndStyle","MSBorderBlockEndStyle","OBorderBlockEndStyle","borderBlockEndWidth","MozBorderBlockEndWidth","WebKitBorderBlockEndWidth","MSBorderBlockEndWidth","OBorderBlockEndWidth","borderBlockStart","MozBorderBlockStart","WebKitBorderBlockStart","MSBorderBlockStart","OBorderBlockStart","borderBlockStartColor","MozBorderBlockStartColor","WebKitBorderBlockStartColor","MSBorderBlockStartColor","OBorderBlockStartColor","borderBlockStartStyle","MozBorderBlockStartStyle","WebKitBorderBlockStartStyle","MSBorderBlockStartStyle","OBorderBlockStartStyle","borderBlockStartWidth","MozBorderBlockStartWidth","WebKitBorderBlockStartWidth","MSBorderBlockStartWidth","OBorderBlockStartWidth","borderBottom","MozBorderBottom","WebKitBorderBottom","MSBorderBottom","OBorderBottom","borderBottomColor","MozBorderBottomColor","WebKitBorderBottomColor","MSBorderBottomColor","OBorderBottomColor","borderBottomLeftRadius","MozBorderBottomLeftRadius","WebKitBorderBottomLeftRadius","MSBorderBottomLeftRadius","OBorderBottomLeftRadius","borderBottomRightRadius","MozBorderBottomRightRadius","WebKitBorderBottomRightRadius","MSBorderBottomRightRadius","OBorderBottomRightRadius","borderBottomStyle","MozBorderBottomStyle","WebKitBorderBottomStyle","MSBorderBottomStyle","OBorderBottomStyle","borderBottomWidth","MozBorderBottomWidth","WebKitBorderBottomWidth","MSBorderBottomWidth","OBorderBottomWidth","borderCollapse","MozBorderCollapse","WebKitBorderCollapse","MSBorderCollapse","OBorderCollapse","borderColor","MozBorderColor","WebKitBorderColor","MSBorderColor","OBorderColor","borderImage","MozBorderImage","WebKitBorderImage","MSBorderImage","OBorderImage","borderImageOutset","MozBorderImageOutset","WebKitBorderImageOutset","MSBorderImageOutset","OBorderImageOutset","borderImageRepeat","MozBorderImageRepeat","WebKitBorderImageRepeat","MSBorderImageRepeat","OBorderImageRepeat","borderImageSlice","MozBorderImageSlice","WebKitBorderImageSlice","MSBorderImageSlice","OBorderImageSlice","borderImageSource","MozBorderImageSource","WebKitBorderImageSource","MSBorderImageSource","OBorderImageSource","borderImageWidth","MozBorderImageWidth","WebKitBorderImageWidth","MSBorderImageWidth","OBorderImageWidth","borderInlineEnd","MozBorderInlineEnd","WebKitBorderInlineEnd","MSBorderInlineEnd","OBorderInlineEnd","borderInlineEndColor","MozBorderInlineEndColor","WebKitBorderInlineEndColor","MSBorderInlineEndColor","OBorderInlineEndColor","borderInlineEndStyle","MozBorderInlineEndStyle","WebKitBorderInlineEndStyle","MSBorderInlineEndStyle","OBorderInlineEndStyle","borderInlineEndWidth","MozBorderInlineEndWidth","WebKitBorderInlineEndWidth","MSBorderInlineEndWidth","OBorderInlineEndWidth","borderInlineStart","MozBorderInlineStart","WebKitBorderInlineStart","MSBorderInlineStart","OBorderInlineStart","borderInlineStartColor","MozBorderInlineStartColor","WebKitBorderInlineStartColor","MSBorderInlineStartColor","OBorderInlineStartColor","borderInlineStartStyle","MozBorderInlineStartStyle","WebKitBorderInlineStartStyle","MSBorderInlineStartStyle","OBorderInlineStartStyle","borderInlineStartWidth","MozBorderInlineStartWidth","WebKitBorderInlineStartWidth","MSBorderInlineStartWidth","OBorderInlineStartWidth","borderLeft","MozBorderLeft","WebKitBorderLeft","MSBorderLeft","OBorderLeft","borderLeftColor","MozBorderLeftColor","WebKitBorderLeftColor","MSBorderLeftColor","OBorderLeftColor","borderLeftStyle","MozBorderLeftStyle","WebKitBorderLeftStyle","MSBorderLeftStyle","OBorderLeftStyle","borderLeftWidth","MozBorderLeftWidth","WebKitBorderLeftWidth","MSBorderLeftWidth","OBorderLeftWidth","borderRadius","MozBorderRadius","WebKitBorderRadius","MSBorderRadius","OBorderRadius","borderRight","MozBorderRight","WebKitBorderRight","MSBorderRight","OBorderRight","borderRightColor","MozBorderRightColor","WebKitBorderRightColor","MSBorderRightColor","OBorderRightColor","borderRightStyle","MozBorderRightStyle","WebKitBorderRightStyle","MSBorderRightStyle","OBorderRightStyle","borderRightWidth","MozBorderRightWidth","WebKitBorderRightWidth","MSBorderRightWidth","OBorderRightWidth","borderSpacing","MozBorderSpacing","WebKitBorderSpacing","MSBorderSpacing","OBorderSpacing","borderStyle","MozBorderStyle","WebKitBorderStyle","MSBorderStyle","OBorderStyle","borderTop","MozBorderTop","WebKitBorderTop","MSBorderTop","OBorderTop","borderTopColor","MozBorderTopColor","WebKitBorderTopColor","MSBorderTopColor","OBorderTopColor","borderTopLeftRadius","MozBorderTopLeftRadius","WebKitBorderTopLeftRadius","MSBorderTopLeftRadius","OBorderTopLeftRadius","borderTopRightRadius","MozBorderTopRightRadius","WebKitBorderTopRightRadius","MSBorderTopRightRadius","OBorderTopRightRadius","borderTopStyle","MozBorderTopStyle","WebKitBorderTopStyle","MSBorderTopStyle","OBorderTopStyle","borderTopWidth","MozBorderTopWidth","WebKitBorderTopWidth","MSBorderTopWidth","OBorderTopWidth","borderWidth","MozBorderWidth","WebKitBorderWidth","MSBorderWidth","OBorderWidth","bottom","MozBottom","WebKitBottom","MSBottom","OBottom","boxDecorationBreak","MozBoxDecorationBreak","WebKitBoxDecorationBreak","MSBoxDecorationBreak","OBoxDecorationBreak","boxShadow","MozBoxShadow","WebKitBoxShadow","MSBoxShadow","OBoxShadow","boxSizing","MozBoxSizing","WebKitBoxSizing","MSBoxSizing","OBoxSizing","breakAfter","MozBreakAfter","WebKitBreakAfter","MSBreakAfter","OBreakAfter","breakBefore","MozBreakBefore","WebKitBreakBefore","MSBreakBefore","OBreakBefore","breakInside","MozBreakInside","WebKitBreakInside","MSBreakInside","OBreakInside","captionSide","MozCaptionSide","WebKitCaptionSide","MSCaptionSide","OCaptionSide","ch","MozCh","WebKitCh","MSCh","OCh","clear","MozClear","WebKitClear","MSClear","OClear","clip","MozClip","WebKitClip","MSClip","OClip","clipPath","MozClipPath","WebKitClipPath","MSClipPath","OClipPath","cm","MozCm","WebKitCm","MSCm","OCm","color","MozColor","WebKitColor","MSColor","OColor","columnCount","MozColumnCount","WebKitColumnCount","MSColumnCount","OColumnCount","columnFill","MozColumnFill","WebKitColumnFill","MSColumnFill","OColumnFill","columnGap","MozColumnGap","WebKitColumnGap","MSColumnGap","OColumnGap","columnRule","MozColumnRule","WebKitColumnRule","MSColumnRule","OColumnRule","columnRuleColor","MozColumnRuleColor","WebKitColumnRuleColor","MSColumnRuleColor","OColumnRuleColor","columnRuleStyle","MozColumnRuleStyle","WebKitColumnRuleStyle","MSColumnRuleStyle","OColumnRuleStyle","columnRuleWidth","MozColumnRuleWidth","WebKitColumnRuleWidth","MSColumnRuleWidth","OColumnRuleWidth","columnSpan","MozColumnSpan","WebKitColumnSpan","MSColumnSpan","OColumnSpan","columnWidth","MozColumnWidth","WebKitColumnWidth","MSColumnWidth","OColumnWidth","columns","MozColumns","WebKitColumns","MSColumns","OColumns","content","MozContent","WebKitContent","MSContent","OContent","counterIncrement","MozCounterIncrement","WebKitCounterIncrement","MSCounterIncrement","OCounterIncrement","counterReset","MozCounterReset","WebKitCounterReset","MSCounterReset","OCounterReset","cursor","MozCursor","WebKitCursor","MSCursor","OCursor","deg","MozDeg","WebKitDeg","MSDeg","ODeg","direction","MozDirection","WebKitDirection","MSDirection","ODirection","display","MozDisplay","WebKitDisplay","MSDisplay","ODisplay","dpcm","MozDpcm","WebKitDpcm","MSDpcm","ODpcm","dpi","MozDpi","WebKitDpi","MSDpi","ODpi","dppx","MozDppx","WebKitDppx","MSDppx","ODppx","em","MozEm","WebKitEm","MSEm","OEm","emptyCells","MozEmptyCells","WebKitEmptyCells","MSEmptyCells","OEmptyCells","ex","MozEx","WebKitEx","MSEx","OEx","filter","MozFilter","WebKitFilter","MSFilter","OFilter","flex","MozFlex","WebKitFlex","MSFlex","OFlex","flexBasis","MozFlexBasis","WebKitFlexBasis","MSFlexBasis","OFlexBasis","flexDirection","MozFlexDirection","WebKitFlexDirection","MSFlexDirection","OFlexDirection","flexFlow","MozFlexFlow","WebKitFlexFlow","MSFlexFlow","OFlexFlow","flexGrow","MozFlexGrow","WebKitFlexGrow","MSFlexGrow","OFlexGrow","flexShrink","MozFlexShrink","WebKitFlexShrink","MSFlexShrink","OFlexShrink","flexWrap","MozFlexWrap","WebKitFlexWrap","MSFlexWrap","OFlexWrap","float","MozFloat","WebKitFloat","MSFloat","OFloat","font","MozFont","WebKitFont","MSFont","OFont","fontFamily","MozFontFamily","WebKitFontFamily","MSFontFamily","OFontFamily","fontFeatureSettings","MozFontFeatureSettings","WebKitFontFeatureSettings","MSFontFeatureSettings","OFontFeatureSettings","fontKerning","MozFontKerning","WebKitFontKerning","MSFontKerning","OFontKerning","fontLanguageOverride","MozFontLanguageOverride","WebKitFontLanguageOverride","MSFontLanguageOverride","OFontLanguageOverride","fontSize","MozFontSize","WebKitFontSize","MSFontSize","OFontSize","fontSizeAdjust","MozFontSizeAdjust","WebKitFontSizeAdjust","MSFontSizeAdjust","OFontSizeAdjust","fontStretch","MozFontStretch","WebKitFontStretch","MSFontStretch","OFontStretch","fontStyle","MozFontStyle","WebKitFontStyle","MSFontStyle","OFontStyle","fontSynthesis","MozFontSynthesis","WebKitFontSynthesis","MSFontSynthesis","OFontSynthesis","fontVariant","MozFontVariant","WebKitFontVariant","MSFontVariant","OFontVariant","fontVariantAlternates","MozFontVariantAlternates","WebKitFontVariantAlternates","MSFontVariantAlternates","OFontVariantAlternates","fontVariantCaps","MozFontVariantCaps","WebKitFontVariantCaps","MSFontVariantCaps","OFontVariantCaps","fontVariantEastAsian","MozFontVariantEastAsian","WebKitFontVariantEastAsian","MSFontVariantEastAsian","OFontVariantEastAsian","fontVariantLigatures","MozFontVariantLigatures","WebKitFontVariantLigatures","MSFontVariantLigatures","OFontVariantLigatures","fontVariantNumeric","MozFontVariantNumeric","WebKitFontVariantNumeric","MSFontVariantNumeric","OFontVariantNumeric","fontVariantPosition","MozFontVariantPosition","WebKitFontVariantPosition","MSFontVariantPosition","OFontVariantPosition","fontWeight","MozFontWeight","WebKitFontWeight","MSFontWeight","OFontWeight","grad","MozGrad","WebKitGrad","MSGrad","OGrad","grid","MozGrid","WebKitGrid","MSGrid","OGrid","gridArea","MozGridArea","WebKitGridArea","MSGridArea","OGridArea","gridAutoColumns","MozGridAutoColumns","WebKitGridAutoColumns","MSGridAutoColumns","OGridAutoColumns","gridAutoFlow","MozGridAutoFlow","WebKitGridAutoFlow","MSGridAutoFlow","OGridAutoFlow","gridAutoRows","MozGridAutoRows","WebKitGridAutoRows","MSGridAutoRows","OGridAutoRows","gridColumn","MozGridColumn","WebKitGridColumn","MSGridColumn","OGridColumn","gridColumnEnd","MozGridColumnEnd","WebKitGridColumnEnd","MSGridColumnEnd","OGridColumnEnd","gridColumnGap","MozGridColumnGap","WebKitGridColumnGap","MSGridColumnGap","OGridColumnGap","gridColumnStart","MozGridColumnStart","WebKitGridColumnStart","MSGridColumnStart","OGridColumnStart","gridGap","MozGridGap","WebKitGridGap","MSGridGap","OGridGap","gridRow","MozGridRow","WebKitGridRow","MSGridRow","OGridRow","gridRowEnd","MozGridRowEnd","WebKitGridRowEnd","MSGridRowEnd","OGridRowEnd","gridRowGap","MozGridRowGap","WebKitGridRowGap","MSGridRowGap","OGridRowGap","gridRowStart","MozGridRowStart","WebKitGridRowStart","MSGridRowStart","OGridRowStart","gridTemplate","MozGridTemplate","WebKitGridTemplate","MSGridTemplate","OGridTemplate","gridTemplateAreas","MozGridTemplateAreas","WebKitGridTemplateAreas","MSGridTemplateAreas","OGridTemplateAreas","gridTemplateColumns","MozGridTemplateColumns","WebKitGridTemplateColumns","MSGridTemplateColumns","OGridTemplateColumns","gridTemplateRows","MozGridTemplateRows","WebKitGridTemplateRows","MSGridTemplateRows","OGridTemplateRows","height","MozHeight","WebKitHeight","MSHeight","OHeight","hyphens","MozHyphens","WebKitHyphens","MSHyphens","OHyphens","hz","MozHz","WebKitHz","MSHz","OHz","imageOrientation","MozImageOrientation","WebKitImageOrientation","MSImageOrientation","OImageOrientation","imageRendering","MozImageRendering","WebKitImageRendering","MSImageRendering","OImageRendering","imageResolution","MozImageResolution","WebKitImageResolution","MSImageResolution","OImageResolution","imeMode","MozImeMode","WebKitImeMode","MSImeMode","OImeMode","in","MozIn","WebKitIn","MSIn","OIn","inherit","MozInherit","WebKitInherit","MSInherit","OInherit","initial","MozInitial","WebKitInitial","MSInitial","OInitial","inlineSize","MozInlineSize","WebKitInlineSize","MSInlineSize","OInlineSize","isolation","MozIsolation","WebKitIsolation","MSIsolation","OIsolation","justifyContent","MozJustifyContent","WebKitJustifyContent","MSJustifyContent","OJustifyContent","khz","MozKhz","WebKitKhz","MSKhz","OKhz","left","MozLeft","WebKitLeft","MSLeft","OLeft","letterSpacing","MozLetterSpacing","WebKitLetterSpacing","MSLetterSpacing","OLetterSpacing","lineBreak","MozLineBreak","WebKitLineBreak","MSLineBreak","OLineBreak","lineHeight","MozLineHeight","WebKitLineHeight","MSLineHeight","OLineHeight","listStyle","MozListStyle","WebKitListStyle","MSListStyle","OListStyle","listStyleImage","MozListStyleImage","WebKitListStyleImage","MSListStyleImage","OListStyleImage","listStylePosition","MozListStylePosition","WebKitListStylePosition","MSListStylePosition","OListStylePosition","listStyleType","MozListStyleType","WebKitListStyleType","MSListStyleType","OListStyleType","margin","MozMargin","WebKitMargin","MSMargin","OMargin","marginBlockEnd","MozMarginBlockEnd","WebKitMarginBlockEnd","MSMarginBlockEnd","OMarginBlockEnd","marginBlockStart","MozMarginBlockStart","WebKitMarginBlockStart","MSMarginBlockStart","OMarginBlockStart","marginBottom","MozMarginBottom","WebKitMarginBottom","MSMarginBottom","OMarginBottom","marginInlineEnd","MozMarginInlineEnd","WebKitMarginInlineEnd","MSMarginInlineEnd","OMarginInlineEnd","marginInlineStart","MozMarginInlineStart","WebKitMarginInlineStart","MSMarginInlineStart","OMarginInlineStart","marginLeft","MozMarginLeft","WebKitMarginLeft","MSMarginLeft","OMarginLeft","marginRight","MozMarginRight","WebKitMarginRight","MSMarginRight","OMarginRight","marginTop","MozMarginTop","WebKitMarginTop","MSMarginTop","OMarginTop","mask","MozMask","WebKitMask","MSMask","OMask","maskClip","MozMaskClip","WebKitMaskClip","MSMaskClip","OMaskClip","maskComposite","MozMaskComposite","WebKitMaskComposite","MSMaskComposite","OMaskComposite","maskImage","MozMaskImage","WebKitMaskImage","MSMaskImage","OMaskImage","maskMode","MozMaskMode","WebKitMaskMode","MSMaskMode","OMaskMode","maskOrigin","MozMaskOrigin","WebKitMaskOrigin","MSMaskOrigin","OMaskOrigin","maskPosition","MozMaskPosition","WebKitMaskPosition","MSMaskPosition","OMaskPosition","maskRepeat","MozMaskRepeat","WebKitMaskRepeat","MSMaskRepeat","OMaskRepeat","maskSize","MozMaskSize","WebKitMaskSize","MSMaskSize","OMaskSize","maskType","MozMaskType","WebKitMaskType","MSMaskType","OMaskType","maxBlockSize","MozMaxBlockSize","WebKitMaxBlockSize","MSMaxBlockSize","OMaxBlockSize","maxHeight","MozMaxHeight","WebKitMaxHeight","MSMaxHeight","OMaxHeight","maxInlineSize","MozMaxInlineSize","WebKitMaxInlineSize","MSMaxInlineSize","OMaxInlineSize","maxWidth","MozMaxWidth","WebKitMaxWidth","MSMaxWidth","OMaxWidth","minBlockSize","MozMinBlockSize","WebKitMinBlockSize","MSMinBlockSize","OMinBlockSize","minHeight","MozMinHeight","WebKitMinHeight","MSMinHeight","OMinHeight","minInlineSize","MozMinInlineSize","WebKitMinInlineSize","MSMinInlineSize","OMinInlineSize","minWidth","MozMinWidth","WebKitMinWidth","MSMinWidth","OMinWidth","mixBlendMode","MozMixBlendMode","WebKitMixBlendMode","MSMixBlendMode","OMixBlendMode","mm","MozMm","WebKitMm","MSMm","OMm","ms","MozMs","WebKitMs","MSMs","OMs","objectFit","MozObjectFit","WebKitObjectFit","MSObjectFit","OObjectFit","objectPosition","MozObjectPosition","WebKitObjectPosition","MSObjectPosition","OObjectPosition","offsetBlockEnd","MozOffsetBlockEnd","WebKitOffsetBlockEnd","MSOffsetBlockEnd","OOffsetBlockEnd","offsetBlockStart","MozOffsetBlockStart","WebKitOffsetBlockStart","MSOffsetBlockStart","OOffsetBlockStart","offsetInlineEnd","MozOffsetInlineEnd","WebKitOffsetInlineEnd","MSOffsetInlineEnd","OOffsetInlineEnd","offsetInlineStart","MozOffsetInlineStart","WebKitOffsetInlineStart","MSOffsetInlineStart","OOffsetInlineStart","opacity","MozOpacity","WebKitOpacity","MSOpacity","OOpacity","order","MozOrder","WebKitOrder","MSOrder","OOrder","orphans","MozOrphans","WebKitOrphans","MSOrphans","OOrphans","outline","MozOutline","WebKitOutline","MSOutline","OOutline","outlineColor","MozOutlineColor","WebKitOutlineColor","MSOutlineColor","OOutlineColor","outlineOffset","MozOutlineOffset","WebKitOutlineOffset","MSOutlineOffset","OOutlineOffset","outlineStyle","MozOutlineStyle","WebKitOutlineStyle","MSOutlineStyle","OOutlineStyle","outlineWidth","MozOutlineWidth","WebKitOutlineWidth","MSOutlineWidth","OOutlineWidth","overflow","MozOverflow","WebKitOverflow","MSOverflow","OOverflow","overflowWrap","MozOverflowWrap","WebKitOverflowWrap","MSOverflowWrap","OOverflowWrap","overflowX","MozOverflowX","WebKitOverflowX","MSOverflowX","OOverflowX","overflowY","MozOverflowY","WebKitOverflowY","MSOverflowY","OOverflowY","padding","MozPadding","WebKitPadding","MSPadding","OPadding","paddingBlockEnd","MozPaddingBlockEnd","WebKitPaddingBlockEnd","MSPaddingBlockEnd","OPaddingBlockEnd","paddingBlockStart","MozPaddingBlockStart","WebKitPaddingBlockStart","MSPaddingBlockStart","OPaddingBlockStart","paddingBottom","MozPaddingBottom","WebKitPaddingBottom","MSPaddingBottom","OPaddingBottom","paddingInlineEnd","MozPaddingInlineEnd","WebKitPaddingInlineEnd","MSPaddingInlineEnd","OPaddingInlineEnd","paddingInlineStart","MozPaddingInlineStart","WebKitPaddingInlineStart","MSPaddingInlineStart","OPaddingInlineStart","paddingLeft","MozPaddingLeft","WebKitPaddingLeft","MSPaddingLeft","OPaddingLeft","paddingRight","MozPaddingRight","WebKitPaddingRight","MSPaddingRight","OPaddingRight","paddingTop","MozPaddingTop","WebKitPaddingTop","MSPaddingTop","OPaddingTop","pageBreakAfter","MozPageBreakAfter","WebKitPageBreakAfter","MSPageBreakAfter","OPageBreakAfter","pageBreakBefore","MozPageBreakBefore","WebKitPageBreakBefore","MSPageBreakBefore","OPageBreakBefore","pageBreakInside","MozPageBreakInside","WebKitPageBreakInside","MSPageBreakInside","OPageBreakInside","pc","MozPc","WebKitPc","MSPc","OPc","perspective","MozPerspective","WebKitPerspective","MSPerspective","OPerspective","perspectiveOrigin","MozPerspectiveOrigin","WebKitPerspectiveOrigin","MSPerspectiveOrigin","OPerspectiveOrigin","pointerEvents","MozPointerEvents","WebKitPointerEvents","MSPointerEvents","OPointerEvents","position","MozPosition","WebKitPosition","MSPosition","OPosition","pt","MozPt","WebKitPt","MSPt","OPt","px","MozPx","WebKitPx","MSPx","OPx","q","MozQ","WebKitQ","MSQ","OQ","quotes","MozQuotes","WebKitQuotes","MSQuotes","OQuotes","rad","MozRad","WebKitRad","MSRad","ORad","rem","MozRem","WebKitRem","MSRem","ORem","resize","MozResize","WebKitResize","MSResize","OResize","revert","MozRevert","WebKitRevert","MSRevert","ORevert","right","MozRight","WebKitRight","MSRight","ORight","rubyAlign","MozRubyAlign","WebKitRubyAlign","MSRubyAlign","ORubyAlign","rubyMerge","MozRubyMerge","WebKitRubyMerge","MSRubyMerge","ORubyMerge","rubyPosition","MozRubyPosition","WebKitRubyPosition","MSRubyPosition","ORubyPosition","s","MozS","WebKitS","MSS","OS","scrollBehavior","MozScrollBehavior","WebKitScrollBehavior","MSScrollBehavior","OScrollBehavior","scrollSnapCoordinate","MozScrollSnapCoordinate","WebKitScrollSnapCoordinate","MSScrollSnapCoordinate","OScrollSnapCoordinate","scrollSnapDestination","MozScrollSnapDestination","WebKitScrollSnapDestination","MSScrollSnapDestination","OScrollSnapDestination","scrollSnapType","MozScrollSnapType","WebKitScrollSnapType","MSScrollSnapType","OScrollSnapType","shapeImageThreshold","MozShapeImageThreshold","WebKitShapeImageThreshold","MSShapeImageThreshold","OShapeImageThreshold","shapeMargin","MozShapeMargin","WebKitShapeMargin","MSShapeMargin","OShapeMargin","shapeOutside","MozShapeOutside","WebKitShapeOutside","MSShapeOutside","OShapeOutside","tabSize","MozTabSize","WebKitTabSize","MSTabSize","OTabSize","tableLayout","MozTableLayout","WebKitTableLayout","MSTableLayout","OTableLayout","textAlign","MozTextAlign","WebKitTextAlign","MSTextAlign","OTextAlign","textAlignLast","MozTextAlignLast","WebKitTextAlignLast","MSTextAlignLast","OTextAlignLast","textCombineUpright","MozTextCombineUpright","WebKitTextCombineUpright","MSTextCombineUpright","OTextCombineUpright","textDecoration","MozTextDecoration","WebKitTextDecoration","MSTextDecoration","OTextDecoration","textDecorationColor","MozTextDecorationColor","WebKitTextDecorationColor","MSTextDecorationColor","OTextDecorationColor","textDecorationLine","MozTextDecorationLine","WebKitTextDecorationLine","MSTextDecorationLine","OTextDecorationLine","textDecorationStyle","MozTextDecorationStyle","WebKitTextDecorationStyle","MSTextDecorationStyle","OTextDecorationStyle","textEmphasis","MozTextEmphasis","WebKitTextEmphasis","MSTextEmphasis","OTextEmphasis","textEmphasisColor","MozTextEmphasisColor","WebKitTextEmphasisColor","MSTextEmphasisColor","OTextEmphasisColor","textEmphasisPosition","MozTextEmphasisPosition","WebKitTextEmphasisPosition","MSTextEmphasisPosition","OTextEmphasisPosition","textEmphasisStyle","MozTextEmphasisStyle","WebKitTextEmphasisStyle","MSTextEmphasisStyle","OTextEmphasisStyle","textIndent","MozTextIndent","WebKitTextIndent","MSTextIndent","OTextIndent","textOrientation","MozTextOrientation","WebKitTextOrientation","MSTextOrientation","OTextOrientation","textOverflow","MozTextOverflow","WebKitTextOverflow","MSTextOverflow","OTextOverflow","textRendering","MozTextRendering","WebKitTextRendering","MSTextRendering","OTextRendering","textShadow","MozTextShadow","WebKitTextShadow","MSTextShadow","OTextShadow","textTransform","MozTextTransform","WebKitTextTransform","MSTextTransform","OTextTransform","textUnderlinePosition","MozTextUnderlinePosition","WebKitTextUnderlinePosition","MSTextUnderlinePosition","OTextUnderlinePosition","top","MozTop","WebKitTop","MSTop","OTop","touchAction","MozTouchAction","WebKitTouchAction","MSTouchAction","OTouchAction","transform","MozTransform","WebKitTransform","MSTransform","OTransform","transformBox","MozTransformBox","WebKitTransformBox","MSTransformBox","OTransformBox","transformOrigin","MozTransformOrigin","WebKitTransformOrigin","MSTransformOrigin","OTransformOrigin","transformStyle","MozTransformStyle","WebKitTransformStyle","MSTransformStyle","OTransformStyle","transition","MozTransition","WebKitTransition","MSTransition","OTransition","transitionDelay","MozTransitionDelay","WebKitTransitionDelay","MSTransitionDelay","OTransitionDelay","transitionDuration","MozTransitionDuration","WebKitTransitionDuration","MSTransitionDuration","OTransitionDuration","transitionProperty","MozTransitionProperty","WebKitTransitionProperty","MSTransitionProperty","OTransitionProperty","transitionTimingFunction","MozTransitionTimingFunction","WebKitTransitionTimingFunction","MSTransitionTimingFunction","OTransitionTimingFunction","turn","MozTurn","WebKitTurn","MSTurn","OTurn","unicodeBidi","MozUnicodeBidi","WebKitUnicodeBidi","MSUnicodeBidi","OUnicodeBidi","unset","MozUnset","WebKitUnset","MSUnset","OUnset","verticalAlign","MozVerticalAlign","WebKitVerticalAlign","MSVerticalAlign","OVerticalAlign","vh","MozVh","WebKitVh","MSVh","OVh","visibility","MozVisibility","WebKitVisibility","MSVisibility","OVisibility","vmax","MozVmax","WebKitVmax","MSVmax","OVmax","vmin","MozVmin","WebKitVmin","MSVmin","OVmin","vw","MozVw","WebKitVw","MSVw","OVw","whiteSpace","MozWhiteSpace","WebKitWhiteSpace","MSWhiteSpace","OWhiteSpace","widows","MozWidows","WebKitWidows","MSWidows","OWidows","width","MozWidth","WebKitWidth","MSWidth","OWidth","willChange","MozWillChange","WebKitWillChange","MSWillChange","OWillChange","wordBreak","MozWordBreak","WebKitWordBreak","MSWordBreak","OWordBreak","wordSpacing","MozWordSpacing","WebKitWordSpacing","MSWordSpacing","OWordSpacing","wordWrap","MozWordWrap","WebKitWordWrap","MSWordWrap","OWordWrap","writingMode","MozWritingMode","WebKitWritingMode","MSWritingMode","OWritingMode","zIndex","MozZIndex","WebKitZIndex","MSZIndex","OZIndex","fontSize","MozFontSize","WebKitFontSize","MSFontSize","OFontSize"]; +},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var s=Object.assign||function(e){for(var t=1;t=0&&_.splice(t,1)}function s(e){var t=document.createElement("style");return t.type="text/css",o(e,t),t}function u(e){var t=document.createElement("link");return t.rel="stylesheet",o(e,t),t}function c(e,t){var n,r,i;if(t.singleton){var o=g++;n=y||(y=s(t)),r=l.bind(null,n,o,!1),i=l.bind(null,n,o,!0)}else e.sourceMap&&"function"==typeof URL&&"function"==typeof URL.createObjectURL&&"function"==typeof URL.revokeObjectURL&&"function"==typeof Blob&&"function"==typeof btoa?(n=u(t),r=f.bind(null,n),i=function(){a(n),n.href&&URL.revokeObjectURL(n.href)}):(n=s(t),r=p.bind(null,n),i=function(){a(n)});return r(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap)return;r(e=t)}else i()}}function l(e,t,n,r){var i=n?"":r.css;if(e.styleSheet)e.styleSheet.cssText=b(t,i);else{var o=document.createTextNode(i),a=e.childNodes;a[t]&&e.removeChild(a[t]),a.length?e.insertBefore(o,a[t]):e.appendChild(o)}}function p(e,t){var n=t.css,r=t.media;t.sourceMap;if(r&&e.setAttribute("media",r),e.styleSheet)e.styleSheet.cssText=n;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(n))}}function f(e,t){var n=t.css,r=(t.media,t.sourceMap);r&&(n+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(r))))+" */");var i=new Blob([n],{type:"text/css"}),o=e.href;e.href=URL.createObjectURL(i),o&&URL.revokeObjectURL(o)}var h={},d=function(e){var t;return function(){return"undefined"==typeof t&&(t=e.apply(this,arguments)),t}},m=d(function(){return/msie [6-9]\b/.test(window.navigator.userAgent.toLowerCase())}),v=d(function(){return document.head||document.getElementsByTagName("head")[0]}),y=null,g=0,_=[];e.exports=function(e,t){t=t||{},"undefined"==typeof t.singleton&&(t.singleton=m()),"undefined"==typeof t.insertAt&&(t.insertAt="bottom");var n=i(e);return r(n,t),function(e){for(var o=[],a=0;a=400?(a.updateLoadingStatus("failed"),i.newThrownErr(new Error(t.statusText+" "+e))):(a.updateLoadingStatus("success"),a.updateSpec(t.text),void a.updateUrl(e))}var i=n.errActions,o=n.specSelectors,a=n.specActions,s=t.fetch;e=e||o.url(),a.updateLoadingStatus("loading"),s({url:e,loadSpec:!0,credentials:"same-origin",headers:{Accept:"application/json,*/*"}}).then(r,r)}},updateLoadingStatus:function(e){var t=[null,"loading","failed","success","failedConfig"];return t.indexOf(e)===-1&&console.error("Error: "+e+" is not one of "+(0,a.default)(t)),{type:"spec_update_loading_status",payload:e}}},r={spec_update_loading_status:function(e,t){return"string"==typeof t.payload?e.set("loadingStatus",t.payload):e}},i={loadingStatus:(0,s.createSelector)(function(e){return e||(0,u.Map)()},function(e){return e.get("loadingStatus")||null})};return{statePlugins:{spec:{actions:n,reducers:r,selectors:i}}}}Object.defineProperty(t,"__esModule",{value:!0});var o=n(57),a=r(o);t.default=i;var s=n(430),u=n(168)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var i=n(486),o=r(i),a=n(145),s=r(a),u=n(146),c=r(u),l=n(489),p=r(l),f=n(490),h=r(f),d=n(498),m=r(d),v=function(e){function t(){return(0,s.default)(this,t),(0,p.default)(this,(t.__proto__||(0,o.default)(t)).apply(this,arguments))}return(0,h.default)(t,e),(0,c.default)(t,[{key:"getLayout",value:function(){var e=this.props,t=e.getComponent,n=e.layoutSelectors,r=n.current(),i=t(r,!0);return i?i:function(){return m.default.createElement("h1",null,' No layout defined for "',r,'" ')}}},{key:"render",value:function(){var e=this.getLayout();return m.default.createElement(e,null)}}]),t}(m.default.Component);t.default=v,v.propTypes={getComponent:d.PropTypes.func.isRequired,layoutSelectors:d.PropTypes.object.isRequired},v.defaultProps={}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var i=n(486),o=r(i),a=n(145),s=r(a),u=n(146),c=r(u),l=n(489),p=r(l),f=n(490),h=r(f),d=n(498),m=r(d),v=function(e){function t(){var e,n,r,i;(0,s.default)(this,t);for(var a=arguments.length,u=Array(a),c=0;c6?s-6:0),c=6;c5?c-5:0),p=5;p5?a-5:0),u=5;u key("+l[p]+")"].concat(s));if(h instanceof Error)return h}}return i(t)}function u(e){return a(e,"List",b.List.isList)}function c(e,t,n,r){function o(){for(var i=arguments.length,o=Array(i),u=0;u5?s-5:0),c=5;c5?c-5:0),p=5;p>",w={listOf:u,mapOf:l,orderedMapOf:p,setOf:f,orderedSetOf:h,stackOf:d,iterableOf:m,recordOf:v,shape:g,contains:g,mapContains:_,list:o("List",b.List.isList),map:o("Map",b.Map.isMap),orderedMap:o("OrderedMap",b.OrderedMap.isOrderedMap),set:o("Set",b.Set.isSet),orderedSet:o("OrderedSet",b.OrderedSet.isOrderedSet),stack:o("Stack",b.Stack.isStack),seq:o("Seq",b.Seq.isSeq),record:o("Record",function(e){return e instanceof b.Record}),iterable:o("Iterable",b.Iterable.isIterable)};e.exports=w},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var i=n(137),o=r(i),a=n(486),s=r(a),u=n(145),c=r(u),l=n(146),p=r(l),f=n(489),h=r(f),d=n(490),m=r(d),v=n(498),y=r(v),g=n(1015),_=r(g),b=function(e){function t(e,n){(0,c.default)(this,t);var r=(0,h.default)(this,(t.__proto__||(0,s.default)(t)).call(this,e,n));return r.onAuthChange=function(e){var t=e.name;r.setState((0,o.default)({},t,e))},r.submitAuth=function(e){e.preventDefault();var t=r.props.authActions;t.authorize(r.state)},r.logoutClick=function(e){e.preventDefault();var t=r.props,n=t.authActions,i=t.definitions,o=i.map(function(e,t){return t}).toArray();n.logout(o)},r.state={},r}return(0,m.default)(t,e),(0,p.default)(t,[{key:"render",value:function(){var e=this,t=this.props,n=t.definitions,r=t.getComponent,i=t.authSelectors,o=t.errSelectors,a=r("apiKeyAuth"),s=r("basicAuth"),u=r("oauth2",!0),c=r("Button"),l=i.authorized(),p=n.filter(function(e,t){return!!l.get(t)}),f=n.filter(function(e){return"oauth2"!==e.get("type")}),h=n.filter(function(e){return"oauth2"===e.get("type")});return y.default.createElement("div",{className:"auth-container"},!!f.size&&y.default.createElement("form",{onSubmit:this.submitAuth},f.map(function(t,n){var i=t.get("type"),u=void 0;switch(i){case"apiKey":u=y.default.createElement(a,{key:n,schema:t,name:n,errSelectors:o,authorized:l,getComponent:r,onChange:e.onAuthChange});break;case"basic":u=y.default.createElement(s,{key:n,schema:t,name:n,errSelectors:o,authorized:l,getComponent:r,onChange:e.onAuthChange});break;default:u=y.default.createElement("div",{key:n},"Unknown security definition type ",i)}return y.default.createElement("div",{key:n+"-jump"},u)}).toArray(),y.default.createElement("div",{className:"auth-btn-wrapper"},f.size===p.size?y.default.createElement(c,{className:"btn modal-btn auth",onClick:this.logoutClick},"Logout"):y.default.createElement(c,{type:"submit",className:"btn modal-btn auth authorize"},"Authorize"))),h&&h.size?y.default.createElement("div",null,y.default.createElement("div",{className:"scope-def"},y.default.createElement("p",null,"Scopes are used to grant an application different levels of access to data on behalf of the end user. Each API may declare one or more scopes."),y.default.createElement("p",null,"API requires the following scopes. Select which ones you want to grant to Swagger UI.")),n.filter(function(e){return"oauth2"===e.get("type")}).map(function(e,t){return y.default.createElement("div",{key:t},y.default.createElement(u,{authorized:l,schema:e,name:t}))}).toArray()):null)}}]),t}(y.default.Component);b.propTypes={definitions:v.PropTypes.object.isRequired,getComponent:v.PropTypes.func.isRequired,authSelectors:v.PropTypes.object.isRequired,authActions:v.PropTypes.object.isRequired,specSelectors:v.PropTypes.object.isRequired},b.propTypes={errSelectors:v.PropTypes.object.isRequired,getComponent:v.PropTypes.func.isRequired,authSelectors:v.PropTypes.object.isRequired,specSelectors:v.PropTypes.object.isRequired,authActions:v.PropTypes.object.isRequired,definitions:_.default.iterable.isRequired},t.default=b},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var i=n(486),o=r(i),a=n(145),s=r(a),u=n(146),c=r(u),l=n(489),p=r(l),f=n(490),h=r(f),d=n(498),m=r(d),v=function(e){function t(){return(0,s.default)(this,t),(0,p.default)(this,(t.__proto__||(0,o.default)(t)).apply(this,arguments))}return(0,h.default)(t,e),(0,c.default)(t,[{key:"render",value:function(){var e=this.props.error,t=e.get("level"),n=e.get("message"),r=e.get("source");return m.default.createElement("div",{className:"errors",style:{backgroundColor:"#ffeeee",color:"red",margin:"1em"}},m.default.createElement("b",{style:{textTransform:"capitalize",marginRight:"1em"}},r," ",t),m.default.createElement("span",null,n))}}]),t}(m.default.Component);v.propTypes={error:d.PropTypes.object.isRequired},t.default=v},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var i=n(141),o=r(i),a=n(486),s=r(a),u=n(145),c=r(u),l=n(146),p=r(l),f=n(489),h=r(f),d=n(490),m=r(d),v=n(498),y=r(v),g=function(e){function t(e,n){(0,c.default)(this,t);var r=(0,h.default)(this,(t.__proto__||(0,s.default)(t)).call(this,e,n));_.call(r);var i=r.props,o=i.name,a=i.schema,u=r.getValue();return r.state={name:o,schema:a,value:u},r}return(0,m.default)(t,e),(0,p.default)(t,[{key:"getValue",value:function(){var e=this.props,t=e.name,n=e.authorized;return n&&n.getIn([t,"value"])}},{key:"render",value:function(){var e=this.props,t=e.schema,n=e.getComponent,r=e.errSelectors,i=e.name,o=n("Input"),a=n("Row"),s=n("Col"),u=n("authError"),c=n("Markdown"),l=n("JumpToPath",!0),p=this.getValue(),f=r.allErrors().filter(function(e){return e.get("authId")===i});return y.default.createElement("div",null,y.default.createElement("h4",null,"Api key authorization",y.default.createElement(l,{path:["securityDefinitions",i]})),p&&y.default.createElement("h6",null,"Authorized"),y.default.createElement(a,null,y.default.createElement(c,{source:t.get("description")})),y.default.createElement(a,null,y.default.createElement("p",null,"Name: ",y.default.createElement("code",null,t.get("name")))),y.default.createElement(a,null,y.default.createElement("p",null,"In: ",y.default.createElement("code",null,t.get("in")))),y.default.createElement(a,null,y.default.createElement("label",null,"Value:"),p?y.default.createElement("code",null," ****** "):y.default.createElement(s,null,y.default.createElement(o,{type:"text",onChange:this.onChange}))),f.valueSeq().map(function(e,t){return y.default.createElement(u,{error:e,key:t})}))}}]),t}(y.default.Component);g.propTypes={authorized:v.PropTypes.object,getComponent:v.PropTypes.func.isRequired,errSelectors:v.PropTypes.object.isRequired,schema:v.PropTypes.object.isRequired,name:v.PropTypes.string.isRequired,onChange:v.PropTypes.func};var _=function(){var e=this;this.onChange=function(t){var n=e.props.onChange,r=t.target.value,i=(0,o.default)({},e.state,{value:r});e.setState(i),n(i)}};t.default=g},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var i=n(486),o=r(i),a=n(145),s=r(a),u=n(146),c=r(u),l=n(489),p=r(l),f=n(490),h=r(f),d=n(498),m=r(d),v=n(1015),y=r(v),g=function(e){function t(e,n){(0,s.default)(this,t);var r=(0,p.default)(this,(t.__proto__||(0,o.default)(t)).call(this,e,n));_.call(r);var i=r.props,a=i.schema,u=i.name,c=r.getValue(),l=c.username;return r.state={name:u,schema:a,value:l?{username:l}:{}},r}return(0,h.default)(t,e),(0,c.default)(t,[{key:"getValue",value:function(){var e=this.props,t=e.authorized,n=e.name;return t&&t.getIn([n,"value"])||{}}},{key:"render",value:function(){var e=this.props,t=e.schema,n=e.getComponent,r=e.name,i=e.errSelectors,o=n("Input"),a=n("Row"),s=n("Col"),u=n("authError"),c=n("JumpToPath",!0),l=n("Markdown"),p=this.getValue().username,f=i.allErrors().filter(function(e){return e.get("authId")===r});return m.default.createElement("div",null,m.default.createElement("h4",null,"Basic authorization",m.default.createElement(c,{path:["securityDefinitions",r]})),p&&m.default.createElement("h6",null,"Authorized"),m.default.createElement(a,null,m.default.createElement(l,{source:t.get("description")})),m.default.createElement(a,null,m.default.createElement("label",null,"Username:"),p?m.default.createElement("code",null," ",p," "):m.default.createElement(s,null,m.default.createElement(o,{type:"text",required:"required",name:"username",onChange:this.onChange}))),m.default.createElement(a,null,m.default.createElement("label",null,"Password:"),p?m.default.createElement("code",null," ****** "):m.default.createElement(s,null,m.default.createElement(o,{required:"required",autoComplete:"new-password",name:"password",type:"password",onChange:this.onChange}))),f.valueSeq().map(function(e,t){return m.default.createElement(u,{error:e,key:t})}))}}]),t}(m.default.Component);g.propTypes={authorized:d.PropTypes.object,getComponent:d.PropTypes.func.isRequired,schema:d.PropTypes.object.isRequired,onChange:d.PropTypes.func.isRequired},g.propTypes={name:d.PropTypes.string.isRequired,errSelectors:d.PropTypes.object.isRequired,getComponent:d.PropTypes.func.isRequired,onChange:d.PropTypes.func,schema:y.default.map,authorized:y.default.map};var _=function(){var e=this;this.onChange=function(t){var n=e.props.onChange,r=t.target,i=r.value,o=r.name,a=e.state.value;a[o]=i,e.setState({value:a}),n(e.state)}};t.default=g},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var i=n(137),o=r(i),a=n(486),s=r(a),u=n(145),c=r(u),l=n(146),p=r(l),f=n(489),h=r(f),d=n(490),m=r(d),v=n(498),y=r(v),g=n(1021),_=r(g),b="implicit",x="accessCode",w="password",k="application",S=function(e){function t(e,n){(0,c.default)(this,t);var r=(0,h.default)(this,(t.__proto__||(0,s.default)(t)).call(this,e,n));E.call(r);var i=r.props,o=i.name,a=i.schema,u=i.authorized,l=i.authSelectors,p=u&&u.get(o),f=l.getConfigs()||{},d=p&&p.get("username")||"",m=p&&p.get("clientId")||f.clientId||"",v=p&&p.get("clientSecret")||f.clientSecret||"",y=p&&p.get("passwordType")||"request-body";return r.state={appName:f.appName,name:o,schema:a,scopes:[],clientId:m,clientSecret:v,username:d,password:"",passwordType:y},r}return(0,m.default)(t,e),(0,p.default)(t,[{key:"render",value:function(){var e=this,t=this.props,n=t.schema,r=t.getComponent,i=t.authSelectors,o=t.errSelectors,a=t.name,s=r("Input"),u=r("Row"),c=r("Col"),l=r("Button"),p=r("authError"),f=r("JumpToPath",!0),h=r("Markdown"),d=n.get("flow"),m=n.get("allowedScopes")||n.get("scopes"),v=i.authorized().get(a),g=!!v,_=o.allErrors().filter(function(e){return e.get("authId")===a}),S=!_.filter(function(e){return"validation"===e.get("source")}).size,E=n.get("description");return y.default.createElement("div",null,y.default.createElement("h4",null,"OAuth2.0 ",y.default.createElement(f,{path:["securityDefinitions",a]})),this.state.appName?y.default.createElement("h5",null,"Application: ",this.state.appName," "):null,E&&y.default.createElement(h,{source:n.get("description")}),g&&y.default.createElement("h6",null,"Authorized"),(d===b||d===x)&&y.default.createElement("p",null,"Authorization URL: ",y.default.createElement("code",null,n.get("authorizationUrl"))),(d===w||d===x||d===k)&&y.default.createElement("p",null,"Token URL:",y.default.createElement("code",null," ",n.get("tokenUrl"))),y.default.createElement("p",{className:"flow"},"Flow: ",y.default.createElement("code",null,n.get("flow"))),d!==w?null:y.default.createElement(u,null,y.default.createElement(u,null,y.default.createElement("label",{htmlFor:"oauth_username"},"username:"),g?y.default.createElement("code",null," ",this.state.username," "):y.default.createElement(c,{tablet:10,desktop:10},y.default.createElement("input",{id:"oauth_username",type:"text","data-name":"username",onChange:this.onInputChange}))),y.default.createElement(u,null,y.default.createElement("label",{htmlFor:"oauth_password"},"password:"),g?y.default.createElement("code",null," ****** "):y.default.createElement(c,{tablet:10,desktop:10},y.default.createElement("input",{id:"oauth_password",type:"password","data-name":"password",onChange:this.onInputChange}))),y.default.createElement(u,null,y.default.createElement("label",{htmlFor:"password_type"},"type:"),g?y.default.createElement("code",null," ",this.state.passwordType," "):y.default.createElement(c,{tablet:10,desktop:10},y.default.createElement("select",{id:"password_type","data-name":"passwordType",onChange:this.onInputChange},y.default.createElement("option",{value:"request-body"},"Request body"),y.default.createElement("option",{value:"basic"},"Basic auth"),y.default.createElement("option",{value:"query"},"Query parameters"))))),(d===k||d===b||d===x||d===w&&"basic"!==this.state.passwordType)&&(!g||g&&this.state.clientId)&&y.default.createElement(u,null,y.default.createElement("label",{htmlFor:"client_id"},"client_id:"),g?y.default.createElement("code",null," ****** "):y.default.createElement(c,{tablet:10,desktop:10},y.default.createElement("input",{id:"client_id",type:"text",required:d===w,value:this.state.clientId,"data-name":"clientId",onChange:this.onInputChange}))),(d===k||d===x||d===w&&"basic"!==this.state.passwordType)&&y.default.createElement(u,null,y.default.createElement("label",{htmlFor:"client_secret"},"client_secret:"),g?y.default.createElement("code",null," ****** "):y.default.createElement(c,{tablet:10,desktop:10},y.default.createElement("input",{id:"client_secret",value:this.state.clientSecret,type:"text","data-name":"clientSecret",onChange:this.onInputChange}))),!g&&m&&m.size?y.default.createElement("div",{className:"scopes"},y.default.createElement("h2",null,"Scopes:"),m.map(function(t,n){return y.default.createElement(u,{key:n},y.default.createElement("div",{className:"checkbox"},y.default.createElement(s,{"data-value":n,id:n+"-checkbox-"+e.state.name,disabled:g,type:"checkbox",onChange:e.onScopeChange}),y.default.createElement("label",{htmlFor:n+"-checkbox-"+e.state.name},y.default.createElement("span",{className:"item"}),y.default.createElement("div",{className:"text"},y.default.createElement("p",{className:"name" +},n),y.default.createElement("p",{className:"description"},t)))))}).toArray()):null,_.valueSeq().map(function(e,t){return y.default.createElement(p,{error:e,key:t})}),y.default.createElement("div",{className:"auth-btn-wrapper"},S&&(g?y.default.createElement(l,{className:"btn modal-btn auth authorize",onClick:this.logout},"Logout"):y.default.createElement(l,{className:"btn modal-btn auth authorize",onClick:this.authorize},"Authorize"))))}}]),t}(y.default.Component);S.propTypes={name:v.PropTypes.string,authorized:v.PropTypes.object,getComponent:v.PropTypes.func.isRequired,schema:v.PropTypes.object.isRequired,authSelectors:v.PropTypes.object.isRequired,authActions:v.PropTypes.object.isRequired,errSelectors:v.PropTypes.object.isRequired,errActions:v.PropTypes.object.isRequired,getConfigs:v.PropTypes.any};var E=function(){var e=this;this.authorize=function(){var t=e.props,n=t.authActions,r=t.errActions,i=t.getConfigs,o=t.authSelectors,a=i(),s=o.getConfigs();r.clear({authId:name,type:"auth",source:"auth"}),(0,_.default)({auth:e.state,authActions:n,errActions:r,configs:a,authConfigs:s})},this.onScopeChange=function(t){var n=t.target,r=n.checked,i=n.dataset.value;if(r&&e.state.scopes.indexOf(i)===-1){var o=e.state.scopes.concat([i]);e.setState({scopes:o})}else!r&&e.state.scopes.indexOf(i)>-1&&e.setState({scopes:e.state.scopes.filter(function(e){return e!==i})})},this.onInputChange=function(t){var n=t.target,r=n.dataset.name,i=n.value,a=(0,o.default)({},r,i);e.setState(a)},this.logout=function(t){t.preventDefault();var n=e.props,r=n.authActions,i=n.errActions,o=n.name;i.clear({authId:o,type:"auth",source:"auth"}),r.logout([o])}};t.default=S},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e){var t=e.auth,n=e.authActions,r=e.errActions,i=e.configs,o=e.authConfigs,u=void 0===o?{}:o,c=t.schema,l=t.scopes,p=t.name,f=t.clientId,h=c.get("flow"),d=[];switch(h){case"password":return void n.authorizePassword(t);case"application":return void n.authorizeApplication(t);case"accessCode":d.push("response_type=code");break;case"implicit":d.push("response_type=token")}"string"==typeof f&&d.push("client_id="+encodeURIComponent(f));var m=i.oauth2RedirectUrl;if("undefined"==typeof m)return void r.newAuthErr({authId:p,source:"validation",level:"error",message:"oauth2RedirectUri configuration is not passed. Oauth2 authorization cannot be performed."});if(d.push("redirect_uri="+encodeURIComponent(m)),Array.isArray(l)&&0=0||this.state.url.indexOf("127.0.0.1")>=0?null:_.default.createElement("span",{style:{float:"right"}},_.default.createElement("a",{target:"_blank",href:this.state.validatorUrl+"/debug?url="+this.state.url},_.default.createElement(x,{src:this.state.validatorUrl+"?url="+this.state.url,alt:"Online validator badge"})))}}]),t}(_.default.Component);b.propTypes={getComponent:g.PropTypes.func.isRequired,getConfigs:g.PropTypes.func.isRequired,specSelectors:g.PropTypes.object.isRequired},t.default=b;var x=function(e){function t(e){(0,p.default)(this,t);var n=(0,m.default)(this,(t.__proto__||(0,c.default)(t)).call(this,e));return n.state={loaded:!1,error:!1},n}return(0,y.default)(t,e),(0,h.default)(t,[{key:"componentDidMount",value:function(){var e=this,t=new Image;t.onload=function(){e.setState({loaded:!0})},t.onerror=function(){e.setState({error:!0})},t.src=this.props.src}},{key:"componentWillReceiveProps",value:function(e){var t=this;if(e.src!==this.props.src){var n=new Image;n.onload=function(){t.setState({loaded:!0})},n.onerror=function(){t.setState({error:!0})},n.src=e.src}}},{key:"render",value:function(){return this.state.error?_.default.createElement("img",{alt:"Error"}):this.state.loaded?_.default.createElement("img",{src:this.props.src,alt:this.props.alt}):_.default.createElement("img",{alt:"Loading..."})}}]),t}(_.default.Component);x.propTypes={src:g.PropTypes.string,alt:g.PropTypes.string}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var i=n(446),o=r(i),a=n(486),s=r(a),u=n(145),c=r(u),l=n(146),p=r(l),f=n(489),h=r(f),d=n(490),m=r(d),v=n(498),y=r(v),g=function(e){function t(){return(0,c.default)(this,t),(0,h.default)(this,(t.__proto__||(0,s.default)(t)).apply(this,arguments))}return(0,m.default)(t,e),(0,p.default)(t,[{key:"render",value:function(){var e=this.props,t=e.specSelectors,n=e.specActions,r=e.getComponent,i=e.layoutSelectors,a=e.layoutActions,s=e.authActions,u=e.authSelectors,c=e.getConfigs,l=e.fn,p=t.taggedOperations(),f=r("operation"),h=r("Collapse"),d=i.showSummary(),m=c(),v=m.docExpansion,g=m.displayOperationId;return y.default.createElement("div",null,p.map(function(e,p){var m=e.get("operations"),_=e.getIn(["tagDetails","description"],null),b=["operations-tag",p],x=i.isShown(b,"full"===v||"list"===v);return y.default.createElement("div",{className:x?"opblock-tag-section is-open":"opblock-tag-section",key:"operation-"+p},y.default.createElement("h4",{onClick:function(){return a.show(b,!x)},className:_?"opblock-tag":"opblock-tag no-desc"},y.default.createElement("span",null,p),_?y.default.createElement("small",null,_):null,y.default.createElement("button",{className:"expand-operation",title:"Expand operation",onClick:function(){return a.show(b,!x)}},y.default.createElement("svg",{className:"arrow",width:"20",height:"20"},y.default.createElement("use",{xlinkHref:x?"#large-arrow-down":"#large-arrow"})))),y.default.createElement(h,{isOpened:x},m.map(function(e){var h=["operations",e.get("id"),p],m=e.get("path",""),v=e.get("method",""),_="paths."+m+"."+v,b=t.allowTryItOutFor(e.get("path"),e.get("method")),x=t.responseFor(e.get("path"),e.get("method")),w=t.requestFor(e.get("path"),e.get("method"));return y.default.createElement(f,(0,o.default)({},e.toObject(),{isShownKey:h,jumpToKey:_,showSummary:d,key:h,response:x,request:w,allowTryItOut:b,displayOperationId:g,specActions:n,specSelectors:t,layoutActions:a,layoutSelectors:i,authActions:s,authSelectors:u,getComponent:r,fn:l,getConfigs:c}))}).toArray()))}).toArray(),p.size<1?y.default.createElement("h3",null," No operations defined in spec! "):null)}}]),t}(y.default.Component);g.propTypes={specSelectors:v.PropTypes.object.isRequired,specActions:v.PropTypes.object.isRequired,getComponent:v.PropTypes.func.isRequired,layoutSelectors:v.PropTypes.object.isRequired,layoutActions:v.PropTypes.object.isRequired,authActions:v.PropTypes.object.isRequired,authSelectors:v.PropTypes.object.isRequired,getConfigs:v.PropTypes.func.isRequired},t.default=g,g.propTypes={layoutActions:v.PropTypes.object.isRequired,specSelectors:v.PropTypes.object.isRequired,specActions:v.PropTypes.object.isRequired,layoutSelectors:v.PropTypes.object.isRequired,getComponent:v.PropTypes.func.isRequired,fn:v.PropTypes.object.isRequired}},function(e,t,n){"use strict";function r(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}function i(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=n(486),a=i(o),s=n(145),u=i(s),c=n(146),l=i(c),p=n(489),f=i(p),h=n(490),d=i(h),m=n(498),v=i(m),y=n(1027),g=i(y),_=n(183),b=n(1029),x=r(b),w=function(e){function t(e,n){(0,u.default)(this,t);var r=(0,f.default)(this,(t.__proto__||(0,a.default)(t)).call(this,e,n));return r.toggleShown=function(){var e=r.props,t=e.layoutActions,n=e.isShownKey;t.show(n,!r.isShown())},r.isShown=function(){var e=r.props,t=e.layoutSelectors,n=e.isShownKey,i=e.getConfigs,o=i(),a=o.docExpansion;return t.isShown(n,"full"===a)},r.onTryoutClick=function(){r.setState({tryItOutEnabled:!r.state.tryItOutEnabled})},r.onCancelClick=function(){var e=r.props,t=e.specActions,n=e.path,i=e.method;r.setState({tryItOutEnabled:!r.state.tryItOutEnabled}),t.clearValidateParams([n,i])},r.onExecute=function(){r.setState({executeInProgress:!0})},r.state={tryItOutEnabled:!1},r}return(0,d.default)(t,e),(0,l.default)(t,[{key:"componentWillReceiveProps",value:function(e){var t="application/json",n=e.specActions,r=e.path,i=e.method,o=e.operation,a=o.get("produces_value"),s=o.get("produces"),u=o.get("consumes"),c=o.get("consumes_value");e.response!==this.props.response&&this.setState({executeInProgress:!1}),void 0===a&&(a=s&&s.size?s.first():t,n.changeProducesValue([r,i],a)),void 0===c&&(c=u&&u.size?u.first():t,n.changeConsumesValue([r,i],c))}},{key:"shouldComponentUpdate",value:function(e,t){return(0,g.default)(this,e,t)}},{key:"render",value:function(){var e=this.props,t=e.isShownKey,n=e.jumpToKey,r=e.path,i=e.method,o=e.operation,a=e.showSummary,s=e.response,u=e.request,c=e.allowTryItOut,l=e.displayOperationId,p=e.fn,f=e.getComponent,h=e.specActions,d=e.specSelectors,m=e.authActions,y=e.authSelectors,g=o.get("summary"),b=o.get("description"),x=o.get("deprecated"),w=o.get("externalDocs"),k=o.get("responses"),S=o.get("security")||d.security(),E=o.get("produces"),C=o.get("schemes"),A=(0,_.getList)(o,["parameters"]),T=o.get("__originalOperationId"),D=f("responses"),M=f("parameters"),O=f("execute"),P=f("clear"),I=f("authorizeOperationBtn"),N=f("JumpToPath",!0),R=f("Collapse"),j=f("Markdown"),F=f("schemes");if(s&&s.size>0){var B=!k.get(String(s.get("status")));s=s.set("notDocumented",B)}var L=this.state.tryItOutEnabled,z=this.isShown(),q=[r,i];return v.default.createElement("div",{className:x?"opblock opblock-deprecated":z?"opblock opblock-"+i+" is-open":"opblock opblock-"+i,id:t},v.default.createElement("div",{className:"opblock-summary opblock-summary-"+i,onClick:this.toggleShown},v.default.createElement("span",{className:"opblock-summary-method"},i.toUpperCase()),v.default.createElement("span",{className:x?"opblock-summary-path__deprecated":"opblock-summary-path"},v.default.createElement("span",null,r),v.default.createElement(N,{path:n})),a?v.default.createElement("div",{className:"opblock-summary-description"},g):null,l&&T?v.default.createElement("span",{className:"opblock-summary-operation-id"},T):null,S&&S.count()?v.default.createElement(I,{authActions:m,security:S,authSelectors:y}):null),v.default.createElement(R,{isOpened:z,animated:!0},v.default.createElement("div",{className:"opblock-body"},x&&v.default.createElement("h4",{className:"opblock-title_normal"}," Warning: Deprecated"),b&&v.default.createElement("div",{className:"opblock-description-wrapper"},v.default.createElement("div",{className:"opblock-description"},v.default.createElement(j,{source:b}))),w&&w.get("url")?v.default.createElement("div",{className:"opblock-external-docs-wrapper"},v.default.createElement("h4",{className:"opblock-title_normal"},"Find more details"),v.default.createElement("div",{className:"opblock-external-docs"},v.default.createElement("span",{className:"opblock-external-docs__description"},w.get("description")),v.default.createElement("a",{className:"opblock-external-docs__link",href:w.get("url")},w.get("url")))):null,v.default.createElement(M,{parameters:A,onChangeKey:q,onTryoutClick:this.onTryoutClick,onCancelClick:this.onCancelClick,tryItOutEnabled:L,allowTryItOut:c,fn:p,getComponent:f,specActions:h,specSelectors:d,pathMethod:[r,i]}),L&&c&&C&&C.size?v.default.createElement("div",{className:"opblock-schemes"},v.default.createElement(F,{schemes:C,path:r,method:i,specActions:h})):null,v.default.createElement("div",{className:L&&s&&c?"btn-group":"execute-wrapper"},L&&c?v.default.createElement(O,{getComponent:f,operation:o,specActions:h,specSelectors:d,path:r,method:i,onExecute:this.onExecute}):null,L&&s&&c?v.default.createElement(P,{onClick:this.onClearClick,specActions:h,path:r,method:i}):null),this.state.executeInProgress?v.default.createElement("div",{className:"loading-container"},v.default.createElement("div",{className:"loading"})):null,k?v.default.createElement(D,{responses:k,request:u,tryItOutResponse:s,getComponent:f,specSelectors:d,specActions:h,produces:E,producesValue:o.get("produces_value"),pathMethod:[r,i],fn:p}):null)))}}]),t}(v.default.Component);w.propTypes={path:m.PropTypes.string.isRequired,method:m.PropTypes.string.isRequired,operation:m.PropTypes.object.isRequired,showSummary:m.PropTypes.bool,isShownKey:x.arrayOrString.isRequired,jumpToKey:x.arrayOrString.isRequired,allowTryItOut:m.PropTypes.bool,displayOperationId:m.PropTypes.bool,response:m.PropTypes.object,request:m.PropTypes.object,getComponent:m.PropTypes.func.isRequired,authActions:m.PropTypes.object,authSelectors:m.PropTypes.object,specActions:m.PropTypes.object.isRequired,specSelectors:m.PropTypes.object.isRequired,layoutActions:m.PropTypes.object.isRequired,layoutSelectors:m.PropTypes.object.isRequired,fn:m.PropTypes.object.isRequired,getConfigs:m.PropTypes.func.isRequired},w.defaultProps={showSummary:!0,response:null,allowTryItOut:!0,displayOperationId:!1},t.default=w},function(e,t,n){e.exports=n(1028)},function(e,t,n){"use strict";function r(e,t,n){return!i(e.props,t)||!i(e.state,n)}var i=n(613);e.exports=r},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.objectWithFuncs=t.arrayOrString=void 0;var r=n(498),i=function(e,t){return r.PropTypes.shape(e.reduce(function(e,n){return e[n]=t,e},{}))};t.arrayOrString=r.PropTypes.oneOfType([r.PropTypes.arrayOf(r.PropTypes.string),r.PropTypes.string]),t.objectWithFuncs=function(e){return i(e,r.PropTypes.func.isRequired)}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var i=n(486),o=r(i),a=n(145),s=r(a),u=n(146),c=r(u),l=n(489),p=r(l),f=n(490),h=r(f),d=n(498),m=r(d),v=n(183),y=function(e){function t(){return(0,s.default)(this,t),(0,p.default)(this,(t.__proto__||(0,o.default)(t)).apply(this,arguments))}return(0,h.default)(t,e),(0,c.default)(t,[{key:"componentDidMount",value:function(){(0,v.highlight)(this.refs.el)}},{key:"componentDidUpdate",value:function(){(0,v.highlight)(this.refs.el)}},{key:"render",value:function(){var e=this.props,t=e.value,n=e.className;return n=n||"",m.default.createElement("pre",{ref:"el",className:n+" microlight"},t)}}]),t}(d.Component);y.propTypes={value:d.PropTypes.string.isRequired,className:d.PropTypes.string},t.default=y},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var i=n(184),o=r(i),a=n(486),s=r(a),u=n(145),c=r(u),l=n(146),p=r(l),f=n(489),h=r(f),d=n(490),m=r(d),v=n(498),y=r(v),g=n(168),_=n(183),b=function(e){function t(){var e,n,r,i;(0,c.default)(this,t);for(var o=arguments.length,a=Array(o),u=0;u1&&(_=w[1])}l=y.default.createElement("div",null,y.default.createElement("a",{href:m,download:_},"Download file"))}else l=y.default.createElement("pre",null,"Download headers detected but your browser does not support downloading binary via XHR (Blob).")}else l="string"==typeof t?y.default.createElement(u,{value:t}):y.default.createElement("div",null,"Unknown response type");return l?y.default.createElement("div",null,y.default.createElement("h5",null,"Response body"),l):null}}]),t}(y.default.Component);x.propTypes={content:v.PropTypes.any.isRequired,contentType:v.PropTypes.string.isRequired,getComponent:v.PropTypes.func.isRequired,headers:v.PropTypes.object,url:v.PropTypes.string},t.default=x},function(e,t,n){var r=n(203),i=r(function(e,t,n){return e+(n?" ":"")+t.toLowerCase()});e.exports=i},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var i=n(486),o=r(i),a=n(145),s=r(a),u=n(146),c=r(u),l=n(489),p=r(l),f=n(490),h=r(f),d=n(498),m=r(d),v=n(1015),y=r(v),g=n(168),_=r(g),b=function(e,t){return e.valueSeq().filter(_.default.Map.isMap).map(t)},x=function(e){function t(){var e,n,r,i;(0,s.default)(this,t);for(var a=arguments.length,u=Array(a),c=0;c=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}Object.defineProperty(t,"__esModule",{value:!0});var o=Object.assign||function(e){for(var t=1;t-1)return this.renderFixed();var m=this.renderStatic,v=this.state.height,y=parseFloat(v).toFixed(1);v>-1&&m&&(this.renderStatic=!1);var g=s.default.createElement(p.default,{onHeightReady:this.onHeightReady},a);if(m){var _=n?{height:"auto"}:{overflow:"hidden",height:0};return!n&&v>-1?l?s.default.createElement("div",o({style:o({height:0,overflow:"hidden"},r)},d),g):null:s.default.createElement("div",o({style:o({},_,r)},d),g)}return s.default.createElement(c.Motion,{defaultStyle:{height:Math.max(0,v)},onRest:f,style:{height:this.getMotionHeight(v)}},function(t){if(e.height=h(t.height),!n&&"0.0"===e.height)return l?s.default.createElement("div",o({style:o({height:0,overflow:"hidden"},r)},d),g):null;var i=n&&e.height===y?{height:"auto"}:{height:t.height,overflow:"hidden"};return s.default.createElement("div",o({style:o({},i,r)},d),g)})}});t.default=d},function(e,t,n){"use strict";var r=n(1028),i={shouldComponentUpdate:function(e,t){return r(this,e,t)}};e.exports=i},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e.default:e}t.__esModule=!0;var i=n(1044);t.Motion=r(i);var o=n(1052);t.StaggeredMotion=r(o);var a=n(1053);t.TransitionMotion=r(a);var s=n(1055);t.spring=r(s);var u=n(1056);t.presets=r(u);var c=n(1057);t.reorderKeys=r(c)},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var i=Object.assign||function(e){for(var t=1;t10*_&&(e.accumulatedTime=0),0===e.accumulatedTime)return e.animationID=null,void e.startAnimationIfNecessary();var i=(e.accumulatedTime-Math.floor(e.accumulatedTime/_)*_)/_,o=Math.floor(e.accumulatedTime/_),a={},s={},u={},c={};for(var p in t)if(t.hasOwnProperty(p)){var h=t[p];if("number"==typeof h)u[p]=h,c[p]=0,a[p]=h,s[p]=0;else{for(var d=e.state.lastIdealStyle[p],m=e.state.lastIdealVelocity[p],y=0;y10*b&&(e.accumulatedTime=0),0===e.accumulatedTime)return e.animationID=null,void e.startAnimationIfNecessary();for(var o=(e.accumulatedTime-Math.floor(e.accumulatedTime/b)*b)/b,a=Math.floor(e.accumulatedTime/b),s=[],u=[],c=[],l=[],f=0;f10*S&&(e.accumulatedTime=0),0===e.accumulatedTime)return e.animationID=null,void e.startAnimationIfNecessary();for(var u=(e.accumulatedTime-Math.floor(e.accumulatedTime/S)*S)/S,c=Math.floor(e.accumulatedTime/S),l=a(e.props.willEnter,e.props.willLeave,e.state.mergedPropsStyles,n,e.state.currentStyles,e.state.currentVelocities,e.state.lastIdealStyles,e.state.lastIdealVelocities),p=l[0],f=l[1],d=l[2],m=l[3],v=l[4],g=0;gr[l])return-1;if(i>o[l]&&ur[l])return 1;if(a>o[l]&&s=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}Object.defineProperty(t,"__esModule",{value:!0});var o=Object.assign||function(e){for(var t=1;tl,collapsedContent:_},x.default.createElement("span",{className:"brace-open object"},E),r?x.default.createElement(g,{name:n}):null,x.default.createElement("span",{className:"inner-object"},x.default.createElement("table",{className:"model",style:{marginLeft:"2em"}},x.default.createElement("tbody",null,f?x.default.createElement("tr",{style:{color:"#999",fontStyle:"italic"}},x.default.createElement("td",null,"description:"),x.default.createElement("td",null,x.default.createElement(y,{source:f}))):null,h&&h.size?h.entrySeq().map(function(e){var t=(0,s.default)(e,2),r=t[0],c=t[1],l=S.List.isList(v)&&v.contains(r),p={verticalAlign:"top",paddingRight:"0.2em"};return l&&(p.fontWeight="bold"),x.default.createElement("tr",{key:r},x.default.createElement("td",{style:p},r,":"),x.default.createElement("td",{style:{verticalAlign:"top"}},x.default.createElement(P,(0,o.default)({key:"object-"+n+"-"+r+"_"+c},u,{required:l,getComponent:i,schema:c,depth:a+1}))))}).toArray():null,d&&d.size?x.default.createElement("tr",null,x.default.createElement("td",null,"< * >:"),x.default.createElement("td",null,x.default.createElement(P,(0,o.default)({},u,{required:!1,getComponent:i,schema:d,depth:a+1})))):null))),x.default.createElement("span",{className:"brace-close"},C)))}}]),t}(b.Component);D.propTypes={schema:b.PropTypes.object.isRequired,getComponent:b.PropTypes.func.isRequired,specSelectors:b.PropTypes.object.isRequired,name:b.PropTypes.string,isRef:b.PropTypes.bool,expandDepth:b.PropTypes.number,depth:b.PropTypes.number};var M=function(e){function t(){return(0,h.default)(this,t),(0,y.default)(this,(t.__proto__||(0,p.default)(t)).apply(this,arguments))}return(0,_.default)(t,e),(0,m.default)(t,[{key:"render",value:function(){var e=this.props,t=e.schema,n=e.getComponent,r=e.required;if(!t||!t.get)return x.default.createElement("div",null);var i=t.get("type"),o=t.get("format"),a=t.get("xml"),u=t.get("enum"),c=t.get("description"),l=t.filter(function(e,t){return["enum","type","format","description","$$ref"].indexOf(t)===-1}),p=r?{fontWeight:"bold"}:{},f=n("Markdown");return x.default.createElement("span",{className:"prop"},x.default.createElement("span",{className:"prop-type",style:p},i)," ",r&&x.default.createElement("span",{style:{color:"red"}},"*"),o&&x.default.createElement("span",{className:"prop-format"},"($",o,")"),l.size?l.entrySeq().map(function(e){var t=(0,s.default)(e,2),n=t[0],r=t[1];return x.default.createElement("span",{key:n+"-"+r,style:A},x.default.createElement("br",null),n,": ",String(r))}):null,c?x.default.createElement(f,{source:c}):null,a&&a.size?x.default.createElement("span",null,x.default.createElement("br",null),x.default.createElement("span",{style:A},"xml:"),a.entrySeq().map(function(e){var t=(0,s.default)(e,2),n=t[0],r=t[1];return x.default.createElement("span",{key:n+"-"+r,style:A},x.default.createElement("br",null),"   ",n,": ",String(r))}).toArray()):null,u&&x.default.createElement(T,{value:u}))}}]),t}(b.Component);M.propTypes={schema:b.PropTypes.object.isRequired,getComponent:b.PropTypes.func.isRequired,required:b.PropTypes.bool};var O=function(e){function t(){return(0,h.default)(this,t),(0,y.default)(this,(t.__proto__||(0,p.default)(t)).apply(this,arguments))}return(0,_.default)(t,e),(0,m.default)(t,[{key:"render",value:function(){var e=this.props,t=e.required,n=e.schema,r=e.depth,i=e.expandDepth,a=n.get("items"),u=n.filter(function(e,t){return["type","items","$$ref"].indexOf(t)===-1});return x.default.createElement("span",{className:"model"},x.default.createElement("span",{className:"model-title"},x.default.createElement("span",{className:"model-title__text"},n.get("title"))),x.default.createElement(N,{collapsed:r>i,collapsedContent:"[...]"},"[",x.default.createElement("span",null,x.default.createElement(P,(0,o.default)({},this.props,{schema:a,required:!1}))),"]",u.size?x.default.createElement("span",null,u.entrySeq().map(function(e){var t=(0,s.default)(e,2),n=t[0],r=t[1];return x.default.createElement("span",{key:n+"-"+r,style:A},x.default.createElement("br",null),n+":",String(r))}),x.default.createElement("br",null)):null),t&&x.default.createElement("span",{style:{color:"red"}},"*"))}}]),t}(b.Component);O.propTypes={schema:b.PropTypes.object.isRequired,getComponent:b.PropTypes.func.isRequired,specSelectors:b.PropTypes.object.isRequired,name:b.PropTypes.string,required:b.PropTypes.bool,expandDepth:b.PropTypes.number,depth:b.PropTypes.number};var P=function(e){function t(){var e,n,r,i;(0,h.default)(this,t);for(var o=arguments.length,a=Array(o),s=0;s=55296&&e<=57343)&&(!(e>=64976&&e<=65007)&&(65535!==(65535&e)&&65534!==(65535&e)&&(!(e>=0&&e<=8)&&(11!==e&&(!(e>=14&&e<=31)&&(!(e>=127&&e<=159)&&!(e>1114111)))))))}function c(e){if(e>65535){e-=65536;var t=55296+(e>>10),n=56320+(1023&e);return String.fromCharCode(t,n)}return String.fromCharCode(e)}function l(e,t){var n=0;return o(g,t)?g[t]:35===t.charCodeAt(0)&&y.test(t)&&(n="x"===t[1].toLowerCase()?parseInt(t.slice(2),16):parseInt(t.slice(1),10),u(n))?c(n):e}function p(e){return e.indexOf("&")<0?e:e.replace(v,l)}function f(e){return x[e]}function h(e){return _.test(e)?e.replace(b,f):e}var d=Object.prototype.hasOwnProperty,m=/\\([\\!"#$%&'()*+,.\/:;<=>?@[\]^_`{|}~-])/g,v=/&([a-z#][a-z0-9]{1,31});/gi,y=/^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))/i,g=n(1082),_=/[&<>"]/,b=/[&<>"]/g,x={"&":"&","<":"<",">":">",'"':"""};t.assign=a,t.isString=i,t.has=o,t.unescapeMd=s,t.isValidEntityCode=u,t.fromCodePoint=c,t.replaceEntities=p,t.escapeHtml=h},function(e,t){"use strict";e.exports={Aacute:"Á",aacute:"á",Abreve:"Ă",abreve:"ă",ac:"∾",acd:"∿",acE:"∾̳",Acirc:"Â",acirc:"â",acute:"´",Acy:"А",acy:"а",AElig:"Æ",aelig:"æ",af:"⁡",Afr:"𝔄",afr:"𝔞",Agrave:"À",agrave:"à",alefsym:"ℵ",aleph:"ℵ",Alpha:"Α",alpha:"α",Amacr:"Ā",amacr:"ā",amalg:"⨿",AMP:"&",amp:"&",And:"⩓",and:"∧",andand:"⩕",andd:"⩜",andslope:"⩘",andv:"⩚",ang:"∠",ange:"⦤",angle:"∠",angmsd:"∡",angmsdaa:"⦨",angmsdab:"⦩",angmsdac:"⦪",angmsdad:"⦫",angmsdae:"⦬",angmsdaf:"⦭",angmsdag:"⦮",angmsdah:"⦯",angrt:"∟",angrtvb:"⊾",angrtvbd:"⦝",angsph:"∢",angst:"Å",angzarr:"⍼",Aogon:"Ą",aogon:"ą",Aopf:"𝔸",aopf:"𝕒",ap:"≈",apacir:"⩯",apE:"⩰",ape:"≊",apid:"≋",apos:"'",ApplyFunction:"⁡",approx:"≈",approxeq:"≊",Aring:"Å",aring:"å",Ascr:"𝒜",ascr:"𝒶",Assign:"≔",ast:"*",asymp:"≈",asympeq:"≍",Atilde:"Ã",atilde:"ã",Auml:"Ä",auml:"ä",awconint:"∳",awint:"⨑",backcong:"≌",backepsilon:"϶",backprime:"‵",backsim:"∽",backsimeq:"⋍",Backslash:"∖",Barv:"⫧",barvee:"⊽",Barwed:"⌆",barwed:"⌅",barwedge:"⌅",bbrk:"⎵",bbrktbrk:"⎶",bcong:"≌",Bcy:"Б",bcy:"б",bdquo:"„",becaus:"∵",Because:"∵",because:"∵",bemptyv:"⦰",bepsi:"϶",bernou:"ℬ",Bernoullis:"ℬ",Beta:"Β",beta:"β",beth:"ℶ",between:"≬",Bfr:"𝔅",bfr:"𝔟",bigcap:"⋂",bigcirc:"◯",bigcup:"⋃",bigodot:"⨀",bigoplus:"⨁",bigotimes:"⨂",bigsqcup:"⨆",bigstar:"★",bigtriangledown:"▽",bigtriangleup:"△",biguplus:"⨄",bigvee:"⋁",bigwedge:"⋀",bkarow:"⤍",blacklozenge:"⧫",blacksquare:"▪",blacktriangle:"▴",blacktriangledown:"▾",blacktriangleleft:"◂",blacktriangleright:"▸",blank:"␣",blk12:"▒",blk14:"░",blk34:"▓",block:"█",bne:"=⃥",bnequiv:"≡⃥",bNot:"⫭",bnot:"⌐",Bopf:"𝔹",bopf:"𝕓",bot:"⊥",bottom:"⊥",bowtie:"⋈",boxbox:"⧉",boxDL:"╗",boxDl:"╖",boxdL:"╕",boxdl:"┐",boxDR:"╔",boxDr:"╓",boxdR:"╒",boxdr:"┌",boxH:"═",boxh:"─",boxHD:"╦",boxHd:"╤",boxhD:"╥",boxhd:"┬",boxHU:"╩",boxHu:"╧",boxhU:"╨",boxhu:"┴",boxminus:"⊟",boxplus:"⊞",boxtimes:"⊠",boxUL:"╝",boxUl:"╜",boxuL:"╛",boxul:"┘",boxUR:"╚",boxUr:"╙",boxuR:"╘",boxur:"└",boxV:"║",boxv:"│",boxVH:"╬",boxVh:"╫",boxvH:"╪",boxvh:"┼",boxVL:"╣",boxVl:"╢",boxvL:"╡",boxvl:"┤",boxVR:"╠",boxVr:"╟",boxvR:"╞",boxvr:"├",bprime:"‵",Breve:"˘",breve:"˘",brvbar:"¦",Bscr:"ℬ",bscr:"𝒷",bsemi:"⁏",bsim:"∽",bsime:"⋍",bsol:"\\",bsolb:"⧅",bsolhsub:"⟈",bull:"•",bullet:"•",bump:"≎",bumpE:"⪮",bumpe:"≏",Bumpeq:"≎",bumpeq:"≏",Cacute:"Ć",cacute:"ć",Cap:"⋒",cap:"∩",capand:"⩄",capbrcup:"⩉",capcap:"⩋",capcup:"⩇",capdot:"⩀",CapitalDifferentialD:"ⅅ",caps:"∩︀",caret:"⁁",caron:"ˇ",Cayleys:"ℭ",ccaps:"⩍",Ccaron:"Č",ccaron:"č",Ccedil:"Ç",ccedil:"ç",Ccirc:"Ĉ",ccirc:"ĉ",Cconint:"∰",ccups:"⩌",ccupssm:"⩐",Cdot:"Ċ",cdot:"ċ",cedil:"¸",Cedilla:"¸",cemptyv:"⦲",cent:"¢",CenterDot:"·",centerdot:"·",Cfr:"ℭ",cfr:"𝔠",CHcy:"Ч",chcy:"ч",check:"✓",checkmark:"✓",Chi:"Χ",chi:"χ",cir:"○",circ:"ˆ",circeq:"≗",circlearrowleft:"↺",circlearrowright:"↻",circledast:"⊛",circledcirc:"⊚",circleddash:"⊝",CircleDot:"⊙",circledR:"®",circledS:"Ⓢ",CircleMinus:"⊖",CirclePlus:"⊕",CircleTimes:"⊗",cirE:"⧃",cire:"≗",cirfnint:"⨐",cirmid:"⫯",cirscir:"⧂",ClockwiseContourIntegral:"∲",CloseCurlyDoubleQuote:"”",CloseCurlyQuote:"’",clubs:"♣",clubsuit:"♣",Colon:"∷",colon:":",Colone:"⩴",colone:"≔",coloneq:"≔",comma:",",commat:"@",comp:"∁",compfn:"∘",complement:"∁",complexes:"ℂ",cong:"≅",congdot:"⩭",Congruent:"≡",Conint:"∯",conint:"∮",ContourIntegral:"∮",Copf:"ℂ",copf:"𝕔",coprod:"∐",Coproduct:"∐",COPY:"©",copy:"©",copysr:"℗",CounterClockwiseContourIntegral:"∳",crarr:"↵",Cross:"⨯",cross:"✗",Cscr:"𝒞",cscr:"𝒸",csub:"⫏",csube:"⫑",csup:"⫐",csupe:"⫒",ctdot:"⋯",cudarrl:"⤸",cudarrr:"⤵",cuepr:"⋞",cuesc:"⋟",cularr:"↶",cularrp:"⤽",Cup:"⋓",cup:"∪",cupbrcap:"⩈",CupCap:"≍",cupcap:"⩆",cupcup:"⩊",cupdot:"⊍",cupor:"⩅",cups:"∪︀",curarr:"↷",curarrm:"⤼",curlyeqprec:"⋞",curlyeqsucc:"⋟",curlyvee:"⋎",curlywedge:"⋏",curren:"¤",curvearrowleft:"↶",curvearrowright:"↷",cuvee:"⋎",cuwed:"⋏",cwconint:"∲",cwint:"∱",cylcty:"⌭",Dagger:"‡",dagger:"†",daleth:"ℸ",Darr:"↡",dArr:"⇓",darr:"↓",dash:"‐",Dashv:"⫤",dashv:"⊣",dbkarow:"⤏",dblac:"˝",Dcaron:"Ď",dcaron:"ď",Dcy:"Д",dcy:"д",DD:"ⅅ",dd:"ⅆ",ddagger:"‡",ddarr:"⇊",DDotrahd:"⤑",ddotseq:"⩷",deg:"°",Del:"∇",Delta:"Δ",delta:"δ",demptyv:"⦱",dfisht:"⥿",Dfr:"𝔇",dfr:"𝔡",dHar:"⥥",dharl:"⇃",dharr:"⇂",DiacriticalAcute:"´",DiacriticalDot:"˙",DiacriticalDoubleAcute:"˝",DiacriticalGrave:"`",DiacriticalTilde:"˜",diam:"⋄",Diamond:"⋄",diamond:"⋄",diamondsuit:"♦",diams:"♦",die:"¨",DifferentialD:"ⅆ",digamma:"ϝ",disin:"⋲",div:"÷",divide:"÷",divideontimes:"⋇",divonx:"⋇",DJcy:"Ђ",djcy:"ђ",dlcorn:"⌞",dlcrop:"⌍",dollar:"$",Dopf:"𝔻",dopf:"𝕕",Dot:"¨",dot:"˙",DotDot:"⃜",doteq:"≐",doteqdot:"≑",DotEqual:"≐",dotminus:"∸",dotplus:"∔",dotsquare:"⊡",doublebarwedge:"⌆",DoubleContourIntegral:"∯",DoubleDot:"¨",DoubleDownArrow:"⇓",DoubleLeftArrow:"⇐",DoubleLeftRightArrow:"⇔",DoubleLeftTee:"⫤",DoubleLongLeftArrow:"⟸",DoubleLongLeftRightArrow:"⟺",DoubleLongRightArrow:"⟹",DoubleRightArrow:"⇒",DoubleRightTee:"⊨",DoubleUpArrow:"⇑",DoubleUpDownArrow:"⇕",DoubleVerticalBar:"∥",DownArrow:"↓",Downarrow:"⇓",downarrow:"↓",DownArrowBar:"⤓",DownArrowUpArrow:"⇵",DownBreve:"̑",downdownarrows:"⇊",downharpoonleft:"⇃",downharpoonright:"⇂",DownLeftRightVector:"⥐",DownLeftTeeVector:"⥞",DownLeftVector:"↽",DownLeftVectorBar:"⥖",DownRightTeeVector:"⥟",DownRightVector:"⇁",DownRightVectorBar:"⥗",DownTee:"⊤",DownTeeArrow:"↧",drbkarow:"⤐",drcorn:"⌟",drcrop:"⌌",Dscr:"𝒟",dscr:"𝒹",DScy:"Ѕ",dscy:"ѕ",dsol:"⧶",Dstrok:"Đ",dstrok:"đ",dtdot:"⋱",dtri:"▿",dtrif:"▾",duarr:"⇵",duhar:"⥯",dwangle:"⦦",DZcy:"Џ",dzcy:"џ",dzigrarr:"⟿",Eacute:"É",eacute:"é",easter:"⩮",Ecaron:"Ě",ecaron:"ě",ecir:"≖",Ecirc:"Ê",ecirc:"ê",ecolon:"≕",Ecy:"Э",ecy:"э",eDDot:"⩷",Edot:"Ė",eDot:"≑",edot:"ė",ee:"ⅇ",efDot:"≒",Efr:"𝔈",efr:"𝔢",eg:"⪚",Egrave:"È",egrave:"è",egs:"⪖",egsdot:"⪘",el:"⪙",Element:"∈",elinters:"⏧",ell:"ℓ",els:"⪕",elsdot:"⪗",Emacr:"Ē",emacr:"ē",empty:"∅",emptyset:"∅",EmptySmallSquare:"◻",emptyv:"∅",EmptyVerySmallSquare:"▫",emsp:" ",emsp13:" ",emsp14:" ",ENG:"Ŋ",eng:"ŋ",ensp:" ",Eogon:"Ę",eogon:"ę",Eopf:"𝔼",eopf:"𝕖",epar:"⋕",eparsl:"⧣",eplus:"⩱",epsi:"ε",Epsilon:"Ε",epsilon:"ε",epsiv:"ϵ",eqcirc:"≖",eqcolon:"≕",eqsim:"≂",eqslantgtr:"⪖",eqslantless:"⪕",Equal:"⩵",equals:"=",EqualTilde:"≂",equest:"≟",Equilibrium:"⇌",equiv:"≡",equivDD:"⩸",eqvparsl:"⧥",erarr:"⥱",erDot:"≓",Escr:"ℰ",escr:"ℯ",esdot:"≐",Esim:"⩳",esim:"≂",Eta:"Η",eta:"η",ETH:"Ð",eth:"ð",Euml:"Ë",euml:"ë",euro:"€",excl:"!",exist:"∃",Exists:"∃",expectation:"ℰ",ExponentialE:"ⅇ",exponentiale:"ⅇ",fallingdotseq:"≒",Fcy:"Ф",fcy:"ф",female:"♀",ffilig:"ffi",fflig:"ff",ffllig:"ffl",Ffr:"𝔉",ffr:"𝔣",filig:"fi",FilledSmallSquare:"◼",FilledVerySmallSquare:"▪",fjlig:"fj",flat:"♭",fllig:"fl",fltns:"▱",fnof:"ƒ",Fopf:"𝔽",fopf:"𝕗",ForAll:"∀",forall:"∀",fork:"⋔",forkv:"⫙",Fouriertrf:"ℱ",fpartint:"⨍",frac12:"½",frac13:"⅓",frac14:"¼",frac15:"⅕",frac16:"⅙",frac18:"⅛",frac23:"⅔",frac25:"⅖",frac34:"¾",frac35:"⅗",frac38:"⅜",frac45:"⅘",frac56:"⅚",frac58:"⅝",frac78:"⅞",frasl:"⁄",frown:"⌢",Fscr:"ℱ",fscr:"𝒻",gacute:"ǵ",Gamma:"Γ",gamma:"γ",Gammad:"Ϝ",gammad:"ϝ",gap:"⪆",Gbreve:"Ğ",gbreve:"ğ",Gcedil:"Ģ",Gcirc:"Ĝ",gcirc:"ĝ",Gcy:"Г",gcy:"г",Gdot:"Ġ",gdot:"ġ",gE:"≧",ge:"≥",gEl:"⪌",gel:"⋛",geq:"≥",geqq:"≧",geqslant:"⩾",ges:"⩾",gescc:"⪩",gesdot:"⪀",gesdoto:"⪂",gesdotol:"⪄",gesl:"⋛︀",gesles:"⪔",Gfr:"𝔊",gfr:"𝔤",Gg:"⋙",gg:"≫",ggg:"⋙",gimel:"ℷ",GJcy:"Ѓ",gjcy:"ѓ",gl:"≷",gla:"⪥",glE:"⪒",glj:"⪤",gnap:"⪊",gnapprox:"⪊",gnE:"≩",gne:"⪈",gneq:"⪈",gneqq:"≩",gnsim:"⋧",Gopf:"𝔾",gopf:"𝕘",grave:"`",GreaterEqual:"≥",GreaterEqualLess:"⋛",GreaterFullEqual:"≧",GreaterGreater:"⪢",GreaterLess:"≷",GreaterSlantEqual:"⩾",GreaterTilde:"≳",Gscr:"𝒢",gscr:"ℊ",gsim:"≳",gsime:"⪎",gsiml:"⪐",GT:">",Gt:"≫",gt:">",gtcc:"⪧",gtcir:"⩺",gtdot:"⋗",gtlPar:"⦕",gtquest:"⩼",gtrapprox:"⪆",gtrarr:"⥸",gtrdot:"⋗",gtreqless:"⋛",gtreqqless:"⪌",gtrless:"≷",gtrsim:"≳",gvertneqq:"≩︀",gvnE:"≩︀",Hacek:"ˇ",hairsp:" ",half:"½",hamilt:"ℋ",HARDcy:"Ъ",hardcy:"ъ",hArr:"⇔",harr:"↔",harrcir:"⥈",harrw:"↭",Hat:"^",hbar:"ℏ",Hcirc:"Ĥ",hcirc:"ĥ",hearts:"♥",heartsuit:"♥",hellip:"…",hercon:"⊹",Hfr:"ℌ",hfr:"𝔥",HilbertSpace:"ℋ",hksearow:"⤥",hkswarow:"⤦",hoarr:"⇿",homtht:"∻",hookleftarrow:"↩",hookrightarrow:"↪",Hopf:"ℍ",hopf:"𝕙",horbar:"―",HorizontalLine:"─",Hscr:"ℋ",hscr:"𝒽",hslash:"ℏ",Hstrok:"Ħ",hstrok:"ħ",HumpDownHump:"≎",HumpEqual:"≏",hybull:"⁃",hyphen:"‐",Iacute:"Í",iacute:"í",ic:"⁣",Icirc:"Î",icirc:"î",Icy:"И",icy:"и",Idot:"İ",IEcy:"Е",iecy:"е",iexcl:"¡",iff:"⇔",Ifr:"ℑ",ifr:"𝔦",Igrave:"Ì",igrave:"ì",ii:"ⅈ",iiiint:"⨌",iiint:"∭",iinfin:"⧜",iiota:"℩",IJlig:"IJ",ijlig:"ij",Im:"ℑ",Imacr:"Ī",imacr:"ī",image:"ℑ",ImaginaryI:"ⅈ",imagline:"ℐ",imagpart:"ℑ",imath:"ı",imof:"⊷",imped:"Ƶ",Implies:"⇒",in:"∈",incare:"℅",infin:"∞",infintie:"⧝",inodot:"ı",Int:"∬",int:"∫",intcal:"⊺",integers:"ℤ",Integral:"∫",intercal:"⊺",Intersection:"⋂",intlarhk:"⨗",intprod:"⨼",InvisibleComma:"⁣",InvisibleTimes:"⁢",IOcy:"Ё",iocy:"ё",Iogon:"Į",iogon:"į",Iopf:"𝕀",iopf:"𝕚",Iota:"Ι",iota:"ι",iprod:"⨼",iquest:"¿",Iscr:"ℐ",iscr:"𝒾",isin:"∈",isindot:"⋵",isinE:"⋹",isins:"⋴",isinsv:"⋳",isinv:"∈",it:"⁢",Itilde:"Ĩ",itilde:"ĩ",Iukcy:"І",iukcy:"і",Iuml:"Ï",iuml:"ï",Jcirc:"Ĵ",jcirc:"ĵ",Jcy:"Й",jcy:"й",Jfr:"𝔍",jfr:"𝔧",jmath:"ȷ",Jopf:"𝕁",jopf:"𝕛",Jscr:"𝒥",jscr:"𝒿",Jsercy:"Ј",jsercy:"ј",Jukcy:"Є",jukcy:"є",Kappa:"Κ",kappa:"κ",kappav:"ϰ",Kcedil:"Ķ",kcedil:"ķ",Kcy:"К",kcy:"к",Kfr:"𝔎",kfr:"𝔨",kgreen:"ĸ",KHcy:"Х",khcy:"х",KJcy:"Ќ",kjcy:"ќ",Kopf:"𝕂",kopf:"𝕜",Kscr:"𝒦",kscr:"𝓀",lAarr:"⇚",Lacute:"Ĺ",lacute:"ĺ",laemptyv:"⦴",lagran:"ℒ",Lambda:"Λ",lambda:"λ",Lang:"⟪",lang:"⟨",langd:"⦑",langle:"⟨",lap:"⪅",Laplacetrf:"ℒ",laquo:"«",Larr:"↞",lArr:"⇐",larr:"←",larrb:"⇤",larrbfs:"⤟",larrfs:"⤝",larrhk:"↩",larrlp:"↫",larrpl:"⤹",larrsim:"⥳",larrtl:"↢",lat:"⪫",lAtail:"⤛",latail:"⤙",late:"⪭",lates:"⪭︀",lBarr:"⤎",lbarr:"⤌",lbbrk:"❲",lbrace:"{",lbrack:"[",lbrke:"⦋",lbrksld:"⦏",lbrkslu:"⦍",Lcaron:"Ľ",lcaron:"ľ",Lcedil:"Ļ",lcedil:"ļ",lceil:"⌈",lcub:"{",Lcy:"Л",lcy:"л",ldca:"⤶",ldquo:"“",ldquor:"„",ldrdhar:"⥧",ldrushar:"⥋",ldsh:"↲",lE:"≦",le:"≤",LeftAngleBracket:"⟨",LeftArrow:"←",Leftarrow:"⇐",leftarrow:"←",LeftArrowBar:"⇤",LeftArrowRightArrow:"⇆",leftarrowtail:"↢",LeftCeiling:"⌈",LeftDoubleBracket:"⟦",LeftDownTeeVector:"⥡",LeftDownVector:"⇃",LeftDownVectorBar:"⥙",LeftFloor:"⌊",leftharpoondown:"↽",leftharpoonup:"↼",leftleftarrows:"⇇",LeftRightArrow:"↔",Leftrightarrow:"⇔",leftrightarrow:"↔",leftrightarrows:"⇆",leftrightharpoons:"⇋",leftrightsquigarrow:"↭",LeftRightVector:"⥎",LeftTee:"⊣",LeftTeeArrow:"↤",LeftTeeVector:"⥚",leftthreetimes:"⋋",LeftTriangle:"⊲",LeftTriangleBar:"⧏",LeftTriangleEqual:"⊴",LeftUpDownVector:"⥑",LeftUpTeeVector:"⥠",LeftUpVector:"↿",LeftUpVectorBar:"⥘",LeftVector:"↼",LeftVectorBar:"⥒",lEg:"⪋",leg:"⋚",leq:"≤",leqq:"≦",leqslant:"⩽",les:"⩽",lescc:"⪨",lesdot:"⩿",lesdoto:"⪁",lesdotor:"⪃",lesg:"⋚︀",lesges:"⪓",lessapprox:"⪅",lessdot:"⋖",lesseqgtr:"⋚",lesseqqgtr:"⪋",LessEqualGreater:"⋚",LessFullEqual:"≦",LessGreater:"≶",lessgtr:"≶",LessLess:"⪡",lesssim:"≲",LessSlantEqual:"⩽",LessTilde:"≲",lfisht:"⥼",lfloor:"⌊",Lfr:"𝔏",lfr:"𝔩",lg:"≶",lgE:"⪑",lHar:"⥢",lhard:"↽",lharu:"↼",lharul:"⥪",lhblk:"▄",LJcy:"Љ",ljcy:"љ",Ll:"⋘",ll:"≪",llarr:"⇇",llcorner:"⌞",Lleftarrow:"⇚",llhard:"⥫",lltri:"◺",Lmidot:"Ŀ",lmidot:"ŀ",lmoust:"⎰",lmoustache:"⎰",lnap:"⪉",lnapprox:"⪉",lnE:"≨",lne:"⪇",lneq:"⪇",lneqq:"≨",lnsim:"⋦",loang:"⟬",loarr:"⇽",lobrk:"⟦",LongLeftArrow:"⟵",Longleftarrow:"⟸",longleftarrow:"⟵",LongLeftRightArrow:"⟷",Longleftrightarrow:"⟺",longleftrightarrow:"⟷",longmapsto:"⟼",LongRightArrow:"⟶",Longrightarrow:"⟹",longrightarrow:"⟶",looparrowleft:"↫",looparrowright:"↬",lopar:"⦅",Lopf:"𝕃",lopf:"𝕝",loplus:"⨭",lotimes:"⨴",lowast:"∗",lowbar:"_",LowerLeftArrow:"↙",LowerRightArrow:"↘",loz:"◊",lozenge:"◊",lozf:"⧫",lpar:"(",lparlt:"⦓",lrarr:"⇆",lrcorner:"⌟",lrhar:"⇋",lrhard:"⥭",lrm:"‎",lrtri:"⊿",lsaquo:"‹",Lscr:"ℒ",lscr:"𝓁",Lsh:"↰",lsh:"↰",lsim:"≲",lsime:"⪍",lsimg:"⪏",lsqb:"[",lsquo:"‘",lsquor:"‚",Lstrok:"Ł",lstrok:"ł",LT:"<",Lt:"≪",lt:"<",ltcc:"⪦",ltcir:"⩹",ltdot:"⋖",lthree:"⋋",ltimes:"⋉",ltlarr:"⥶",ltquest:"⩻",ltri:"◃",ltrie:"⊴",ltrif:"◂",ltrPar:"⦖",lurdshar:"⥊",luruhar:"⥦",lvertneqq:"≨︀",lvnE:"≨︀",macr:"¯",male:"♂",malt:"✠",maltese:"✠",Map:"⤅",map:"↦",mapsto:"↦",mapstodown:"↧",mapstoleft:"↤",mapstoup:"↥",marker:"▮",mcomma:"⨩",Mcy:"М",mcy:"м",mdash:"—",mDDot:"∺",measuredangle:"∡",MediumSpace:" ",Mellintrf:"ℳ",Mfr:"𝔐",mfr:"𝔪",mho:"℧",micro:"µ",mid:"∣",midast:"*",midcir:"⫰",middot:"·",minus:"−",minusb:"⊟",minusd:"∸",minusdu:"⨪",MinusPlus:"∓",mlcp:"⫛",mldr:"…",mnplus:"∓",models:"⊧",Mopf:"𝕄",mopf:"𝕞",mp:"∓",Mscr:"ℳ",mscr:"𝓂",mstpos:"∾",Mu:"Μ",mu:"μ",multimap:"⊸",mumap:"⊸",nabla:"∇",Nacute:"Ń",nacute:"ń",nang:"∠⃒",nap:"≉",napE:"⩰̸",napid:"≋̸",napos:"ʼn",napprox:"≉",natur:"♮",natural:"♮",naturals:"ℕ",nbsp:" ",nbump:"≎̸",nbumpe:"≏̸",ncap:"⩃",Ncaron:"Ň",ncaron:"ň",Ncedil:"Ņ",ncedil:"ņ",ncong:"≇",ncongdot:"⩭̸",ncup:"⩂",Ncy:"Н",ncy:"н",ndash:"–",ne:"≠",nearhk:"⤤",neArr:"⇗",nearr:"↗",nearrow:"↗",nedot:"≐̸",NegativeMediumSpace:"​",NegativeThickSpace:"​",NegativeThinSpace:"​",NegativeVeryThinSpace:"​",nequiv:"≢",nesear:"⤨",nesim:"≂̸",NestedGreaterGreater:"≫",NestedLessLess:"≪",NewLine:"\n",nexist:"∄",nexists:"∄",Nfr:"𝔑",nfr:"𝔫",ngE:"≧̸",nge:"≱",ngeq:"≱",ngeqq:"≧̸",ngeqslant:"⩾̸",nges:"⩾̸",nGg:"⋙̸",ngsim:"≵",nGt:"≫⃒",ngt:"≯",ngtr:"≯",nGtv:"≫̸",nhArr:"⇎",nharr:"↮",nhpar:"⫲",ni:"∋",nis:"⋼",nisd:"⋺",niv:"∋",NJcy:"Њ",njcy:"њ",nlArr:"⇍",nlarr:"↚",nldr:"‥",nlE:"≦̸",nle:"≰",nLeftarrow:"⇍",nleftarrow:"↚",nLeftrightarrow:"⇎",nleftrightarrow:"↮",nleq:"≰",nleqq:"≦̸",nleqslant:"⩽̸",nles:"⩽̸",nless:"≮",nLl:"⋘̸",nlsim:"≴",nLt:"≪⃒",nlt:"≮",nltri:"⋪",nltrie:"⋬",nLtv:"≪̸",nmid:"∤",NoBreak:"⁠",NonBreakingSpace:" ",Nopf:"ℕ",nopf:"𝕟",Not:"⫬",not:"¬",NotCongruent:"≢",NotCupCap:"≭",NotDoubleVerticalBar:"∦",NotElement:"∉",NotEqual:"≠",NotEqualTilde:"≂̸",NotExists:"∄",NotGreater:"≯",NotGreaterEqual:"≱",NotGreaterFullEqual:"≧̸",NotGreaterGreater:"≫̸",NotGreaterLess:"≹",NotGreaterSlantEqual:"⩾̸",NotGreaterTilde:"≵",NotHumpDownHump:"≎̸",NotHumpEqual:"≏̸",notin:"∉",notindot:"⋵̸",notinE:"⋹̸",notinva:"∉",notinvb:"⋷",notinvc:"⋶",NotLeftTriangle:"⋪",NotLeftTriangleBar:"⧏̸",NotLeftTriangleEqual:"⋬",NotLess:"≮",NotLessEqual:"≰",NotLessGreater:"≸",NotLessLess:"≪̸",NotLessSlantEqual:"⩽̸",NotLessTilde:"≴",NotNestedGreaterGreater:"⪢̸",NotNestedLessLess:"⪡̸",notni:"∌",notniva:"∌",notnivb:"⋾",notnivc:"⋽",NotPrecedes:"⊀",NotPrecedesEqual:"⪯̸",NotPrecedesSlantEqual:"⋠",NotReverseElement:"∌",NotRightTriangle:"⋫",NotRightTriangleBar:"⧐̸",NotRightTriangleEqual:"⋭",NotSquareSubset:"⊏̸",NotSquareSubsetEqual:"⋢",NotSquareSuperset:"⊐̸",NotSquareSupersetEqual:"⋣",NotSubset:"⊂⃒",NotSubsetEqual:"⊈",NotSucceeds:"⊁",NotSucceedsEqual:"⪰̸",NotSucceedsSlantEqual:"⋡",NotSucceedsTilde:"≿̸",NotSuperset:"⊃⃒",NotSupersetEqual:"⊉",NotTilde:"≁",NotTildeEqual:"≄",NotTildeFullEqual:"≇",NotTildeTilde:"≉",NotVerticalBar:"∤",npar:"∦",nparallel:"∦",nparsl:"⫽⃥",npart:"∂̸",npolint:"⨔",npr:"⊀",nprcue:"⋠",npre:"⪯̸",nprec:"⊀",npreceq:"⪯̸",nrArr:"⇏",nrarr:"↛",nrarrc:"⤳̸",nrarrw:"↝̸",nRightarrow:"⇏",nrightarrow:"↛",nrtri:"⋫",nrtrie:"⋭",nsc:"⊁",nsccue:"⋡",nsce:"⪰̸",Nscr:"𝒩",nscr:"𝓃",nshortmid:"∤",nshortparallel:"∦",nsim:"≁",nsime:"≄",nsimeq:"≄",nsmid:"∤",nspar:"∦",nsqsube:"⋢",nsqsupe:"⋣",nsub:"⊄",nsubE:"⫅̸",nsube:"⊈",nsubset:"⊂⃒",nsubseteq:"⊈",nsubseteqq:"⫅̸",nsucc:"⊁",nsucceq:"⪰̸",nsup:"⊅",nsupE:"⫆̸",nsupe:"⊉",nsupset:"⊃⃒",nsupseteq:"⊉",nsupseteqq:"⫆̸",ntgl:"≹",Ntilde:"Ñ",ntilde:"ñ",ntlg:"≸",ntriangleleft:"⋪",ntrianglelefteq:"⋬",ntriangleright:"⋫",ntrianglerighteq:"⋭",Nu:"Ν",nu:"ν",num:"#",numero:"№",numsp:" ",nvap:"≍⃒",nVDash:"⊯",nVdash:"⊮",nvDash:"⊭",nvdash:"⊬",nvge:"≥⃒",nvgt:">⃒",nvHarr:"⤄",nvinfin:"⧞",nvlArr:"⤂",nvle:"≤⃒",nvlt:"<⃒",nvltrie:"⊴⃒",nvrArr:"⤃",nvrtrie:"⊵⃒",nvsim:"∼⃒",nwarhk:"⤣",nwArr:"⇖",nwarr:"↖",nwarrow:"↖",nwnear:"⤧",Oacute:"Ó",oacute:"ó",oast:"⊛",ocir:"⊚",Ocirc:"Ô",ocirc:"ô",Ocy:"О",ocy:"о",odash:"⊝",Odblac:"Ő",odblac:"ő",odiv:"⨸",odot:"⊙",odsold:"⦼",OElig:"Œ",oelig:"œ",ofcir:"⦿",Ofr:"𝔒",ofr:"𝔬",ogon:"˛",Ograve:"Ò",ograve:"ò",ogt:"⧁",ohbar:"⦵",ohm:"Ω",oint:"∮",olarr:"↺",olcir:"⦾",olcross:"⦻",oline:"‾",olt:"⧀",Omacr:"Ō",omacr:"ō",Omega:"Ω",omega:"ω",Omicron:"Ο",omicron:"ο",omid:"⦶",ominus:"⊖",Oopf:"𝕆",oopf:"𝕠",opar:"⦷",OpenCurlyDoubleQuote:"“",OpenCurlyQuote:"‘",operp:"⦹",oplus:"⊕",Or:"⩔",or:"∨",orarr:"↻",ord:"⩝",order:"ℴ",orderof:"ℴ",ordf:"ª",ordm:"º",origof:"⊶",oror:"⩖",orslope:"⩗",orv:"⩛",oS:"Ⓢ",Oscr:"𝒪",oscr:"ℴ",Oslash:"Ø",oslash:"ø",osol:"⊘",Otilde:"Õ",otilde:"õ",Otimes:"⨷",otimes:"⊗",otimesas:"⨶",Ouml:"Ö",ouml:"ö",ovbar:"⌽",OverBar:"‾",OverBrace:"⏞",OverBracket:"⎴",OverParenthesis:"⏜",par:"∥",para:"¶",parallel:"∥",parsim:"⫳",parsl:"⫽",part:"∂",PartialD:"∂",Pcy:"П",pcy:"п",percnt:"%",period:".",permil:"‰",perp:"⊥",pertenk:"‱",Pfr:"𝔓",pfr:"𝔭",Phi:"Φ",phi:"φ",phiv:"ϕ",phmmat:"ℳ",phone:"☎",Pi:"Π",pi:"π",pitchfork:"⋔",piv:"ϖ",planck:"ℏ",planckh:"ℎ",plankv:"ℏ",plus:"+",plusacir:"⨣",plusb:"⊞",pluscir:"⨢",plusdo:"∔",plusdu:"⨥",pluse:"⩲",PlusMinus:"±",plusmn:"±",plussim:"⨦",plustwo:"⨧",pm:"±",Poincareplane:"ℌ",pointint:"⨕",Popf:"ℙ",popf:"𝕡",pound:"£",Pr:"⪻",pr:"≺",prap:"⪷",prcue:"≼",prE:"⪳",pre:"⪯",prec:"≺",precapprox:"⪷",preccurlyeq:"≼",Precedes:"≺",PrecedesEqual:"⪯",PrecedesSlantEqual:"≼",PrecedesTilde:"≾",preceq:"⪯",precnapprox:"⪹",precneqq:"⪵",precnsim:"⋨",precsim:"≾",Prime:"″",prime:"′",primes:"ℙ",prnap:"⪹",prnE:"⪵",prnsim:"⋨",prod:"∏",Product:"∏",profalar:"⌮",profline:"⌒",profsurf:"⌓",prop:"∝",Proportion:"∷",Proportional:"∝",propto:"∝",prsim:"≾",prurel:"⊰",Pscr:"𝒫",pscr:"𝓅",Psi:"Ψ",psi:"ψ",puncsp:" ",Qfr:"𝔔",qfr:"𝔮",qint:"⨌",Qopf:"ℚ",qopf:"𝕢",qprime:"⁗",Qscr:"𝒬",qscr:"𝓆",quaternions:"ℍ",quatint:"⨖",quest:"?",questeq:"≟",QUOT:'"',quot:'"',rAarr:"⇛",race:"∽̱",Racute:"Ŕ",racute:"ŕ",radic:"√",raemptyv:"⦳",Rang:"⟫",rang:"⟩",rangd:"⦒",range:"⦥",rangle:"⟩",raquo:"»",Rarr:"↠",rArr:"⇒",rarr:"→",rarrap:"⥵",rarrb:"⇥",rarrbfs:"⤠",rarrc:"⤳",rarrfs:"⤞",rarrhk:"↪",rarrlp:"↬",rarrpl:"⥅",rarrsim:"⥴",Rarrtl:"⤖",rarrtl:"↣",rarrw:"↝",rAtail:"⤜",ratail:"⤚",ratio:"∶",rationals:"ℚ",RBarr:"⤐",rBarr:"⤏",rbarr:"⤍",rbbrk:"❳",rbrace:"}",rbrack:"]",rbrke:"⦌",rbrksld:"⦎",rbrkslu:"⦐",Rcaron:"Ř",rcaron:"ř",Rcedil:"Ŗ",rcedil:"ŗ",rceil:"⌉",rcub:"}",Rcy:"Р",rcy:"р",rdca:"⤷",rdldhar:"⥩",rdquo:"”",rdquor:"”",rdsh:"↳",Re:"ℜ",real:"ℜ",realine:"ℛ",realpart:"ℜ",reals:"ℝ",rect:"▭",REG:"®",reg:"®",ReverseElement:"∋",ReverseEquilibrium:"⇋",ReverseUpEquilibrium:"⥯",rfisht:"⥽",rfloor:"⌋",Rfr:"ℜ",rfr:"𝔯",rHar:"⥤",rhard:"⇁",rharu:"⇀",rharul:"⥬",Rho:"Ρ",rho:"ρ",rhov:"ϱ",RightAngleBracket:"⟩",RightArrow:"→",Rightarrow:"⇒",rightarrow:"→",RightArrowBar:"⇥",RightArrowLeftArrow:"⇄",rightarrowtail:"↣",RightCeiling:"⌉",RightDoubleBracket:"⟧",RightDownTeeVector:"⥝",RightDownVector:"⇂",RightDownVectorBar:"⥕",RightFloor:"⌋",rightharpoondown:"⇁",rightharpoonup:"⇀",rightleftarrows:"⇄",rightleftharpoons:"⇌",rightrightarrows:"⇉",rightsquigarrow:"↝",RightTee:"⊢",RightTeeArrow:"↦",RightTeeVector:"⥛",rightthreetimes:"⋌",RightTriangle:"⊳",RightTriangleBar:"⧐",RightTriangleEqual:"⊵",RightUpDownVector:"⥏",RightUpTeeVector:"⥜",RightUpVector:"↾",RightUpVectorBar:"⥔",RightVector:"⇀",RightVectorBar:"⥓",ring:"˚",risingdotseq:"≓",rlarr:"⇄",rlhar:"⇌",rlm:"‏",rmoust:"⎱",rmoustache:"⎱",rnmid:"⫮",roang:"⟭",roarr:"⇾",robrk:"⟧",ropar:"⦆",Ropf:"ℝ",ropf:"𝕣",roplus:"⨮",rotimes:"⨵",RoundImplies:"⥰",rpar:")",rpargt:"⦔",rppolint:"⨒",rrarr:"⇉",Rrightarrow:"⇛",rsaquo:"›",Rscr:"ℛ",rscr:"𝓇",Rsh:"↱",rsh:"↱",rsqb:"]",rsquo:"’",rsquor:"’",rthree:"⋌",rtimes:"⋊",rtri:"▹",rtrie:"⊵",rtrif:"▸",rtriltri:"⧎",RuleDelayed:"⧴",ruluhar:"⥨",rx:"℞",Sacute:"Ś",sacute:"ś",sbquo:"‚",Sc:"⪼",sc:"≻",scap:"⪸",Scaron:"Š",scaron:"š",sccue:"≽",scE:"⪴",sce:"⪰",Scedil:"Ş",scedil:"ş",Scirc:"Ŝ",scirc:"ŝ",scnap:"⪺",scnE:"⪶",scnsim:"⋩",scpolint:"⨓",scsim:"≿",Scy:"С",scy:"с",sdot:"⋅",sdotb:"⊡",sdote:"⩦",searhk:"⤥",seArr:"⇘",searr:"↘",searrow:"↘",sect:"§",semi:";",seswar:"⤩",setminus:"∖",setmn:"∖",sext:"✶",Sfr:"𝔖",sfr:"𝔰",sfrown:"⌢",sharp:"♯",SHCHcy:"Щ",shchcy:"щ",SHcy:"Ш",shcy:"ш",ShortDownArrow:"↓",ShortLeftArrow:"←",shortmid:"∣",shortparallel:"∥",ShortRightArrow:"→",ShortUpArrow:"↑",shy:"­",Sigma:"Σ",sigma:"σ",sigmaf:"ς",sigmav:"ς",sim:"∼",simdot:"⩪",sime:"≃",simeq:"≃",simg:"⪞",simgE:"⪠",siml:"⪝",simlE:"⪟",simne:"≆",simplus:"⨤",simrarr:"⥲",slarr:"←",SmallCircle:"∘",smallsetminus:"∖",smashp:"⨳",smeparsl:"⧤",smid:"∣",smile:"⌣",smt:"⪪",smte:"⪬",smtes:"⪬︀",SOFTcy:"Ь",softcy:"ь",sol:"/",solb:"⧄",solbar:"⌿",Sopf:"𝕊",sopf:"𝕤",spades:"♠",spadesuit:"♠",spar:"∥",sqcap:"⊓",sqcaps:"⊓︀",sqcup:"⊔",sqcups:"⊔︀",Sqrt:"√",sqsub:"⊏",sqsube:"⊑",sqsubset:"⊏",sqsubseteq:"⊑",sqsup:"⊐",sqsupe:"⊒",sqsupset:"⊐",sqsupseteq:"⊒",squ:"□",Square:"□",square:"□",SquareIntersection:"⊓",SquareSubset:"⊏",SquareSubsetEqual:"⊑",SquareSuperset:"⊐",SquareSupersetEqual:"⊒",SquareUnion:"⊔",squarf:"▪",squf:"▪",srarr:"→",Sscr:"𝒮",sscr:"𝓈",ssetmn:"∖",ssmile:"⌣",sstarf:"⋆",Star:"⋆",star:"☆",starf:"★",straightepsilon:"ϵ",straightphi:"ϕ",strns:"¯",Sub:"⋐",sub:"⊂",subdot:"⪽",subE:"⫅",sube:"⊆",subedot:"⫃",submult:"⫁",subnE:"⫋",subne:"⊊",subplus:"⪿",subrarr:"⥹",Subset:"⋐",subset:"⊂",subseteq:"⊆",subseteqq:"⫅",SubsetEqual:"⊆",subsetneq:"⊊",subsetneqq:"⫋",subsim:"⫇",subsub:"⫕",subsup:"⫓",succ:"≻",succapprox:"⪸",succcurlyeq:"≽",Succeeds:"≻",SucceedsEqual:"⪰",SucceedsSlantEqual:"≽",SucceedsTilde:"≿",succeq:"⪰",succnapprox:"⪺",succneqq:"⪶",succnsim:"⋩",succsim:"≿",SuchThat:"∋",Sum:"∑",sum:"∑",sung:"♪",Sup:"⋑",sup:"⊃",sup1:"¹",sup2:"²",sup3:"³",supdot:"⪾",supdsub:"⫘",supE:"⫆",supe:"⊇",supedot:"⫄",Superset:"⊃",SupersetEqual:"⊇",suphsol:"⟉",suphsub:"⫗",suplarr:"⥻",supmult:"⫂",supnE:"⫌",supne:"⊋",supplus:"⫀",Supset:"⋑",supset:"⊃",supseteq:"⊇",supseteqq:"⫆",supsetneq:"⊋",supsetneqq:"⫌",supsim:"⫈",supsub:"⫔",supsup:"⫖",swarhk:"⤦",swArr:"⇙",swarr:"↙",swarrow:"↙",swnwar:"⤪",szlig:"ß",Tab:"\t",target:"⌖",Tau:"Τ",tau:"τ",tbrk:"⎴",Tcaron:"Ť",tcaron:"ť",Tcedil:"Ţ",tcedil:"ţ",Tcy:"Т",tcy:"т",tdot:"⃛",telrec:"⌕",Tfr:"𝔗",tfr:"𝔱",there4:"∴",Therefore:"∴",therefore:"∴",Theta:"Θ",theta:"θ",thetasym:"ϑ",thetav:"ϑ",thickapprox:"≈",thicksim:"∼",ThickSpace:"  ",thinsp:" ",ThinSpace:" ",thkap:"≈",thksim:"∼",THORN:"Þ",thorn:"þ",Tilde:"∼",tilde:"˜",TildeEqual:"≃",TildeFullEqual:"≅",TildeTilde:"≈",times:"×",timesb:"⊠",timesbar:"⨱",timesd:"⨰",tint:"∭",toea:"⤨",top:"⊤",topbot:"⌶",topcir:"⫱",Topf:"𝕋",topf:"𝕥",topfork:"⫚",tosa:"⤩",tprime:"‴",TRADE:"™",trade:"™",triangle:"▵",triangledown:"▿",triangleleft:"◃",trianglelefteq:"⊴",triangleq:"≜",triangleright:"▹",trianglerighteq:"⊵",tridot:"◬",trie:"≜",triminus:"⨺",TripleDot:"⃛",triplus:"⨹",trisb:"⧍",tritime:"⨻",trpezium:"⏢",Tscr:"𝒯",tscr:"𝓉",TScy:"Ц",tscy:"ц",TSHcy:"Ћ",tshcy:"ћ",Tstrok:"Ŧ",tstrok:"ŧ",twixt:"≬",twoheadleftarrow:"↞",twoheadrightarrow:"↠",Uacute:"Ú",uacute:"ú",Uarr:"↟",uArr:"⇑",uarr:"↑",Uarrocir:"⥉",Ubrcy:"Ў",ubrcy:"ў",Ubreve:"Ŭ",ubreve:"ŭ",Ucirc:"Û",ucirc:"û",Ucy:"У",ucy:"у",udarr:"⇅",Udblac:"Ű",udblac:"ű",udhar:"⥮",ufisht:"⥾",Ufr:"𝔘",ufr:"𝔲",Ugrave:"Ù",ugrave:"ù",uHar:"⥣",uharl:"↿",uharr:"↾",uhblk:"▀",ulcorn:"⌜",ulcorner:"⌜",ulcrop:"⌏",ultri:"◸",Umacr:"Ū",umacr:"ū",uml:"¨",UnderBar:"_",UnderBrace:"⏟",UnderBracket:"⎵",UnderParenthesis:"⏝",Union:"⋃",UnionPlus:"⊎",Uogon:"Ų",uogon:"ų",Uopf:"𝕌",uopf:"𝕦",UpArrow:"↑",Uparrow:"⇑",uparrow:"↑",UpArrowBar:"⤒",UpArrowDownArrow:"⇅",UpDownArrow:"↕",Updownarrow:"⇕",updownarrow:"↕",UpEquilibrium:"⥮",upharpoonleft:"↿",upharpoonright:"↾",uplus:"⊎",UpperLeftArrow:"↖",UpperRightArrow:"↗",Upsi:"ϒ",upsi:"υ",upsih:"ϒ",Upsilon:"Υ",upsilon:"υ",UpTee:"⊥",UpTeeArrow:"↥",upuparrows:"⇈",urcorn:"⌝",urcorner:"⌝",urcrop:"⌎",Uring:"Ů",uring:"ů",urtri:"◹",Uscr:"𝒰",uscr:"𝓊",utdot:"⋰",Utilde:"Ũ",utilde:"ũ",utri:"▵",utrif:"▴",uuarr:"⇈",Uuml:"Ü",uuml:"ü",uwangle:"⦧",vangrt:"⦜",varepsilon:"ϵ",varkappa:"ϰ",varnothing:"∅", +varphi:"ϕ",varpi:"ϖ",varpropto:"∝",vArr:"⇕",varr:"↕",varrho:"ϱ",varsigma:"ς",varsubsetneq:"⊊︀",varsubsetneqq:"⫋︀",varsupsetneq:"⊋︀",varsupsetneqq:"⫌︀",vartheta:"ϑ",vartriangleleft:"⊲",vartriangleright:"⊳",Vbar:"⫫",vBar:"⫨",vBarv:"⫩",Vcy:"В",vcy:"в",VDash:"⊫",Vdash:"⊩",vDash:"⊨",vdash:"⊢",Vdashl:"⫦",Vee:"⋁",vee:"∨",veebar:"⊻",veeeq:"≚",vellip:"⋮",Verbar:"‖",verbar:"|",Vert:"‖",vert:"|",VerticalBar:"∣",VerticalLine:"|",VerticalSeparator:"❘",VerticalTilde:"≀",VeryThinSpace:" ",Vfr:"𝔙",vfr:"𝔳",vltri:"⊲",vnsub:"⊂⃒",vnsup:"⊃⃒",Vopf:"𝕍",vopf:"𝕧",vprop:"∝",vrtri:"⊳",Vscr:"𝒱",vscr:"𝓋",vsubnE:"⫋︀",vsubne:"⊊︀",vsupnE:"⫌︀",vsupne:"⊋︀",Vvdash:"⊪",vzigzag:"⦚",Wcirc:"Ŵ",wcirc:"ŵ",wedbar:"⩟",Wedge:"⋀",wedge:"∧",wedgeq:"≙",weierp:"℘",Wfr:"𝔚",wfr:"𝔴",Wopf:"𝕎",wopf:"𝕨",wp:"℘",wr:"≀",wreath:"≀",Wscr:"𝒲",wscr:"𝓌",xcap:"⋂",xcirc:"◯",xcup:"⋃",xdtri:"▽",Xfr:"𝔛",xfr:"𝔵",xhArr:"⟺",xharr:"⟷",Xi:"Ξ",xi:"ξ",xlArr:"⟸",xlarr:"⟵",xmap:"⟼",xnis:"⋻",xodot:"⨀",Xopf:"𝕏",xopf:"𝕩",xoplus:"⨁",xotime:"⨂",xrArr:"⟹",xrarr:"⟶",Xscr:"𝒳",xscr:"𝓍",xsqcup:"⨆",xuplus:"⨄",xutri:"△",xvee:"⋁",xwedge:"⋀",Yacute:"Ý",yacute:"ý",YAcy:"Я",yacy:"я",Ycirc:"Ŷ",ycirc:"ŷ",Ycy:"Ы",ycy:"ы",yen:"¥",Yfr:"𝔜",yfr:"𝔶",YIcy:"Ї",yicy:"ї",Yopf:"𝕐",yopf:"𝕪",Yscr:"𝒴",yscr:"𝓎",YUcy:"Ю",yucy:"ю",Yuml:"Ÿ",yuml:"ÿ",Zacute:"Ź",zacute:"ź",Zcaron:"Ž",zcaron:"ž",Zcy:"З",zcy:"з",Zdot:"Ż",zdot:"ż",zeetrf:"ℨ",ZeroWidthSpace:"​",Zeta:"Ζ",zeta:"ζ",Zfr:"ℨ",zfr:"𝔷",ZHcy:"Ж",zhcy:"ж",zigrarr:"⇝",Zopf:"ℤ",zopf:"𝕫",Zscr:"𝒵",zscr:"𝓏",zwj:"‍",zwnj:"‌"}},function(e,t,n){"use strict";function r(){this.rules=i.assign({},o),this.getBreak=o.getBreak}var i=n(1081),o=n(1084);e.exports=r,r.prototype.renderInline=function(e,t,n){for(var r=this.rules,i=e.length,o=0,a="";i--;)a+=r[e[o].type](e,o++,t,n,this);return a},r.prototype.render=function(e,t,n){for(var r=this.rules,i=e.length,o=-1,a="";++o=e.length-2?t:"paragraph_open"===e[t].type&&e[t].tight&&"inline"===e[t+1].type&&0===e[t+1].content.length&&"paragraph_close"===e[t+2].type&&e[t+2].tight?r(e,t+2):t}var i=n(1081).has,o=n(1081).unescapeMd,a=n(1081).replaceEntities,s=n(1081).escapeHtml,u={};u.blockquote_open=function(){return"
                \n"},u.blockquote_close=function(e,t){return"
                "+c(e,t)},u.code=function(e,t){return e[t].block?"
                "+s(e[t].content)+"
                "+c(e,t):""+s(e[t].content)+""},u.fence=function(e,t,n,r,u){var l,p,f,h=e[t],d="",m=n.langPrefix,v="";if(h.params){if(l=h.params.split(/\s+/g),p=l.join(" "),i(u.rules.fence_custom,l[0]))return u.rules.fence_custom[l[0]](e,t,n,r,u);v=s(a(o(p))),d=' class="'+m+v+'"'}return f=n.highlight?n.highlight.apply(n.highlight,[h.content].concat(l))||s(h.content):s(h.content),"
                "+f+"
                "+c(e,t)},u.fence_custom={},u.heading_open=function(e,t){return""},u.heading_close=function(e,t){return"\n"},u.hr=function(e,t,n){return(n.xhtmlOut?"
                ":"
                ")+c(e,t)},u.bullet_list_open=function(){return"
                  \n"},u.bullet_list_close=function(e,t){return"
                "+c(e,t)},u.list_item_open=function(){return"
              • "},u.list_item_close=function(){return"
              • \n"},u.ordered_list_open=function(e,t){var n=e[t],r=n.order>1?' start="'+n.order+'"':"";return"\n"},u.ordered_list_close=function(e,t){return""+c(e,t)},u.paragraph_open=function(e,t){return e[t].tight?"":"

                "},u.paragraph_close=function(e,t){var n=!(e[t].tight&&t&&"inline"===e[t-1].type&&!e[t-1].content);return(e[t].tight?"":"

                ")+(n?c(e,t):"")},u.link_open=function(e,t,n){var r=e[t].title?' title="'+s(a(e[t].title))+'"':"",i=n.linkTarget?' target="'+n.linkTarget+'"':"";return'"},u.link_close=function(){return""},u.image=function(e,t,n){var r=' src="'+s(e[t].src)+'"',i=e[t].title?' title="'+s(a(e[t].title))+'"':"",u=' alt="'+(e[t].alt?s(a(o(e[t].alt))):"")+'"',c=n.xhtmlOut?" /":"";return""},u.table_open=function(){return"\n"},u.table_close=function(){return"
                \n"},u.thead_open=function(){return"\n"},u.thead_close=function(){return"\n"},u.tbody_open=function(){return"\n"},u.tbody_close=function(){return"\n"},u.tr_open=function(){return""},u.tr_close=function(){return"\n"},u.th_open=function(e,t){var n=e[t];return""},u.th_close=function(){return""},u.td_open=function(e,t){var n=e[t];return""},u.td_close=function(){return""},u.strong_open=function(){return""},u.strong_close=function(){return""},u.em_open=function(){return""},u.em_close=function(){return""},u.del_open=function(){return""},u.del_close=function(){return""},u.ins_open=function(){return""},u.ins_close=function(){return""},u.mark_open=function(){return""},u.mark_close=function(){return""},u.sub=function(e,t){return""+s(e[t].content)+""},u.sup=function(e,t){return""+s(e[t].content)+""},u.hardbreak=function(e,t,n){return n.xhtmlOut?"
                \n":"
                \n"},u.softbreak=function(e,t,n){return n.breaks?n.xhtmlOut?"
                \n":"
                \n":"\n"},u.text=function(e,t){return s(e[t].content)},u.htmlblock=function(e,t){return e[t].content},u.htmltag=function(e,t){return e[t].content},u.abbr_open=function(e,t){return''},u.abbr_close=function(){return""},u.footnote_ref=function(e,t){var n=Number(e[t].id+1).toString(),r="fnref"+n;return e[t].subId>0&&(r+=":"+e[t].subId),'['+n+"]"},u.footnote_block_open=function(e,t,n){var r=n.xhtmlOut?'
                \n':'
                \n';return r+'
                \n
                  \n'},u.footnote_block_close=function(){return"
                \n
                \n"},u.footnote_open=function(e,t){var n=Number(e[t].id+1).toString();return'
              • '},u.footnote_close=function(){return"
              • \n"},u.footnote_anchor=function(e,t){var n=Number(e[t].id+1).toString(),r="fnref"+n;return e[t].subId>0&&(r+=":"+e[t].subId),' '},u.dl_open=function(){return"
                \n"},u.dt_open=function(){return"
                "},u.dd_open=function(){return"
                "},u.dl_close=function(){return"
                \n"},u.dt_close=function(){return"\n"},u.dd_close=function(){return"\n"};var c=u.getBreak=function(e,t){return t=r(e,t),t8&&n<14);)if(92===n&&t+11))break;if(41===n&&(o--,o<0))break;t++}return s!==t&&(a=i(e.src.slice(s,t)),!!e.parser.validateLink(a)&&(e.linkContent=a,e.pos=t,!0))}},function(e,t,n){"use strict";var r=n(1081).replaceEntities;e.exports=function(e){var t=r(e);try{t=decodeURI(t)}catch(e){}return encodeURI(t)}},function(e,t,n){"use strict";var r=n(1081).unescapeMd;e.exports=function(e,t){var n,i=t,o=e.posMax,a=e.src.charCodeAt(t);if(34!==a&&39!==a&&40!==a)return!1;for(t++,40===a&&(a=41);t0?a[t].count:1,r=0;r=0;t--)if(s=a[t],"text"===s.type){for(l=0,u=s.content,f.lastIndex=0,p=s.level,c=[];h=f.exec(u);)f.lastIndex>l&&c.push({type:"text",content:u.slice(l,h.index+h[1].length),level:p}),c.push({type:"abbr_open",title:e.env.abbreviations[":"+h[2]],level:p++}),c.push({type:"text",content:h[2],level:p}),c.push({type:"abbr_close",level:--p}),l=f.lastIndex-h[3].length;c.length&&(l=0;s--)if("inline"===e.tokens[s].type)for(a=e.tokens[s].children,t=a.length-1;t>=0;t--)i=a[t],"text"===i.type&&(o=i.content,o=n(o),r.test(o)&&(o=o.replace(/\+-/g,"±").replace(/\.{2,}/g,"…").replace(/([?!])…/g,"$1..").replace(/([?!]){4,}/g,"$1$1$1").replace(/,{2,}/g,",").replace(/(^|[^-])---([^-]|$)/gm,"$1—$2").replace(/(^|\s)--(\s|$)/gm,"$1–$2").replace(/(^|[^-\s])--([^-\s]|$)/gm,"$1–$2")),i.content=o)}},function(e,t){"use strict";function n(e,t){return!(t<0||t>=e.length)&&!a.test(e[t])}function r(e,t,n){return e.substr(0,t)+n+e.substr(t+1)}var i=/['"]/,o=/['"]/g,a=/[-\s()\[\]]/,s="’";e.exports=function(e){var t,a,u,c,l,p,f,h,d,m,v,y,g,_,b,x,w;if(e.options.typographer)for(w=[],b=e.tokens.length-1;b>=0;b--)if("inline"===e.tokens[b].type)for(x=e.tokens[b].children,w.length=0,t=0;t=0&&!(w[g].level<=f);g--);w.length=g+1,u=a.content,l=0,p=u.length;e:for(;l=0&&(m=w[g],!(w[g].level\s]/i.test(e)}function i(e){return/^<\/a\s*>/i.test(e)}function o(){var e=[],t=new a({stripPrefix:!1,url:!0,email:!0,twitter:!1,replaceFn:function(t,n){switch(n.getType()){case"url":e.push({text:n.matchedText,url:n.getUrl()});break;case"email":e.push({text:n.matchedText,url:"mailto:"+n.getEmail().replace(/^mailto:/i,"")})}return!1}});return{links:e,autolinker:t}}var a=n(1102),s=/www|@|\:\/\//;e.exports=function(e){var t,n,a,u,c,l,p,f,h,d,m,v,y,g=e.tokens,_=null;if(e.options.linkify)for(n=0,a=g.length;n=0;t--)if(c=u[t],"link_close"!==c.type){if("htmltag"===c.type&&(r(c.content)&&m>0&&m--,i(c.content)&&m++),!(m>0)&&"text"===c.type&&s.test(c.content)){if(_||(_=o(),v=_.links,y=_.autolinker),l=c.content,v.length=0,y.link(l),!v.length)continue;for(p=[],d=c.level,f=0;f + * MIT Licensed. http://www.opensource.org/licenses/mit-license.php + * + * https://github.com/gregjacobs/Autolinker.js + */ +var e=function(t){e.Util.assign(this,t)};return e.prototype={constructor:e,urls:!0,email:!0,twitter:!0,newWindow:!0,stripPrefix:!0,truncate:void 0,className:"",htmlParser:void 0,matchParser:void 0,tagBuilder:void 0,link:function(e){for(var t=this.getHtmlParser(),n=t.parse(e),r=0,i=[],o=0,a=n.length;ot&&(n=null==n?"..":n,e=e.substring(0,t-n.length)+n),e},indexOf:function(e,t){if(Array.prototype.indexOf)return e.indexOf(t);for(var n=0,r=e.length;n",this.getInnerHtml(),""].join("")},buildAttrsStr:function(){if(!this.attrs)return"";var e=this.getAttrs(),t=[];for(var n in e)e.hasOwnProperty(n)&&t.push(n+'="'+e[n]+'"');return t.join(" ")}}),e.AnchorTagBuilder=e.Util.extend(Object,{constructor:function(t){e.Util.assign(this,t)},build:function(t){var n=new e.HtmlTag({tagName:"a",attrs:this.createAttrs(t.getType(),t.getAnchorHref()),innerHtml:this.processAnchorText(t.getAnchorText())});return n},createAttrs:function(e,t){var n={href:t},r=this.createCssClass(e);return r&&(n.class=r),this.newWindow&&(n.target="_blank"),n},createCssClass:function(e){var t=this.className;return t?t+" "+t+"-"+e:""},processAnchorText:function(e){return e=this.doTruncate(e)},doTruncate:function(t){return e.Util.ellipsis(t,this.truncate||Number.POSITIVE_INFINITY)}}),e.htmlParser.HtmlParser=e.Util.extend(Object,{htmlRegex:function(){var e=/[0-9a-zA-Z][0-9a-zA-Z:]*/,t=/[^\s\0"'>\/=\x01-\x1F\x7F]+/,n=/(?:"[^"]*?"|'[^']*?'|[^'"=<>`\s]+)/,r=t.source+"(?:\\s*=\\s*"+n.source+")?";return new RegExp(["(?:","<(!DOCTYPE)","(?:","\\s+","(?:",r,"|",n.source+")",")*",">",")","|","(?:","<(/)?","("+e.source+")","(?:","\\s+",r,")*","\\s*/?",">",")"].join(""),"gi")}(),htmlCharacterEntitiesRegex:/( | |<|<|>|>|"|"|')/gi,parse:function(e){for(var t,n,r=this.htmlRegex,i=0,o=[];null!==(t=r.exec(e));){var a=t[0],s=t[1]||t[3],u=!!t[2],c=e.substring(i,t.index);c&&(n=this.parseTextAndEntityNodes(c),o.push.apply(o,n)),o.push(this.createElementNode(a,s,u)),i=t.index+a.length}if(i=n))&&!(e.tShift[s]=0&&(e=e.replace(s,function(t,n){var r;return 10===e.charCodeAt(n)?(a=n+1,l=0,t):(r=" ".slice((n-a-l)%4),l=n-a+1,r)})),i=new o(e,this,t,n,r),void this.tokenize(i,i.line,i.lineMax)):[]},e.exports=r},function(e,t){"use strict";function n(e,t,n,r,i){var o,a,s,u,c,l,p;for(this.src=e,this.parser=t,this.options=n,this.env=r,this.tokens=i,this.bMarks=[],this.eMarks=[],this.tShift=[],this.blkIndent=0,this.line=0,this.lineMax=0,this.tight=!1,this.parentType="root",this.ddIndent=-1,this.level=0,this.result="",a=this.src,l=0,p=!1,s=u=l=0,c=a.length;u=this.eMarks[e]},n.prototype.skipEmptyLines=function(e){for(var t=this.lineMax;en;)if(t!==this.src.charCodeAt(--e))return e+1;return e},n.prototype.getLines=function(e,t,n,r){var i,o,a,s,u,c=e;if(e>=t)return"";if(c+1===t)return o=this.bMarks[c]+Math.min(this.tShift[c],n),a=r?this.eMarks[c]+1:this.eMarks[c],this.src.slice(o,a);for(s=new Array(t-e),i=0;cn&&(u=n),u<0&&(u=0),o=this.bMarks[c]+u,a=c+1=4))break;r++,i=r}return e.line=r,e.tokens.push({type:"code",content:e.getLines(t,i,4+e.blkIndent,!0),block:!0,lines:[t,e.line],level:e.level}),!0}},function(e,t){"use strict";e.exports=function(e,t,n,r){var i,o,a,s,u,c=!1,l=e.bMarks[t]+e.tShift[t],p=e.eMarks[t];if(l+3>p)return!1;if(i=e.src.charCodeAt(l),126!==i&&96!==i)return!1;if(u=l,l=e.skipChars(l,i),o=l-u,o<3)return!1;if(a=e.src.slice(l,p).trim(),a.indexOf("`")>=0)return!1;if(r)return!0;for(s=t;(s++,!(s>=n))&&(l=u=e.bMarks[s]+e.tShift[s],p=e.eMarks[s],!(l=4||(l=e.skipChars(l,i),l-uv)return!1;if(62!==e.src.charCodeAt(m++))return!1;if(e.level>=e.options.maxNesting)return!1;if(r)return!0;for(32===e.src.charCodeAt(m)&&m++,u=e.blkIndent,e.blkIndent=0,s=[e.bMarks[t]],e.bMarks[t]=m,m=m=v,a=[e.tShift[t]],e.tShift[t]=m-e.bMarks[t],p=e.parser.ruler.getRules("blockquote"),i=t+1;i=v));i++)if(62!==e.src.charCodeAt(m++)){if(o)break;for(d=!1,f=0,h=p.length;f=v,a.push(e.tShift[i]),e.tShift[i]=m-e.bMarks[i];for(c=e.parentType,e.parentType="blockquote",e.tokens.push({type:"blockquote_open",lines:l=[t,0],level:e.level++}),e.parser.tokenize(e,t,i),e.tokens.push({type:"blockquote_close",level:--e.level}),e.parentType=c,l[1]=e.line,f=0;fu)return!1;if(i=e.src.charCodeAt(s++),42!==i&&45!==i&&95!==i)return!1;for(o=1;s=i?-1:(n=e.src.charCodeAt(r++),42!==n&&45!==n&&43!==n?-1:r=i)return-1;if(n=e.src.charCodeAt(r++),n<48||n>57)return-1;for(;;){if(r>=i)return-1;if(n=e.src.charCodeAt(r++),!(n>=48&&n<=57)){if(41===n||46===n)break;return-1}}return r=0)_=!0;else{if(!((d=n(e,t))>=0))return!1;_=!1}if(e.level>=e.options.maxNesting)return!1;if(g=e.src.charCodeAt(d-1),a)return!0;for(x=e.tokens.length,_?(h=e.bMarks[t]+e.tShift[t],y=Number(e.src.substr(h,d-h-1)),e.tokens.push({type:"ordered_list_open",order:y,lines:k=[t,0],level:e.level++})):e.tokens.push({type:"bullet_list_open",lines:k=[t,0],level:e.level++}),s=t,w=!1,E=e.parser.ruler.getRules("list");!(!(s=m?1:b-d,v>4&&(v=1),v<1&&(v=1),u=d-e.bMarks[s]+v,e.tokens.push({type:"list_item_open",lines:S=[t,0],level:e.level++}),l=e.blkIndent,p=e.tight,c=e.tShift[t],f=e.parentType,e.tShift[t]=b-e.bMarks[t],e.blkIndent=u,e.tight=!0,e.parentType="list",e.parser.tokenize(e,t,o,!0),e.tight&&!w||(D=!1),w=e.line-t>1&&e.isEmpty(e.line-1),e.blkIndent=l,e.tShift[t]=c,e.tight=p,e.parentType=f,e.tokens.push({type:"list_item_close",level:--e.level}),s=t=e.line,S[1]=s,b=e.bMarks[t],s>=o)||e.isEmpty(s)||e.tShift[s]l)return!1;if(91!==e.src.charCodeAt(c))return!1;if(94!==e.src.charCodeAt(c+1))return!1;if(e.level>=e.options.maxNesting)return!1;for(s=c+2;s=l||58!==e.src.charCodeAt(++s))&&(!!r||(s++,e.env.footnotes||(e.env.footnotes={}),e.env.footnotes.refs||(e.env.footnotes.refs={}),u=e.src.slice(c+2,s-2),e.env.footnotes.refs[":"+u]=-1,e.tokens.push({type:"footnote_reference_open",label:u,level:e.level++}),i=e.bMarks[t],o=e.tShift[t],a=e.parentType,e.tShift[t]=e.skipSpaces(s)-s,e.bMarks[t]=s,e.blkIndent+=4,e.parentType="footnote",e.tShift[t]=u)return!1;if(i=e.src.charCodeAt(s),35!==i||s>=u)return!1;for(o=1,i=e.src.charCodeAt(++s);35===i&&s6||ss&&32===e.src.charCodeAt(a-1)&&(u=a),e.line=t+1,e.tokens.push({type:"heading_open",hLevel:o,lines:[t,e.line],level:e.level}),s=n)&&(!(e.tShift[a]3)&&(i=e.bMarks[a]+e.tShift[a],o=e.eMarks[a],!(i>=o)&&(r=e.src.charCodeAt(i),(45===r||61===r)&&(i=e.skipChars(i,r),i=e.skipSpaces(i),!(i=97&&t<=122}var i=n(1114),o=/^<([a-zA-Z]{1,15})[\s\/>]/,a=/^<\/([a-zA-Z]{1,15})[\s>]/;e.exports=function(e,t,n,s){var u,c,l,p=e.bMarks[t],f=e.eMarks[t],h=e.tShift[t];if(p+=h,!e.options.html)return!1;if(h>3||p+2>=f)return!1;if(60!==e.src.charCodeAt(p))return!1;if(u=e.src.charCodeAt(p+1),33===u||63===u){if(s)return!0}else{if(47!==u&&!r(u))return!1;if(47===u){if(c=e.src.slice(p,f).match(a),!c)return!1}else if(c=e.src.slice(p,f).match(o),!c)return!1;if(i[c[1].toLowerCase()]!==!0)return!1;if(s)return!0}for(l=t+1;lr)return!1;if(c=t+1,e.tShift[c]=e.eMarks[c])return!1;if(o=e.src.charCodeAt(s),124!==o&&45!==o&&58!==o)return!1;if(a=n(e,t+1),!/^[-:| ]+$/.test(a))return!1;if(l=a.split("|"),l<=2)return!1;for(f=[],u=0;u=o?-1:(r=e.src.charCodeAt(i++),126!==r&&58!==r?-1:(n=e.skipSpaces(i),i===n?-1:n>=o?-1:n))}function r(e,t){var n,r,i=e.level+2;for(n=t+2,r=e.tokens.length-2;n=0;if(f=t+1,e.isEmpty(f)&&++f>i)return!1;if(e.tShift[f]=e.options.maxNesting)return!1;p=e.tokens.length,e.tokens.push({type:"dl_open",lines:l=[t,0],level:e.level++}),u=t,s=f;e:for(;;){for(_=!0,g=!1,e.tokens.push({type:"dt_open",lines:[u,u],level:e.level++}),e.tokens.push({type:"inline",content:e.getLines(u,u+1,e.blkIndent,!1).trim(),level:e.level+1,lines:[u,u],children:[]}),e.tokens.push({type:"dt_close",level:--e.level});;){if(e.tokens.push({type:"dd_open",lines:c=[f,0],level:e.level++}),y=e.tight,d=e.ddIndent,h=e.blkIndent,v=e.tShift[s],m=e.parentType,e.blkIndent=e.ddIndent=e.tShift[s]+2,e.tShift[s]=a-e.bMarks[s],e.tight=!0,e.parentType="deflist",e.parser.tokenize(e,s,i,!0),e.tight&&!g||(_=!1),g=e.line-s>1&&e.isEmpty(e.line-1),e.tShift[s]=v,e.tight=y,e.parentType=m,e.blkIndent=h,e.ddIndent=d,e.tokens.push({type:"dd_close",level:--e.level}),c[1]=f=e.line,f>=i)break e;if(e.tShift[f]=i)break;if(u=f,e.isEmpty(u))break;if(e.tShift[u]=i)break;if(e.isEmpty(s)&&s++,s>=i)break;if(e.tShift[s]3)){for(i=!1,o=0,a=s.length;o0)return void(e.pos=n);for(t=0;t=o)break}else e.pending+=e.src[e.pos++]}e.pending&&e.pushPending()},r.prototype.parse=function(e,t,n,r){var i=new a(e,this,t,n,r);this.tokenize(i)},e.exports=r},function(e,t){"use strict";function n(e){switch(e){case 10:case 92:case 96:case 42:case 95:case 94:case 91:case 93:case 33:case 38:case 60:case 62:case 123:case 125:case 36:case 37:case 64:case 126:case 43:case 61:case 58:return!0;default:return!1}}e.exports=function(e,t){for(var r=e.pos;r=0&&32===e.pending.charCodeAt(n))if(n>=1&&32===e.pending.charCodeAt(n-1)){for(var o=n-2;o>=0;o--)if(32!==e.pending.charCodeAt(o)){e.pending=e.pending.substring(0,o+1);break}e.push({type:"hardbreak",level:e.level})}else e.pending=e.pending.slice(0,-1),e.push({type:"softbreak",level:e.level});else e.push({type:"softbreak",level:e.level});for(i++;i?@[]^_`{|}~-".split("").forEach(function(e){n[e.charCodeAt(0)]=1}),e.exports=function(e,t){var r,i=e.pos,o=e.posMax;if(92!==e.src.charCodeAt(i))return!1;if(i++,i=s)return!1;if(126!==e.src.charCodeAt(u+1))return!1;if(e.level>=e.options.maxNesting)return!1;if(o=u>0?e.src.charCodeAt(u-1):-1,a=e.src.charCodeAt(u+2),126===o)return!1;if(126===a)return!1;if(32===a||10===a)return!1;for(r=u+2;ru+3)return e.pos+=r-u,t||(e.pending+=e.src.slice(u,r)),!0;for(e.pos=u+2,i=1;e.pos+1=s)return!1;if(43!==e.src.charCodeAt(u+1))return!1;if(e.level>=e.options.maxNesting)return!1; +if(o=u>0?e.src.charCodeAt(u-1):-1,a=e.src.charCodeAt(u+2),43===o)return!1;if(43===a)return!1;if(32===a||10===a)return!1;for(r=u+2;r=s)return!1;if(61!==e.src.charCodeAt(u+1))return!1;if(e.level>=e.options.maxNesting)return!1;if(o=u>0?e.src.charCodeAt(u-1):-1,a=e.src.charCodeAt(u+2),61===o)return!1;if(61===a)return!1;if(32===a||10===a)return!1;for(r=u+2;r=48&&e<=57||e>=65&&e<=90||e>=97&&e<=122}function r(e,t){var r,i,o,a=t,s=!0,u=!0,c=e.posMax,l=e.src.charCodeAt(t);for(r=t>0?e.src.charCodeAt(t-1):-1;a=c&&(s=!1),o=a-t,o>=4?s=u=!1:(i=a=e.options.maxNesting)return!1;for(e.pos=p+n,u=[n];e.pos?@[\]^_`{|}~-])/g;e.exports=function(e,t){var r,i,o=e.posMax,a=e.pos;if(126!==e.src.charCodeAt(a))return!1;if(t)return!1;if(a+2>=o)return!1;if(e.level>=e.options.maxNesting)return!1;for(e.pos=a+1;e.pos?@[\]^_`{|}~-])/g;e.exports=function(e,t){var r,i,o=e.posMax,a=e.pos;if(94!==e.src.charCodeAt(a))return!1;if(t)return!1;if(a+2>=o)return!1;if(e.level>=e.options.maxNesting)return!1;for(e.pos=a+1;e.pos=e.options.maxNesting)return!1;if(n=y+1,s=r(e,y),s<0)return!1;if(p=s+1,p=v)return!1;for(y=p,i(e,p)?(c=e.linkContent,p=e.pos):c="",y=p;p=v||41!==e.src.charCodeAt(p))return e.pos=m,!1;p++}else{if(e.linkLevel>0)return!1;for(;p=0?u=e.src.slice(y,p++):p=y-1),u||("undefined"==typeof u&&(p=s+1),u=e.src.slice(n,s)),f=e.env.references[a(u)],!f)return e.pos=m,!1;c=f.href,l=f.title}return t||(e.pos=n,e.posMax=s,d?e.push({type:"image",src:c,title:l,alt:e.src.substr(n,s-n),level:e.level}):(e.push({type:"link_open",href:c,title:l,level:e.level++}),e.linkLevel++,e.parser.tokenize(e),e.linkLevel--,e.push({type:"link_close",level:--e.level}))),e.pos=p,e.posMax=v,!0}},function(e,t,n){"use strict";var r=n(1090);e.exports=function(e,t){var n,i,o,a,s=e.posMax,u=e.pos;return!(u+2>=s)&&(94===e.src.charCodeAt(u)&&(91===e.src.charCodeAt(u+1)&&(!(e.level>=e.options.maxNesting)&&(n=u+2,i=r(e,u+1),!(i<0)&&(t||(e.env.footnotes||(e.env.footnotes={}),e.env.footnotes.list||(e.env.footnotes.list=[]),o=e.env.footnotes.list.length,e.pos=n,e.posMax=i,e.push({type:"footnote_ref",id:o,level:e.level}),e.linkLevel++,a=e.tokens.length,e.parser.tokenize(e),e.env.footnotes.list[o]={tokens:e.tokens.splice(a)},e.linkLevel--),e.pos=i+1,e.posMax=s,!0)))))}},function(e,t){"use strict";e.exports=function(e,t){var n,r,i,o,a=e.posMax,s=e.pos;if(s+3>a)return!1;if(!e.env.footnotes||!e.env.footnotes.refs)return!1;if(91!==e.src.charCodeAt(s))return!1;if(94!==e.src.charCodeAt(s+1))return!1;if(e.level>=e.options.maxNesting)return!1;for(r=s+2;r=a)&&(r++,n=e.src.slice(s+2,r-1),"undefined"!=typeof e.env.footnotes.refs[":"+n]&&(t||(e.env.footnotes.list||(e.env.footnotes.list=[]),e.env.footnotes.refs[":"+n]<0?(i=e.env.footnotes.list.length,e.env.footnotes.list[i]={label:n,count:0},e.env.footnotes.refs[":"+n]=i):i=e.env.footnotes.refs[":"+n],o=e.env.footnotes.list[i].count,e.env.footnotes.list[i].count++,e.push({type:"footnote_ref",id:i,subId:o,level:e.level})),e.pos=r,e.posMax=a,!0)))}},function(e,t,n){"use strict";var r=n(1133),i=n(1093),o=/^<([a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*)>/,a=/^<([a-zA-Z.\-]{1,25}):([^<>\x00-\x20]*)>/;e.exports=function(e,t){var n,s,u,c,l,p=e.pos;return 60===e.src.charCodeAt(p)&&(n=e.src.slice(p),!(n.indexOf(">")<0)&&((s=n.match(a))?!(r.indexOf(s[1].toLowerCase())<0)&&(c=s[0].slice(1,-1),l=i(c),!!e.parser.validateLink(c)&&(t||(e.push({type:"link_open",href:l,level:e.level}),e.push({type:"text",content:c,level:e.level+1}),e.push({type:"link_close",level:e.level})),e.pos+=s[0].length,!0)):(u=n.match(o),!!u&&(c=u[0].slice(1,-1),l=i("mailto:"+c),!!e.parser.validateLink(l)&&(t||(e.push({type:"link_open",href:l,level:e.level}),e.push({type:"text",content:c,level:e.level+1}),e.push({type:"link_close",level:e.level})),e.pos+=u[0].length,!0)))))}},function(e,t){"use strict";e.exports=["coap","doi","javascript","aaa","aaas","about","acap","cap","cid","crid","data","dav","dict","dns","file","ftp","geo","go","gopher","h323","http","https","iax","icap","im","imap","info","ipp","iris","iris.beep","iris.xpc","iris.xpcs","iris.lwz","ldap","mailto","mid","msrp","msrps","mtqp","mupdate","news","nfs","ni","nih","nntp","opaquelocktoken","pop","pres","rtsp","service","session","shttp","sieve","sip","sips","sms","snmp","soap.beep","soap.beeps","tag","tel","telnet","tftp","thismessage","tn3270","tip","tv","urn","vemmi","ws","wss","xcon","xcon-userid","xmlrpc.beep","xmlrpc.beeps","xmpp","z39.50r","z39.50s","adiumxtra","afp","afs","aim","apt","attachment","aw","beshare","bitcoin","bolo","callto","chrome","chrome-extension","com-eventbrite-attendee","content","cvs","dlna-playsingle","dlna-playcontainer","dtn","dvb","ed2k","facetime","feed","finger","fish","gg","git","gizmoproject","gtalk","hcp","icon","ipn","irc","irc6","ircs","itms","jar","jms","keyparc","lastfm","ldaps","magnet","maps","market","message","mms","ms-help","msnim","mumble","mvn","notes","oid","palm","paparazzi","platform","proxy","psyc","query","res","resource","rmi","rsync","rtmp","secondlife","sftp","sgn","skype","smb","soldat","spotify","ssh","steam","svn","teamspeak","things","udp","unreal","ut2004","ventrilo","view-source","webcal","wtai","wyciwyg","xfire","xri","ymsgr"]},function(e,t,n){"use strict";function r(e){var t=32|e;return t>=97&&t<=122}var i=n(1135).HTML_TAG_RE;e.exports=function(e,t){var n,o,a,s=e.pos;return!!e.options.html&&(a=e.posMax,!(60!==e.src.charCodeAt(s)||s+2>=a)&&(n=e.src.charCodeAt(s+1),!(33!==n&&63!==n&&47!==n&&!r(n))&&(!!(o=e.src.slice(s).match(i))&&(t||e.push({type:"htmltag",content:e.src.slice(s,s+o[0].length),level:e.level}),e.pos+=o[0].length,!0))))}},function(e,t){"use strict";function n(e,t){return e=e.source,t=t||"",function n(r,i){return r?(i=i.source||i,e=e.replace(r,i),n):new RegExp(e,t)}}var r=/[a-zA-Z_:][a-zA-Z0-9:._-]*/,i=/[^"'=<>`\x00-\x20]+/,o=/'[^']*'/,a=/"[^"]*"/,s=n(/(?:unquoted|single_quoted|double_quoted)/)("unquoted",i)("single_quoted",o)("double_quoted",a)(),u=n(/(?:\s+attr_name(?:\s*=\s*attr_value)?)/)("attr_name",r)("attr_value",s)(),c=n(/<[A-Za-z][A-Za-z0-9]*attribute*\s*\/?>/)("attribute",u)(),l=/<\/[A-Za-z][A-Za-z0-9]*\s*>/,p=//,f=/<[?].*?[?]>/,h=/]*>/,d=/])*\]\]>/,m=n(/^(?:open_tag|close_tag|comment|processing|declaration|cdata)/)("open_tag",c)("close_tag",l)("comment",p)("processing",f)("declaration",h)("cdata",d)();e.exports.HTML_TAG_RE=m},function(e,t,n){"use strict";var r=n(1082),i=n(1081).has,o=n(1081).isValidEntityCode,a=n(1081).fromCodePoint,s=/^&#((?:x[a-f0-9]{1,8}|[0-9]{1,8}));/i,u=/^&([a-z][a-z0-9]{1,31});/i;e.exports=function(e,t){var n,c,l,p=e.pos,f=e.posMax;if(38!==e.src.charCodeAt(p))return!1;if(p+1/g,">").replace(/\"/g,""")}function f(e,n){n=n.replace(/[\x00-\x20]+/g,""),n=n.replace(/<\!\-\-.*?\-\-\>/g,"");var r=n.match(/^([a-zA-Z]+)\:/);if(!r)return!!n.match(/^\/\//)&&!t.allowProtocolRelative;var o=r[1].toLowerCase();return i(t.allowedSchemesByTag,e)?t.allowedSchemesByTag[e].indexOf(o)===-1:!t.allowedSchemes||t.allowedSchemes.indexOf(o)===-1}function h(e,t){return t?(e=e.split(/\s+/),e.filter(function(e){return t.indexOf(e)!==-1}).join(" ")):e}var d="";t?(t=s(o.defaults,t),t.parser?t.parser=s(c,t.parser):t.parser=c):(t=o.defaults,t.parser=c);var m,v,y=t.nonTextTags||["script","style","textarea"];t.allowedAttributes&&(m={},v={},r(t.allowedAttributes,function(e,t){m[t]=[];var n=[];e.forEach(function(e){e.indexOf("*")>=0?n.push(u(e).replace(/\\\*/g,".*")):m[t].push(e)}),v[t]=new RegExp("^("+n.join("|")+")$")}));var g={};r(t.allowedClasses,function(e,t){m&&(i(m,t)||(m[t]=[]),m[t].push("class")),g[t]=e});var _,b={};r(t.transformTags,function(e,t){var n;"function"==typeof e?n=e:"string"==typeof e&&(n=o.simpleTransform(e)),"*"===t?_=n:b[t]=n});var x=0,w=[],k={},S={},E=!1,C=0,A=new a.Parser({onopentag:function(e,n){if(E)return void C++;var o=new l(e,n);w.push(o);var a,s=!1,u=!!o.text;i(b,e)&&(a=b[e](e,n),o.attribs=n=a.attribs,void 0!==a.text&&(o.innerText=a.text),e!==a.tagName&&(o.name=e=a.tagName,S[x]=a.tagName)),_&&(a=_(e,n),o.attribs=n=a.attribs,e!==a.tagName&&(o.name=e=a.tagName,S[x]=a.tagName)),t.allowedTags&&t.allowedTags.indexOf(e)===-1&&(s=!0,y.indexOf(e)!==-1&&(E=!0,C=1),k[x]=!0),x++,s||(d+="<"+e,(!m||i(m,e)||m["*"])&&r(n,function(t,n){if(!m||i(m,e)&&m[e].indexOf(n)!==-1||m["*"]&&m["*"].indexOf(n)!==-1||i(v,e)&&v[e].test(n)||v["*"]&&v["*"].test(n)){if(("href"===n||"src"===n)&&f(e,t))return void delete o.attribs[n];if("class"===n&&(t=h(t,g[e]),!t.length))return void delete o.attribs[n];d+=" "+n,t.length&&(d+='="'+p(t)+'"')}else delete o.attribs[n]}),t.selfClosing.indexOf(e)!==-1?d+=" />":(d+=">",!o.innerText||u||t.textFilter||(d+=o.innerText)))},ontext:function(e){if(!E){var n,r=w[w.length-1];if(r&&(n=r.tag,e=void 0!==r.innerText?r.innerText:e),"script"===n||"style"===n)d+=e;else{var i=p(e);d+=t.textFilter?t.textFilter(i):i}if(w.length){var o=w[w.length-1];o.text+=e}}},onclosetag:function(e){if(E){if(C--,C)return;E=!1}var n=w.pop();if(n){if(E=!1,x--,k[x])return delete k[x],void n.updateParentNodeText();if(S[x]&&(e=S[x],delete S[x]),t.exclusiveFilter&&t.exclusiveFilter(n))return void(d=d.substr(0,n.tagPosition));n.updateParentNodeText(),t.selfClosing.indexOf(e)===-1&&(d+="")}}},t.parser);return A.write(e),A.end(),d}var a=n(1141),s=n(1171),u=n(1172);e.exports=o;var c={decodeEntities:!0};o.defaults={allowedTags:["h3","h4","h5","h6","blockquote","p","a","ul","ol","nl","li","b","i","strong","em","strike","code","hr","br","div","table","thead","caption","tbody","tr","th","td","pre"],allowedAttributes:{a:["href","name","target"],img:["src"]},selfClosing:["img","br","hr","area","base","basefont","input","link","meta"],allowedSchemes:["http","https","ftp","mailto"],allowedSchemesByTag:{},allowProtocolRelative:!0},o.simpleTransform=function(e,t,n){return n=void 0===n||n,t=t||{},function(r,i){var o;if(n)for(o in t)i[o]=t[o];else i=t;return{tagName:e,attribs:i}}}},function(e,t,n){function r(t,n){return delete e.exports[t],e.exports[t]=n,n}var i=n(1142),o=n(1149);e.exports={Parser:i,Tokenizer:n(1143),ElementType:n(1150),DomHandler:o,get FeedHandler(){return r("FeedHandler",n(1153))},get Stream(){return r("Stream",n(1154))},get WritableStream(){return r("WritableStream",n(1155))},get ProxyHandler(){return r("ProxyHandler",n(1157))},get DomUtils(){return r("DomUtils",n(1158))},get CollectingHandler(){return r("CollectingHandler",n(1170))},DefaultHandler:o,get RssHandler(){return r("RssHandler",this.FeedHandler)},parseDOM:function(e,t){var n=new o(t);return new i(n,t).end(e),n.dom},parseFeed:function(t,n){var r=new e.exports.FeedHandler(n);return new i(r,n).end(t),r.dom},createDomStream:function(e,t,n){var r=new o(e,t,n);return new i(r,t)},EVENTS:{attribute:2,cdatastart:0,cdataend:0,text:1,processinginstruction:2,comment:1,commentend:0,closetag:1,opentag:2,opentagname:1,error:1,end:0}}},function(e,t,n){function r(e,t){this._options=t||{},this._cbs=e||{},this._tagname="",this._attribname="",this._attribvalue="",this._attribs=null,this._stack=[],this.startIndex=0,this.endIndex=null,this._lowerCaseTagNames="lowerCaseTags"in this._options?!!this._options.lowerCaseTags:!this._options.xmlMode,this._lowerCaseAttributeNames="lowerCaseAttributeNames"in this._options?!!this._options.lowerCaseAttributeNames:!this._options.xmlMode,this._options.Tokenizer&&(i=this._options.Tokenizer),this._tokenizer=new i(this._options,this),this._cbs.onparserinit&&this._cbs.onparserinit(this)}var i=n(1143),o={input:!0,option:!0,optgroup:!0,select:!0,button:!0,datalist:!0,textarea:!0},a={tr:{tr:!0,th:!0,td:!0},th:{th:!0},td:{thead:!0,th:!0,td:!0},body:{head:!0,link:!0,script:!0},li:{li:!0},p:{p:!0},h1:{p:!0},h2:{p:!0},h3:{p:!0},h4:{p:!0},h5:{p:!0},h6:{p:!0},select:o,input:o,output:o,button:o,datalist:o,textarea:o,option:{option:!0},optgroup:{optgroup:!0}},s={__proto__:null,area:!0,base:!0,basefont:!0,br:!0,col:!0,command:!0,embed:!0,frame:!0,hr:!0,img:!0,input:!0,isindex:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0,path:!0,circle:!0,ellipse:!0,line:!0,rect:!0,use:!0,stop:!0,polyline:!0,polygon:!0},u=/\s|\//;n(328)(r,n(327).EventEmitter),r.prototype._updatePosition=function(e){null===this.endIndex?this._tokenizer._sectionStart<=e?this.startIndex=0:this.startIndex=this._tokenizer._sectionStart-e:this.startIndex=this.endIndex+1,this.endIndex=this._tokenizer.getAbsoluteIndex()},r.prototype.ontext=function(e){this._updatePosition(1),this.endIndex--,this._cbs.ontext&&this._cbs.ontext(e)},r.prototype.onopentagname=function(e){if(this._lowerCaseTagNames&&(e=e.toLowerCase()),this._tagname=e,!this._options.xmlMode&&e in a)for(var t;(t=this._stack[this._stack.length-1])in a[e];this.onclosetag(t));!this._options.xmlMode&&e in s||this._stack.push(e),this._cbs.onopentagname&&this._cbs.onopentagname(e),this._cbs.onopentag&&(this._attribs={})},r.prototype.onopentagend=function(){this._updatePosition(1),this._attribs&&(this._cbs.onopentag&&this._cbs.onopentag(this._tagname,this._attribs),this._attribs=null),!this._options.xmlMode&&this._cbs.onclosetag&&this._tagname in s&&this._cbs.onclosetag(this._tagname),this._tagname=""},r.prototype.onclosetag=function(e){if(this._updatePosition(1),this._lowerCaseTagNames&&(e=e.toLowerCase()),!this._stack.length||e in s&&!this._options.xmlMode)this._options.xmlMode||"br"!==e&&"p"!==e||(this.onopentagname(e),this._closeCurrentTag());else{var t=this._stack.lastIndexOf(e);if(t!==-1)if(this._cbs.onclosetag)for(t=this._stack.length-t;t--;)this._cbs.onclosetag(this._stack.pop());else this._stack.length=t;else"p"!==e||this._options.xmlMode||(this.onopentagname(e),this._closeCurrentTag())}},r.prototype.onselfclosingtag=function(){this._options.xmlMode||this._options.recognizeSelfClosing?this._closeCurrentTag():this.onopentagend()},r.prototype._closeCurrentTag=function(){var e=this._tagname;this.onopentagend(),this._stack[this._stack.length-1]===e&&(this._cbs.onclosetag&&this._cbs.onclosetag(e),this._stack.pop())},r.prototype.onattribname=function(e){this._lowerCaseAttributeNames&&(e=e.toLowerCase()),this._attribname=e},r.prototype.onattribdata=function(e){this._attribvalue+=e},r.prototype.onattribend=function(){this._cbs.onattribute&&this._cbs.onattribute(this._attribname,this._attribvalue),this._attribs&&!Object.prototype.hasOwnProperty.call(this._attribs,this._attribname)&&(this._attribs[this._attribname]=this._attribvalue),this._attribname="",this._attribvalue=""},r.prototype._getInstructionName=function(e){var t=e.search(u),n=t<0?e:e.substr(0,t);return this._lowerCaseTagNames&&(n=n.toLowerCase()),n},r.prototype.ondeclaration=function(e){if(this._cbs.onprocessinginstruction){var t=this._getInstructionName(e);this._cbs.onprocessinginstruction("!"+t,"!"+e)}},r.prototype.onprocessinginstruction=function(e){if(this._cbs.onprocessinginstruction){var t=this._getInstructionName(e);this._cbs.onprocessinginstruction("?"+t,"?"+e)}},r.prototype.oncomment=function(e){this._updatePosition(4),this._cbs.oncomment&&this._cbs.oncomment(e),this._cbs.oncommentend&&this._cbs.oncommentend()},r.prototype.oncdata=function(e){this._updatePosition(1),this._options.xmlMode||this._options.recognizeCDATA?(this._cbs.oncdatastart&&this._cbs.oncdatastart(),this._cbs.ontext&&this._cbs.ontext(e),this._cbs.oncdataend&&this._cbs.oncdataend()):this.oncomment("[CDATA["+e+"]]")},r.prototype.onerror=function(e){this._cbs.onerror&&this._cbs.onerror(e)},r.prototype.onend=function(){if(this._cbs.onclosetag)for(var e=this._stack.length;e>0;this._cbs.onclosetag(this._stack[--e]));this._cbs.onend&&this._cbs.onend()},r.prototype.reset=function(){this._cbs.onreset&&this._cbs.onreset(),this._tokenizer.reset(),this._tagname="",this._attribname="",this._attribs=null,this._stack=[],this._cbs.onparserinit&&this._cbs.onparserinit(this)},r.prototype.parseComplete=function(e){this.reset(),this.end(e)},r.prototype.write=function(e){this._tokenizer.write(e)},r.prototype.end=function(e){this._tokenizer.end(e)},r.prototype.pause=function(){this._tokenizer.pause()},r.prototype.resume=function(){this._tokenizer.resume()},r.prototype.parseChunk=r.prototype.write,r.prototype.done=r.prototype.end,e.exports=r},function(e,t,n){function r(e){return" "===e||"\n"===e||"\t"===e||"\f"===e||"\r"===e}function i(e,t){return function(n){n===e&&(this._state=t)}}function o(e,t,n){var r=e.toLowerCase();return e===r?function(e){e===r?this._state=t:(this._state=n,this._index--)}:function(i){i===r||i===e?this._state=t:(this._state=n,this._index--)}}function a(e,t){var n=e.toLowerCase();return function(r){r===n||r===e?this._state=t:(this._state=m,this._index--)}}function s(e,t){this._state=h,this._buffer="",this._sectionStart=0,this._index=0,this._bufferOffset=0,this._baseState=h,this._special=me,this._cbs=t,this._running=!0,this._ended=!1,this._xmlMode=!(!e||!e.xmlMode),this._decodeEntities=!(!e||!e.decodeEntities)}e.exports=s;var u=n(1144),c=n(1146),l=n(1147),p=n(1148),f=0,h=f++,d=f++,m=f++,v=f++,y=f++,g=f++,_=f++,b=f++,x=f++,w=f++,k=f++,S=f++,E=f++,C=f++,A=f++,T=f++,D=f++,M=f++,O=f++,P=f++,I=f++,N=f++,R=f++,j=f++,F=f++,B=f++,L=f++,z=f++,q=f++,U=f++,W=f++,K=f++,V=f++,H=f++,J=f++,G=f++,X=f++,Y=f++,$=f++,Z=f++,Q=f++,ee=f++,te=f++,ne=f++,re=f++,ie=f++,oe=f++,ae=f++,se=f++,ue=f++,ce=f++,le=f++,pe=f++,fe=f++,he=f++,de=0,me=de++,ve=de++,ye=de++;s.prototype._stateText=function(e){"<"===e?(this._index>this._sectionStart&&this._cbs.ontext(this._getSection()),this._state=d,this._sectionStart=this._index):this._decodeEntities&&this._special===me&&"&"===e&&(this._index>this._sectionStart&&this._cbs.ontext(this._getSection()),this._baseState=h,this._state=ce,this._sectionStart=this._index)},s.prototype._stateBeforeTagName=function(e){"/"===e?this._state=y:"<"===e?(this._cbs.ontext(this._getSection()),this._sectionStart=this._index):">"===e||this._special!==me||r(e)?this._state=h:"!"===e?(this._state=A,this._sectionStart=this._index+1):"?"===e?(this._state=D,this._sectionStart=this._index+1):(this._state=this._xmlMode||"s"!==e&&"S"!==e?m:W,this._sectionStart=this._index)},s.prototype._stateInTagName=function(e){("/"===e||">"===e||r(e))&&(this._emitToken("onopentagname"),this._state=b,this._index--)},s.prototype._stateBeforeCloseingTagName=function(e){r(e)||(">"===e?this._state=h:this._special!==me?"s"===e||"S"===e?this._state=K:(this._state=h,this._index--):(this._state=g,this._sectionStart=this._index))},s.prototype._stateInCloseingTagName=function(e){(">"===e||r(e))&&(this._emitToken("onclosetag"),this._state=_,this._index--)},s.prototype._stateAfterCloseingTagName=function(e){">"===e&&(this._state=h,this._sectionStart=this._index+1)},s.prototype._stateBeforeAttributeName=function(e){">"===e?(this._cbs.onopentagend(),this._state=h,this._sectionStart=this._index+1):"/"===e?this._state=v:r(e)||(this._state=x,this._sectionStart=this._index)},s.prototype._stateInSelfClosingTag=function(e){">"===e?(this._cbs.onselfclosingtag(),this._state=h,this._sectionStart=this._index+1):r(e)||(this._state=b,this._index--)},s.prototype._stateInAttributeName=function(e){("="===e||"/"===e||">"===e||r(e))&&(this._cbs.onattribname(this._getSection()),this._sectionStart=-1,this._state=w,this._index--)},s.prototype._stateAfterAttributeName=function(e){"="===e?this._state=k:"/"===e||">"===e?(this._cbs.onattribend(),this._state=b,this._index--):r(e)||(this._cbs.onattribend(),this._state=x,this._sectionStart=this._index)},s.prototype._stateBeforeAttributeValue=function(e){'"'===e?(this._state=S,this._sectionStart=this._index+1):"'"===e?(this._state=E,this._sectionStart=this._index+1):r(e)||(this._state=C,this._sectionStart=this._index,this._index--)},s.prototype._stateInAttributeValueDoubleQuotes=function(e){'"'===e?(this._emitToken("onattribdata"),this._cbs.onattribend(),this._state=b):this._decodeEntities&&"&"===e&&(this._emitToken("onattribdata"),this._baseState=this._state,this._state=ce,this._sectionStart=this._index)},s.prototype._stateInAttributeValueSingleQuotes=function(e){"'"===e?(this._emitToken("onattribdata"),this._cbs.onattribend(),this._state=b):this._decodeEntities&&"&"===e&&(this._emitToken("onattribdata"),this._baseState=this._state,this._state=ce,this._sectionStart=this._index)},s.prototype._stateInAttributeValueNoQuotes=function(e){r(e)||">"===e?(this._emitToken("onattribdata"),this._cbs.onattribend(),this._state=b,this._index--):this._decodeEntities&&"&"===e&&(this._emitToken("onattribdata"),this._baseState=this._state,this._state=ce,this._sectionStart=this._index)},s.prototype._stateBeforeDeclaration=function(e){this._state="["===e?N:"-"===e?M:T},s.prototype._stateInDeclaration=function(e){">"===e&&(this._cbs.ondeclaration(this._getSection()),this._state=h,this._sectionStart=this._index+1)},s.prototype._stateInProcessingInstruction=function(e){">"===e&&(this._cbs.onprocessinginstruction(this._getSection()),this._state=h,this._sectionStart=this._index+1)},s.prototype._stateBeforeComment=function(e){"-"===e?(this._state=O,this._sectionStart=this._index+1):this._state=T},s.prototype._stateInComment=function(e){"-"===e&&(this._state=P)},s.prototype._stateAfterComment1=function(e){"-"===e?this._state=I:this._state=O},s.prototype._stateAfterComment2=function(e){">"===e?(this._cbs.oncomment(this._buffer.substring(this._sectionStart,this._index-2)),this._state=h,this._sectionStart=this._index+1):"-"!==e&&(this._state=O)},s.prototype._stateBeforeCdata1=o("C",R,T),s.prototype._stateBeforeCdata2=o("D",j,T),s.prototype._stateBeforeCdata3=o("A",F,T),s.prototype._stateBeforeCdata4=o("T",B,T),s.prototype._stateBeforeCdata5=o("A",L,T),s.prototype._stateBeforeCdata6=function(e){"["===e?(this._state=z,this._sectionStart=this._index+1):(this._state=T,this._index--)},s.prototype._stateInCdata=function(e){"]"===e&&(this._state=q)},s.prototype._stateAfterCdata1=i("]",U),s.prototype._stateAfterCdata2=function(e){">"===e?(this._cbs.oncdata(this._buffer.substring(this._sectionStart,this._index-2)),this._state=h,this._sectionStart=this._index+1):"]"!==e&&(this._state=z)},s.prototype._stateBeforeSpecial=function(e){"c"===e||"C"===e?this._state=V:"t"===e||"T"===e?this._state=te:(this._state=m,this._index--)},s.prototype._stateBeforeSpecialEnd=function(e){this._special!==ve||"c"!==e&&"C"!==e?this._special!==ye||"t"!==e&&"T"!==e?this._state=h:this._state=oe:this._state=Y},s.prototype._stateBeforeScript1=a("R",H),s.prototype._stateBeforeScript2=a("I",J),s.prototype._stateBeforeScript3=a("P",G),s.prototype._stateBeforeScript4=a("T",X),s.prototype._stateBeforeScript5=function(e){("/"===e||">"===e||r(e))&&(this._special=ve),this._state=m,this._index--},s.prototype._stateAfterScript1=o("R",$,h),s.prototype._stateAfterScript2=o("I",Z,h),s.prototype._stateAfterScript3=o("P",Q,h),s.prototype._stateAfterScript4=o("T",ee,h),s.prototype._stateAfterScript5=function(e){">"===e||r(e)?(this._special=me,this._state=g,this._sectionStart=this._index-6,this._index--):this._state=h},s.prototype._stateBeforeStyle1=a("Y",ne),s.prototype._stateBeforeStyle2=a("L",re),s.prototype._stateBeforeStyle3=a("E",ie),s.prototype._stateBeforeStyle4=function(e){("/"===e||">"===e||r(e))&&(this._special=ye),this._state=m,this._index--},s.prototype._stateAfterStyle1=o("Y",ae,h),s.prototype._stateAfterStyle2=o("L",se,h),s.prototype._stateAfterStyle3=o("E",ue,h),s.prototype._stateAfterStyle4=function(e){">"===e||r(e)?(this._special=me,this._state=g,this._sectionStart=this._index-5,this._index--):this._state=h},s.prototype._stateBeforeEntity=o("#",le,pe),s.prototype._stateBeforeNumericEntity=o("X",he,fe),s.prototype._parseNamedEntityStrict=function(){if(this._sectionStart+16&&(t=6);t>=2;){var n=this._buffer.substr(e,t);if(l.hasOwnProperty(n))return this._emitPartial(l[n]),void(this._sectionStart+=t+1);t--}},s.prototype._stateInNamedEntity=function(e){";"===e?(this._parseNamedEntityStrict(),this._sectionStart+1"z")&&(e<"A"||e>"Z")&&(e<"0"||e>"9")&&(this._xmlMode||this._sectionStart+1===this._index||(this._baseState!==h?"="!==e&&this._parseNamedEntityStrict():this._parseLegacyEntity()),this._state=this._baseState,this._index--)},s.prototype._decodeNumericEntity=function(e,t){var n=this._sectionStart+e;if(n!==this._index){var r=this._buffer.substring(n,this._index),i=parseInt(r,t);this._emitPartial(u(i)),this._sectionStart=this._index}else this._sectionStart--;this._state=this._baseState},s.prototype._stateInNumericEntity=function(e){";"===e?(this._decodeNumericEntity(2,10),this._sectionStart++):(e<"0"||e>"9")&&(this._xmlMode?this._state=this._baseState:this._decodeNumericEntity(2,10),this._index--)},s.prototype._stateInHexEntity=function(e){";"===e?(this._decodeNumericEntity(3,16),this._sectionStart++):(e<"a"||e>"f")&&(e<"A"||e>"F")&&(e<"0"||e>"9")&&(this._xmlMode?this._state=this._baseState:this._decodeNumericEntity(3,16),this._index--)},s.prototype._cleanup=function(){this._sectionStart<0?(this._buffer="",this._bufferOffset+=this._index,this._index=0):this._running&&(this._state===h?(this._sectionStart!==this._index&&this._cbs.ontext(this._buffer.substr(this._sectionStart)),this._buffer="",this._bufferOffset+=this._index,this._index=0):this._sectionStart===this._index?(this._buffer="",this._bufferOffset+=this._index,this._index=0):(this._buffer=this._buffer.substr(this._sectionStart),this._index-=this._sectionStart,this._bufferOffset+=this._sectionStart),this._sectionStart=0)},s.prototype.write=function(e){this._ended&&this._cbs.onerror(Error(".write() after done!")),this._buffer+=e,this._parse()},s.prototype._parse=function(){for(;this._index=55296&&e<=57343||e>1114111)return"�";e in i&&(e=i[e]);var t="";return e>65535&&(e-=65536,t+=String.fromCharCode(e>>>10&1023|55296),e=56320|1023&e),t+=String.fromCharCode(e)}var i=n(1145);e.exports=r},function(e,t){e.exports={0:65533,128:8364,130:8218,131:402,132:8222,133:8230,134:8224,135:8225,136:710,137:8240,138:352,139:8249,140:338,142:381,145:8216,146:8217,147:8220,148:8221,149:8226,150:8211,151:8212,152:732,153:8482,154:353,155:8250,156:339,158:382,159:376}},function(e,t){e.exports={Aacute:"Á",aacute:"á",Abreve:"Ă",abreve:"ă",ac:"∾",acd:"∿",acE:"∾̳",Acirc:"Â",acirc:"â",acute:"´",Acy:"А",acy:"а",AElig:"Æ",aelig:"æ",af:"⁡",Afr:"𝔄",afr:"𝔞",Agrave:"À",agrave:"à",alefsym:"ℵ",aleph:"ℵ",Alpha:"Α",alpha:"α",Amacr:"Ā",amacr:"ā",amalg:"⨿",amp:"&",AMP:"&",andand:"⩕",And:"⩓",and:"∧",andd:"⩜",andslope:"⩘",andv:"⩚",ang:"∠",ange:"⦤",angle:"∠",angmsdaa:"⦨",angmsdab:"⦩",angmsdac:"⦪",angmsdad:"⦫",angmsdae:"⦬",angmsdaf:"⦭",angmsdag:"⦮",angmsdah:"⦯",angmsd:"∡",angrt:"∟",angrtvb:"⊾",angrtvbd:"⦝",angsph:"∢",angst:"Å",angzarr:"⍼",Aogon:"Ą",aogon:"ą",Aopf:"𝔸",aopf:"𝕒",apacir:"⩯",ap:"≈",apE:"⩰",ape:"≊",apid:"≋",apos:"'",ApplyFunction:"⁡",approx:"≈",approxeq:"≊",Aring:"Å",aring:"å",Ascr:"𝒜",ascr:"𝒶",Assign:"≔",ast:"*",asymp:"≈",asympeq:"≍",Atilde:"Ã",atilde:"ã",Auml:"Ä",auml:"ä",awconint:"∳",awint:"⨑",backcong:"≌",backepsilon:"϶",backprime:"‵",backsim:"∽",backsimeq:"⋍",Backslash:"∖",Barv:"⫧",barvee:"⊽",barwed:"⌅",Barwed:"⌆",barwedge:"⌅",bbrk:"⎵",bbrktbrk:"⎶",bcong:"≌",Bcy:"Б",bcy:"б",bdquo:"„",becaus:"∵",because:"∵",Because:"∵",bemptyv:"⦰",bepsi:"϶",bernou:"ℬ",Bernoullis:"ℬ",Beta:"Β",beta:"β",beth:"ℶ",between:"≬",Bfr:"𝔅",bfr:"𝔟",bigcap:"⋂",bigcirc:"◯",bigcup:"⋃",bigodot:"⨀",bigoplus:"⨁",bigotimes:"⨂",bigsqcup:"⨆",bigstar:"★",bigtriangledown:"▽",bigtriangleup:"△",biguplus:"⨄",bigvee:"⋁",bigwedge:"⋀",bkarow:"⤍",blacklozenge:"⧫",blacksquare:"▪",blacktriangle:"▴",blacktriangledown:"▾",blacktriangleleft:"◂",blacktriangleright:"▸",blank:"␣",blk12:"▒",blk14:"░",blk34:"▓",block:"█",bne:"=⃥",bnequiv:"≡⃥",bNot:"⫭",bnot:"⌐",Bopf:"𝔹",bopf:"𝕓",bot:"⊥",bottom:"⊥",bowtie:"⋈",boxbox:"⧉",boxdl:"┐",boxdL:"╕",boxDl:"╖",boxDL:"╗",boxdr:"┌",boxdR:"╒",boxDr:"╓",boxDR:"╔",boxh:"─",boxH:"═",boxhd:"┬",boxHd:"╤",boxhD:"╥",boxHD:"╦",boxhu:"┴",boxHu:"╧",boxhU:"╨",boxHU:"╩",boxminus:"⊟",boxplus:"⊞",boxtimes:"⊠",boxul:"┘",boxuL:"╛",boxUl:"╜",boxUL:"╝",boxur:"└",boxuR:"╘",boxUr:"╙",boxUR:"╚",boxv:"│",boxV:"║",boxvh:"┼",boxvH:"╪",boxVh:"╫",boxVH:"╬",boxvl:"┤",boxvL:"╡",boxVl:"╢",boxVL:"╣",boxvr:"├",boxvR:"╞",boxVr:"╟",boxVR:"╠",bprime:"‵",breve:"˘",Breve:"˘",brvbar:"¦",bscr:"𝒷",Bscr:"ℬ",bsemi:"⁏",bsim:"∽",bsime:"⋍",bsolb:"⧅",bsol:"\\",bsolhsub:"⟈",bull:"•",bullet:"•",bump:"≎",bumpE:"⪮",bumpe:"≏",Bumpeq:"≎",bumpeq:"≏",Cacute:"Ć",cacute:"ć",capand:"⩄",capbrcup:"⩉",capcap:"⩋",cap:"∩",Cap:"⋒",capcup:"⩇",capdot:"⩀",CapitalDifferentialD:"ⅅ",caps:"∩︀",caret:"⁁",caron:"ˇ",Cayleys:"ℭ",ccaps:"⩍",Ccaron:"Č",ccaron:"č",Ccedil:"Ç",ccedil:"ç",Ccirc:"Ĉ",ccirc:"ĉ",Cconint:"∰",ccups:"⩌",ccupssm:"⩐",Cdot:"Ċ",cdot:"ċ",cedil:"¸",Cedilla:"¸",cemptyv:"⦲",cent:"¢",centerdot:"·",CenterDot:"·",cfr:"𝔠",Cfr:"ℭ",CHcy:"Ч",chcy:"ч",check:"✓",checkmark:"✓",Chi:"Χ",chi:"χ",circ:"ˆ",circeq:"≗",circlearrowleft:"↺",circlearrowright:"↻",circledast:"⊛",circledcirc:"⊚",circleddash:"⊝",CircleDot:"⊙",circledR:"®",circledS:"Ⓢ",CircleMinus:"⊖",CirclePlus:"⊕",CircleTimes:"⊗",cir:"○",cirE:"⧃",cire:"≗",cirfnint:"⨐",cirmid:"⫯",cirscir:"⧂",ClockwiseContourIntegral:"∲",CloseCurlyDoubleQuote:"”",CloseCurlyQuote:"’",clubs:"♣",clubsuit:"♣",colon:":",Colon:"∷",Colone:"⩴",colone:"≔",coloneq:"≔",comma:",",commat:"@",comp:"∁",compfn:"∘",complement:"∁",complexes:"ℂ",cong:"≅",congdot:"⩭",Congruent:"≡",conint:"∮",Conint:"∯",ContourIntegral:"∮",copf:"𝕔",Copf:"ℂ",coprod:"∐",Coproduct:"∐",copy:"©",COPY:"©",copysr:"℗",CounterClockwiseContourIntegral:"∳",crarr:"↵",cross:"✗",Cross:"⨯",Cscr:"𝒞",cscr:"𝒸",csub:"⫏",csube:"⫑",csup:"⫐",csupe:"⫒",ctdot:"⋯",cudarrl:"⤸",cudarrr:"⤵",cuepr:"⋞",cuesc:"⋟",cularr:"↶",cularrp:"⤽",cupbrcap:"⩈",cupcap:"⩆",CupCap:"≍",cup:"∪",Cup:"⋓",cupcup:"⩊",cupdot:"⊍",cupor:"⩅",cups:"∪︀",curarr:"↷",curarrm:"⤼",curlyeqprec:"⋞",curlyeqsucc:"⋟",curlyvee:"⋎",curlywedge:"⋏",curren:"¤",curvearrowleft:"↶",curvearrowright:"↷",cuvee:"⋎",cuwed:"⋏",cwconint:"∲",cwint:"∱",cylcty:"⌭",dagger:"†",Dagger:"‡",daleth:"ℸ",darr:"↓",Darr:"↡",dArr:"⇓",dash:"‐",Dashv:"⫤",dashv:"⊣",dbkarow:"⤏",dblac:"˝",Dcaron:"Ď",dcaron:"ď",Dcy:"Д",dcy:"д",ddagger:"‡",ddarr:"⇊",DD:"ⅅ",dd:"ⅆ",DDotrahd:"⤑",ddotseq:"⩷",deg:"°",Del:"∇",Delta:"Δ",delta:"δ",demptyv:"⦱",dfisht:"⥿",Dfr:"𝔇",dfr:"𝔡",dHar:"⥥",dharl:"⇃",dharr:"⇂",DiacriticalAcute:"´",DiacriticalDot:"˙",DiacriticalDoubleAcute:"˝",DiacriticalGrave:"`",DiacriticalTilde:"˜",diam:"⋄",diamond:"⋄",Diamond:"⋄",diamondsuit:"♦",diams:"♦",die:"¨",DifferentialD:"ⅆ",digamma:"ϝ",disin:"⋲",div:"÷",divide:"÷",divideontimes:"⋇",divonx:"⋇",DJcy:"Ђ",djcy:"ђ",dlcorn:"⌞",dlcrop:"⌍",dollar:"$",Dopf:"𝔻",dopf:"𝕕",Dot:"¨",dot:"˙",DotDot:"⃜",doteq:"≐",doteqdot:"≑",DotEqual:"≐",dotminus:"∸",dotplus:"∔",dotsquare:"⊡",doublebarwedge:"⌆",DoubleContourIntegral:"∯",DoubleDot:"¨",DoubleDownArrow:"⇓",DoubleLeftArrow:"⇐",DoubleLeftRightArrow:"⇔",DoubleLeftTee:"⫤",DoubleLongLeftArrow:"⟸",DoubleLongLeftRightArrow:"⟺",DoubleLongRightArrow:"⟹",DoubleRightArrow:"⇒",DoubleRightTee:"⊨",DoubleUpArrow:"⇑",DoubleUpDownArrow:"⇕",DoubleVerticalBar:"∥",DownArrowBar:"⤓",downarrow:"↓",DownArrow:"↓",Downarrow:"⇓",DownArrowUpArrow:"⇵",DownBreve:"̑",downdownarrows:"⇊",downharpoonleft:"⇃",downharpoonright:"⇂",DownLeftRightVector:"⥐",DownLeftTeeVector:"⥞",DownLeftVectorBar:"⥖",DownLeftVector:"↽",DownRightTeeVector:"⥟",DownRightVectorBar:"⥗",DownRightVector:"⇁",DownTeeArrow:"↧",DownTee:"⊤",drbkarow:"⤐",drcorn:"⌟",drcrop:"⌌",Dscr:"𝒟",dscr:"𝒹",DScy:"Ѕ",dscy:"ѕ",dsol:"⧶",Dstrok:"Đ",dstrok:"đ",dtdot:"⋱",dtri:"▿",dtrif:"▾",duarr:"⇵",duhar:"⥯",dwangle:"⦦",DZcy:"Џ",dzcy:"џ",dzigrarr:"⟿",Eacute:"É",eacute:"é",easter:"⩮",Ecaron:"Ě",ecaron:"ě",Ecirc:"Ê",ecirc:"ê",ecir:"≖",ecolon:"≕",Ecy:"Э",ecy:"э",eDDot:"⩷",Edot:"Ė",edot:"ė",eDot:"≑",ee:"ⅇ",efDot:"≒",Efr:"𝔈",efr:"𝔢",eg:"⪚",Egrave:"È",egrave:"è",egs:"⪖",egsdot:"⪘",el:"⪙",Element:"∈",elinters:"⏧",ell:"ℓ",els:"⪕",elsdot:"⪗",Emacr:"Ē",emacr:"ē",empty:"∅",emptyset:"∅",EmptySmallSquare:"◻",emptyv:"∅",EmptyVerySmallSquare:"▫",emsp13:" ",emsp14:" ",emsp:" ",ENG:"Ŋ",eng:"ŋ",ensp:" ",Eogon:"Ę",eogon:"ę",Eopf:"𝔼",eopf:"𝕖",epar:"⋕",eparsl:"⧣",eplus:"⩱",epsi:"ε",Epsilon:"Ε",epsilon:"ε",epsiv:"ϵ",eqcirc:"≖",eqcolon:"≕",eqsim:"≂",eqslantgtr:"⪖",eqslantless:"⪕",Equal:"⩵",equals:"=",EqualTilde:"≂",equest:"≟",Equilibrium:"⇌",equiv:"≡",equivDD:"⩸",eqvparsl:"⧥",erarr:"⥱",erDot:"≓",escr:"ℯ",Escr:"ℰ",esdot:"≐",Esim:"⩳",esim:"≂",Eta:"Η",eta:"η",ETH:"Ð",eth:"ð",Euml:"Ë",euml:"ë",euro:"€",excl:"!",exist:"∃",Exists:"∃",expectation:"ℰ",exponentiale:"ⅇ",ExponentialE:"ⅇ",fallingdotseq:"≒",Fcy:"Ф",fcy:"ф",female:"♀",ffilig:"ffi",fflig:"ff",ffllig:"ffl",Ffr:"𝔉",ffr:"𝔣",filig:"fi",FilledSmallSquare:"◼",FilledVerySmallSquare:"▪",fjlig:"fj",flat:"♭",fllig:"fl",fltns:"▱",fnof:"ƒ",Fopf:"𝔽",fopf:"𝕗",forall:"∀",ForAll:"∀",fork:"⋔",forkv:"⫙",Fouriertrf:"ℱ",fpartint:"⨍",frac12:"½",frac13:"⅓",frac14:"¼",frac15:"⅕",frac16:"⅙",frac18:"⅛",frac23:"⅔",frac25:"⅖",frac34:"¾",frac35:"⅗",frac38:"⅜",frac45:"⅘",frac56:"⅚",frac58:"⅝",frac78:"⅞",frasl:"⁄",frown:"⌢",fscr:"𝒻",Fscr:"ℱ",gacute:"ǵ",Gamma:"Γ",gamma:"γ",Gammad:"Ϝ",gammad:"ϝ",gap:"⪆",Gbreve:"Ğ",gbreve:"ğ",Gcedil:"Ģ",Gcirc:"Ĝ",gcirc:"ĝ",Gcy:"Г",gcy:"г",Gdot:"Ġ",gdot:"ġ",ge:"≥",gE:"≧",gEl:"⪌",gel:"⋛",geq:"≥",geqq:"≧",geqslant:"⩾",gescc:"⪩",ges:"⩾",gesdot:"⪀",gesdoto:"⪂",gesdotol:"⪄",gesl:"⋛︀",gesles:"⪔",Gfr:"𝔊",gfr:"𝔤",gg:"≫",Gg:"⋙",ggg:"⋙",gimel:"ℷ",GJcy:"Ѓ",gjcy:"ѓ",gla:"⪥",gl:"≷",glE:"⪒",glj:"⪤",gnap:"⪊",gnapprox:"⪊",gne:"⪈",gnE:"≩",gneq:"⪈",gneqq:"≩",gnsim:"⋧",Gopf:"𝔾",gopf:"𝕘",grave:"`",GreaterEqual:"≥",GreaterEqualLess:"⋛",GreaterFullEqual:"≧",GreaterGreater:"⪢",GreaterLess:"≷",GreaterSlantEqual:"⩾",GreaterTilde:"≳",Gscr:"𝒢",gscr:"ℊ",gsim:"≳",gsime:"⪎",gsiml:"⪐",gtcc:"⪧",gtcir:"⩺",gt:">",GT:">",Gt:"≫",gtdot:"⋗",gtlPar:"⦕",gtquest:"⩼",gtrapprox:"⪆",gtrarr:"⥸",gtrdot:"⋗",gtreqless:"⋛",gtreqqless:"⪌",gtrless:"≷",gtrsim:"≳",gvertneqq:"≩︀",gvnE:"≩︀",Hacek:"ˇ",hairsp:" ",half:"½",hamilt:"ℋ",HARDcy:"Ъ",hardcy:"ъ",harrcir:"⥈",harr:"↔",hArr:"⇔",harrw:"↭",Hat:"^",hbar:"ℏ",Hcirc:"Ĥ",hcirc:"ĥ",hearts:"♥",heartsuit:"♥",hellip:"…",hercon:"⊹",hfr:"𝔥",Hfr:"ℌ",HilbertSpace:"ℋ",hksearow:"⤥",hkswarow:"⤦",hoarr:"⇿",homtht:"∻",hookleftarrow:"↩",hookrightarrow:"↪",hopf:"𝕙",Hopf:"ℍ",horbar:"―",HorizontalLine:"─",hscr:"𝒽",Hscr:"ℋ",hslash:"ℏ",Hstrok:"Ħ",hstrok:"ħ",HumpDownHump:"≎",HumpEqual:"≏",hybull:"⁃",hyphen:"‐",Iacute:"Í",iacute:"í",ic:"⁣",Icirc:"Î",icirc:"î",Icy:"И",icy:"и",Idot:"İ",IEcy:"Е",iecy:"е",iexcl:"¡",iff:"⇔",ifr:"𝔦",Ifr:"ℑ",Igrave:"Ì",igrave:"ì",ii:"ⅈ",iiiint:"⨌",iiint:"∭",iinfin:"⧜",iiota:"℩",IJlig:"IJ",ijlig:"ij",Imacr:"Ī",imacr:"ī",image:"ℑ",ImaginaryI:"ⅈ",imagline:"ℐ",imagpart:"ℑ",imath:"ı",Im:"ℑ",imof:"⊷",imped:"Ƶ",Implies:"⇒",incare:"℅",in:"∈",infin:"∞",infintie:"⧝",inodot:"ı",intcal:"⊺",int:"∫",Int:"∬",integers:"ℤ",Integral:"∫",intercal:"⊺",Intersection:"⋂",intlarhk:"⨗",intprod:"⨼",InvisibleComma:"⁣",InvisibleTimes:"⁢",IOcy:"Ё",iocy:"ё",Iogon:"Į",iogon:"į",Iopf:"𝕀",iopf:"𝕚",Iota:"Ι",iota:"ι",iprod:"⨼",iquest:"¿",iscr:"𝒾",Iscr:"ℐ",isin:"∈",isindot:"⋵",isinE:"⋹",isins:"⋴",isinsv:"⋳",isinv:"∈",it:"⁢",Itilde:"Ĩ",itilde:"ĩ",Iukcy:"І",iukcy:"і",Iuml:"Ï",iuml:"ï",Jcirc:"Ĵ",jcirc:"ĵ",Jcy:"Й",jcy:"й",Jfr:"𝔍",jfr:"𝔧",jmath:"ȷ",Jopf:"𝕁",jopf:"𝕛",Jscr:"𝒥",jscr:"𝒿",Jsercy:"Ј",jsercy:"ј",Jukcy:"Є",jukcy:"є",Kappa:"Κ",kappa:"κ",kappav:"ϰ",Kcedil:"Ķ",kcedil:"ķ",Kcy:"К",kcy:"к",Kfr:"𝔎",kfr:"𝔨",kgreen:"ĸ",KHcy:"Х",khcy:"х",KJcy:"Ќ",kjcy:"ќ",Kopf:"𝕂",kopf:"𝕜",Kscr:"𝒦",kscr:"𝓀",lAarr:"⇚",Lacute:"Ĺ",lacute:"ĺ",laemptyv:"⦴",lagran:"ℒ",Lambda:"Λ",lambda:"λ",lang:"⟨",Lang:"⟪",langd:"⦑",langle:"⟨",lap:"⪅",Laplacetrf:"ℒ",laquo:"«",larrb:"⇤",larrbfs:"⤟",larr:"←",Larr:"↞",lArr:"⇐",larrfs:"⤝",larrhk:"↩",larrlp:"↫",larrpl:"⤹",larrsim:"⥳",larrtl:"↢",latail:"⤙",lAtail:"⤛",lat:"⪫",late:"⪭",lates:"⪭︀",lbarr:"⤌",lBarr:"⤎",lbbrk:"❲",lbrace:"{",lbrack:"[",lbrke:"⦋",lbrksld:"⦏",lbrkslu:"⦍",Lcaron:"Ľ",lcaron:"ľ",Lcedil:"Ļ",lcedil:"ļ",lceil:"⌈",lcub:"{",Lcy:"Л",lcy:"л",ldca:"⤶",ldquo:"“",ldquor:"„",ldrdhar:"⥧",ldrushar:"⥋",ldsh:"↲",le:"≤",lE:"≦",LeftAngleBracket:"⟨",LeftArrowBar:"⇤",leftarrow:"←",LeftArrow:"←",Leftarrow:"⇐",LeftArrowRightArrow:"⇆",leftarrowtail:"↢",LeftCeiling:"⌈",LeftDoubleBracket:"⟦",LeftDownTeeVector:"⥡",LeftDownVectorBar:"⥙",LeftDownVector:"⇃",LeftFloor:"⌊",leftharpoondown:"↽",leftharpoonup:"↼",leftleftarrows:"⇇",leftrightarrow:"↔",LeftRightArrow:"↔",Leftrightarrow:"⇔",leftrightarrows:"⇆",leftrightharpoons:"⇋",leftrightsquigarrow:"↭",LeftRightVector:"⥎",LeftTeeArrow:"↤",LeftTee:"⊣",LeftTeeVector:"⥚",leftthreetimes:"⋋",LeftTriangleBar:"⧏",LeftTriangle:"⊲",LeftTriangleEqual:"⊴",LeftUpDownVector:"⥑",LeftUpTeeVector:"⥠",LeftUpVectorBar:"⥘",LeftUpVector:"↿",LeftVectorBar:"⥒",LeftVector:"↼",lEg:"⪋",leg:"⋚",leq:"≤",leqq:"≦",leqslant:"⩽",lescc:"⪨",les:"⩽",lesdot:"⩿",lesdoto:"⪁",lesdotor:"⪃",lesg:"⋚︀",lesges:"⪓",lessapprox:"⪅",lessdot:"⋖",lesseqgtr:"⋚",lesseqqgtr:"⪋",LessEqualGreater:"⋚",LessFullEqual:"≦",LessGreater:"≶",lessgtr:"≶",LessLess:"⪡",lesssim:"≲",LessSlantEqual:"⩽",LessTilde:"≲",lfisht:"⥼",lfloor:"⌊",Lfr:"𝔏",lfr:"𝔩",lg:"≶",lgE:"⪑",lHar:"⥢",lhard:"↽",lharu:"↼",lharul:"⥪",lhblk:"▄",LJcy:"Љ",ljcy:"љ",llarr:"⇇",ll:"≪",Ll:"⋘",llcorner:"⌞",Lleftarrow:"⇚",llhard:"⥫",lltri:"◺",Lmidot:"Ŀ",lmidot:"ŀ",lmoustache:"⎰",lmoust:"⎰",lnap:"⪉",lnapprox:"⪉",lne:"⪇",lnE:"≨",lneq:"⪇",lneqq:"≨",lnsim:"⋦",loang:"⟬",loarr:"⇽",lobrk:"⟦",longleftarrow:"⟵",LongLeftArrow:"⟵",Longleftarrow:"⟸",longleftrightarrow:"⟷",LongLeftRightArrow:"⟷",Longleftrightarrow:"⟺",longmapsto:"⟼",longrightarrow:"⟶",LongRightArrow:"⟶",Longrightarrow:"⟹",looparrowleft:"↫",looparrowright:"↬",lopar:"⦅",Lopf:"𝕃",lopf:"𝕝",loplus:"⨭",lotimes:"⨴",lowast:"∗",lowbar:"_",LowerLeftArrow:"↙",LowerRightArrow:"↘",loz:"◊",lozenge:"◊",lozf:"⧫",lpar:"(",lparlt:"⦓",lrarr:"⇆",lrcorner:"⌟",lrhar:"⇋",lrhard:"⥭",lrm:"‎",lrtri:"⊿",lsaquo:"‹",lscr:"𝓁",Lscr:"ℒ",lsh:"↰",Lsh:"↰",lsim:"≲",lsime:"⪍",lsimg:"⪏",lsqb:"[",lsquo:"‘",lsquor:"‚",Lstrok:"Ł",lstrok:"ł",ltcc:"⪦",ltcir:"⩹",lt:"<",LT:"<",Lt:"≪",ltdot:"⋖",lthree:"⋋",ltimes:"⋉",ltlarr:"⥶",ltquest:"⩻",ltri:"◃",ltrie:"⊴",ltrif:"◂",ltrPar:"⦖",lurdshar:"⥊",luruhar:"⥦",lvertneqq:"≨︀",lvnE:"≨︀",macr:"¯",male:"♂",malt:"✠",maltese:"✠",Map:"⤅",map:"↦",mapsto:"↦",mapstodown:"↧",mapstoleft:"↤",mapstoup:"↥",marker:"▮",mcomma:"⨩",Mcy:"М",mcy:"м",mdash:"—",mDDot:"∺",measuredangle:"∡",MediumSpace:" ",Mellintrf:"ℳ",Mfr:"𝔐",mfr:"𝔪",mho:"℧",micro:"µ",midast:"*",midcir:"⫰",mid:"∣",middot:"·",minusb:"⊟",minus:"−",minusd:"∸",minusdu:"⨪",MinusPlus:"∓",mlcp:"⫛",mldr:"…",mnplus:"∓",models:"⊧",Mopf:"𝕄",mopf:"𝕞",mp:"∓",mscr:"𝓂",Mscr:"ℳ",mstpos:"∾",Mu:"Μ",mu:"μ",multimap:"⊸",mumap:"⊸",nabla:"∇",Nacute:"Ń",nacute:"ń",nang:"∠⃒",nap:"≉",napE:"⩰̸",napid:"≋̸",napos:"ʼn",napprox:"≉",natural:"♮",naturals:"ℕ",natur:"♮",nbsp:" ",nbump:"≎̸",nbumpe:"≏̸",ncap:"⩃",Ncaron:"Ň",ncaron:"ň",Ncedil:"Ņ",ncedil:"ņ",ncong:"≇",ncongdot:"⩭̸",ncup:"⩂",Ncy:"Н",ncy:"н",ndash:"–",nearhk:"⤤",nearr:"↗",neArr:"⇗",nearrow:"↗",ne:"≠",nedot:"≐̸",NegativeMediumSpace:"​",NegativeThickSpace:"​",NegativeThinSpace:"​",NegativeVeryThinSpace:"​",nequiv:"≢",nesear:"⤨",nesim:"≂̸",NestedGreaterGreater:"≫",NestedLessLess:"≪",NewLine:"\n",nexist:"∄",nexists:"∄",Nfr:"𝔑",nfr:"𝔫",ngE:"≧̸",nge:"≱",ngeq:"≱",ngeqq:"≧̸",ngeqslant:"⩾̸",nges:"⩾̸",nGg:"⋙̸",ngsim:"≵",nGt:"≫⃒",ngt:"≯",ngtr:"≯",nGtv:"≫̸",nharr:"↮",nhArr:"⇎",nhpar:"⫲",ni:"∋",nis:"⋼",nisd:"⋺",niv:"∋",NJcy:"Њ",njcy:"њ",nlarr:"↚",nlArr:"⇍",nldr:"‥",nlE:"≦̸",nle:"≰",nleftarrow:"↚",nLeftarrow:"⇍",nleftrightarrow:"↮",nLeftrightarrow:"⇎",nleq:"≰",nleqq:"≦̸",nleqslant:"⩽̸",nles:"⩽̸",nless:"≮",nLl:"⋘̸",nlsim:"≴",nLt:"≪⃒",nlt:"≮",nltri:"⋪",nltrie:"⋬",nLtv:"≪̸",nmid:"∤",NoBreak:"⁠",NonBreakingSpace:" ",nopf:"𝕟",Nopf:"ℕ",Not:"⫬",not:"¬",NotCongruent:"≢",NotCupCap:"≭",NotDoubleVerticalBar:"∦",NotElement:"∉",NotEqual:"≠",NotEqualTilde:"≂̸",NotExists:"∄",NotGreater:"≯",NotGreaterEqual:"≱",NotGreaterFullEqual:"≧̸",NotGreaterGreater:"≫̸",NotGreaterLess:"≹",NotGreaterSlantEqual:"⩾̸",NotGreaterTilde:"≵",NotHumpDownHump:"≎̸",NotHumpEqual:"≏̸",notin:"∉",notindot:"⋵̸",notinE:"⋹̸",notinva:"∉",notinvb:"⋷",notinvc:"⋶",NotLeftTriangleBar:"⧏̸",NotLeftTriangle:"⋪",NotLeftTriangleEqual:"⋬",NotLess:"≮",NotLessEqual:"≰",NotLessGreater:"≸",NotLessLess:"≪̸",NotLessSlantEqual:"⩽̸",NotLessTilde:"≴",NotNestedGreaterGreater:"⪢̸",NotNestedLessLess:"⪡̸",notni:"∌",notniva:"∌",notnivb:"⋾",notnivc:"⋽",NotPrecedes:"⊀",NotPrecedesEqual:"⪯̸",NotPrecedesSlantEqual:"⋠",NotReverseElement:"∌",NotRightTriangleBar:"⧐̸",NotRightTriangle:"⋫",NotRightTriangleEqual:"⋭",NotSquareSubset:"⊏̸",NotSquareSubsetEqual:"⋢",NotSquareSuperset:"⊐̸",NotSquareSupersetEqual:"⋣",NotSubset:"⊂⃒",NotSubsetEqual:"⊈",NotSucceeds:"⊁",NotSucceedsEqual:"⪰̸",NotSucceedsSlantEqual:"⋡",NotSucceedsTilde:"≿̸",NotSuperset:"⊃⃒",NotSupersetEqual:"⊉",NotTilde:"≁",NotTildeEqual:"≄",NotTildeFullEqual:"≇",NotTildeTilde:"≉",NotVerticalBar:"∤",nparallel:"∦",npar:"∦",nparsl:"⫽⃥",npart:"∂̸",npolint:"⨔",npr:"⊀",nprcue:"⋠",nprec:"⊀",npreceq:"⪯̸",npre:"⪯̸",nrarrc:"⤳̸",nrarr:"↛",nrArr:"⇏",nrarrw:"↝̸",nrightarrow:"↛",nRightarrow:"⇏",nrtri:"⋫",nrtrie:"⋭",nsc:"⊁",nsccue:"⋡",nsce:"⪰̸",Nscr:"𝒩",nscr:"𝓃",nshortmid:"∤",nshortparallel:"∦",nsim:"≁",nsime:"≄",nsimeq:"≄",nsmid:"∤",nspar:"∦",nsqsube:"⋢",nsqsupe:"⋣",nsub:"⊄",nsubE:"⫅̸",nsube:"⊈",nsubset:"⊂⃒",nsubseteq:"⊈",nsubseteqq:"⫅̸",nsucc:"⊁",nsucceq:"⪰̸",nsup:"⊅",nsupE:"⫆̸",nsupe:"⊉",nsupset:"⊃⃒",nsupseteq:"⊉",nsupseteqq:"⫆̸",ntgl:"≹",Ntilde:"Ñ",ntilde:"ñ",ntlg:"≸",ntriangleleft:"⋪",ntrianglelefteq:"⋬",ntriangleright:"⋫",ntrianglerighteq:"⋭",Nu:"Ν",nu:"ν",num:"#",numero:"№",numsp:" ",nvap:"≍⃒",nvdash:"⊬",nvDash:"⊭",nVdash:"⊮",nVDash:"⊯",nvge:"≥⃒",nvgt:">⃒",nvHarr:"⤄",nvinfin:"⧞",nvlArr:"⤂",nvle:"≤⃒",nvlt:"<⃒",nvltrie:"⊴⃒",nvrArr:"⤃",nvrtrie:"⊵⃒",nvsim:"∼⃒",nwarhk:"⤣",nwarr:"↖",nwArr:"⇖",nwarrow:"↖",nwnear:"⤧",Oacute:"Ó",oacute:"ó",oast:"⊛",Ocirc:"Ô",ocirc:"ô",ocir:"⊚",Ocy:"О",ocy:"о",odash:"⊝",Odblac:"Ő",odblac:"ő",odiv:"⨸",odot:"⊙",odsold:"⦼",OElig:"Œ",oelig:"œ",ofcir:"⦿",Ofr:"𝔒",ofr:"𝔬",ogon:"˛",Ograve:"Ò",ograve:"ò",ogt:"⧁",ohbar:"⦵",ohm:"Ω",oint:"∮",olarr:"↺",olcir:"⦾",olcross:"⦻",oline:"‾",olt:"⧀",Omacr:"Ō",omacr:"ō",Omega:"Ω",omega:"ω",Omicron:"Ο",omicron:"ο",omid:"⦶",ominus:"⊖",Oopf:"𝕆",oopf:"𝕠",opar:"⦷",OpenCurlyDoubleQuote:"“",OpenCurlyQuote:"‘",operp:"⦹",oplus:"⊕",orarr:"↻",Or:"⩔",or:"∨",ord:"⩝",order:"ℴ",orderof:"ℴ",ordf:"ª",ordm:"º",origof:"⊶",oror:"⩖",orslope:"⩗",orv:"⩛",oS:"Ⓢ",Oscr:"𝒪",oscr:"ℴ",Oslash:"Ø",oslash:"ø",osol:"⊘",Otilde:"Õ",otilde:"õ",otimesas:"⨶",Otimes:"⨷",otimes:"⊗",Ouml:"Ö",ouml:"ö",ovbar:"⌽",OverBar:"‾",OverBrace:"⏞",OverBracket:"⎴",OverParenthesis:"⏜",para:"¶",parallel:"∥",par:"∥",parsim:"⫳",parsl:"⫽",part:"∂",PartialD:"∂",Pcy:"П",pcy:"п",percnt:"%",period:".",permil:"‰",perp:"⊥",pertenk:"‱",Pfr:"𝔓",pfr:"𝔭",Phi:"Φ",phi:"φ",phiv:"ϕ",phmmat:"ℳ",phone:"☎",Pi:"Π",pi:"π",pitchfork:"⋔",piv:"ϖ",planck:"ℏ",planckh:"ℎ",plankv:"ℏ",plusacir:"⨣",plusb:"⊞",pluscir:"⨢",plus:"+",plusdo:"∔",plusdu:"⨥",pluse:"⩲",PlusMinus:"±",plusmn:"±",plussim:"⨦",plustwo:"⨧",pm:"±",Poincareplane:"ℌ",pointint:"⨕",popf:"𝕡",Popf:"ℙ",pound:"£",prap:"⪷",Pr:"⪻",pr:"≺",prcue:"≼",precapprox:"⪷",prec:"≺",preccurlyeq:"≼",Precedes:"≺",PrecedesEqual:"⪯",PrecedesSlantEqual:"≼",PrecedesTilde:"≾",preceq:"⪯",precnapprox:"⪹",precneqq:"⪵",precnsim:"⋨",pre:"⪯",prE:"⪳",precsim:"≾",prime:"′",Prime:"″",primes:"ℙ",prnap:"⪹",prnE:"⪵",prnsim:"⋨",prod:"∏",Product:"∏",profalar:"⌮",profline:"⌒",profsurf:"⌓",prop:"∝",Proportional:"∝",Proportion:"∷",propto:"∝",prsim:"≾",prurel:"⊰",Pscr:"𝒫",pscr:"𝓅",Psi:"Ψ",psi:"ψ",puncsp:" ",Qfr:"𝔔",qfr:"𝔮",qint:"⨌",qopf:"𝕢",Qopf:"ℚ",qprime:"⁗",Qscr:"𝒬",qscr:"𝓆",quaternions:"ℍ",quatint:"⨖",quest:"?",questeq:"≟",quot:'"',QUOT:'"',rAarr:"⇛",race:"∽̱",Racute:"Ŕ",racute:"ŕ",radic:"√",raemptyv:"⦳",rang:"⟩",Rang:"⟫",rangd:"⦒",range:"⦥",rangle:"⟩",raquo:"»",rarrap:"⥵",rarrb:"⇥",rarrbfs:"⤠",rarrc:"⤳",rarr:"→",Rarr:"↠",rArr:"⇒",rarrfs:"⤞",rarrhk:"↪",rarrlp:"↬",rarrpl:"⥅",rarrsim:"⥴",Rarrtl:"⤖",rarrtl:"↣",rarrw:"↝",ratail:"⤚",rAtail:"⤜",ratio:"∶",rationals:"ℚ",rbarr:"⤍",rBarr:"⤏",RBarr:"⤐",rbbrk:"❳",rbrace:"}",rbrack:"]",rbrke:"⦌",rbrksld:"⦎",rbrkslu:"⦐",Rcaron:"Ř",rcaron:"ř",Rcedil:"Ŗ",rcedil:"ŗ",rceil:"⌉",rcub:"}",Rcy:"Р",rcy:"р",rdca:"⤷",rdldhar:"⥩",rdquo:"”",rdquor:"”",rdsh:"↳",real:"ℜ",realine:"ℛ",realpart:"ℜ",reals:"ℝ",Re:"ℜ",rect:"▭",reg:"®",REG:"®",ReverseElement:"∋",ReverseEquilibrium:"⇋",ReverseUpEquilibrium:"⥯",rfisht:"⥽",rfloor:"⌋",rfr:"𝔯",Rfr:"ℜ",rHar:"⥤",rhard:"⇁",rharu:"⇀",rharul:"⥬",Rho:"Ρ",rho:"ρ",rhov:"ϱ",RightAngleBracket:"⟩",RightArrowBar:"⇥",rightarrow:"→",RightArrow:"→",Rightarrow:"⇒",RightArrowLeftArrow:"⇄",rightarrowtail:"↣",RightCeiling:"⌉",RightDoubleBracket:"⟧",RightDownTeeVector:"⥝",RightDownVectorBar:"⥕",RightDownVector:"⇂",RightFloor:"⌋",rightharpoondown:"⇁",rightharpoonup:"⇀",rightleftarrows:"⇄",rightleftharpoons:"⇌",rightrightarrows:"⇉",rightsquigarrow:"↝",RightTeeArrow:"↦",RightTee:"⊢",RightTeeVector:"⥛",rightthreetimes:"⋌",RightTriangleBar:"⧐",RightTriangle:"⊳",RightTriangleEqual:"⊵",RightUpDownVector:"⥏",RightUpTeeVector:"⥜",RightUpVectorBar:"⥔",RightUpVector:"↾",RightVectorBar:"⥓",RightVector:"⇀",ring:"˚",risingdotseq:"≓",rlarr:"⇄",rlhar:"⇌",rlm:"‏",rmoustache:"⎱",rmoust:"⎱",rnmid:"⫮",roang:"⟭",roarr:"⇾",robrk:"⟧",ropar:"⦆",ropf:"𝕣",Ropf:"ℝ",roplus:"⨮",rotimes:"⨵",RoundImplies:"⥰",rpar:")",rpargt:"⦔",rppolint:"⨒",rrarr:"⇉",Rrightarrow:"⇛",rsaquo:"›",rscr:"𝓇",Rscr:"ℛ",rsh:"↱",Rsh:"↱",rsqb:"]",rsquo:"’",rsquor:"’",rthree:"⋌",rtimes:"⋊",rtri:"▹",rtrie:"⊵",rtrif:"▸",rtriltri:"⧎",RuleDelayed:"⧴",ruluhar:"⥨",rx:"℞",Sacute:"Ś",sacute:"ś",sbquo:"‚",scap:"⪸",Scaron:"Š",scaron:"š",Sc:"⪼",sc:"≻",sccue:"≽",sce:"⪰",scE:"⪴",Scedil:"Ş",scedil:"ş",Scirc:"Ŝ",scirc:"ŝ",scnap:"⪺",scnE:"⪶",scnsim:"⋩",scpolint:"⨓",scsim:"≿",Scy:"С",scy:"с",sdotb:"⊡",sdot:"⋅",sdote:"⩦",searhk:"⤥",searr:"↘",seArr:"⇘",searrow:"↘",sect:"§",semi:";",seswar:"⤩",setminus:"∖",setmn:"∖",sext:"✶",Sfr:"𝔖",sfr:"𝔰",sfrown:"⌢",sharp:"♯",SHCHcy:"Щ",shchcy:"щ",SHcy:"Ш",shcy:"ш",ShortDownArrow:"↓",ShortLeftArrow:"←",shortmid:"∣",shortparallel:"∥",ShortRightArrow:"→",ShortUpArrow:"↑",shy:"­",Sigma:"Σ",sigma:"σ",sigmaf:"ς",sigmav:"ς",sim:"∼",simdot:"⩪",sime:"≃",simeq:"≃",simg:"⪞",simgE:"⪠",siml:"⪝",simlE:"⪟",simne:"≆",simplus:"⨤",simrarr:"⥲",slarr:"←",SmallCircle:"∘",smallsetminus:"∖",smashp:"⨳",smeparsl:"⧤",smid:"∣",smile:"⌣",smt:"⪪",smte:"⪬",smtes:"⪬︀",SOFTcy:"Ь",softcy:"ь",solbar:"⌿",solb:"⧄",sol:"/",Sopf:"𝕊",sopf:"𝕤",spades:"♠",spadesuit:"♠",spar:"∥",sqcap:"⊓",sqcaps:"⊓︀",sqcup:"⊔",sqcups:"⊔︀",Sqrt:"√",sqsub:"⊏",sqsube:"⊑",sqsubset:"⊏",sqsubseteq:"⊑",sqsup:"⊐",sqsupe:"⊒",sqsupset:"⊐",sqsupseteq:"⊒",square:"□",Square:"□",SquareIntersection:"⊓",SquareSubset:"⊏",SquareSubsetEqual:"⊑",SquareSuperset:"⊐",SquareSupersetEqual:"⊒",SquareUnion:"⊔",squarf:"▪",squ:"□",squf:"▪",srarr:"→",Sscr:"𝒮",sscr:"𝓈",ssetmn:"∖",ssmile:"⌣",sstarf:"⋆",Star:"⋆",star:"☆",starf:"★",straightepsilon:"ϵ",straightphi:"ϕ",strns:"¯",sub:"⊂",Sub:"⋐",subdot:"⪽",subE:"⫅",sube:"⊆",subedot:"⫃",submult:"⫁",subnE:"⫋",subne:"⊊",subplus:"⪿",subrarr:"⥹",subset:"⊂",Subset:"⋐",subseteq:"⊆",subseteqq:"⫅",SubsetEqual:"⊆",subsetneq:"⊊",subsetneqq:"⫋",subsim:"⫇",subsub:"⫕",subsup:"⫓",succapprox:"⪸",succ:"≻",succcurlyeq:"≽",Succeeds:"≻",SucceedsEqual:"⪰",SucceedsSlantEqual:"≽",SucceedsTilde:"≿",succeq:"⪰",succnapprox:"⪺",succneqq:"⪶",succnsim:"⋩",succsim:"≿",SuchThat:"∋",sum:"∑",Sum:"∑",sung:"♪",sup1:"¹",sup2:"²",sup3:"³",sup:"⊃",Sup:"⋑",supdot:"⪾",supdsub:"⫘",supE:"⫆",supe:"⊇",supedot:"⫄",Superset:"⊃",SupersetEqual:"⊇",suphsol:"⟉",suphsub:"⫗",suplarr:"⥻",supmult:"⫂",supnE:"⫌",supne:"⊋",supplus:"⫀",supset:"⊃",Supset:"⋑",supseteq:"⊇",supseteqq:"⫆",supsetneq:"⊋",supsetneqq:"⫌",supsim:"⫈",supsub:"⫔",supsup:"⫖",swarhk:"⤦",swarr:"↙",swArr:"⇙",swarrow:"↙",swnwar:"⤪",szlig:"ß",Tab:"\t",target:"⌖",Tau:"Τ",tau:"τ",tbrk:"⎴",Tcaron:"Ť",tcaron:"ť",Tcedil:"Ţ",tcedil:"ţ",Tcy:"Т",tcy:"т",tdot:"⃛",telrec:"⌕",Tfr:"𝔗",tfr:"𝔱",there4:"∴",therefore:"∴",Therefore:"∴",Theta:"Θ",theta:"θ",thetasym:"ϑ",thetav:"ϑ",thickapprox:"≈",thicksim:"∼",ThickSpace:"  ",ThinSpace:" ",thinsp:" ",thkap:"≈",thksim:"∼",THORN:"Þ",thorn:"þ",tilde:"˜",Tilde:"∼",TildeEqual:"≃",TildeFullEqual:"≅",TildeTilde:"≈",timesbar:"⨱",timesb:"⊠",times:"×",timesd:"⨰",tint:"∭",toea:"⤨",topbot:"⌶",topcir:"⫱",top:"⊤",Topf:"𝕋",topf:"𝕥",topfork:"⫚",tosa:"⤩",tprime:"‴",trade:"™",TRADE:"™",triangle:"▵",triangledown:"▿",triangleleft:"◃",trianglelefteq:"⊴",triangleq:"≜",triangleright:"▹",trianglerighteq:"⊵",tridot:"◬",trie:"≜",triminus:"⨺",TripleDot:"⃛",triplus:"⨹",trisb:"⧍",tritime:"⨻",trpezium:"⏢",Tscr:"𝒯",tscr:"𝓉",TScy:"Ц",tscy:"ц",TSHcy:"Ћ",tshcy:"ћ",Tstrok:"Ŧ",tstrok:"ŧ",twixt:"≬",twoheadleftarrow:"↞",twoheadrightarrow:"↠",Uacute:"Ú",uacute:"ú",uarr:"↑",Uarr:"↟",uArr:"⇑",Uarrocir:"⥉",Ubrcy:"Ў",ubrcy:"ў",Ubreve:"Ŭ",ubreve:"ŭ",Ucirc:"Û",ucirc:"û",Ucy:"У",ucy:"у",udarr:"⇅",Udblac:"Ű",udblac:"ű",udhar:"⥮",ufisht:"⥾",Ufr:"𝔘",ufr:"𝔲",Ugrave:"Ù",ugrave:"ù",uHar:"⥣",uharl:"↿",uharr:"↾",uhblk:"▀",ulcorn:"⌜",ulcorner:"⌜",ulcrop:"⌏",ultri:"◸",Umacr:"Ū",umacr:"ū",uml:"¨",UnderBar:"_",UnderBrace:"⏟",UnderBracket:"⎵",UnderParenthesis:"⏝",Union:"⋃",UnionPlus:"⊎",Uogon:"Ų",uogon:"ų",Uopf:"𝕌",uopf:"𝕦",UpArrowBar:"⤒",uparrow:"↑",UpArrow:"↑",Uparrow:"⇑",UpArrowDownArrow:"⇅",updownarrow:"↕",UpDownArrow:"↕",Updownarrow:"⇕",UpEquilibrium:"⥮",upharpoonleft:"↿",upharpoonright:"↾",uplus:"⊎",UpperLeftArrow:"↖",UpperRightArrow:"↗",upsi:"υ",Upsi:"ϒ",upsih:"ϒ",Upsilon:"Υ",upsilon:"υ",UpTeeArrow:"↥",UpTee:"⊥",upuparrows:"⇈",urcorn:"⌝",urcorner:"⌝",urcrop:"⌎",Uring:"Ů",uring:"ů",urtri:"◹",Uscr:"𝒰",uscr:"𝓊",utdot:"⋰",Utilde:"Ũ",utilde:"ũ",utri:"▵",utrif:"▴",uuarr:"⇈",Uuml:"Ü",uuml:"ü",uwangle:"⦧",vangrt:"⦜",varepsilon:"ϵ",varkappa:"ϰ",varnothing:"∅",varphi:"ϕ",varpi:"ϖ",varpropto:"∝",varr:"↕",vArr:"⇕",varrho:"ϱ",varsigma:"ς",varsubsetneq:"⊊︀",varsubsetneqq:"⫋︀",varsupsetneq:"⊋︀",varsupsetneqq:"⫌︀",vartheta:"ϑ",vartriangleleft:"⊲",vartriangleright:"⊳",vBar:"⫨",Vbar:"⫫",vBarv:"⫩",Vcy:"В",vcy:"в",vdash:"⊢",vDash:"⊨",Vdash:"⊩",VDash:"⊫",Vdashl:"⫦",veebar:"⊻",vee:"∨",Vee:"⋁",veeeq:"≚",vellip:"⋮",verbar:"|",Verbar:"‖",vert:"|",Vert:"‖",VerticalBar:"∣",VerticalLine:"|",VerticalSeparator:"❘",VerticalTilde:"≀",VeryThinSpace:" ",Vfr:"𝔙",vfr:"𝔳",vltri:"⊲",vnsub:"⊂⃒",vnsup:"⊃⃒",Vopf:"𝕍",vopf:"𝕧",vprop:"∝",vrtri:"⊳",Vscr:"𝒱",vscr:"𝓋",vsubnE:"⫋︀",vsubne:"⊊︀",vsupnE:"⫌︀",vsupne:"⊋︀",Vvdash:"⊪",vzigzag:"⦚",Wcirc:"Ŵ",wcirc:"ŵ",wedbar:"⩟",wedge:"∧",Wedge:"⋀",wedgeq:"≙",weierp:"℘",Wfr:"𝔚",wfr:"𝔴",Wopf:"𝕎",wopf:"𝕨",wp:"℘",wr:"≀",wreath:"≀",Wscr:"𝒲",wscr:"𝓌",xcap:"⋂",xcirc:"◯",xcup:"⋃",xdtri:"▽",Xfr:"𝔛",xfr:"𝔵",xharr:"⟷",xhArr:"⟺",Xi:"Ξ",xi:"ξ",xlarr:"⟵",xlArr:"⟸",xmap:"⟼",xnis:"⋻",xodot:"⨀",Xopf:"𝕏",xopf:"𝕩",xoplus:"⨁",xotime:"⨂",xrarr:"⟶",xrArr:"⟹",Xscr:"𝒳",xscr:"𝓍",xsqcup:"⨆",xuplus:"⨄",xutri:"△",xvee:"⋁",xwedge:"⋀",Yacute:"Ý",yacute:"ý",YAcy:"Я",yacy:"я",Ycirc:"Ŷ",ycirc:"ŷ",Ycy:"Ы",ycy:"ы",yen:"¥",Yfr:"𝔜",yfr:"𝔶",YIcy:"Ї",yicy:"ї",Yopf:"𝕐",yopf:"𝕪",Yscr:"𝒴",yscr:"𝓎",YUcy:"Ю",yucy:"ю",yuml:"ÿ",Yuml:"Ÿ",Zacute:"Ź",zacute:"ź",Zcaron:"Ž",zcaron:"ž",Zcy:"З",zcy:"з",Zdot:"Ż",zdot:"ż",zeetrf:"ℨ",ZeroWidthSpace:"​",Zeta:"Ζ",zeta:"ζ",zfr:"𝔷",Zfr:"ℨ",ZHcy:"Ж",zhcy:"ж",zigrarr:"⇝",zopf:"𝕫",Zopf:"ℤ",Zscr:"𝒵",zscr:"𝓏",zwj:"‍",zwnj:"‌"}},function(e,t){e.exports={Aacute:"Á",aacute:"á",Acirc:"Â",acirc:"â",acute:"´",AElig:"Æ",aelig:"æ",Agrave:"À",agrave:"à",amp:"&",AMP:"&",Aring:"Å",aring:"å",Atilde:"Ã",atilde:"ã",Auml:"Ä",auml:"ä",brvbar:"¦",Ccedil:"Ç",ccedil:"ç",cedil:"¸",cent:"¢",copy:"©",COPY:"©",curren:"¤",deg:"°",divide:"÷",Eacute:"É",eacute:"é",Ecirc:"Ê",ecirc:"ê",Egrave:"È",egrave:"è",ETH:"Ð",eth:"ð",Euml:"Ë",euml:"ë",frac12:"½",frac14:"¼",frac34:"¾",gt:">",GT:">",Iacute:"Í",iacute:"í",Icirc:"Î",icirc:"î",iexcl:"¡",Igrave:"Ì",igrave:"ì",iquest:"¿",Iuml:"Ï",iuml:"ï",laquo:"«",lt:"<",LT:"<",macr:"¯",micro:"µ",middot:"·",nbsp:" ",not:"¬",Ntilde:"Ñ",ntilde:"ñ",Oacute:"Ó",oacute:"ó",Ocirc:"Ô",ocirc:"ô",Ograve:"Ò",ograve:"ò",ordf:"ª",ordm:"º",Oslash:"Ø",oslash:"ø",Otilde:"Õ",otilde:"õ",Ouml:"Ö",ouml:"ö",para:"¶",plusmn:"±",pound:"£",quot:'"',QUOT:'"',raquo:"»",reg:"®",REG:"®",sect:"§",shy:"­",sup1:"¹",sup2:"²",sup3:"³",szlig:"ß",THORN:"Þ",thorn:"þ",times:"×",Uacute:"Ú",uacute:"ú",Ucirc:"Û",ucirc:"û",Ugrave:"Ù",ugrave:"ù",uml:"¨",Uuml:"Ü",uuml:"ü",Yacute:"Ý",yacute:"ý",yen:"¥",yuml:"ÿ"}},function(e,t){e.exports={amp:"&",apos:"'",gt:">",lt:"<",quot:'"'}},function(e,t,n){function r(e,t,n){"object"==typeof e?(n=t,t=e,e=null):"function"==typeof t&&(n=t,t=u),this._callback=e,this._options=t||u,this._elementCB=n,this.dom=[],this._done=!1,this._tagStack=[],this._parser=this._parser||null}var i=n(1150),o=/\s+/g,a=n(1151),s=n(1152),u={normalizeWhitespace:!1,withStartIndices:!1,withEndIndices:!1};r.prototype.onparserinit=function(e){this._parser=e},r.prototype.onreset=function(){r.call(this,this._callback,this._options,this._elementCB)},r.prototype.onend=function(){this._done||(this._done=!0,this._parser=null,this._handleCallback(null))},r.prototype._handleCallback=r.prototype.onerror=function(e){if("function"==typeof this._callback)this._callback(e,this.dom);else if(e)throw e},r.prototype.onclosetag=function(){var e=this._tagStack.pop();this._options.withEndIndices&&(e.endIndex=this._parser.endIndex),this._elementCB&&this._elementCB(e)},r.prototype._createDomElement=function(e){if(!this._options.withDomLvl1)return e;var t;t="tag"===e.type?Object.create(s):Object.create(a);for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n]);return t},r.prototype._addDomElement=function(e){var t=this._tagStack[this._tagStack.length-1],n=t?t.children:this.dom,r=n[n.length-1];e.next=null,this._options.withStartIndices&&(e.startIndex=this._parser.startIndex),this._options.withEndIndices&&(e.endIndex=this._parser.endIndex),r?(e.prev=r,r.next=e):e.prev=null,n.push(e),e.parent=t||null},r.prototype.onopentag=function(e,t){var n={type:"script"===e?i.Script:"style"===e?i.Style:i.Tag,name:e,attribs:t,children:[]},r=this._createDomElement(n);this._addDomElement(r),this._tagStack.push(r)},r.prototype.ontext=function(e){var t,n=this._options.normalizeWhitespace||this._options.ignoreWhitespace;if(!this._tagStack.length&&this.dom.length&&(t=this.dom[this.dom.length-1]).type===i.Text)n?t.data=(t.data+e).replace(o," "):t.data+=e;else if(this._tagStack.length&&(t=this._tagStack[this._tagStack.length-1])&&(t=t.children[t.children.length-1])&&t.type===i.Text)n?t.data=(t.data+e).replace(o," "):t.data+=e;else{n&&(e=e.replace(o," "));var r=this._createDomElement({data:e,type:i.Text});this._addDomElement(r)}},r.prototype.oncomment=function(e){var t=this._tagStack[this._tagStack.length-1];if(t&&t.type===i.Comment)return void(t.data+=e);var n={data:e,type:i.Comment},r=this._createDomElement(n);this._addDomElement(r),this._tagStack.push(r)},r.prototype.oncdatastart=function(){var e={children:[{data:"",type:i.Text}],type:i.CDATA},t=this._createDomElement(e);this._addDomElement(t),this._tagStack.push(t)},r.prototype.oncommentend=r.prototype.oncdataend=function(){this._tagStack.pop()},r.prototype.onprocessinginstruction=function(e,t){var n=this._createDomElement({name:e,data:t,type:i.Directive});this._addDomElement(n)},e.exports=r},function(e,t){e.exports={Text:"text",Directive:"directive",Comment:"comment",Script:"script",Style:"style",Tag:"tag",CDATA:"cdata",Doctype:"doctype",isTag:function(e){return"tag"===e.type||"script"===e.type||"style"===e.type}}},function(e,t){var n=e.exports={get firstChild(){var e=this.children;return e&&e[0]||null},get lastChild(){var e=this.children;return e&&e[e.length-1]||null},get nodeType(){return i[this.type]||i.element}},r={tagName:"name",childNodes:"children",parentNode:"parent",previousSibling:"prev",nextSibling:"next",nodeValue:"data"},i={element:1,text:3,cdata:4,comment:8};Object.keys(r).forEach(function(e){var t=r[e];Object.defineProperty(n,e,{get:function(){return this[t]||null},set:function(e){return this[t]=e,e}})})},function(e,t,n){var r=n(1151),i=e.exports=Object.create(r),o={tagName:"name"};Object.keys(o).forEach(function(e){var t=o[e];Object.defineProperty(i,e,{ +get:function(){return this[t]||null},set:function(e){return this[t]=e,e}})})},function(e,t,n){function r(e,t){this.init(e,t)}function i(e,t){return l.getElementsByTagName(e,t,!0)}function o(e,t){return l.getElementsByTagName(e,t,!0,1)[0]}function a(e,t,n){return l.getText(l.getElementsByTagName(e,t,n,1)).trim()}function s(e,t,n,r,i){var o=a(n,r,i);o&&(e[t]=o)}var u=n(1141),c=u.DomHandler,l=u.DomUtils;n(328)(r,c),r.prototype.init=c;var p=function(e){return"rss"===e||"feed"===e||"rdf:RDF"===e};r.prototype.onend=function(){var e,t,n={},r=o(p,this.dom);r&&("feed"===r.name?(t=r.children,n.type="atom",s(n,"id","id",t),s(n,"title","title",t),(e=o("link",t))&&(e=e.attribs)&&(e=e.href)&&(n.link=e),s(n,"description","subtitle",t),(e=a("updated",t))&&(n.updated=new Date(e)),s(n,"author","email",t,!0),n.items=i("entry",t).map(function(e){var t,n={};return e=e.children,s(n,"id","id",e),s(n,"title","title",e),(t=o("link",e))&&(t=t.attribs)&&(t=t.href)&&(n.link=t),(t=a("summary",e)||a("content",e))&&(n.description=t),(t=a("updated",e))&&(n.pubDate=new Date(t)),n})):(t=o("channel",r.children).children,n.type=r.name.substr(0,3),n.id="",s(n,"title","title",t),s(n,"link","link",t),s(n,"description","description",t),(e=a("lastBuildDate",t))&&(n.updated=new Date(e)),s(n,"author","managingEditor",t,!0),n.items=i("item",r.children).map(function(e){var t,n={};return e=e.children,s(n,"id","guid",e),s(n,"title","title",e),s(n,"link","link",e),s(n,"description","description",e),(t=a("pubDate",e))&&(n.pubDate=new Date(t)),n}))),this.dom=n,c.prototype._handleCallback.call(this,r?null:Error("couldn't find root of feed"))},e.exports=r},function(e,t,n){function r(e){o.call(this,new i(this),e)}function i(e){this.scope=e}e.exports=r;var o=n(1155);n(328)(r,o),r.prototype.readable=!0;var a=n(1141).EVENTS;Object.keys(a).forEach(function(e){if(0===a[e])i.prototype["on"+e]=function(){this.scope.emit(e)};else if(1===a[e])i.prototype["on"+e]=function(t){this.scope.emit(e,t)};else{if(2!==a[e])throw Error("wrong number of arguments!");i.prototype["on"+e]=function(t,n){this.scope.emit(e,t,n)}}})},function(e,t,n){function r(e,t){var n=this._parser=new i(e,t),r=this._decoder=new a;o.call(this,{decodeStrings:!1}),this.once("finish",function(){n.end(r.end())})}e.exports=r;var i=n(1142),o=n(326).Writable||n(1156).Writable,a=n(343).StringDecoder,s=n(132).Buffer;n(328)(r,o),o.prototype._write=function(e,t,n){e instanceof s&&(e=this._decoder.write(e)),this._parser.write(e),n()}},335,function(e,t,n){function r(e){this._cbs=e||{}}e.exports=r;var i=n(1141).EVENTS;Object.keys(i).forEach(function(e){if(0===i[e])e="on"+e,r.prototype[e]=function(){this._cbs[e]&&this._cbs[e]()};else if(1===i[e])e="on"+e,r.prototype[e]=function(t){this._cbs[e]&&this._cbs[e](t)};else{if(2!==i[e])throw Error("wrong number of arguments");e="on"+e,r.prototype[e]=function(t,n){this._cbs[e]&&this._cbs[e](t,n)}}})},function(e,t,n){var r=e.exports;[n(1159),n(1165),n(1166),n(1167),n(1168),n(1169)].forEach(function(e){Object.keys(e).forEach(function(t){r[t]=e[t].bind(r)})})},function(e,t,n){function r(e,t){return e.children?e.children.map(function(e){return a(e,t)}).join(""):""}function i(e){return Array.isArray(e)?e.map(i).join(""):s(e)?"br"===e.name?"\n":i(e.children):e.type===o.CDATA?i(e.children):e.type===o.Text?e.data:""}var o=n(1150),a=n(1160),s=o.isTag;e.exports={getInnerHTML:r,getOuterHTML:a,getText:i}},function(e,t,n){function r(e,t){if(e){var n,r="";for(var i in e)n=e[i],r&&(r+=" "),r+=!n&&p[i]?i:i+'="'+(t.decodeEntities?l.encodeXML(n):n)+'"';return r}}function i(e,t){"svg"===e.name&&(t={decodeEntities:t.decodeEntities,xmlMode:!0});var n="<"+e.name,i=r(e.attribs,t);return i&&(n+=" "+i),!t.xmlMode||e.children&&0!==e.children.length?(n+=">",e.children&&(n+=d(e.children,t)),h[e.name]&&!t.xmlMode||(n+="")):n+="/>",n}function o(e){return"<"+e.data+">"}function a(e,t){var n=e.data||"";return!t.decodeEntities||e.parent&&e.parent.name in f||(n=l.encodeXML(n)),n}function s(e){return""}function u(e){return""}var c=n(1161),l=n(1162),p={__proto__:null,allowfullscreen:!0,async:!0,autofocus:!0,autoplay:!0,checked:!0,controls:!0,default:!0,defer:!0,disabled:!0,hidden:!0,ismap:!0,loop:!0,multiple:!0,muted:!0,open:!0,readonly:!0,required:!0,reversed:!0,scoped:!0,seamless:!0,selected:!0,typemustmatch:!0},f={__proto__:null,style:!0,script:!0,xmp:!0,iframe:!0,noembed:!0,noframes:!0,plaintext:!0,noscript:!0},h={__proto__:null,area:!0,base:!0,basefont:!0,br:!0,col:!0,command:!0,embed:!0,frame:!0,hr:!0,img:!0,input:!0,isindex:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0},d=e.exports=function(e,t){Array.isArray(e)||e.cheerio||(e=[e]),t=t||{};for(var n="",r=0;r0&&(o=i(e,o,n,r),a=a.concat(o),r-=o.length,r<=0)));s++);return a}function o(e,t){for(var n=0,r=t.length;n0&&(n=a(e,t[r].children)));return n}function s(e,t){for(var n=0,r=t.length;n0&&s(e,t[n].children)))return!0;return!1}function u(e,t){for(var n=[],r=[t];r.length;){for(var i=r.pop(),o=0,a=i.length;o0;)i[a].children&&i[a].children.length>0&&r.push(i[a].children)}return n}var c=n(1150).isTag;e.exports={filter:r,find:i,findOneChild:o,findOne:a,existsOne:s,findAll:u}},function(e,t,n){function r(e,t){return"function"==typeof t?function(n){return n.attribs&&t(n.attribs[e])}:function(n){return n.attribs&&n.attribs[e]===t}}function i(e,t){return function(n){return e(n)||t(n)}}var o=n(1150),a=t.isTag=o.isTag;t.testElement=function(e,t){for(var n in e)if(e.hasOwnProperty(n)){if("tag_name"===n){if(!a(t)||!e.tag_name(t.name))return!1}else if("tag_type"===n){if(!e.tag_type(t.type))return!1}else if("tag_contains"===n){if(a(t)||!e.tag_contains(t.data))return!1}else if(!t.attribs||!e[n](t.attribs[n]))return!1}else;return!0};var s={tag_name:function(e){return"function"==typeof e?function(t){return a(t)&&e(t.name)}:"*"===e?a:function(t){return a(t)&&t.name===e}},tag_type:function(e){return"function"==typeof e?function(t){return e(t.type)}:function(t){return t.type===e}},tag_contains:function(e){return"function"==typeof e?function(t){return!a(t)&&e(t.data)}:function(t){return!a(t)&&t.data===e}}};t.getElements=function(e,t,n,o){var a=Object.keys(e).map(function(t){var n=e[t];return t in s?s[t](n):r(t,n)});return 0===a.length?[]:this.filter(a.reduce(i),t,n,o)},t.getElementById=function(e,t,n){return Array.isArray(t)||(t=[t]),this.findOne(r("id",e),t,n!==!1)},t.getElementsByTagName=function(e,t,n,r){return this.filter(s.tag_name(e),t,n,r)},t.getElementsByTagType=function(e,t,n,r){return this.filter(s.tag_type(e),t,n,r)}},function(e,t){t.removeSubsets=function(e){for(var t,n,r,i=e.length;--i>-1;){for(t=n=e[i],e[i]=null,r=!0;n;){if(e.indexOf(n)>-1){r=!1,e.splice(i,1);break}n=n.parent}r&&(e[i]=t)}return e};var n={DISCONNECTED:1,PRECEDING:2,FOLLOWING:4,CONTAINS:8,CONTAINED_BY:16},r=t.compareDocumentPosition=function(e,t){var r,i,o,a,s,u,c=[],l=[];if(e===t)return 0;for(r=e;r;)c.unshift(r),r=r.parent;for(r=t;r;)l.unshift(r),r=r.parent;for(u=0;c[u]===l[u];)u++;return 0===u?n.DISCONNECTED:(i=c[u-1],o=i.children,a=c[u],s=l[u],o.indexOf(a)>o.indexOf(s)?i===t?n.FOLLOWING|n.CONTAINED_BY:n.FOLLOWING:i===e?n.PRECEDING|n.CONTAINS:n.PRECEDING)};t.uniqueSort=function(e){var t,i,o=e.length;for(e=e.slice();--o>-1;)t=e[o],i=e.indexOf(t),i>-1&&i-1}var o=n(r);e.exports=i},function(e,t,n,r){function i(e,t){var n=this.__data__,r=o(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this}var o=n(r);e.exports=i},function(e,t,n,r,i){var o=n(r),a=n(i),s=o(a,"Map");e.exports=s},function(e,t,n,r){function i(e){var t=o(this,e).delete(e);return this.size-=t?1:0,t}var o=n(r);e.exports=i},function(e,t,n,r){function i(e,t){var n=e.__data__;return o(t)?n["string"==typeof t?"string":"hash"]:n.map}var o=n(r);e.exports=i},function(e,t,n,r){function i(e){return o(this,e).get(e)}var o=n(r);e.exports=i},function(e,t,n,r){function i(e){return o(this,e).has(e)}var o=n(r);e.exports=i},function(e,t,n,r){function i(e,t){var n=o(this,e),r=n.size;return n.set(e,t),this.size+=n.size==r?0:1,this}var o=n(r);e.exports=i},function(e,t,n,r,i,o){function a(e){return function(t,n,r){var i=Object(t);if(!u(t)){var o=s(n,3);t=c(t),n=function(e){return o(i[e],e,i)}}var a=e(t,n,r);return a>-1?i[o?t[a]:a]:void 0}}var s=n(r),u=n(i),c=n(o);e.exports=a},function(e,t,n,r,i,o,a,s){function u(e){return"function"==typeof e?e:null==e?p:"object"==typeof e?f(e)?l(e[0],e[1]):c(e):h(e)}var c=n(r),l=n(i),p=n(o),f=n(a),h=n(s);e.exports=u},function(e,t,n,r,i,o){function a(e){var t=u(e);return 1==t.length&&t[0][2]?c(t[0][0],t[0][1]):function(n){return n===e||s(n,e,t)}}var s=n(r),u=n(i),c=n(o);e.exports=a},function(e,t,n,r,i,o,a,s,u){function c(e){var t=this.__data__=new l(e);this.size=t.size}var l=n(r),p=n(i),f=n(o),h=n(a),d=n(s),m=n(u);c.prototype.clear=p,c.prototype.delete=f,c.prototype.get=h,c.prototype.has=d,c.prototype.set=m,e.exports=c},function(e,t,n,r){function i(){this.__data__=new o,this.size=0}var o=n(r);e.exports=i},function(e,t,n,r,i,o){function a(e,t){var n=this.__data__;if(n instanceof s){var r=n.__data__;if(!u||r.length0&&n(l)?t>1?o(l,t-1,n,r,i):a(i,l):r||(i[i.length]=l)}return i}var a=n(r),s=n(i);e.exports=o},function(e,t,n,r,i,o){function a(e){return c(e)||u(e)||!!(l&&e&&e[l])}var s=n(r),u=n(i),c=n(o),l=s?s.isConcatSpreadable:void 0;e.exports=a},function(e,t,n,r){function i(e,t,n){return t=a(void 0===t?e.length-1:t,0),function(){for(var r=arguments,i=-1,s=a(r.length-t,0),u=Array(s);++i=t.length?{value:void 0,done:!0}:(e=r(t,n),this._i+=e.length,{value:e,done:!1})})},function(e,t,n){var r=n(19),i=n(20);e.exports=function(e){return function(t,n){var o,s,a=String(i(t)),u=r(n),c=a.length;return u<0||u>=c?e?"":void 0:(o=a.charCodeAt(u),o<55296||o>56319||u+1===c||(s=a.charCodeAt(u+1))<56320||s>57343?e?a.charAt(u):o:e?a.slice(u,u+2):(o-55296<<10)+(s-56320)+65536)}}},function(e,t){var n=Math.ceil,r=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?r:n)(e)}},function(e,t){e.exports=function(e){if(void 0==e)throw TypeError("Can't call method on "+e);return e}},function(e,t,n){"use strict";var r=n(22),i=n(23),o=n(10),s=n(11),a=n(26),u=n(27),c=n(28),l=n(29),h=n(12).getProto,p=n(6)("iterator"),f=!([].keys&&"next"in[].keys()),d="@@iterator",m="keys",g="values",x=function(){return this};e.exports=function(e,t,n,y,v,b,D){c(n,t,y);var w,E,k=function(e){if(!f&&e in F)return F[e];switch(e){case m:return function(){return new n(this,e)};case g:return function(){return new n(this,e)}}return function(){return new n(this,e)}},A=t+" Iterator",C=v==g,S=!1,F=e.prototype,T=F[p]||F[d]||v&&F[v],B=T||k(v);if(T){var N=h(B.call(new e));l(N,A,!0),!r&&a(F,d)&&s(N,p,x),C&&T.name!==g&&(S=!0,B=function(){return T.call(this)})}if(r&&!D||!f&&!S&&F[p]||s(F,p,B),u[t]=B,u[A]=x,v)if(w={values:C?B:k(g),keys:b?B:k(m),entries:C?k("entries"):B},D)for(E in w)E in F||o(F,E,w[E]);else i(i.P+i.F*(f||S),t,w);return w}},function(e,t){e.exports=!1},function(e,t,n){var r=n(8),i=n(16),o=n(11),s=n(10),a=n(24),u="prototype",c=function(e,t,n){var l,h,p,f,d=e&c.F,m=e&c.G,g=e&c.S,x=e&c.P,y=e&c.B,v=m?r:g?r[t]||(r[t]={}):(r[t]||{})[u],b=m?i:i[t]||(i[t]={}),D=b[u]||(b[u]={});m&&(n=t);for(l in n)h=!d&&v&&l in v,p=(h?v:n)[l],f=y&&h?a(p,r):x&&"function"==typeof p?a(Function.call,p):p,v&&!h&&s(v,l,p),b[l]!=p&&o(b,l,f),x&&D[l]!=p&&(D[l]=p)};r.core=i,c.F=1,c.G=2,c.S=4,c.P=8,c.B=16,c.W=32,e.exports=c},function(e,t,n){var r=n(25);e.exports=function(e,t,n){if(r(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,r){return e.call(t,n,r)};case 3:return function(n,r,i){return e.call(t,n,r,i)}}return function(){return e.apply(t,arguments)}}},function(e,t){e.exports=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}},function(e,t){var n={}.hasOwnProperty;e.exports=function(e,t){return n.call(e,t)}},function(e,t){e.exports={}},function(e,t,n){"use strict";var r=n(12),i=n(13),o=n(29),s={};n(11)(s,n(6)("iterator"),function(){return this}),e.exports=function(e,t,n){e.prototype=r.create(s,{next:i(1,n)}),o(e,t+" Iterator")}},function(e,t,n){var r=n(12).setDesc,i=n(26),o=n(6)("toStringTag");e.exports=function(e,t,n){e&&!i(e=n?e:e.prototype,o)&&r(e,o,{configurable:!0,value:t})}},function(e,t,n){n(31);var r=n(8),i=n(11),o=n(27),s=n(6)("iterator"),a=r.NodeList,u=r.HTMLCollection,c=a&&a.prototype,l=u&&u.prototype,h=o.NodeList=o.HTMLCollection=o.Array;c&&!c[s]&&i(c,s,h),l&&!l[s]&&i(l,s,h)},function(e,t,n){"use strict";var r=n(32),i=n(33),o=n(27),s=n(34);e.exports=n(21)(Array,"Array",function(e,t){this._t=s(e),this._i=0,this._k=t},function(){var e=this._t,t=this._k,n=this._i++;return!e||n>=e.length?(this._t=void 0,i(1)):"keys"==t?i(0,n):"values"==t?i(0,e[n]):i(0,[n,e[n]])},"values"),o.Arguments=o.Array,r("keys"),r("values"),r("entries")},function(e,t,n){var r=n(6)("unscopables"),i=Array.prototype;void 0==i[r]&&n(11)(i,r,{}),e.exports=function(e){i[r][e]=!0}},function(e,t){e.exports=function(e,t){return{value:t,done:!!e}}},function(e,t,n){var r=n(35),i=n(20);e.exports=function(e){return r(i(e))}},function(e,t,n){var r=n(5);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==r(e)?e.split(""):Object(e)}},function(e,t,n){"use strict";var r,i=n(12),o=n(22),s=n(8),a=n(24),u=n(4),c=n(23),l=n(37),h=n(38),p=n(25),f=n(39),d=n(40),m=n(45).set,g=n(46),x=n(6)("species"),y=n(47),v=n(48),b="Promise",D=s.process,w="process"==u(D),E=s[b],k=function(){},A=function(e){var t,n=new E(k);return e&&(n.constructor=function(e){e(k,k)}),(t=E.resolve(n)).catch(k),t===n},C=function(){function e(t){var n=new E(t);return m(n,e.prototype),n}var t=!1;try{if(t=E&&E.resolve&&A(),m(e,E),e.prototype=i.create(E.prototype,{constructor:{value:e}}),e.resolve(5).then(function(){})instanceof e||(t=!1),t&&n(14)){var r=!1;E.resolve(i.setDesc({},"then",{get:function(){r=!0}})),t=r}}catch(e){t=!1}return t}(),S=function(e,t){return!(!o||e!==E||t!==r)||g(e,t)},F=function(e){var t=h(e)[x];return void 0!=t?t:e},T=function(e){var t;return!(!l(e)||"function"!=typeof(t=e.then))&&t},B=function(e){var t,n;this.promise=new e(function(e,r){if(void 0!==t||void 0!==n)throw TypeError("Bad Promise constructor");t=e,n=r}),this.resolve=p(t),this.reject=p(n)},N=function(e){try{e()}catch(e){return{error:e}}},I=function(e,t){if(!e.n){e.n=!0;var n=e.c;v(function(){for(var r=e.v,i=1==e.s,o=0,a=function(t){var n,o,s=i?t.ok:t.fail,a=t.resolve,u=t.reject;try{s?(i||(e.h=!0),n=s===!0?r:s(r),n===t.promise?u(TypeError("Promise-chain cycle")):(o=T(n))?o.call(n,a,u):a(n)):u(r)}catch(e){u(e)}};n.length>o;)a(n[o++]);n.length=0,e.n=!1,t&&setTimeout(function(){var t,n,i=e.p;P(i)&&(w?D.emit("unhandledRejection",r,i):(t=s.onunhandledrejection)?t({promise:i,reason:r}):(n=s.console)&&n.error&&n.error("Unhandled promise rejection",r)),e.a=void 0},1)})}},P=function(e){var t,n=e._d,r=n.a||n.c,i=0;if(n.h)return!1;for(;r.length>i;)if(t=r[i++],t.fail||!P(t.promise))return!1;return!0},M=function(e){var t=this;t.d||(t.d=!0,t=t.r||t,t.v=e,t.s=2,t.a=t.c.slice(),I(t,!0))},O=function(e){var t,n=this;if(!n.d){n.d=!0,n=n.r||n;try{if(n.p===e)throw TypeError("Promise can't be resolved itself");(t=T(e))?v(function(){var r={r:n,d:!1};try{t.call(e,a(O,r,1),a(M,r,1))}catch(e){M.call(r,e)}}):(n.v=e,n.s=1,I(n,!1))}catch(e){M.call({r:n,d:!1},e)}}};C||(E=function(e){p(e);var t=this._d={p:f(this,E,b),c:[],a:void 0,s:0,d:!1,v:void 0,h:!1,n:!1};try{e(a(O,t,1),a(M,t,1))}catch(e){M.call(t,e)}},n(53)(E.prototype,{then:function(e,t){var n=new B(y(this,E)),r=n.promise,i=this._d;return n.ok="function"!=typeof e||e,n.fail="function"==typeof t&&t,i.c.push(n),i.a&&i.a.push(n),i.s&&I(i,!1),r},catch:function(e){return this.then(void 0,e)}})),c(c.G+c.W+c.F*!C,{Promise:E}),n(29)(E,b),n(54)(b),r=n(16)[b],c(c.S+c.F*!C,b,{reject:function(e){var t=new B(this),n=t.reject;return n(e),t.promise}}),c(c.S+c.F*(!C||A(!0)),b,{resolve:function(e){if(e instanceof E&&S(e.constructor,this))return e;var t=new B(this),n=t.resolve;return n(e),t.promise}}),c(c.S+c.F*!(C&&n(55)(function(e){E.all(e).catch(function(){})})),b,{all:function(e){var t=F(this),n=new B(t),r=n.resolve,o=n.reject,s=[],a=N(function(){d(e,!1,s.push,s);var n=s.length,a=Array(n);n?i.each.call(s,function(e,i){var s=!1;t.resolve(e).then(function(e){s||(s=!0,a[i]=e,--n||r(a))},o)}):r(a)});return a&&o(a.error),n.promise},race:function(e){var t=F(this),n=new B(t),r=n.reject,i=N(function(){d(e,!1,function(e){t.resolve(e).then(n.resolve,r)})});return i&&r(i.error),n.promise}})},function(e,t){e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},function(e,t,n){var r=n(37);e.exports=function(e){if(!r(e))throw TypeError(e+" is not an object!");return e}},function(e,t){e.exports=function(e,t,n){if(!(e instanceof t))throw TypeError(n+": use the 'new' operator!");return e}},function(e,t,n){var r=n(24),i=n(41),o=n(42),s=n(38),a=n(43),u=n(44);e.exports=function(e,t,n,c){var l,h,p,f=u(e),d=r(n,c,t?2:1),m=0;if("function"!=typeof f)throw TypeError(e+" is not iterable!");if(o(f))for(l=a(e.length);l>m;m++)t?d(s(h=e[m])[0],h[1]):d(e[m]);else for(p=f.call(e);!(h=p.next()).done;)i(p,d,h.value,t)}},function(e,t,n){var r=n(38);e.exports=function(e,t,n,i){try{return i?t(r(n)[0],n[1]):t(n)}catch(t){var o=e.return;throw void 0!==o&&r(o.call(e)),t}}},function(e,t,n){var r=n(27),i=n(6)("iterator"),o=Array.prototype;e.exports=function(e){return void 0!==e&&(r.Array===e||o[i]===e)}},function(e,t,n){var r=n(19),i=Math.min;e.exports=function(e){return e>0?i(r(e),9007199254740991):0}},function(e,t,n){var r=n(4),i=n(6)("iterator"),o=n(27);e.exports=n(16).getIteratorMethod=function(e){if(void 0!=e)return e[i]||e["@@iterator"]||o[r(e)]}},function(e,t,n){var r=n(12).getDesc,i=n(37),o=n(38),s=function(e,t){if(o(e),!i(t)&&null!==t)throw TypeError(t+": can't set as prototype!")};e.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(e,t,i){try{i=n(24)(Function.call,r(Object.prototype,"__proto__").set,2),i(e,[]),t=!(e instanceof Array)}catch(e){t=!0}return function(e,n){return s(e,n),t?e.__proto__=n:i(e,n),e}}({},!1):void 0),check:s}},function(e,t){e.exports=Object.is||function(e,t){return e===t?0!==e||1/e===1/t:e!=e&&t!=t}},function(e,t,n){var r=n(38),i=n(25),o=n(6)("species");e.exports=function(e,t){var n,s=r(e).constructor;return void 0===s||void 0==(n=r(s)[o])?t:i(n)}},function(e,t,n){var r,i,o,s=n(8),a=n(49).set,u=s.MutationObserver||s.WebKitMutationObserver,c=s.process,l=s.Promise,h="process"==n(5)(c),p=function(){var e,t,n;for(h&&(e=c.domain)&&(c.domain=null,e.exit());r;)t=r.domain,n=r.fn,t&&t.enter(),n(),t&&t.exit(),r=r.next;i=void 0,e&&e.enter()};if(h)o=function(){c.nextTick(p)};else if(u){var f=1,d=document.createTextNode("");new u(p).observe(d,{characterData:!0}),o=function(){d.data=f=-f}}else o=l&&l.resolve?function(){l.resolve().then(p)}:function(){a.call(s,p)};e.exports=function(e){var t={fn:e,next:void 0,domain:h&&c.domain};i&&(i.next=t),r||(r=t,o()),i=t}},function(e,t,n){var r,i,o,s=n(24),a=n(50),u=n(51),c=n(52),l=n(8),h=l.process,p=l.setImmediate,f=l.clearImmediate,d=l.MessageChannel,m=0,g={},x="onreadystatechange",y=function(){var e=+this;if(g.hasOwnProperty(e)){var t=g[e];delete g[e],t()}},v=function(e){y.call(e.data)};p&&f||(p=function(e){for(var t=[],n=1;arguments.length>n;)t.push(arguments[n++]);return g[++m]=function(){a("function"==typeof e?e:Function(e),t)},r(m),m},f=function(e){delete g[e]},"process"==n(5)(h)?r=function(e){h.nextTick(s(y,e,1))}:d?(i=new d,o=i.port2,i.port1.onmessage=v,r=s(o.postMessage,o,1)):l.addEventListener&&"function"==typeof postMessage&&!l.importScripts?(r=function(e){l.postMessage(e+"","*")},l.addEventListener("message",v,!1)):r=x in c("script")?function(e){u.appendChild(c("script"))[x]=function(){u.removeChild(this),y.call(e)}}:function(e){setTimeout(s(y,e,1),0)}),e.exports={set:p,clear:f}},function(e,t){e.exports=function(e,t,n){var r=void 0===n;switch(t.length){case 0:return r?e():e.call(n);case 1:return r?e(t[0]):e.call(n,t[0]);case 2:return r?e(t[0],t[1]):e.call(n,t[0],t[1]);case 3:return r?e(t[0],t[1],t[2]):e.call(n,t[0],t[1],t[2]);case 4:return r?e(t[0],t[1],t[2],t[3]):e.call(n,t[0],t[1],t[2],t[3])}return e.apply(n,t)}},function(e,t,n){e.exports=n(8).document&&document.documentElement},function(e,t,n){var r=n(37),i=n(8).document,o=r(i)&&r(i.createElement);e.exports=function(e){return o?i.createElement(e):{}}},function(e,t,n){var r=n(10);e.exports=function(e,t){for(var n in t)r(e,n,t[n]);return e}},function(e,t,n){"use strict";var r=n(8),i=n(12),o=n(14),s=n(6)("species");e.exports=function(e){var t=r[e];o&&t&&!t[s]&&i.setDesc(t,s,{configurable:!0,get:function(){return this}})}},function(e,t,n){var r=n(6)("iterator"),i=!1;try{var o=[7][r]();o.return=function(){i=!0},Array.from(o,function(){throw 2})}catch(e){}e.exports=function(e,t){if(!t&&!i)return!1;var n=!1;try{var o=[7],s=o[r]();s.next=function(){return{done:n=!0}},o[r]=function(){return s},e(o)}catch(e){}return n}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}var i=n(57),o=r(i);n(174);var s=n(178),a=r(s),u=n(181),c=r(u),l=[a.default,c.default,function(){return{components:{StandaloneLayout:o.default}}}];e.exports=l},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var i=n(58),o=r(i),s=n(84),a=r(s),u=n(85),c=r(u),l=n(89),h=r(l),p=n(136),f=r(p),d=n(144),m=r(d),g=function(e){function t(){return(0,a.default)(this,t),(0,h.default)(this,(t.__proto__||(0,o.default)(t)).apply(this,arguments))}return(0,f.default)(t,e),(0,c.default)(t,[{key:"render",value:function(){var e=this.props,t=e.getComponent,n=e.specSelectors,r=t("Container"),i=t("Row"),o=t("Col"),s=t("Topbar",!0),a=t("BaseLayout",!0),u=t("onlineValidatorBadge",!0),c=n.loadingStatus();return m.default.createElement(r,{className:"swagger-ui"},s?m.default.createElement(s,null):null,"loading"===c&&m.default.createElement("div",{className:"info"},m.default.createElement("h4",{className:"title"},"Loading...")),"failed"===c&&m.default.createElement("div",{className:"info"},m.default.createElement("h4",{className:"title"},"Failed to load spec.")),"failedConfig"===c&&m.default.createElement("div",{className:"info",style:{maxWidth:"880px",marginLeft:"auto",marginRight:"auto",textAlign:"center"}},m.default.createElement("h4",{className:"title"},"Failed to load config.")),!c||"success"===c&&m.default.createElement(a,null),m.default.createElement(i,null,m.default.createElement(o,null,m.default.createElement(u,null))))}}]),t}(m.default.Component);g.propTypes={errSelectors:d.PropTypes.object.isRequired,errActions:d.PropTypes.object.isRequired,specActions:d.PropTypes.object.isRequired,specSelectors:d.PropTypes.object.isRequired,layoutSelectors:d.PropTypes.object.isRequired,layoutActions:d.PropTypes.object.isRequired,getComponent:d.PropTypes.func.isRequired},t.default=g},function(e,t,n){e.exports={default:n(59),__esModule:!0}},function(e,t,n){n(60),e.exports=n(71).Object.getPrototypeOf},function(e,t,n){var r=n(61),i=n(63);n(69)("getPrototypeOf",function(){return function(e){return i(r(e))}})},function(e,t,n){var r=n(62);e.exports=function(e){return Object(r(e))}},20,function(e,t,n){var r=n(64),i=n(61),o=n(65)("IE_PROTO"),s=Object.prototype;e.exports=Object.getPrototypeOf||function(e){return e=i(e),r(e,o)?e[o]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?s:null}},26,function(e,t,n){var r=n(66)("keys"),i=n(68);e.exports=function(e){return r[e]||(r[e]=i(e))}},function(e,t,n){var r=n(67),i="__core-js_shared__",o=r[i]||(r[i]={});e.exports=function(e){return o[e]||(o[e]={})}},8,9,function(e,t,n){var r=n(70),i=n(71),o=n(80);e.exports=function(e,t){var n=(i.Object||{})[e]||Object[e],s={};s[e]=t(n),r(r.S+r.F*o(function(){n(1)}),"Object",s)}},function(e,t,n){var r=n(67),i=n(71),o=n(72),s=n(74),a="prototype",u=function(e,t,n){var c,l,h,p=e&u.F,f=e&u.G,d=e&u.S,m=e&u.P,g=e&u.B,x=e&u.W,y=f?i:i[t]||(i[t]={}),v=y[a],b=f?r:d?r[t]:(r[t]||{})[a];f&&(n=t);for(c in n)l=!p&&b&&void 0!==b[c],l&&c in y||(h=l?b[c]:n[c],y[c]=f&&"function"!=typeof b[c]?n[c]:g&&l?o(h,r):x&&b[c]==h?function(e){var t=function(t,n,r){if(this instanceof e){switch(arguments.length){case 0:return new e;case 1:return new e(t);case 2:return new e(t,n)}return new e(t,n,r)}return e.apply(this,arguments)};return t[a]=e[a],t}(h):m&&"function"==typeof h?o(Function.call,h):h,m&&((y.virtual||(y.virtual={}))[c]=h,e&u.R&&v&&!v[c]&&s(v,c,h)))};u.F=1,u.G=2,u.S=4,u.P=8,u.B=16,u.W=32,u.U=64,u.R=128,e.exports=u},function(e,t){var n=e.exports={version:"2.4.0"};"number"==typeof __e&&(__e=n)},function(e,t,n){var r=n(73);e.exports=function(e,t,n){if(r(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,r){return e.call(t,n,r)};case 3:return function(n,r,i){return e.call(t,n,r,i)}}return function(){return e.apply(t,arguments)}}},25,function(e,t,n){var r=n(75),i=n(83);e.exports=n(79)?function(e,t,n){return r.f(e,t,i(1,n))}:function(e,t,n){return e[t]=n,e}},function(e,t,n){var r=n(76),i=n(78),o=n(82),s=Object.defineProperty;t.f=n(79)?Object.defineProperty:function(e,t,n){if(r(e),t=o(t,!0),r(n),i)try{return s(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e}},function(e,t,n){var r=n(77);e.exports=function(e){if(!r(e))throw TypeError(e+" is not an object!");return e}},37,function(e,t,n){e.exports=!n(79)&&!n(80)(function(){return 7!=Object.defineProperty(n(81)("div"),"a",{get:function(){return 7}}).a})},function(e,t,n){e.exports=!n(80)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},15,function(e,t,n){var r=n(77),i=n(67).document,o=r(i)&&r(i.createElement);e.exports=function(e){return o?i.createElement(e):{}}},function(e,t,n){var r=n(77);e.exports=function(e,t){if(!r(e))return e;var n,i;if(t&&"function"==typeof(n=e.toString)&&!r(i=n.call(e)))return i;if("function"==typeof(n=e.valueOf)&&!r(i=n.call(e)))return i;if(!t&&"function"==typeof(n=e.toString)&&!r(i=n.call(e)))return i;throw TypeError("Can't convert object to primitive value")}},13,function(e,t){"use strict";t.__esModule=!0,t.default=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var i=n(86),o=r(i);t.default=function(){function e(e,t){for(var n=0;n=t.length?{value:void 0,done:!0}:(e=r(t,n),this._i+=e.length,{value:e,done:!1})})},function(e,t,n){var r=n(95),i=n(62);e.exports=function(e){return function(t,n){var o,s,a=String(i(t)),u=r(n),c=a.length;return u<0||u>=c?e?"":void 0:(o=a.charCodeAt(u),o<55296||o>56319||u+1===c||(s=a.charCodeAt(u+1))<56320||s>57343?e?a.charAt(u):o:e?a.slice(u,u+2):(o-55296<<10)+(s-56320)+65536)}}},19,function(e,t,n){"use strict";var r=n(97),i=n(70),o=n(98),s=n(74),a=n(64),u=n(99),c=n(100),l=n(113),h=n(63),p=n(114)("iterator"),f=!([].keys&&"next"in[].keys()),d="@@iterator",m="keys",g="values",x=function(){return this};e.exports=function(e,t,n,y,v,b,D){c(n,t,y);var w,E,k,A=function(e){if(!f&&e in T)return T[e];switch(e){case m:return function(){return new n(this,e)};case g:return function(){return new n(this,e)}}return function(){return new n(this,e)}},C=t+" Iterator",S=v==g,F=!1,T=e.prototype,B=T[p]||T[d]||v&&T[v],N=B||A(v),I=v?S?A("entries"):N:void 0,P="Array"==t?T.entries||B:B;if(P&&(k=h(P.call(new e)),k!==Object.prototype&&(l(k,C,!0),r||a(k,p)||s(k,p,x))),S&&B&&B.name!==g&&(F=!0,N=function(){return B.call(this)}),r&&!D||!f&&!F&&T[p]||s(T,p,N),u[t]=N,u[C]=x,v)if(w={values:S?N:A(g),keys:b?N:A(m),entries:I},D)for(E in w)E in T||o(T,E,w[E]);else i(i.P+i.F*(f||F),t,w);return w}},function(e,t){e.exports=!0},function(e,t,n){e.exports=n(74)},27,function(e,t,n){"use strict";var r=n(101),i=n(83),o=n(113),s={};n(74)(s,n(114)("iterator"),function(){return this}),e.exports=function(e,t,n){e.prototype=r(s,{next:i(1,n)}),o(e,t+" Iterator")}},function(e,t,n){var r=n(76),i=n(102),o=n(111),s=n(65)("IE_PROTO"),a=function(){},u="prototype",c=function(){var e,t=n(81)("iframe"),r=o.length,i="<",s=">";for(t.style.display="none",n(112).appendChild(t),t.src="javascript:",e=t.contentWindow.document,e.open(),e.write(i+"script"+s+"document.F=Object"+i+"/script"+s),e.close(),c=e.F;r--;)delete c[u][o[r]];return c()};e.exports=Object.create||function(e,t){var n;return null!==e?(a[u]=r(e),n=new a,a[u]=null,n[s]=e):n=c(),void 0===t?n:i(n,t)}},function(e,t,n){var r=n(75),i=n(76),o=n(103);e.exports=n(79)?Object.defineProperties:function(e,t){i(e);for(var n,s=o(t),a=s.length,u=0;a>u;)r.f(e,n=s[u++],t[n]);return e}},function(e,t,n){var r=n(104),i=n(111);e.exports=Object.keys||function(e){return r(e,i)}},function(e,t,n){var r=n(64),i=n(105),o=n(108)(!1),s=n(65)("IE_PROTO");e.exports=function(e,t){var n,a=i(e),u=0,c=[];for(n in a)n!=s&&r(a,n)&&c.push(n);for(;t.length>u;)r(a,n=t[u++])&&(~o(c,n)||c.push(n));return c}},function(e,t,n){var r=n(106),i=n(62);e.exports=function(e){return r(i(e))}},function(e,t,n){var r=n(107);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==r(e)?e.split(""):Object(e)}},5,function(e,t,n){var r=n(105),i=n(109),o=n(110);e.exports=function(e){return function(t,n,s){var a,u=r(t),c=i(u.length),l=o(s,c);if(e&&n!=n){for(;c>l;)if(a=u[l++],a!=a)return!0}else for(;c>l;l++)if((e||l in u)&&u[l]===n)return e||l||0;return!e&&-1}}},function(e,t,n){var r=n(95),i=Math.min;e.exports=function(e){return e>0?i(r(e),9007199254740991):0}},function(e,t,n){var r=n(95),i=Math.max,o=Math.min;e.exports=function(e,t){return e=r(e),e<0?i(e+t,0):o(e,t)}},function(e,t){e.exports="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",")},function(e,t,n){e.exports=n(67).document&&document.documentElement},function(e,t,n){var r=n(75).f,i=n(64),o=n(114)("toStringTag");e.exports=function(e,t,n){e&&!i(e=n?e:e.prototype,o)&&r(e,o,{configurable:!0,value:t})}},function(e,t,n){var r=n(66)("wks"),i=n(68),o=n(67).Symbol,s="function"==typeof o,a=e.exports=function(e){return r[e]||(r[e]=s&&o[e]||(s?o:i)("Symbol."+e))};a.store=r},function(e,t,n){n(116);for(var r=n(67),i=n(74),o=n(99),s=n(114)("toStringTag"),a=["NodeList","DOMTokenList","MediaList","StyleSheetList","CSSRuleList"],u=0;u<5;u++){var c=a[u],l=r[c],h=l&&l.prototype;h&&!h[s]&&i(h,s,c),o[c]=o.Array}},function(e,t,n){"use strict";var r=n(117),i=n(118),o=n(99),s=n(105);e.exports=n(96)(Array,"Array",function(e,t){this._t=s(e),this._i=0,this._k=t},function(){var e=this._t,t=this._k,n=this._i++;return!e||n>=e.length?(this._t=void 0,i(1)):"keys"==t?i(0,n):"values"==t?i(0,e[n]):i(0,[n,e[n]])},"values"),o.Arguments=o.Array,r("keys"),r("values"),r("entries")},function(e,t){e.exports=function(){}},33,function(e,t,n){t.f=n(114)},function(e,t,n){e.exports={default:n(121),__esModule:!0}},function(e,t,n){n(122),n(133),n(134),n(135),e.exports=n(71).Symbol},function(e,t,n){"use strict";var r=n(67),i=n(64),o=n(79),s=n(70),a=n(98),u=n(123).KEY,c=n(80),l=n(66),h=n(113),p=n(68),f=n(114),d=n(119),m=n(124),g=n(125),x=n(126),y=n(129),v=n(76),b=n(105),D=n(82),w=n(83),E=n(101),k=n(130),A=n(132),C=n(75),S=n(103),F=A.f,T=C.f,B=k.f,N=r.Symbol,I=r.JSON,P=I&&I.stringify,M="prototype",O=f("_hidden"),_=f("toPrimitive"),L={}.propertyIsEnumerable,R=l("symbol-registry"),U=l("symbols"),j=l("op-symbols"),z=Object[M],J="function"==typeof N,X=r.QObject,Y=!X||!X[M]||!X[M].findChild,K=o&&c(function(){return 7!=E(T({},"a",{get:function(){return T(this,"a",{value:7}).a}})).a})?function(e,t,n){var r=F(z,t);r&&delete z[t],T(e,t,n),r&&e!==z&&T(z,t,r)}:T,W=function(e){var t=U[e]=E(N[M]);return t._k=e,t},H=J&&"symbol"==typeof N.iterator?function(e){return"symbol"==typeof e}:function(e){return e instanceof N},q=function(e,t,n){return e===z&&q(j,t,n),v(e),t=D(t,!0),v(n),i(U,t)?(n.enumerable?(i(e,O)&&e[O][t]&&(e[O][t]=!1),n=E(n,{enumerable:w(0,!1)})):(i(e,O)||T(e,O,w(1,{})),e[O][t]=!0),K(e,t,n)):T(e,t,n)},G=function(e,t){v(e);for(var n,r=x(t=b(t)),i=0,o=r.length;o>i;)q(e,n=r[i++],t[n]);return e},V=function(e,t){return void 0===t?E(e):G(E(e),t)},$=function(e){var t=L.call(this,e=D(e,!0));return!(this===z&&i(U,e)&&!i(j,e))&&(!(t||!i(this,e)||!i(U,e)||i(this,O)&&this[O][e])||t)},Z=function(e,t){if(e=b(e),t=D(t,!0),e!==z||!i(U,t)||i(j,t)){var n=F(e,t);return!n||!i(U,t)||i(e,O)&&e[O][t]||(n.enumerable=!0),n}},Q=function(e){for(var t,n=B(b(e)),r=[],o=0;n.length>o;)i(U,t=n[o++])||t==O||t==u||r.push(t);return r},ee=function(e){for(var t,n=e===z,r=B(n?j:b(e)),o=[],s=0;r.length>s;)!i(U,t=r[s++])||n&&!i(z,t)||o.push(U[t]);return o};J||(N=function(){if(this instanceof N)throw TypeError("Symbol is not a constructor!");var e=p(arguments.length>0?arguments[0]:void 0),t=function(n){this===z&&t.call(j,n),i(this,O)&&i(this[O],e)&&(this[O][e]=!1),K(this,e,w(1,n))};return o&&Y&&K(z,e,{configurable:!0,set:t}),W(e)},a(N[M],"toString",function(){return this._k}),A.f=Z,C.f=q,n(131).f=k.f=Q,n(128).f=$,n(127).f=ee,o&&!n(97)&&a(z,"propertyIsEnumerable",$,!0),d.f=function(e){return W(f(e))}),s(s.G+s.W+s.F*!J,{Symbol:N});for(var te="hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),ne=0;te.length>ne;)f(te[ne++]);for(var te=S(f.store),ne=0;te.length>ne;)m(te[ne++]);s(s.S+s.F*!J,"Symbol",{for:function(e){return i(R,e+="")?R[e]:R[e]=N(e)},keyFor:function(e){if(H(e))return g(R,e);throw TypeError(e+" is not a symbol!")},useSetter:function(){Y=!0},useSimple:function(){Y=!1}}),s(s.S+s.F*!J,"Object",{create:V,defineProperty:q,defineProperties:G,getOwnPropertyDescriptor:Z,getOwnPropertyNames:Q,getOwnPropertySymbols:ee}),I&&s(s.S+s.F*(!J||c(function(){var e=N();return"[null]"!=P([e])||"{}"!=P({a:e})||"{}"!=P(Object(e))})),"JSON",{stringify:function(e){if(void 0!==e&&!H(e)){for(var t,n,r=[e],i=1;arguments.length>i;)r.push(arguments[i++]);return t=r[1],"function"==typeof t&&(n=t),!n&&y(t)||(t=function(e,t){if(n&&(t=n.call(this,e,t)),!H(t))return t}),r[1]=t,P.apply(I,r)}}}),N[M][_]||n(74)(N[M],_,N[M].valueOf),h(N,"Symbol"),h(Math,"Math",!0),h(r.JSON,"JSON",!0)},function(e,t,n){var r=n(68)("meta"),i=n(77),o=n(64),s=n(75).f,a=0,u=Object.isExtensible||function(){return!0},c=!n(80)(function(){return u(Object.preventExtensions({}))}),l=function(e){s(e,r,{value:{i:"O"+ ++a,w:{}}})},h=function(e,t){if(!i(e))return"symbol"==typeof e?e:("string"==typeof e?"S":"P")+e;if(!o(e,r)){if(!u(e))return"F";if(!t)return"E";l(e)}return e[r].i},p=function(e,t){if(!o(e,r)){if(!u(e))return!0;if(!t)return!1;l(e)}return e[r].w},f=function(e){return c&&d.NEED&&u(e)&&!o(e,r)&&l(e),e},d=e.exports={KEY:r,NEED:!1,fastKey:h,getWeak:p,onFreeze:f}},function(e,t,n){var r=n(67),i=n(71),o=n(97),s=n(119),a=n(75).f;e.exports=function(e){var t=i.Symbol||(i.Symbol=o?{}:r.Symbol||{});"_"==e.charAt(0)||e in t||a(t,e,{value:s.f(e)})}},function(e,t,n){var r=n(103),i=n(105);e.exports=function(e,t){for(var n,o=i(e),s=r(o),a=s.length,u=0;a>u;)if(o[n=s[u++]]===t)return n}},function(e,t,n){var r=n(103),i=n(127),o=n(128);e.exports=function(e){var t=r(e),n=i.f;if(n)for(var s,a=n(e),u=o.f,c=0;a.length>c;)u.call(e,s=a[c++])&&t.push(s);return t}},function(e,t){t.f=Object.getOwnPropertySymbols},function(e,t){t.f={}.propertyIsEnumerable},function(e,t,n){var r=n(107);e.exports=Array.isArray||function(e){return"Array"==r(e)}},function(e,t,n){var r=n(105),i=n(131).f,o={}.toString,s="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],a=function(e){try{return i(e)}catch(e){return s.slice()}};e.exports.f=function(e){return s&&"[object Window]"==o.call(e)?a(e):i(r(e))}},function(e,t,n){var r=n(104),i=n(111).concat("length","prototype");t.f=Object.getOwnPropertyNames||function(e){return r(e,i)}},function(e,t,n){var r=n(128),i=n(83),o=n(105),s=n(82),a=n(64),u=n(78),c=Object.getOwnPropertyDescriptor;t.f=n(79)?c:function(e,t){if(e=o(e),t=s(t,!0),u)try{return c(e,t)}catch(e){}if(a(e,t))return i(!r.f.call(e,t),e[t])}},function(e,t){},function(e,t,n){n(124)("asyncIterator")},function(e,t,n){n(124)("observable")},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}t.__esModule=!0;var i=n(137),o=r(i),s=n(141),a=r(s),u=n(90),c=r(u);t.default=function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+("undefined"==typeof t?"undefined":(0,c.default)(t)));e.prototype=(0,a.default)(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0 +}}),t&&(o.default?(0,o.default)(e,t):e.__proto__=t)}},function(e,t,n){e.exports={default:n(138),__esModule:!0}},function(e,t,n){n(139),e.exports=n(71).Object.setPrototypeOf},function(e,t,n){var r=n(70);r(r.S,"Object",{setPrototypeOf:n(140).set})},function(e,t,n){var r=n(77),i=n(76),o=function(e,t){if(i(e),!r(t)&&null!==t)throw TypeError(t+": can't set as prototype!")};e.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(e,t,r){try{r=n(72)(Function.call,n(132).f(Object.prototype,"__proto__").set,2),r(e,[]),t=!(e instanceof Array)}catch(e){t=!0}return function(e,n){return o(e,n),t?e.__proto__=n:r(e,n),e}}({},!1):void 0),check:o}},function(e,t,n){e.exports={default:n(142),__esModule:!0}},function(e,t,n){n(143);var r=n(71).Object;e.exports=function(e,t){return r.create(e,t)}},function(e,t,n){var r=n(70);r(r.S,"Object",{create:n(101)})},function(e,t,n){"use strict";e.exports=n(145)},function(e,t,n){"use strict";var r=n(146),i=n(147),o=n(156),s=n(164),a=n(158),u=n(165),c=n(170),l=n(171),h=n(173),p=a.createElement,f=a.createFactory,d=a.cloneElement,m=r,g=function(e){return e},x={Children:{map:o.map,forEach:o.forEach,count:o.count,toArray:o.toArray,only:h},Component:i.Component,PureComponent:i.PureComponent,createElement:p,cloneElement:d,isValidElement:a.isValidElement,PropTypes:u,createClass:l,createFactory:f,createMixin:g,DOM:s,version:c,__spread:m};e.exports=x},function(e,t){/* + object-assign + (c) Sindre Sorhus + @license MIT + */ +"use strict";function n(e){if(null===e||void 0===e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}function r(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;var r=Object.getOwnPropertyNames(t).map(function(e){return t[e]});if("0123456789"!==r.join(""))return!1;var i={};return"abcdefghijklmnopqrst".split("").forEach(function(e){i[e]=e}),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},i)).join("")}catch(e){return!1}}var i=Object.getOwnPropertySymbols,o=Object.prototype.hasOwnProperty,s=Object.prototype.propertyIsEnumerable;e.exports=r()?Object.assign:function(e,t){for(var r,a,u=n(e),c=1;c1){for(var g=Array(m),x=0;x1){for(var v=Array(y),b=0;blabel{font-size:12px;font-weight:700;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:-20px 15px 0 0;font-family:Titillium Web,sans-serif;color:#3b4151}.swagger-ui .scheme-container .schemes>label select{min-width:130px;text-transform:uppercase}.swagger-ui .loading-container{padding:40px 0 60px}.swagger-ui .loading-container .loading{position:relative}.swagger-ui .loading-container .loading:after{font-size:10px;font-weight:700;position:absolute;top:50%;left:50%;content:\"loading\";-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);text-transform:uppercase;font-family:Titillium Web,sans-serif;color:#3b4151}.swagger-ui .loading-container .loading:before{position:absolute;top:50%;left:50%;display:block;width:60px;height:60px;margin:-30px;content:\"\";-webkit-animation:rotation 1s infinite linear,opacity .5s;animation:rotation 1s infinite linear,opacity .5s;opacity:1;border:2px solid rgba(85,85,85,.1);border-top-color:rgba(0,0,0,.6);border-radius:100%;-webkit-backface-visibility:hidden;backface-visibility:hidden}@-webkit-keyframes rotation{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes rotation{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@-webkit-keyframes blinker{50%{opacity:0}}@keyframes blinker{50%{opacity:0}}.swagger-ui .btn{font-size:14px;font-weight:700;padding:5px 23px;transition:all .3s;border:2px solid #888;border-radius:4px;background:transparent;box-shadow:0 1px 2px rgba(0,0,0,.1);font-family:Titillium Web,sans-serif;color:#3b4151}.swagger-ui .btn[disabled]{cursor:not-allowed;opacity:.3}.swagger-ui .btn:hover{box-shadow:0 0 5px rgba(0,0,0,.3)}.swagger-ui .btn.cancel{border-color:#ff6060;font-family:Titillium Web,sans-serif;color:#ff6060}.swagger-ui .btn.authorize{line-height:1;display:inline;color:#49cc90;border-color:#49cc90}.swagger-ui .btn.authorize span{float:left;padding:4px 20px 0 0}.swagger-ui .btn.authorize svg{fill:#49cc90}.swagger-ui .btn.execute{-webkit-animation:swagger-ui-pulse 2s infinite;animation:swagger-ui-pulse 2s infinite;color:#fff;border-color:#4990e2}@-webkit-keyframes swagger-ui-pulse{0%{color:#fff;background:#4990e2;box-shadow:0 0 0 0 rgba(73,144,226,.8)}70%{box-shadow:0 0 0 5px rgba(73,144,226,0)}to{color:#fff;background:#4990e2;box-shadow:0 0 0 0 rgba(73,144,226,0)}}@keyframes swagger-ui-pulse{0%{color:#fff;background:#4990e2;box-shadow:0 0 0 0 rgba(73,144,226,.8)}70%{box-shadow:0 0 0 5px rgba(73,144,226,0)}to{color:#fff;background:#4990e2;box-shadow:0 0 0 0 rgba(73,144,226,0)}}.swagger-ui .btn-group{display:-webkit-box;display:-ms-flexbox;display:flex;padding:30px}.swagger-ui .btn-group .btn{-webkit-box-flex:1;-ms-flex:1;flex:1}.swagger-ui .btn-group .btn:first-child{border-radius:4px 0 0 4px}.swagger-ui .btn-group .btn:last-child{border-radius:0 4px 4px 0}.swagger-ui .authorization__btn{padding:0 10px;border:none;background:none}.swagger-ui .authorization__btn.locked{opacity:1}.swagger-ui .authorization__btn.unlocked{opacity:.4}.swagger-ui .expand-methods,.swagger-ui .expand-operation{border:none;background:none}.swagger-ui .expand-methods svg,.swagger-ui .expand-operation svg{width:20px;height:20px}.swagger-ui .expand-methods{padding:0 10px}.swagger-ui .expand-methods:hover svg{fill:#444}.swagger-ui .expand-methods svg{transition:all .3s;fill:#777}.swagger-ui button{cursor:pointer;outline:none}.swagger-ui select{font-size:14px;font-weight:700;padding:5px 40px 5px 10px;border:2px solid #41444e;border-radius:4px;background:#f7f7f7 url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMCAyMCI+ICAgIDxwYXRoIGQ9Ik0xMy40MTggNy44NTljLjI3MS0uMjY4LjcwOS0uMjY4Ljk3OCAwIC4yNy4yNjguMjcyLjcwMSAwIC45NjlsLTMuOTA4IDMuODNjLS4yNy4yNjgtLjcwNy4yNjgtLjk3OSAwbC0zLjkwOC0zLjgzYy0uMjctLjI2Ny0uMjctLjcwMSAwLS45NjkuMjcxLS4yNjguNzA5LS4yNjguOTc4IDBMMTAgMTFsMy40MTgtMy4xNDF6Ii8+PC9zdmc+) right 10px center no-repeat;background-size:20px;box-shadow:0 1px 2px 0 rgba(0,0,0,.25);font-family:Titillium Web,sans-serif;color:#3b4151;-webkit-appearance:none;-moz-appearance:none;appearance:none}.swagger-ui select[multiple]{margin:5px 0;padding:5px;background:#f7f7f7}.swagger-ui .opblock-body select{min-width:230px}.swagger-ui label{font-size:12px;font-weight:700;margin:0 0 5px;font-family:Titillium Web,sans-serif;color:#3b4151}.swagger-ui input[type=email],.swagger-ui input[type=password],.swagger-ui input[type=search],.swagger-ui input[type=text]{min-width:100px;margin:5px 0;padding:8px 10px;border:1px solid #d9d9d9;border-radius:4px;background:#fff}.swagger-ui input[type=email].invalid,.swagger-ui input[type=password].invalid,.swagger-ui input[type=search].invalid,.swagger-ui input[type=text].invalid{-webkit-animation:shake .4s 1;animation:shake .4s 1;border-color:#f93e3e;background:#feebeb}@-webkit-keyframes shake{10%,90%{-webkit-transform:translate3d(-1px,0,0);transform:translate3d(-1px,0,0)}20%,80%{-webkit-transform:translate3d(2px,0,0);transform:translate3d(2px,0,0)}30%,50%,70%{-webkit-transform:translate3d(-4px,0,0);transform:translate3d(-4px,0,0)}40%,60%{-webkit-transform:translate3d(4px,0,0);transform:translate3d(4px,0,0)}}@keyframes shake{10%,90%{-webkit-transform:translate3d(-1px,0,0);transform:translate3d(-1px,0,0)}20%,80%{-webkit-transform:translate3d(2px,0,0);transform:translate3d(2px,0,0)}30%,50%,70%{-webkit-transform:translate3d(-4px,0,0);transform:translate3d(-4px,0,0)}40%,60%{-webkit-transform:translate3d(4px,0,0);transform:translate3d(4px,0,0)}}.swagger-ui textarea{font-size:12px;width:100%;min-height:280px;padding:10px;border:none;border-radius:4px;outline:none;background:hsla(0,0%,100%,.8);font-family:Source Code Pro,monospace;font-weight:600;color:#3b4151}.swagger-ui textarea:focus{border:2px solid #61affe}.swagger-ui textarea.curl{font-size:12px;min-height:100px;margin:0;padding:10px;resize:none;border-radius:4px;background:#41444e;font-family:Source Code Pro,monospace;font-weight:600;color:#fff}.swagger-ui .checkbox{padding:5px 0 10px;transition:opacity .5s;color:#333}.swagger-ui .checkbox label{display:-webkit-box;display:-ms-flexbox;display:flex}.swagger-ui .checkbox p{font-weight:400!important;font-style:italic;margin:0!important;font-family:Source Code Pro,monospace;font-weight:600;color:#3b4151}.swagger-ui .checkbox input[type=checkbox]{display:none}.swagger-ui .checkbox input[type=checkbox]+label>.item{position:relative;top:3px;display:inline-block;width:16px;height:16px;margin:0 8px 0 0;padding:5px;cursor:pointer;border-radius:1px;background:#e8e8e8;box-shadow:0 0 0 2px #e8e8e8;-webkit-box-flex:0;-ms-flex:none;flex:none}.swagger-ui .checkbox input[type=checkbox]+label>.item:active{-webkit-transform:scale(.9);transform:scale(.9)}.swagger-ui .checkbox input[type=checkbox]:checked+label>.item{background:#e8e8e8 url(\"data:image/svg+xml;charset=utf-8,%3Csvg width='10' height='8' viewBox='3 7 10 8' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='%2341474E' fill-rule='evenodd' d='M6.333 15L3 11.667l1.333-1.334 2 2L11.667 7 13 8.333z'/%3E%3C/svg%3E\") 50% no-repeat}.swagger-ui .dialog-ux{position:fixed;z-index:9999;top:0;right:0;bottom:0;left:0}.swagger-ui .dialog-ux .backdrop-ux{position:fixed;top:0;right:0;bottom:0;left:0;background:rgba(0,0,0,.8)}.swagger-ui .dialog-ux .modal-ux{position:absolute;z-index:9999;top:50%;left:50%;width:100%;min-width:300px;max-width:650px;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);border:1px solid #ebebeb;border-radius:4px;background:#fff;box-shadow:0 10px 30px 0 rgba(0,0,0,.2)}.swagger-ui .dialog-ux .modal-ux-content{overflow-y:auto;max-height:540px;padding:20px}.swagger-ui .dialog-ux .modal-ux-content p{font-size:12px;margin:0 0 5px;color:#41444e;font-family:Open Sans,sans-serif;color:#3b4151}.swagger-ui .dialog-ux .modal-ux-content h4{font-size:18px;font-weight:600;margin:15px 0 0;font-family:Titillium Web,sans-serif;color:#3b4151}.swagger-ui .dialog-ux .modal-ux-header{display:-webkit-box;display:-ms-flexbox;display:flex;padding:12px 0;border-bottom:1px solid #ebebeb;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.swagger-ui .dialog-ux .modal-ux-header .close-modal{padding:0 10px;border:none;background:none;-webkit-appearance:none;-moz-appearance:none;appearance:none}.swagger-ui .dialog-ux .modal-ux-header h3{font-size:20px;font-weight:600;margin:0;padding:0 20px;-webkit-box-flex:1;-ms-flex:1;flex:1;font-family:Titillium Web,sans-serif;color:#3b4151}.swagger-ui .model{font-size:12px;font-weight:300;font-family:Source Code Pro,monospace;font-weight:600;color:#3b4151}.swagger-ui .model-toggle{font-size:10px;position:relative;top:6px;display:inline-block;margin:auto .3em;cursor:pointer;transition:-webkit-transform .15s ease-in;transition:transform .15s ease-in;transition:transform .15s ease-in,-webkit-transform .15s ease-in;-webkit-transform:rotate(90deg);transform:rotate(90deg);-webkit-transform-origin:50% 50%;transform-origin:50% 50%}.swagger-ui .model-toggle.collapsed{-webkit-transform:rotate(0deg);transform:rotate(0deg)}.swagger-ui .model-toggle:after{display:block;width:20px;height:20px;content:\"\";background:url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath d='M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z'/%3E%3C/svg%3E\") 50% no-repeat;background-size:100%}.swagger-ui .model-jump-to-path{position:relative;cursor:pointer}.swagger-ui .model-jump-to-path .view-line-link{position:absolute;top:-.4em;cursor:pointer}.swagger-ui .model-title{position:relative}.swagger-ui .model-title:hover .model-hint{visibility:visible}.swagger-ui .model-hint{position:absolute;top:-1.8em;visibility:hidden;padding:.1em .5em;white-space:nowrap;color:#ebebeb;border-radius:4px;background:rgba(0,0,0,.7)}.swagger-ui section.models{margin:30px 0;border:1px solid rgba(59,65,81,.3);border-radius:4px}.swagger-ui section.models.is-open{padding:0 0 20px}.swagger-ui section.models.is-open h4{margin:0 0 5px;border-bottom:1px solid rgba(59,65,81,.3)}.swagger-ui section.models.is-open h4 svg{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.swagger-ui section.models h4{font-size:16px;display:-webkit-box;display:-ms-flexbox;display:flex;margin:0;padding:10px 20px 10px 10px;cursor:pointer;transition:all .2s;font-family:Titillium Web,sans-serif;color:#777;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.swagger-ui section.models h4 svg{transition:all .4s}.swagger-ui section.models h4 span{-webkit-box-flex:1;-ms-flex:1;flex:1}.swagger-ui section.models h4:hover{background:rgba(0,0,0,.02)}.swagger-ui section.models h5{font-size:16px;margin:0 0 10px;font-family:Titillium Web,sans-serif;color:#777}.swagger-ui section.models .model-jump-to-path{position:relative;top:5px}.swagger-ui section.models .model-container{margin:0 20px 15px;transition:all .5s;border-radius:4px;background:rgba(0,0,0,.05)}.swagger-ui section.models .model-container:hover{background:rgba(0,0,0,.07)}.swagger-ui section.models .model-container:first-of-type{margin:20px}.swagger-ui section.models .model-container:last-of-type{margin:0 20px}.swagger-ui section.models .model-box{background:none}.swagger-ui .model-box{padding:10px;border-radius:4px;background:rgba(0,0,0,.1)}.swagger-ui .model-box .model-jump-to-path{position:relative;top:4px}.swagger-ui .model-title{font-size:16px;font-family:Titillium Web,sans-serif;color:#555}.swagger-ui span>span.model,.swagger-ui span>span.model .brace-close{padding:0 0 0 10px}.swagger-ui .prop-type{color:#55a}.swagger-ui .prop-enum{display:block}.swagger-ui .prop-format{color:#999}.swagger-ui table{width:100%;padding:0 10px;border-collapse:collapse}.swagger-ui table.model tbody tr td{padding:0;vertical-align:top}.swagger-ui table.model tbody tr td:first-of-type{width:100px;padding:0}.swagger-ui table.headers td{font-size:12px;font-weight:300;vertical-align:middle;font-family:Source Code Pro,monospace;font-weight:600;color:#3b4151}.swagger-ui table tbody tr td{padding:10px 0 0;vertical-align:top}.swagger-ui table tbody tr td:first-of-type{width:20%;padding:10px 0}.swagger-ui table thead tr td,.swagger-ui table thead tr th{font-size:12px;font-weight:700;padding:12px 0;text-align:left;border-bottom:1px solid rgba(59,65,81,.2);font-family:Open Sans,sans-serif;color:#3b4151}.swagger-ui .parameters-col_description p{font-size:14px;margin:0;font-family:Open Sans,sans-serif;color:#3b4151}.swagger-ui .parameters-col_description input[type=text]{width:100%;max-width:340px}.swagger-ui .parameter__name{font-size:16px;font-weight:400;font-family:Titillium Web,sans-serif;color:#3b4151}.swagger-ui .parameter__name.required{font-weight:700}.swagger-ui .parameter__name.required:after{font-size:10px;position:relative;top:-6px;padding:5px;content:\"required\";color:rgba(255,0,0,.6)}.swagger-ui .parameter__in{font-size:12px;font-style:italic;font-family:Source Code Pro,monospace;font-weight:600;color:#888}.swagger-ui .table-container{padding:20px}.swagger-ui .topbar{padding:8px 30px;background-color:#89bf04}.swagger-ui .topbar .topbar-wrapper{-ms-flex-align:center}.swagger-ui .topbar .topbar-wrapper,.swagger-ui .topbar a{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;align-items:center}.swagger-ui .topbar a{font-size:1.5em;font-weight:700;max-width:300px;text-decoration:none;-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-align:center;font-family:Titillium Web,sans-serif;color:#fff}.swagger-ui .topbar a span{margin:0;padding:0 10px}.swagger-ui .topbar .download-url-wrapper{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:3;-ms-flex:3;flex:3}.swagger-ui .topbar .download-url-wrapper input[type=text]{width:100%;min-width:350px;margin:0;border:2px solid #547f00;border-radius:4px 0 0 4px;outline:none}.swagger-ui .topbar .download-url-wrapper .download-url-button{font-size:16px;font-weight:700;padding:4px 40px;border:none;border-radius:0 4px 4px 0;background:#547f00;font-family:Titillium Web,sans-serif;color:#fff}.swagger-ui .info{margin:50px 0}.swagger-ui .info hgroup.main{margin:0 0 20px}.swagger-ui .info hgroup.main a{font-size:12px}.swagger-ui .info li,.swagger-ui .info p,.swagger-ui .info table{font-size:14px;font-family:Open Sans,sans-serif;color:#3b4151}.swagger-ui .info h1,.swagger-ui .info h2,.swagger-ui .info h3,.swagger-ui .info h4,.swagger-ui .info h5{font-family:Open Sans,sans-serif;color:#3b4151}.swagger-ui .info code{padding:3px 5px;border-radius:4px;background:rgba(0,0,0,.05);font-family:Source Code Pro,monospace;font-weight:600;color:#9012fe}.swagger-ui .info a{font-size:14px;transition:all .4s;font-family:Open Sans,sans-serif;color:#4990e2}.swagger-ui .info a:hover{color:#1f69c0}.swagger-ui .info>div{margin:0 0 5px}.swagger-ui .info .base-url{font-size:12px;font-weight:300!important;margin:0;font-family:Source Code Pro,monospace;font-weight:600;color:#3b4151}.swagger-ui .info .title{font-size:36px;margin:0;font-family:Open Sans,sans-serif;color:#3b4151}.swagger-ui .info .title small{font-size:10px;position:relative;top:-5px;display:inline-block;margin:0 0 0 5px;padding:2px 4px;vertical-align:super;border-radius:57px;background:#7d8492}.swagger-ui .info .title small pre{margin:0;font-family:Titillium Web,sans-serif;color:#fff}.swagger-ui .auth-btn-wrapper{display:-webkit-box;display:-ms-flexbox;display:flex;padding:10px 0;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.swagger-ui .auth-wrapper{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.swagger-ui .auth-wrapper .authorize{padding-right:20px}.swagger-ui .auth-container{margin:0 0 10px;padding:10px 20px;border-bottom:1px solid #ebebeb}.swagger-ui .auth-container:last-of-type{margin:0;padding:10px 20px;border:0}.swagger-ui .auth-container h4{margin:5px 0 15px!important}.swagger-ui .auth-container .wrapper{margin:0;padding:0}.swagger-ui .auth-container input[type=password],.swagger-ui .auth-container input[type=text]{min-width:230px}.swagger-ui .auth-container .errors{font-size:12px;padding:10px;border-radius:4px;font-family:Source Code Pro,monospace;font-weight:600;color:#3b4151}.swagger-ui .scopes h2{font-size:14px;font-family:Titillium Web,sans-serif;color:#3b4151}.swagger-ui .scope-def{padding:0 0 20px}.swagger-ui .errors-wrapper{margin:20px;padding:10px 20px;-webkit-animation:scaleUp .5s;animation:scaleUp .5s;border:2px solid #f93e3e;border-radius:4px;background:rgba(249,62,62,.1)}.swagger-ui .errors-wrapper .error-wrapper{margin:0 0 10px}.swagger-ui .errors-wrapper .errors h4{font-size:14px;margin:0;font-family:Source Code Pro,monospace;font-weight:600;color:#3b4151}.swagger-ui .errors-wrapper .errors small{color:#666}.swagger-ui .errors-wrapper hgroup{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.swagger-ui .errors-wrapper hgroup h4{font-size:20px;margin:0;-webkit-box-flex:1;-ms-flex:1;flex:1;font-family:Titillium Web,sans-serif;color:#3b4151}@-webkit-keyframes scaleUp{0%{-webkit-transform:scale(.8);transform:scale(.8);opacity:0}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes scaleUp{0%{-webkit-transform:scale(.8);transform:scale(.8);opacity:0}to{-webkit-transform:scale(1);transform:scale(1);opacity:1}}",""]); +},function(e,t){e.exports=function(){var e=[];return e.toString=function(){for(var e=[],t=0;t=0&&v.splice(t,1)}function a(e){var t=document.createElement("style");return t.type="text/css",o(e,t),t}function u(e){var t=document.createElement("link");return t.rel="stylesheet",o(e,t),t}function c(e,t){var n,r,i;if(t.singleton){var o=y++;n=x||(x=a(t)),r=l.bind(null,n,o,!1),i=l.bind(null,n,o,!0)}else e.sourceMap&&"function"==typeof URL&&"function"==typeof URL.createObjectURL&&"function"==typeof URL.revokeObjectURL&&"function"==typeof Blob&&"function"==typeof btoa?(n=u(t),r=p.bind(null,n),i=function(){s(n),n.href&&URL.revokeObjectURL(n.href)}):(n=a(t),r=h.bind(null,n),i=function(){s(n)});return r(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap)return;r(e=t)}else i()}}function l(e,t,n,r){var i=n?"":r.css;if(e.styleSheet)e.styleSheet.cssText=b(t,i);else{var o=document.createTextNode(i),s=e.childNodes;s[t]&&e.removeChild(s[t]),s.length?e.insertBefore(o,s[t]):e.appendChild(o)}}function h(e,t){var n=t.css,r=t.media;t.sourceMap;if(r&&e.setAttribute("media",r),e.styleSheet)e.styleSheet.cssText=n;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(n))}}function p(e,t){var n=t.css,r=(t.media,t.sourceMap);r&&(n+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(r))))+" */");var i=new Blob([n],{type:"text/css"}),o=e.href;e.href=URL.createObjectURL(i),o&&URL.revokeObjectURL(o)}var f={},d=function(e){var t;return function(){return"undefined"==typeof t&&(t=e.apply(this,arguments)),t}},m=d(function(){return/msie [6-9]\b/.test(window.navigator.userAgent.toLowerCase())}),g=d(function(){return document.head||document.getElementsByTagName("head")[0]}),x=null,y=0,v=[];e.exports=function(e,t){t=t||{},"undefined"==typeof t.singleton&&(t.singleton=m()),"undefined"==typeof t.insertAt&&(t.insertAt="bottom");var n=i(e);return r(n,t),function(e){for(var o=[],s=0;s=400?(i.updateLoadingStatus("failedConfig"),i.updateLoadingStatus("failedConfig"),i.updateUrl(""),console.error(n.statusText+" "+e),t(null)):t(c(n.text))}var i=n.specActions;if(e)return i.downloadConfig(e).then(r,r)}}},r={getLocalConfig:function(){return c(u.default)}};return{statePlugins:{spec:{actions:n,selectors:r}}}}Object.defineProperty(t,"__esModule",{value:!0}),t.default=i;var o=n(182),s=r(o),a=n(217),u=r(a),c=function(e,t){try{return s.default.safeLoad(e)}catch(e){return t&&t.errActions.newThrownErr(new Error(e)),{}}}},function(e,t,n){"use strict";var r=n(183);e.exports=r},function(e,t,n){"use strict";function r(e){return function(){throw new Error("Function "+e+" is deprecated and cannot be used.")}}var i=n(184),o=n(216);e.exports.Type=n(190),e.exports.Schema=n(189),e.exports.FAILSAFE_SCHEMA=n(193),e.exports.JSON_SCHEMA=n(192),e.exports.CORE_SCHEMA=n(191),e.exports.DEFAULT_SAFE_SCHEMA=n(188),e.exports.DEFAULT_FULL_SCHEMA=n(211),e.exports.load=i.load,e.exports.loadAll=i.loadAll,e.exports.safeLoad=i.safeLoad,e.exports.safeLoadAll=i.safeLoadAll,e.exports.dump=o.dump,e.exports.safeDump=o.safeDump,e.exports.YAMLException=n(186),e.exports.MINIMAL_SCHEMA=n(193),e.exports.SAFE_SCHEMA=n(188),e.exports.DEFAULT_SCHEMA=n(211),e.exports.scan=r("scan"),e.exports.parse=r("parse"),e.exports.compose=r("compose"),e.exports.addConstructor=r("addConstructor")},function(e,t,n){"use strict";function r(e){return 10===e||13===e}function i(e){return 9===e||32===e}function o(e){return 9===e||32===e||10===e||13===e}function s(e){return 44===e||91===e||93===e||123===e||125===e}function a(e){var t;return 48<=e&&e<=57?e-48:(t=32|e,97<=t&&t<=102?t-97+10:-1)}function u(e){return 120===e?2:117===e?4:85===e?8:0}function c(e){return 48<=e&&e<=57?e-48:-1}function l(e){return 48===e?"\0":97===e?"":98===e?"\b":116===e?"\t":9===e?"\t":110===e?"\n":118===e?"\v":102===e?"\f":114===e?"\r":101===e?"":32===e?" ":34===e?'"':47===e?"/":92===e?"\\":78===e?"…":95===e?" ":76===e?"\u2028":80===e?"\u2029":""}function h(e){return e<=65535?String.fromCharCode(e):String.fromCharCode((e-65536>>10)+55296,(e-65536&1023)+56320)}function p(e,t){this.input=e,this.filename=t.filename||null,this.schema=t.schema||Y,this.onWarning=t.onWarning||null,this.legacy=t.legacy||!1,this.json=t.json||!1,this.listener=t.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=e.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.documents=[]}function f(e,t){return new z(t,new J(e.filename,e.input,e.position,e.line,e.position-e.lineStart))}function d(e,t){throw f(e,t)}function m(e,t){e.onWarning&&e.onWarning.call(null,f(e,t))}function g(e,t,n,r){var i,o,s,a;if(t1&&(e.result+=j.repeat("\n",t-1))}function E(e,t,n){var a,u,c,l,h,p,f,d,m,x=e.kind,y=e.result;if(m=e.input.charCodeAt(e.position),o(m)||s(m)||35===m||38===m||42===m||33===m||124===m||62===m||39===m||34===m||37===m||64===m||96===m)return!1;if((63===m||45===m)&&(u=e.input.charCodeAt(e.position+1),o(u)||n&&s(u)))return!1;for(e.kind="scalar",e.result="",c=l=e.position,h=!1;0!==m;){if(58===m){if(u=e.input.charCodeAt(e.position+1),o(u)||n&&s(u))break}else if(35===m){if(a=e.input.charCodeAt(e.position-1),o(a))break}else{if(e.position===e.lineStart&&D(e)||n&&s(m))break;if(r(m)){if(p=e.line,f=e.lineStart,d=e.lineIndent,b(e,!1,-1),e.lineIndent>=t){h=!0,m=e.input.charCodeAt(e.position);continue}e.position=l,e.line=p,e.lineStart=f,e.lineIndent=d;break}}h&&(g(e,c,l,!1),w(e,e.line-p),c=l=e.position,h=!1),i(m)||(l=e.position+1),m=e.input.charCodeAt(++e.position)}return g(e,c,l,!1),!!e.result||(e.kind=x,e.result=y,!1)}function k(e,t){var n,i,o;if(n=e.input.charCodeAt(e.position),39!==n)return!1;for(e.kind="scalar",e.result="",e.position++,i=o=e.position;0!==(n=e.input.charCodeAt(e.position));)if(39===n){if(g(e,i,e.position,!0),n=e.input.charCodeAt(++e.position),39!==n)return!0;i=e.position,e.position++,o=e.position}else r(n)?(g(e,i,o,!0),w(e,b(e,!1,t)),i=o=e.position):e.position===e.lineStart&&D(e)?d(e,"unexpected end of the document within a single quoted scalar"):(e.position++,o=e.position);d(e,"unexpected end of the stream within a single quoted scalar")}function A(e,t){var n,i,o,s,c,l;if(l=e.input.charCodeAt(e.position),34!==l)return!1;for(e.kind="scalar",e.result="",e.position++,n=i=e.position;0!==(l=e.input.charCodeAt(e.position));){if(34===l)return g(e,n,e.position,!0),e.position++,!0;if(92===l){if(g(e,n,e.position,!0),l=e.input.charCodeAt(++e.position),r(l))b(e,!1,t);else if(l<256&&ie[l])e.result+=oe[l],e.position++;else if((c=u(l))>0){for(o=c,s=0;o>0;o--)l=e.input.charCodeAt(++e.position),(c=a(l))>=0?s=(s<<4)+c:d(e,"expected hexadecimal character");e.result+=h(s),e.position++}else d(e,"unknown escape sequence");n=i=e.position}else r(l)?(g(e,n,i,!0),w(e,b(e,!1,t)),n=i=e.position):e.position===e.lineStart&&D(e)?d(e,"unexpected end of the document within a double quoted scalar"):(e.position++,i=e.position)}d(e,"unexpected end of the stream within a double quoted scalar")}function C(e,t){var n,r,i,s,a,u,c,l,h,p,f,m=!0,g=e.tag,x=e.anchor,v={};if(f=e.input.charCodeAt(e.position),91===f)s=93,c=!1,r=[];else{if(123!==f)return!1;s=125,c=!0,r={}}for(null!==e.anchor&&(e.anchorMap[e.anchor]=r),f=e.input.charCodeAt(++e.position);0!==f;){if(b(e,!0,t),f=e.input.charCodeAt(e.position),f===s)return e.position++,e.tag=g,e.anchor=x,e.kind=c?"mapping":"sequence",e.result=r,!0;m||d(e,"missed comma between flow collection entries"),h=l=p=null,a=u=!1,63===f&&(i=e.input.charCodeAt(e.position+1),o(i)&&(a=u=!0,e.position++,b(e,!0,t))),n=e.line,P(e,t,W,!1,!0),h=e.tag,l=e.result,b(e,!0,t),f=e.input.charCodeAt(e.position),!u&&e.line!==n||58!==f||(a=!0,f=e.input.charCodeAt(++e.position),b(e,!0,t),P(e,t,W,!1,!0),p=e.result),c?y(e,r,v,h,l,p):a?r.push(y(e,null,v,h,l,p)):r.push(l),b(e,!0,t),f=e.input.charCodeAt(e.position),44===f?(m=!0,f=e.input.charCodeAt(++e.position)):m=!1}d(e,"unexpected end of the stream within a flow collection")}function S(e,t){var n,o,s,a,u=V,l=!1,h=!1,p=t,f=0,m=!1;if(a=e.input.charCodeAt(e.position),124===a)o=!1;else{if(62!==a)return!1;o=!0}for(e.kind="scalar",e.result="";0!==a;)if(a=e.input.charCodeAt(++e.position),43===a||45===a)V===u?u=43===a?Z:$:d(e,"repeat of a chomping mode identifier");else{if(!((s=c(a))>=0))break;0===s?d(e,"bad explicit indentation width of a block scalar; it cannot be less than one"):h?d(e,"repeat of an indentation width identifier"):(p=t+s-1,h=!0)}if(i(a)){do a=e.input.charCodeAt(++e.position);while(i(a));if(35===a)do a=e.input.charCodeAt(++e.position);while(!r(a)&&0!==a)}for(;0!==a;){for(v(e),e.lineIndent=0,a=e.input.charCodeAt(e.position);(!h||e.lineIndentp&&(p=e.lineIndent),r(a))f++;else{if(e.lineIndentt)&&0!==i)d(e,"bad indentation of a sequence entry");else if(e.lineIndentt)&&(P(e,t,G,!0,s)&&(v?g=e.result:x=e.result),v||(y(e,p,f,m,g,x,a,u),m=g=x=null),b(e,!0,-1),c=e.input.charCodeAt(e.position)),e.lineIndent>t&&0!==c)d(e,"bad indentation of a mapping entry");else if(e.lineIndentt?f=1:e.lineIndent===t?f=0:e.lineIndentt?f=1:e.lineIndent===t?f=0:e.lineIndent tag; it should be "'+l.kind+'", not "'+e.kind+'"'),l.resolve(e.result)?(e.result=l.construct(e.result),null!==e.anchor&&(e.anchorMap[e.anchor]=e.result)):d(e,"cannot resolve a node with !<"+e.tag+"> explicit tag")):d(e,"unknown tag !<"+e.tag+">");return null!==e.listener&&e.listener("close",e),null!==e.tag||null!==e.anchor||g}function M(e){var t,n,s,a,u=e.position,c=!1;for(e.version=null,e.checkLineBreaks=e.legacy,e.tagMap={},e.anchorMap={};0!==(a=e.input.charCodeAt(e.position))&&(b(e,!0,-1),a=e.input.charCodeAt(e.position),!(e.lineIndent>0||37!==a));){for(c=!0,a=e.input.charCodeAt(++e.position),t=e.position;0!==a&&!o(a);)a=e.input.charCodeAt(++e.position);for(n=e.input.slice(t,e.position),s=[],n.length<1&&d(e,"directive name must not be less than one character in length");0!==a;){for(;i(a);)a=e.input.charCodeAt(++e.position);if(35===a){do a=e.input.charCodeAt(++e.position);while(0!==a&&!r(a));break}if(r(a))break;for(t=e.position;0!==a&&!o(a);)a=e.input.charCodeAt(++e.position);s.push(e.input.slice(t,e.position))}0!==a&&v(e),K.call(ae,n)?ae[n](e,n,s):m(e,'unknown document directive "'+n+'"')}return b(e,!0,-1),0===e.lineIndent&&45===e.input.charCodeAt(e.position)&&45===e.input.charCodeAt(e.position+1)&&45===e.input.charCodeAt(e.position+2)?(e.position+=3,b(e,!0,-1)):c&&d(e,"directives end mark is expected"),P(e,e.lineIndent-1,G,!1,!0),b(e,!0,-1),e.checkLineBreaks&&ee.test(e.input.slice(u,e.position))&&m(e,"non-ASCII line breaks are interpreted as content"),e.documents.push(e.result),e.position===e.lineStart&&D(e)?void(46===e.input.charCodeAt(e.position)&&(e.position+=3,b(e,!0,-1))):void(e.position0&&"\0\r\n…\u2028\u2029".indexOf(this.buffer.charAt(r-1))===-1;)if(r-=1,this.position-r>t/2-1){n=" ... ",r+=5;break}for(o="",s=this.position;st/2-1){o=" ... ",s-=5;break}return a=this.buffer.slice(r,s),i.repeat(" ",e)+n+a+o+"\n"+i.repeat(" ",e+this.position-r+n.length)+"^"},r.prototype.toString=function(e){var t,n="";return this.name&&(n+='in "'+this.name+'" '),n+="at line "+(this.line+1)+", column "+(this.column+1),e||(t=this.getSnippet(),t&&(n+=":\n"+t)),n},e.exports=r},function(e,t,n){"use strict";var r=n(189);e.exports=new r({include:[n(191)],implicit:[n(201),n(202)],explicit:[n(203),n(208),n(209),n(210)]})},function(e,t,n){"use strict";function r(e,t,n){var i=[];return e.include.forEach(function(e){n=r(e,t,n)}),e[t].forEach(function(e){n.forEach(function(t,n){t.tag===e.tag&&t.kind===e.kind&&i.push(n)}),n.push(e)}),n.filter(function(e,t){return i.indexOf(t)===-1})}function i(){function e(e){r[e.kind][e.tag]=r.fallback[e.tag]=e}var t,n,r={scalar:{},sequence:{},mapping:{},fallback:{}};for(t=0,n=arguments.length;t=0&&(t=t.slice(1)),".inf"===t?1===n?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:".nan"===t?NaN:t.indexOf(":")>=0?(t.split(":").forEach(function(e){i.unshift(parseFloat(e,10))}),t=0,r=1,i.forEach(function(e){t+=e*r,r*=60}),n*t):n*parseFloat(t,10)}function o(e,t){var n;if(isNaN(e))switch(t){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===e)switch(t){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===e)switch(t){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(a.isNegativeZero(e))return"-0.0";return n=e.toString(10),l.test(n)?n.replace("e",".e"):n}function s(e){return"[object Number]"===Object.prototype.toString.call(e)&&(e%1!==0||a.isNegativeZero(e))}var a=n(185),u=n(190),c=new RegExp("^(?:[-+]?(?:0|[1-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$"),l=/^[-+]?[0-9]+e/;e.exports=new u("tag:yaml.org,2002:float",{kind:"scalar",resolve:r,construct:i,predicate:s,represent:o,defaultStyle:"lowercase"})},function(e,t,n){"use strict";function r(e){return null!==e&&(null!==a.exec(e)||null!==u.exec(e))}function i(e){var t,n,r,i,o,s,c,l,h,p,f=0,d=null;if(t=a.exec(e),null===t&&(t=u.exec(e)),null===t)throw new Error("Date resolve error");if(n=+t[1],r=+t[2]-1,i=+t[3],!t[4])return new Date(Date.UTC(n,r,i));if(o=+t[4],s=+t[5],c=+t[6],t[7]){for(f=t[7].slice(0,3);f.length<3;)f+="0";f=+f}return t[9]&&(l=+t[10],h=+(t[11]||0),d=6e4*(60*l+h),"-"===t[9]&&(d=-d)),p=new Date(Date.UTC(n,r,i,o,s,c,f)),d&&p.setTime(p.getTime()-d),p}function o(e){return e.toISOString()}var s=n(190),a=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),u=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");e.exports=new s("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:r,construct:i,instanceOf:Date,represent:o})},function(e,t,n){"use strict";function r(e){return"<<"===e||null===e}var i=n(190);e.exports=new i("tag:yaml.org,2002:merge",{kind:"scalar",resolve:r})},function(e,t,n){function r(e){if(null===e)return!1;var t,n,r=0,i=e.length,o=c;for(n=0;n64)){if(t<0)return!1;r+=6}return r%8===0}function i(e){var t,n,r=e.replace(/[\r\n=]/g,""),i=r.length,o=c,s=0,u=[];for(t=0;t>16&255),u.push(s>>8&255),u.push(255&s)),s=s<<6|o.indexOf(r.charAt(t));return n=i%4*6,0===n?(u.push(s>>16&255),u.push(s>>8&255),u.push(255&s)):18===n?(u.push(s>>10&255),u.push(s>>2&255)):12===n&&u.push(s>>4&255),a?a.from?a.from(u):new a(u):u}function o(e){var t,n,r="",i=0,o=e.length,s=c;for(t=0;t>18&63],r+=s[i>>12&63],r+=s[i>>6&63],r+=s[63&i]),i=(i<<8)+e[t];return n=o%3,0===n?(r+=s[i>>18&63],r+=s[i>>12&63],r+=s[i>>6&63],r+=s[63&i]):2===n?(r+=s[i>>10&63],r+=s[i>>4&63],r+=s[i<<2&63],r+=s[64]):1===n&&(r+=s[i>>2&63],r+=s[i<<4&63],r+=s[64],r+=s[64]),r}function s(e){return a&&a.isBuffer(e)}var a;try{a=n(204).Buffer}catch(e){}var u=n(190),c="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r";e.exports=new u("tag:yaml.org,2002:binary",{kind:"scalar",resolve:r,construct:i,predicate:s,represent:o})},function(e,t,n){(function(e){/*! + * The buffer module from node.js, for the browser. + * + * @author Feross Aboukhadijeh + * @license MIT + */ +"use strict";function r(){try{var e=new Uint8Array(1);return e.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}},42===e.foo()&&"function"==typeof e.subarray&&0===e.subarray(1,1).byteLength}catch(e){return!1}}function i(){return s.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function o(e,t){if(i()=i())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+i().toString(16)+" bytes");return 0|e}function g(e){return+e!=e&&(e=0),s.alloc(+e)}function x(e,t){if(s.isBuffer(e))return e.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e.byteLength;"string"!=typeof e&&(e=""+e);var n=e.length;if(0===n)return 0;for(var r=!1;;)switch(t){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":case void 0:return K(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return q(e).length;default:if(r)return K(e).length;t=(""+t).toLowerCase(),r=!0}}function y(e,t,n){var r=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if(n>>>=0,t>>>=0,n<=t)return"";for(e||(e="utf8");;)switch(e){case"hex":return P(this,t,n);case"utf8":case"utf-8":return T(this,t,n);case"ascii":return N(this,t,n);case"latin1":case"binary":return I(this,t,n);case"base64":return F(this,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return M(this,t,n);default:if(r)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),r=!0}}function v(e,t,n){var r=e[t];e[t]=e[n],e[n]=r}function b(e,t,n,r,i){if(0===e.length)return-1;if("string"==typeof n?(r=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),n=+n,isNaN(n)&&(n=i?0:e.length-1),n<0&&(n=e.length+n),n>=e.length){if(i)return-1;n=e.length-1}else if(n<0){if(!i)return-1;n=0}if("string"==typeof t&&(t=s.from(t,r)),s.isBuffer(t))return 0===t.length?-1:D(e,t,n,r,i);if("number"==typeof t)return t&=255,s.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(e,t,n):Uint8Array.prototype.lastIndexOf.call(e,t,n):D(e,[t],n,r,i);throw new TypeError("val must be string, number or Buffer")}function D(e,t,n,r,i){function o(e,t){return 1===s?e[t]:e.readUInt16BE(t*s)}var s=1,a=e.length,u=t.length;if(void 0!==r&&(r=String(r).toLowerCase(),"ucs2"===r||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(e.length<2||t.length<2)return-1;s=2,a/=2,u/=2,n/=2}var c;if(i){var l=-1;for(c=n;ca&&(n=a-u),c=n;c>=0;c--){for(var h=!0,p=0;pi&&(r=i)):r=i;var o=t.length;if(o%2!==0)throw new TypeError("Invalid hex string");r>o/2&&(r=o/2);for(var s=0;s239?4:o>223?3:o>191?2:1;if(i+a<=n){var u,c,l,h;switch(a){case 1:o<128&&(s=o);break;case 2:u=e[i+1],128===(192&u)&&(h=(31&o)<<6|63&u,h>127&&(s=h));break;case 3:u=e[i+1],c=e[i+2],128===(192&u)&&128===(192&c)&&(h=(15&o)<<12|(63&u)<<6|63&c,h>2047&&(h<55296||h>57343)&&(s=h));break;case 4:u=e[i+1],c=e[i+2],l=e[i+3],128===(192&u)&&128===(192&c)&&128===(192&l)&&(h=(15&o)<<18|(63&u)<<12|(63&c)<<6|63&l,h>65535&&h<1114112&&(s=h))}}null===s?(s=65533,a=1):s>65535&&(s-=65536,r.push(s>>>10&1023|55296),s=56320|1023&s),r.push(s),i+=a}return B(r)}function B(e){var t=e.length;if(t<=ee)return String.fromCharCode.apply(String,e);for(var n="",r=0;rr)&&(n=r);for(var i="",o=t;on)throw new RangeError("Trying to access beyond buffer length")}function _(e,t,n,r,i,o){if(!s.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>i||te.length)throw new RangeError("Index out of range")}function L(e,t,n,r){t<0&&(t=65535+t+1);for(var i=0,o=Math.min(e.length-n,2);i>>8*(r?i:1-i)}function R(e,t,n,r){t<0&&(t=4294967295+t+1);for(var i=0,o=Math.min(e.length-n,4);i>>8*(r?i:3-i)&255}function U(e,t,n,r,i,o){if(n+r>e.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function j(e,t,n,r,i){return i||U(e,t,n,4,3.4028234663852886e38,-3.4028234663852886e38),Z.write(e,t,n,r,23,4),n+4}function z(e,t,n,r,i){return i||U(e,t,n,8,1.7976931348623157e308,-1.7976931348623157e308),Z.write(e,t,n,r,52,8),n+8}function J(e){if(e=X(e).replace(te,""),e.length<2)return"";for(;e.length%4!==0;)e+="=";return e}function X(e){return e.trim?e.trim():e.replace(/^\s+|\s+$/g,"")}function Y(e){return e<16?"0"+e.toString(16):e.toString(16)}function K(e,t){t=t||1/0;for(var n,r=e.length,i=null,o=[],s=0;s55295&&n<57344){if(!i){if(n>56319){(t-=3)>-1&&o.push(239,191,189);continue}if(s+1===r){(t-=3)>-1&&o.push(239,191,189);continue}i=n;continue}if(n<56320){(t-=3)>-1&&o.push(239,191,189),i=n;continue}n=(i-55296<<10|n-56320)+65536}else i&&(t-=3)>-1&&o.push(239,191,189);if(i=null,n<128){if((t-=1)<0)break;o.push(n)}else if(n<2048){if((t-=2)<0)break;o.push(n>>6|192,63&n|128)}else if(n<65536){if((t-=3)<0)break;o.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;o.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return o}function W(e){for(var t=[],n=0;n>8,i=n%256,o.push(i),o.push(r);return o}function q(e){return $.toByteArray(J(e))}function G(e,t,n,r){for(var i=0;i=t.length||i>=e.length);++i)t[i+n]=e[i];return i}function V(e){return e!==e}var $=n(205),Z=n(206),Q=n(207);t.Buffer=s,t.SlowBuffer=g,t.INSPECT_MAX_BYTES=50,s.TYPED_ARRAY_SUPPORT=void 0!==e.TYPED_ARRAY_SUPPORT?e.TYPED_ARRAY_SUPPORT:r(),t.kMaxLength=i(),s.poolSize=8192,s._augment=function(e){return e.__proto__=s.prototype,e},s.from=function(e,t,n){return a(null,e,t,n)},s.TYPED_ARRAY_SUPPORT&&(s.prototype.__proto__=Uint8Array.prototype,s.__proto__=Uint8Array,"undefined"!=typeof Symbol&&Symbol.species&&s[Symbol.species]===s&&Object.defineProperty(s,Symbol.species,{value:null,configurable:!0})),s.alloc=function(e,t,n){return c(null,e,t,n)},s.allocUnsafe=function(e){return l(null,e)},s.allocUnsafeSlow=function(e){return l(null,e)},s.isBuffer=function(e){return!(null==e||!e._isBuffer)},s.compare=function(e,t){if(!s.isBuffer(e)||!s.isBuffer(t))throw new TypeError("Arguments must be Buffers");if(e===t)return 0;for(var n=e.length,r=t.length,i=0,o=Math.min(n,r);i0&&(e=this.toString("hex",0,n).match(/.{2}/g).join(" "),this.length>n&&(e+=" ... ")),""},s.prototype.compare=function(e,t,n,r,i){if(!s.isBuffer(e))throw new TypeError("Argument must be a Buffer");if(void 0===t&&(t=0),void 0===n&&(n=e?e.length:0),void 0===r&&(r=0),void 0===i&&(i=this.length),t<0||n>e.length||r<0||i>this.length)throw new RangeError("out of range index");if(r>=i&&t>=n)return 0;if(r>=i)return-1;if(t>=n)return 1;if(t>>>=0,n>>>=0,r>>>=0,i>>>=0,this===e)return 0;for(var o=i-r,a=n-t,u=Math.min(o,a),c=this.slice(r,i),l=e.slice(t,n),h=0;hi)&&(n=i),e.length>0&&(n<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");for(var o=!1;;)switch(r){case"hex":return w(this,e,t,n);case"utf8":case"utf-8":return E(this,e,t,n);case"ascii":return k(this,e,t,n);case"latin1":case"binary":return A(this,e,t,n);case"base64":return C(this,e,t,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return S(this,e,t,n);default:if(o)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),o=!0}},s.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var ee=4096;s.prototype.slice=function(e,t){var n=this.length;e=~~e,t=void 0===t?n:~~t,e<0?(e+=n,e<0&&(e=0)):e>n&&(e=n),t<0?(t+=n,t<0&&(t=0)):t>n&&(t=n),t0&&(i*=256);)r+=this[e+--t]*i;return r},s.prototype.readUInt8=function(e,t){return t||O(e,1,this.length),this[e]},s.prototype.readUInt16LE=function(e,t){return t||O(e,2,this.length),this[e]|this[e+1]<<8},s.prototype.readUInt16BE=function(e,t){return t||O(e,2,this.length),this[e]<<8|this[e+1]},s.prototype.readUInt32LE=function(e,t){return t||O(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},s.prototype.readUInt32BE=function(e,t){return t||O(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},s.prototype.readIntLE=function(e,t,n){e|=0,t|=0,n||O(e,t,this.length);for(var r=this[e],i=1,o=0;++o=i&&(r-=Math.pow(2,8*t)),r},s.prototype.readIntBE=function(e,t,n){e|=0,t|=0,n||O(e,t,this.length);for(var r=t,i=1,o=this[e+--r];r>0&&(i*=256);)o+=this[e+--r]*i;return i*=128,o>=i&&(o-=Math.pow(2,8*t)),o},s.prototype.readInt8=function(e,t){return t||O(e,1,this.length),128&this[e]?(255-this[e]+1)*-1:this[e]},s.prototype.readInt16LE=function(e,t){t||O(e,2,this.length);var n=this[e]|this[e+1]<<8;return 32768&n?4294901760|n:n},s.prototype.readInt16BE=function(e,t){t||O(e,2,this.length);var n=this[e+1]|this[e]<<8;return 32768&n?4294901760|n:n},s.prototype.readInt32LE=function(e,t){return t||O(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},s.prototype.readInt32BE=function(e,t){return t||O(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},s.prototype.readFloatLE=function(e,t){return t||O(e,4,this.length),Z.read(this,e,!0,23,4)},s.prototype.readFloatBE=function(e,t){return t||O(e,4,this.length),Z.read(this,e,!1,23,4)},s.prototype.readDoubleLE=function(e,t){return t||O(e,8,this.length),Z.read(this,e,!0,52,8)},s.prototype.readDoubleBE=function(e,t){return t||O(e,8,this.length),Z.read(this,e,!1,52,8)},s.prototype.writeUIntLE=function(e,t,n,r){if(e=+e,t|=0,n|=0,!r){var i=Math.pow(2,8*n)-1;_(this,e,t,n,i,0)}var o=1,s=0;for(this[t]=255&e;++s=0&&(s*=256);)this[t+o]=e/s&255;return t+n},s.prototype.writeUInt8=function(e,t,n){return e=+e,t|=0,n||_(this,e,t,1,255,0),s.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),this[t]=255&e,t+1},s.prototype.writeUInt16LE=function(e,t,n){return e=+e,t|=0,n||_(this,e,t,2,65535,0),s.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):L(this,e,t,!0),t+2},s.prototype.writeUInt16BE=function(e,t,n){return e=+e,t|=0,n||_(this,e,t,2,65535,0),s.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):L(this,e,t,!1),t+2},s.prototype.writeUInt32LE=function(e,t,n){return e=+e,t|=0,n||_(this,e,t,4,4294967295,0),s.TYPED_ARRAY_SUPPORT?(this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e):R(this,e,t,!0),t+4},s.prototype.writeUInt32BE=function(e,t,n){return e=+e,t|=0,n||_(this,e,t,4,4294967295,0),s.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):R(this,e,t,!1),t+4},s.prototype.writeIntLE=function(e,t,n,r){if(e=+e,t|=0,!r){var i=Math.pow(2,8*n-1);_(this,e,t,n,i-1,-i)}var o=0,s=1,a=0;for(this[t]=255&e;++o>0)-a&255;return t+n},s.prototype.writeIntBE=function(e,t,n,r){if(e=+e,t|=0,!r){var i=Math.pow(2,8*n-1);_(this,e,t,n,i-1,-i)}var o=n-1,s=1,a=0;for(this[t+o]=255&e;--o>=0&&(s*=256);)e<0&&0===a&&0!==this[t+o+1]&&(a=1),this[t+o]=(e/s>>0)-a&255;return t+n},s.prototype.writeInt8=function(e,t,n){return e=+e,t|=0,n||_(this,e,t,1,127,-128),s.TYPED_ARRAY_SUPPORT||(e=Math.floor(e)),e<0&&(e=255+e+1),this[t]=255&e,t+1},s.prototype.writeInt16LE=function(e,t,n){return e=+e,t|=0,n||_(this,e,t,2,32767,-32768),s.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8):L(this,e,t,!0),t+2},s.prototype.writeInt16BE=function(e,t,n){return e=+e,t|=0,n||_(this,e,t,2,32767,-32768),s.TYPED_ARRAY_SUPPORT?(this[t]=e>>>8,this[t+1]=255&e):L(this,e,t,!1),t+2},s.prototype.writeInt32LE=function(e,t,n){return e=+e,t|=0,n||_(this,e,t,4,2147483647,-2147483648),s.TYPED_ARRAY_SUPPORT?(this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24):R(this,e,t,!0),t+4},s.prototype.writeInt32BE=function(e,t,n){return e=+e,t|=0,n||_(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),s.TYPED_ARRAY_SUPPORT?(this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e):R(this,e,t,!1),t+4},s.prototype.writeFloatLE=function(e,t,n){return j(this,e,t,!0,n)},s.prototype.writeFloatBE=function(e,t,n){return j(this,e,t,!1,n)},s.prototype.writeDoubleLE=function(e,t,n){return z(this,e,t,!0,n)},s.prototype.writeDoubleBE=function(e,t,n){return z(this,e,t,!1,n)},s.prototype.copy=function(e,t,n,r){if(n||(n=0),r||0===r||(r=this.length),t>=e.length&&(t=e.length),t||(t=0),r>0&&r=this.length)throw new RangeError("sourceStart out of bounds");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),e.length-t=0;--i)e[i+t]=this[i+n];else if(o<1e3||!s.TYPED_ARRAY_SUPPORT)for(i=0;i>>=0,n=void 0===n?this.length:n>>>0,e||(e=0);var o;if("number"==typeof e)for(o=t;o0)throw new Error("Invalid string. Length must be a multiple of 4");return"="===e[t-2]?2:"="===e[t-1]?1:0}function r(e){return 3*e.length/4-n(e)}function i(e){var t,r,i,o,s,a=e.length;o=n(e),s=new l(3*a/4-o),r=o>0?a-4:a;var u=0;for(t=0;t>16&255,s[u++]=i>>8&255,s[u++]=255&i;return 2===o?(i=c[e.charCodeAt(t)]<<2|c[e.charCodeAt(t+1)]>>4,s[u++]=255&i):1===o&&(i=c[e.charCodeAt(t)]<<10|c[e.charCodeAt(t+1)]<<4|c[e.charCodeAt(t+2)]>>2,s[u++]=i>>8&255,s[u++]=255&i),s}function o(e){return u[e>>18&63]+u[e>>12&63]+u[e>>6&63]+u[63&e]}function s(e,t,n){for(var r,i=[],s=t;sl?l:c+a));return 1===r?(t=e[n-1],i+=u[t>>2],i+=u[t<<4&63],i+="=="):2===r&&(t=(e[n-2]<<8)+e[n-1],i+=u[t>>10],i+=u[t>>4&63],i+=u[t<<2&63],i+="="),o.push(i),o.join("")}t.byteLength=r,t.toByteArray=i,t.fromByteArray=a;for(var u=[],c=[],l="undefined"!=typeof Uint8Array?Uint8Array:Array,h="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",p=0,f=h.length;p>1,l=-7,h=n?i-1:0,p=n?-1:1,f=e[t+h];for(h+=p,o=f&(1<<-l)-1,f>>=-l,l+=a;l>0;o=256*o+e[t+h],h+=p,l-=8);for(s=o&(1<<-l)-1,o>>=-l,l+=r;l>0;s=256*s+e[t+h],h+=p,l-=8);if(0===o)o=1-c;else{if(o===u)return s?NaN:(f?-1:1)*(1/0);s+=Math.pow(2,r),o-=c}return(f?-1:1)*s*Math.pow(2,o-r)},t.write=function(e,t,n,r,i,o){var s,a,u,c=8*o-i-1,l=(1<>1,p=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,f=r?0:o-1,d=r?1:-1,m=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(a=isNaN(t)?1:0,s=l):(s=Math.floor(Math.log(t)/Math.LN2),t*(u=Math.pow(2,-s))<1&&(s--,u*=2),t+=s+h>=1?p/u:p*Math.pow(2,1-h),t*u>=2&&(s++,u/=2),s+h>=l?(a=0,s=l):s+h>=1?(a=(t*u-1)*Math.pow(2,i),s+=h):(a=t*Math.pow(2,h-1)*Math.pow(2,i),s=0));i>=8;e[n+f]=255&a,f+=d,a/=256,i-=8);for(s=s<0;e[n+f]=255&s,f+=d,s/=256,c-=8);e[n+f-d]|=128*m}},function(e,t){var n={}.toString;e.exports=Array.isArray||function(e){return"[object Array]"==n.call(e)}},function(e,t,n){"use strict";function r(e){if(null===e)return!0;var t,n,r,i,o,u=[],c=e;for(t=0,n=c.length;t3)return!1;if("/"!==t[t.length-r.length-1])return!1}return!0}function i(e){var t=e,n=/\/([gim]*)$/.exec(e),r="";return"/"===t[0]&&(n&&(r=n[1]),t=t.slice(1,t.length-r.length-1)),new RegExp(t,r)}function o(e){var t="/"+e.source+"/";return e.global&&(t+="g"),e.multiline&&(t+="m"),e.ignoreCase&&(t+="i"),t}function s(e){return"[object RegExp]"===Object.prototype.toString.call(e)}var a=n(190);e.exports=new a("tag:yaml.org,2002:js/regexp",{kind:"scalar",resolve:r,construct:i,predicate:s,represent:o})},function(e,t,n){function r(e){if(null===e)return!1;try{var t="("+e+")",n=a.parse(t,{range:!0});return"Program"===n.type&&1===n.body.length&&"ExpressionStatement"===n.body[0].type&&"FunctionExpression"===n.body[0].expression.type}catch(e){return!1}}function i(e){var t,n="("+e+")",r=a.parse(n,{range:!0}),i=[];if("Program"!==r.type||1!==r.body.length||"ExpressionStatement"!==r.body[0].type||"FunctionExpression"!==r.body[0].expression.type)throw new Error("Failed to resolve function");return r.body[0].expression.params.forEach(function(e){i.push(e.name)}),t=r.body[0].expression.body.range,new Function(i,n.slice(t[0]+1,t[1]-1))}function o(e){return e.toString()}function s(e){return"[object Function]"===Object.prototype.toString.call(e)}var a;try{a=n(215)}catch(e){"undefined"!=typeof window&&(a=window.esprima)}var u=n(190);e.exports=new u("tag:yaml.org,2002:js/function",{kind:"scalar",resolve:r,construct:i,predicate:s,represent:o})},function(e,t,n){!function(t,n){e.exports=n()}(this,function(){return function(e){function t(r){if(n[r])return n[r].exports;var i=n[r]={exports:{},id:r,loaded:!1};return e[r].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){"use strict";function r(e,t,n){var r=null,i=function(e,t){n&&n(e,t),r&&r.visit(e,t)},u="function"==typeof n?i:null,c=!1;if(t){c="boolean"==typeof t.comment&&t.comment;var l="boolean"==typeof t.attachComment&&t.attachComment;(c||l)&&(r=new o.CommentHandler,r.attach=l,t.comment=!0,u=i)}var h;h=t&&"boolean"==typeof t.jsx&&t.jsx?new a.JSXParser(e,t,u):new s.Parser(e,t,u);var p=h.parseProgram();return c&&(p.comments=r.comments),h.config.tokens&&(p.tokens=h.tokens),h.config.tolerant&&(p.errors=h.errorHandler.errors),p}function i(e,t,n){var r,i=new u.Tokenizer(e,t);r=[];try{for(;;){var o=i.getNextToken();if(!o)break;n&&(o=n(o)),r.push(o)}}catch(e){i.errorHandler.tolerate(e)}return i.errorHandler.tolerant&&(r.errors=i.errors()),r}var o=n(1),s=n(3),a=n(11),u=n(15);t.parse=r,t.tokenize=i;var c=n(2);t.Syntax=c.Syntax,t.version="3.1.3"},function(e,t,n){"use strict";var r=n(2),i=function(){function e(){this.attach=!1,this.comments=[],this.stack=[],this.leading=[],this.trailing=[]}return e.prototype.insertInnerComments=function(e,t){if(e.type===r.Syntax.BlockStatement&&0===e.body.length){for(var n=[],i=this.leading.length-1;i>=0;--i){var o=this.leading[i];t.end.offset>=o.start&&(n.unshift(o.comment),this.leading.splice(i,1),this.trailing.splice(i,1))}n.length&&(e.innerComments=n)}},e.prototype.findTrailingComments=function(e,t){var n=[];if(this.trailing.length>0){for(var r=this.trailing.length-1;r>=0;--r){var i=this.trailing[r];i.start>=t.end.offset&&n.unshift(i.comment)}return this.trailing.length=0,n}var o=this.stack[this.stack.length-1];if(o&&o.node.trailingComments){var s=o.node.trailingComments[0];s&&s.range[0]>=t.end.offset&&(n=o.node.trailingComments,delete o.node.trailingComments)}return n},e.prototype.findLeadingComments=function(e,t){for(var n,r=[];this.stack.length>0;){var i=this.stack[this.stack.length-1];if(!(i&&i.start>=t.start.offset))break;n=this.stack.pop().node}if(n){for(var o=n.leadingComments?n.leadingComments.length:0,s=o-1;s>=0;--s){var a=n.leadingComments[s];a.range[1]<=t.start.offset&&(r.unshift(a),n.leadingComments.splice(s,1))}return n.leadingComments&&0===n.leadingComments.length&&delete n.leadingComments,r}for(var s=this.leading.length-1;s>=0;--s){var i=this.leading[s];i.start<=t.start.offset&&(r.unshift(i.comment),this.leading.splice(s,1))}return r},e.prototype.visitNode=function(e,t){if(!(e.type===r.Syntax.Program&&e.body.length>0)){this.insertInnerComments(e,t);var n=this.findTrailingComments(e,t),i=this.findLeadingComments(e,t);i.length>0&&(e.leadingComments=i),n.length>0&&(e.trailingComments=n),this.stack.push({node:e,start:t.start.offset})}},e.prototype.visitComment=function(e,t){var n="L"===e.type[0]?"Line":"Block",r={type:n,value:e.value};if(e.range&&(r.range=e.range),e.loc&&(r.loc=e.loc),this.comments.push(r),this.attach){var i={comment:{type:n,value:e.value,range:[t.start.offset,t.end.offset]},start:t.start.offset};e.loc&&(i.comment.loc=e.loc),e.type=n,this.leading.push(i),this.trailing.push(i)}},e.prototype.visit=function(e,t){"LineComment"===e.type?this.visitComment(e,t):"BlockComment"===e.type?this.visitComment(e,t):this.attach&&this.visitNode(e,t)},e}();t.CommentHandler=i},function(e,t){"use strict";t.Syntax={AssignmentExpression:"AssignmentExpression",AssignmentPattern:"AssignmentPattern",ArrayExpression:"ArrayExpression",ArrayPattern:"ArrayPattern",ArrowFunctionExpression:"ArrowFunctionExpression",BlockStatement:"BlockStatement",BinaryExpression:"BinaryExpression",BreakStatement:"BreakStatement",CallExpression:"CallExpression",CatchClause:"CatchClause",ClassBody:"ClassBody",ClassDeclaration:"ClassDeclaration",ClassExpression:"ClassExpression",ConditionalExpression:"ConditionalExpression",ContinueStatement:"ContinueStatement",DoWhileStatement:"DoWhileStatement",DebuggerStatement:"DebuggerStatement",EmptyStatement:"EmptyStatement",ExportAllDeclaration:"ExportAllDeclaration",ExportDefaultDeclaration:"ExportDefaultDeclaration",ExportNamedDeclaration:"ExportNamedDeclaration",ExportSpecifier:"ExportSpecifier",ExpressionStatement:"ExpressionStatement",ForStatement:"ForStatement",ForOfStatement:"ForOfStatement",ForInStatement:"ForInStatement",FunctionDeclaration:"FunctionDeclaration",FunctionExpression:"FunctionExpression",Identifier:"Identifier",IfStatement:"IfStatement",ImportDeclaration:"ImportDeclaration",ImportDefaultSpecifier:"ImportDefaultSpecifier",ImportNamespaceSpecifier:"ImportNamespaceSpecifier",ImportSpecifier:"ImportSpecifier",Literal:"Literal",LabeledStatement:"LabeledStatement",LogicalExpression:"LogicalExpression",MemberExpression:"MemberExpression",MetaProperty:"MetaProperty",MethodDefinition:"MethodDefinition",NewExpression:"NewExpression",ObjectExpression:"ObjectExpression",ObjectPattern:"ObjectPattern",Program:"Program",Property:"Property",RestElement:"RestElement",ReturnStatement:"ReturnStatement",SequenceExpression:"SequenceExpression",SpreadElement:"SpreadElement",Super:"Super",SwitchCase:"SwitchCase",SwitchStatement:"SwitchStatement",TaggedTemplateExpression:"TaggedTemplateExpression",TemplateElement:"TemplateElement",TemplateLiteral:"TemplateLiteral",ThisExpression:"ThisExpression",ThrowStatement:"ThrowStatement",TryStatement:"TryStatement",UnaryExpression:"UnaryExpression",UpdateExpression:"UpdateExpression",VariableDeclaration:"VariableDeclaration",VariableDeclarator:"VariableDeclarator",WhileStatement:"WhileStatement",WithStatement:"WithStatement",YieldExpression:"YieldExpression"}},function(e,t,n){"use strict";var r=n(4),i=n(5),o=n(6),s=n(7),a=n(8),u=n(2),c=n(10),l="ArrowParameterPlaceHolder",h=function(){function e(e,t,n){void 0===t&&(t={}),this.config={range:"boolean"==typeof t.range&&t.range,loc:"boolean"==typeof t.loc&&t.loc,source:null,tokens:"boolean"==typeof t.tokens&&t.tokens,comment:"boolean"==typeof t.comment&&t.comment,tolerant:"boolean"==typeof t.tolerant&&t.tolerant},this.config.loc&&t.source&&null!==t.source&&(this.config.source=String(t.source)),this.delegate=n,this.errorHandler=new o.ErrorHandler,this.errorHandler.tolerant=this.config.tolerant,this.scanner=new a.Scanner(e,this.errorHandler),this.scanner.trackComment=this.config.comment,this.operatorPrecedence={")":0,";":0,",":0,"=":0,"]":0,"||":1,"&&":2, +"|":3,"^":4,"&":5,"==":6,"!=":6,"===":6,"!==":6,"<":7,">":7,"<=":7,">=":7,"<<":8,">>":8,">>>":8,"+":9,"-":9,"*":11,"/":11,"%":11},this.sourceType=t&&"module"===t.sourceType?"module":"script",this.lookahead=null,this.hasLineTerminator=!1,this.context={allowIn:!0,allowYield:!0,firstCoverInitializedNameError:null,isAssignmentTarget:!1,isBindingElement:!1,inFunctionBody:!1,inIteration:!1,inSwitch:!1,labelSet:{},strict:"module"===this.sourceType},this.tokens=[],this.startMarker={index:0,lineNumber:this.scanner.lineNumber,lineStart:0},this.lastMarker={index:0,lineNumber:this.scanner.lineNumber,lineStart:0},this.nextToken(),this.lastMarker={index:this.scanner.index,lineNumber:this.scanner.lineNumber,lineStart:this.scanner.lineStart}}return e.prototype.throwError=function(e){for(var t=[],n=1;n0&&this.delegate)for(var t=0;t>="===e||">>>="===e||"&="===e||"^="===e||"|="===e},e.prototype.isolateCoverGrammar=function(e){var t=this.context.isBindingElement,n=this.context.isAssignmentTarget,r=this.context.firstCoverInitializedNameError;this.context.isBindingElement=!0,this.context.isAssignmentTarget=!0,this.context.firstCoverInitializedNameError=null;var i=e.call(this);return null!==this.context.firstCoverInitializedNameError&&this.throwUnexpectedToken(this.context.firstCoverInitializedNameError),this.context.isBindingElement=t,this.context.isAssignmentTarget=n,this.context.firstCoverInitializedNameError=r,i},e.prototype.inheritCoverGrammar=function(e){var t=this.context.isBindingElement,n=this.context.isAssignmentTarget,r=this.context.firstCoverInitializedNameError;this.context.isBindingElement=!0,this.context.isAssignmentTarget=!0,this.context.firstCoverInitializedNameError=null;var i=e.call(this);return this.context.isBindingElement=this.context.isBindingElement&&t,this.context.isAssignmentTarget=this.context.isAssignmentTarget&&n,this.context.firstCoverInitializedNameError=r||this.context.firstCoverInitializedNameError,i},e.prototype.consumeSemicolon=function(){this.match(";")?this.nextToken():this.hasLineTerminator||(this.lookahead.type===s.Token.EOF||this.match("}")||this.throwUnexpectedToken(this.lookahead),this.lastMarker.index=this.startMarker.index,this.lastMarker.lineNumber=this.startMarker.lineNumber,this.lastMarker.lineStart=this.startMarker.lineStart)},e.prototype.parsePrimaryExpression=function(){var e,t,n,r,o=this.createNode();switch(this.lookahead.type){case s.Token.Identifier:"module"===this.sourceType&&"await"===this.lookahead.value&&this.tolerateUnexpectedToken(this.lookahead),e=this.finalize(o,new c.Identifier(this.nextToken().value));break;case s.Token.NumericLiteral:case s.Token.StringLiteral:this.context.strict&&this.lookahead.octal&&this.tolerateUnexpectedToken(this.lookahead,i.Messages.StrictOctalLiteral),this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1,n=this.nextToken(),r=this.getTokenRaw(n),e=this.finalize(o,new c.Literal(n.value,r));break;case s.Token.BooleanLiteral:this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1,n=this.nextToken(),n.value="true"===n.value,r=this.getTokenRaw(n),e=this.finalize(o,new c.Literal(n.value,r));break;case s.Token.NullLiteral:this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1,n=this.nextToken(),n.value=null,r=this.getTokenRaw(n),e=this.finalize(o,new c.Literal(n.value,r));break;case s.Token.Template:e=this.parseTemplateLiteral();break;case s.Token.Punctuator:switch(t=this.lookahead.value){case"(":this.context.isBindingElement=!1,e=this.inheritCoverGrammar(this.parseGroupExpression);break;case"[":e=this.inheritCoverGrammar(this.parseArrayInitializer);break;case"{":e=this.inheritCoverGrammar(this.parseObjectInitializer);break;case"/":case"/=":this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1,this.scanner.index=this.startMarker.index,n=this.nextRegexToken(),r=this.getTokenRaw(n),e=this.finalize(o,new c.RegexLiteral(n.value,r,n.regex));break;default:this.throwUnexpectedToken(this.nextToken())}break;case s.Token.Keyword:!this.context.strict&&this.context.allowYield&&this.matchKeyword("yield")?e=this.parseIdentifierName():!this.context.strict&&this.matchKeyword("let")?e=this.finalize(o,new c.Identifier(this.nextToken().value)):(this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1,this.matchKeyword("function")?e=this.parseFunctionExpression():this.matchKeyword("this")?(this.nextToken(),e=this.finalize(o,new c.ThisExpression)):this.matchKeyword("class")?e=this.parseClassExpression():this.throwUnexpectedToken(this.nextToken()));break;default:this.throwUnexpectedToken(this.nextToken())}return e},e.prototype.parseSpreadElement=function(){var e=this.createNode();this.expect("...");var t=this.inheritCoverGrammar(this.parseAssignmentExpression);return this.finalize(e,new c.SpreadElement(t))},e.prototype.parseArrayInitializer=function(){var e=this.createNode(),t=[];for(this.expect("[");!this.match("]");)if(this.match(","))this.nextToken(),t.push(null);else if(this.match("...")){var n=this.parseSpreadElement();this.match("]")||(this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1,this.expect(",")),t.push(n)}else t.push(this.inheritCoverGrammar(this.parseAssignmentExpression)),this.match("]")||this.expect(",");return this.expect("]"),this.finalize(e,new c.ArrayExpression(t))},e.prototype.parsePropertyMethod=function(e){this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1;var t=this.context.strict,n=this.isolateCoverGrammar(this.parseFunctionSourceElements);return this.context.strict&&e.firstRestricted&&this.tolerateUnexpectedToken(e.firstRestricted,e.message),this.context.strict&&e.stricted&&this.tolerateUnexpectedToken(e.stricted,e.message),this.context.strict=t,n},e.prototype.parsePropertyMethodFunction=function(){var e=!1,t=this.createNode(),n=this.context.allowYield;this.context.allowYield=!1;var r=this.parseFormalParameters(),i=this.parsePropertyMethod(r);return this.context.allowYield=n,this.finalize(t,new c.FunctionExpression(null,r.params,i,e))},e.prototype.parseObjectPropertyKey=function(){var e=this.createNode(),t=this.nextToken(),n=null;switch(t.type){case s.Token.StringLiteral:case s.Token.NumericLiteral:this.context.strict&&t.octal&&this.tolerateUnexpectedToken(t,i.Messages.StrictOctalLiteral);var r=this.getTokenRaw(t);n=this.finalize(e,new c.Literal(t.value,r));break;case s.Token.Identifier:case s.Token.BooleanLiteral:case s.Token.NullLiteral:case s.Token.Keyword:n=this.finalize(e,new c.Identifier(t.value));break;case s.Token.Punctuator:"["===t.value?(n=this.isolateCoverGrammar(this.parseAssignmentExpression),this.expect("]")):this.throwUnexpectedToken(t);break;default:this.throwUnexpectedToken(t)}return n},e.prototype.isPropertyKey=function(e,t){return e.type===u.Syntax.Identifier&&e.name===t||e.type===u.Syntax.Literal&&e.value===t},e.prototype.parseObjectProperty=function(e){var t,n,r,o=this.createNode(),a=this.lookahead,u=!1,l=!1,h=!1;a.type===s.Token.Identifier?(this.nextToken(),n=this.finalize(o,new c.Identifier(a.value))):this.match("*")?this.nextToken():(u=this.match("["),n=this.parseObjectPropertyKey());var p=this.qualifiedPropertyName(this.lookahead);if(a.type===s.Token.Identifier&&"get"===a.value&&p)t="get",u=this.match("["),n=this.parseObjectPropertyKey(),this.context.allowYield=!1,r=this.parseGetterMethod();else if(a.type===s.Token.Identifier&&"set"===a.value&&p)t="set",u=this.match("["),n=this.parseObjectPropertyKey(),r=this.parseSetterMethod();else if(a.type===s.Token.Punctuator&&"*"===a.value&&p)t="init",u=this.match("["),n=this.parseObjectPropertyKey(),r=this.parseGeneratorMethod(),l=!0;else if(n||this.throwUnexpectedToken(this.lookahead),t="init",this.match(":"))!u&&this.isPropertyKey(n,"__proto__")&&(e.value&&this.tolerateError(i.Messages.DuplicateProtoProperty),e.value=!0),this.nextToken(),r=this.inheritCoverGrammar(this.parseAssignmentExpression);else if(this.match("("))r=this.parsePropertyMethodFunction(),l=!0;else if(a.type===s.Token.Identifier){var f=this.finalize(o,new c.Identifier(a.value));if(this.match("=")){this.context.firstCoverInitializedNameError=this.lookahead,this.nextToken(),h=!0;var d=this.isolateCoverGrammar(this.parseAssignmentExpression);r=this.finalize(o,new c.AssignmentPattern(f,d))}else h=!0,r=f}else this.throwUnexpectedToken(this.nextToken());return this.finalize(o,new c.Property(t,n,u,r,l,h))},e.prototype.parseObjectInitializer=function(){var e=this.createNode();this.expect("{");for(var t=[],n={value:!1};!this.match("}");)t.push(this.parseObjectProperty(n)),this.match("}")||this.expectCommaSeparator();return this.expect("}"),this.finalize(e,new c.ObjectExpression(t))},e.prototype.parseTemplateHead=function(){r.assert(this.lookahead.head,"Template literal must start with a template head");var e=this.createNode(),t=this.nextToken(),n={raw:t.value.raw,cooked:t.value.cooked};return this.finalize(e,new c.TemplateElement(n,t.tail))},e.prototype.parseTemplateElement=function(){this.lookahead.type!==s.Token.Template&&this.throwUnexpectedToken();var e=this.createNode(),t=this.nextToken(),n={raw:t.value.raw,cooked:t.value.cooked};return this.finalize(e,new c.TemplateElement(n,t.tail))},e.prototype.parseTemplateLiteral=function(){var e=this.createNode(),t=[],n=[],r=this.parseTemplateHead();for(n.push(r);!r.tail;)t.push(this.parseExpression()),r=this.parseTemplateElement(),n.push(r);return this.finalize(e,new c.TemplateLiteral(n,t))},e.prototype.reinterpretExpressionAsPattern=function(e){switch(e.type){case u.Syntax.Identifier:case u.Syntax.MemberExpression:case u.Syntax.RestElement:case u.Syntax.AssignmentPattern:break;case u.Syntax.SpreadElement:e.type=u.Syntax.RestElement,this.reinterpretExpressionAsPattern(e.argument);break;case u.Syntax.ArrayExpression:e.type=u.Syntax.ArrayPattern;for(var t=0;t")||this.expect("=>"),e={type:l,params:[]};else{var t=this.lookahead,n=[];if(this.match("..."))e=this.parseRestElement(n),this.expect(")"),this.match("=>")||this.expect("=>"),e={type:l,params:[e]};else{var r=!1;if(this.context.isBindingElement=!0,e=this.inheritCoverGrammar(this.parseAssignmentExpression),this.match(",")){var i=[];for(this.context.isAssignmentTarget=!1,i.push(e);this.startMarker.index")||this.expect("=>"),this.context.isBindingElement=!1;for(var o=0;o")&&(e.type===u.Syntax.Identifier&&"yield"===e.name&&(r=!0,e={type:l,params:[e]}),!r)){if(this.context.isBindingElement||this.throwUnexpectedToken(this.lookahead),e.type===u.Syntax.SequenceExpression)for(var o=0;o0){this.nextToken(),n.prec=r,this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1;for(var i=[e,this.lookahead],o=t,s=this.isolateCoverGrammar(this.parseExponentiationExpression),a=[o,n,s];;){if(r=this.binaryPrecedence(this.lookahead),r<=0)break;for(;a.length>2&&r<=a[a.length-2].prec;){s=a.pop();var u=a.pop().value;o=a.pop(),i.pop();var l=this.startNode(i[i.length-1]);a.push(this.finalize(l,new c.BinaryExpression(u,o,s)))}n=this.nextToken(),n.prec=r,a.push(n),i.push(this.lookahead),a.push(this.isolateCoverGrammar(this.parseExponentiationExpression))}var h=a.length-1;for(t=a[h],i.pop();h>1;){var l=this.startNode(i.pop());t=this.finalize(l,new c.BinaryExpression(a[h-1].value,a[h-2],t)),h-=2}}return t},e.prototype.parseConditionalExpression=function(){var e=this.lookahead,t=this.inheritCoverGrammar(this.parseBinaryExpression);if(this.match("?")){this.nextToken();var n=this.context.allowIn;this.context.allowIn=!0;var r=this.isolateCoverGrammar(this.parseAssignmentExpression);this.context.allowIn=n,this.expect(":");var i=this.isolateCoverGrammar(this.parseAssignmentExpression);t=this.finalize(this.startNode(e),new c.ConditionalExpression(t,r,i)),this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1}return t},e.prototype.checkPatternParam=function(e,t){switch(t.type){case u.Syntax.Identifier:this.validateParam(e,t,t.name);break;case u.Syntax.RestElement:this.checkPatternParam(e,t.argument);break;case u.Syntax.AssignmentPattern:this.checkPatternParam(e,t.left);break;case u.Syntax.ArrayPattern:for(var n=0;n")){this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1;var r=this.reinterpretAsCoverFormalsList(e);if(r){this.hasLineTerminator&&this.tolerateUnexpectedToken(this.lookahead),this.context.firstCoverInitializedNameError=null;var o=this.context.strict,s=this.context.allowYield;this.context.allowYield=!0;var a=this.startNode(t);this.expect("=>");var h=this.match("{")?this.parseFunctionSourceElements():this.isolateCoverGrammar(this.parseAssignmentExpression),p=h.type!==u.Syntax.BlockStatement;this.context.strict&&r.firstRestricted&&this.throwUnexpectedToken(r.firstRestricted,r.message),this.context.strict&&r.stricted&&this.tolerateUnexpectedToken(r.stricted,r.message),e=this.finalize(a,new c.ArrowFunctionExpression(r.params,h,p)),this.context.strict=o,this.context.allowYield=s}}else if(this.matchAssign()){if(this.context.isAssignmentTarget||this.tolerateError(i.Messages.InvalidLHSInAssignment),this.context.strict&&e.type===u.Syntax.Identifier){var f=e;this.scanner.isRestrictedWord(f.name)&&this.tolerateUnexpectedToken(n,i.Messages.StrictLHSAssignment),this.scanner.isStrictModeReservedWord(f.name)&&this.tolerateUnexpectedToken(n,i.Messages.StrictReservedWord)}this.match("=")?this.reinterpretExpressionAsPattern(e):(this.context.isAssignmentTarget=!1,this.context.isBindingElement=!1),n=this.nextToken();var d=this.isolateCoverGrammar(this.parseAssignmentExpression);e=this.finalize(this.startNode(t),new c.AssignmentExpression(n.value,e,d)),this.context.firstCoverInitializedNameError=null}}return e},e.prototype.parseExpression=function(){var e=this.lookahead,t=this.isolateCoverGrammar(this.parseAssignmentExpression);if(this.match(",")){var n=[];for(n.push(t);this.startMarker.index",t.TokenName[n.Identifier]="Identifier",t.TokenName[n.Keyword]="Keyword",t.TokenName[n.NullLiteral]="Null",t.TokenName[n.NumericLiteral]="Numeric",t.TokenName[n.Punctuator]="Punctuator",t.TokenName[n.StringLiteral]="String",t.TokenName[n.RegularExpression]="RegularExpression",t.TokenName[n.Template]="Template"},function(e,t,n){"use strict";function r(e){return"0123456789abcdef".indexOf(e.toLowerCase())}function i(e){return"01234567".indexOf(e)}var o=n(4),s=n(5),a=n(9),u=n(7),c=function(){function e(e,t){this.source=e,this.errorHandler=t,this.trackComment=!1,this.length=e.length,this.index=0,this.lineNumber=e.length>0?1:0,this.lineStart=0,this.curlyStack=[]}return e.prototype.eof=function(){return this.index>=this.length},e.prototype.throwUnexpectedToken=function(e){void 0===e&&(e=s.Messages.UnexpectedTokenIllegal),this.errorHandler.throwError(this.index,this.lineNumber,this.index-this.lineStart+1,e)},e.prototype.tolerateUnexpectedToken=function(){this.errorHandler.tolerateError(this.index,this.lineNumber,this.index-this.lineStart+1,s.Messages.UnexpectedTokenIllegal)},e.prototype.skipSingleLineComment=function(e){var t,n,r;for(this.trackComment&&(t=[],n=this.index-e,r={start:{line:this.lineNumber,column:this.index-this.lineStart-e},end:{}});!this.eof();){var i=this.source.charCodeAt(this.index);if(++this.index,a.Character.isLineTerminator(i)){if(this.trackComment){r.end={line:this.lineNumber,column:this.index-this.lineStart-1};var o={multiLine:!1,slice:[n+e,this.index-1],range:[n,this.index-1],loc:r};t.push(o)}return 13===i&&10===this.source.charCodeAt(this.index)&&++this.index,++this.lineNumber,this.lineStart=this.index,t}}if(this.trackComment){r.end={line:this.lineNumber,column:this.index-this.lineStart};var o={multiLine:!1,slice:[n+e,this.index],range:[n,this.index],loc:r};t.push(o)}return t},e.prototype.skipMultiLineComment=function(){var e,t,n;for(this.trackComment&&(e=[],t=this.index-2,n={start:{line:this.lineNumber,column:this.index-this.lineStart-2},end:{}});!this.eof();){var r=this.source.charCodeAt(this.index);if(a.Character.isLineTerminator(r))13===r&&10===this.source.charCodeAt(this.index+1)&&++this.index,++this.lineNumber,++this.index,this.lineStart=this.index;else if(42===r){if(47===this.source.charCodeAt(this.index+1)){if(this.index+=2,this.trackComment){n.end={line:this.lineNumber,column:this.index-this.lineStart};var i={multiLine:!0,slice:[t+2,this.index-2],range:[t,this.index],loc:n};e.push(i)}return e}++this.index}else++this.index}if(this.trackComment){n.end={line:this.lineNumber,column:this.index-this.lineStart};var i={multiLine:!0,slice:[t+2,this.index],range:[t,this.index],loc:n};e.push(i)}return this.tolerateUnexpectedToken(),e},e.prototype.scanComments=function(){var e;this.trackComment&&(e=[]);for(var t=0===this.index;!this.eof();){var n=this.source.charCodeAt(this.index);if(a.Character.isWhiteSpace(n))++this.index;else if(a.Character.isLineTerminator(n))++this.index,13===n&&10===this.source.charCodeAt(this.index)&&++this.index,++this.lineNumber,this.lineStart=this.index,t=!0;else if(47===n)if(n=this.source.charCodeAt(this.index+1),47===n){this.index+=2;var r=this.skipSingleLineComment(2);this.trackComment&&(e=e.concat(r)),t=!0}else{if(42!==n)break;this.index+=2;var r=this.skipMultiLineComment();this.trackComment&&(e=e.concat(r))}else if(t&&45===n){if(45!==this.source.charCodeAt(this.index+1)||62!==this.source.charCodeAt(this.index+2))break;this.index+=3;var r=this.skipSingleLineComment(3);this.trackComment&&(e=e.concat(r))}else{if(60!==n)break;if("!--"!==this.source.slice(this.index+1,this.index+4))break;this.index+=4;var r=this.skipSingleLineComment(4);this.trackComment&&(e=e.concat(r))}}return e},e.prototype.isFutureReservedWord=function(e){switch(e){case"enum":case"export":case"import":case"super":return!0;default:return!1}},e.prototype.isStrictModeReservedWord=function(e){switch(e){case"implements":case"interface":case"package":case"private":case"protected":case"public":case"static":case"yield":case"let":return!0;default:return!1}},e.prototype.isRestrictedWord=function(e){return"eval"===e||"arguments"===e},e.prototype.isKeyword=function(e){switch(e.length){case 2:return"if"===e||"in"===e||"do"===e;case 3:return"var"===e||"for"===e||"new"===e||"try"===e||"let"===e;case 4:return"this"===e||"else"===e||"case"===e||"void"===e||"with"===e||"enum"===e;case 5:return"while"===e||"break"===e||"catch"===e||"throw"===e||"const"===e||"yield"===e||"class"===e||"super"===e;case 6:return"return"===e||"typeof"===e||"delete"===e||"switch"===e||"export"===e||"import"===e;case 7:return"default"===e||"finally"===e||"extends"===e;case 8:return"function"===e||"continue"===e||"debugger"===e;case 10:return"instanceof"===e;default:return!1}},e.prototype.codePointAt=function(e){var t=this.source.charCodeAt(e);if(t>=55296&&t<=56319){var n=this.source.charCodeAt(e+1);if(n>=56320&&n<=57343){var r=t;t=1024*(r-55296)+n-56320+65536}}return t},e.prototype.scanHexEscape=function(e){for(var t="u"===e?4:2,n=0,i=0;i1114111||"}"!==e)&&this.throwUnexpectedToken(),a.Character.fromCodePoint(t)},e.prototype.getIdentifier=function(){for(var e=this.index++;!this.eof();){var t=this.source.charCodeAt(this.index);if(92===t)return this.index=e,this.getComplexIdentifier();if(t>=55296&&t<57343)return this.index=e,this.getComplexIdentifier();if(!a.Character.isIdentifierPart(t))break;++this.index}return this.source.slice(e,this.index)},e.prototype.getComplexIdentifier=function(){var e=this.codePointAt(this.index),t=a.Character.fromCodePoint(e);this.index+=t.length;var n;for(92===e&&(117!==this.source.charCodeAt(this.index)&&this.throwUnexpectedToken(),++this.index,"{"===this.source[this.index]?(++this.index,n=this.scanUnicodeCodePointEscape()):(n=this.scanHexEscape("u"),e=n.charCodeAt(0),n&&"\\"!==n&&a.Character.isIdentifierStart(e)||this.throwUnexpectedToken()),t=n);!this.eof()&&(e=this.codePointAt(this.index),a.Character.isIdentifierPart(e));)n=a.Character.fromCodePoint(e),t+=n,this.index+=n.length,92===e&&(t=t.substr(0,t.length-1),117!==this.source.charCodeAt(this.index)&&this.throwUnexpectedToken(),++this.index,"{"===this.source[this.index]?(++this.index,n=this.scanUnicodeCodePointEscape()):(n=this.scanHexEscape("u"),e=n.charCodeAt(0),n&&"\\"!==n&&a.Character.isIdentifierPart(e)||this.throwUnexpectedToken()),t+=n);return t},e.prototype.octalToDecimal=function(e){var t="0"!==e,n=i(e);return!this.eof()&&a.Character.isOctalDigit(this.source.charCodeAt(this.index))&&(t=!0,n=8*n+i(this.source[this.index++]),"0123".indexOf(e)>=0&&!this.eof()&&a.Character.isOctalDigit(this.source.charCodeAt(this.index))&&(n=8*n+i(this.source[this.index++]))),{code:n,octal:t}},e.prototype.scanIdentifier=function(){var e,t=this.index,n=92===this.source.charCodeAt(t)?this.getComplexIdentifier():this.getIdentifier();return e=1===n.length?u.Token.Identifier:this.isKeyword(n)?u.Token.Keyword:"null"===n?u.Token.NullLiteral:"true"===n||"false"===n?u.Token.BooleanLiteral:u.Token.Identifier,{type:e,value:n,lineNumber:this.lineNumber,lineStart:this.lineStart,start:t,end:this.index}},e.prototype.scanPunctuator=function(){var e={type:u.Token.Punctuator,value:"",lineNumber:this.lineNumber,lineStart:this.lineStart,start:this.index,end:this.index},t=this.source[this.index];switch(t){case"(":case"{":"{"===t&&this.curlyStack.push("{"),++this.index;break;case".":++this.index,"."===this.source[this.index]&&"."===this.source[this.index+1]&&(this.index+=2,t="...");break;case"}":++this.index,this.curlyStack.pop();break;case")":case";":case",":case"[":case"]":case":":case"?":case"~":++this.index;break;default:t=this.source.substr(this.index,4),">>>="===t?this.index+=4:(t=t.substr(0,3),"==="===t||"!=="===t||">>>"===t||"<<="===t||">>="===t||"**="===t?this.index+=3:(t=t.substr(0,2),"&&"===t||"||"===t||"=="===t||"!="===t||"+="===t||"-="===t||"*="===t||"/="===t||"++"===t||"--"===t||"<<"===t||">>"===t||"&="===t||"|="===t||"^="===t||"%="===t||"<="===t||">="===t||"=>"===t||"**"===t?this.index+=2:(t=this.source[this.index],"<>=!+-*%&|^/".indexOf(t)>=0&&++this.index)))}return this.index===e.start&&this.throwUnexpectedToken(),e.end=this.index,e.value=t,e},e.prototype.scanHexLiteral=function(e){for(var t="";!this.eof()&&a.Character.isHexDigit(this.source.charCodeAt(this.index));)t+=this.source[this.index++];return 0===t.length&&this.throwUnexpectedToken(),a.Character.isIdentifierStart(this.source.charCodeAt(this.index))&&this.throwUnexpectedToken(),{type:u.Token.NumericLiteral,value:parseInt("0x"+t,16),lineNumber:this.lineNumber,lineStart:this.lineStart,start:e,end:this.index}},e.prototype.scanBinaryLiteral=function(e){for(var t,n="";!this.eof()&&(t=this.source[this.index],"0"===t||"1"===t);)n+=this.source[this.index++];return 0===n.length&&this.throwUnexpectedToken(),this.eof()||(t=this.source.charCodeAt(this.index),(a.Character.isIdentifierStart(t)||a.Character.isDecimalDigit(t))&&this.throwUnexpectedToken()),{type:u.Token.NumericLiteral,value:parseInt(n,2),lineNumber:this.lineNumber,lineStart:this.lineStart,start:e,end:this.index}},e.prototype.scanOctalLiteral=function(e,t){var n="",r=!1;for(a.Character.isOctalDigit(e.charCodeAt(0))?(r=!0,n="0"+this.source[this.index++]):++this.index;!this.eof()&&a.Character.isOctalDigit(this.source.charCodeAt(this.index));)n+=this.source[this.index++];return r||0!==n.length||this.throwUnexpectedToken(),(a.Character.isIdentifierStart(this.source.charCodeAt(this.index))||a.Character.isDecimalDigit(this.source.charCodeAt(this.index)))&&this.throwUnexpectedToken(),{type:u.Token.NumericLiteral,value:parseInt(n,8),octal:r,lineNumber:this.lineNumber,lineStart:this.lineStart,start:t,end:this.index}},e.prototype.isImplicitOctalLiteral=function(){for(var e=this.index+1;e=0&&(r=r.replace(/\\u\{([0-9a-fA-F]+)\}|\\u([a-fA-F0-9]{4})/g,function(e,t,r){var o=parseInt(t||r,16);return o>1114111&&i.throwUnexpectedToken(s.Messages.InvalidRegExp),o<=65535?String.fromCharCode(o):n}).replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,n));try{RegExp(r)}catch(e){this.throwUnexpectedToken(s.Messages.InvalidRegExp)}try{return new RegExp(e,t)}catch(e){return null}},e.prototype.scanRegExpBody=function(){var e=this.source[this.index];o.assert("/"===e,"Regular expression literal must start with a slash");for(var t=this.source[this.index++],n=!1,r=!1;!this.eof();)if(e=this.source[this.index++],t+=e,"\\"===e)e=this.source[this.index++],a.Character.isLineTerminator(e.charCodeAt(0))&&this.throwUnexpectedToken(s.Messages.UnterminatedRegExp),t+=e;else if(a.Character.isLineTerminator(e.charCodeAt(0)))this.throwUnexpectedToken(s.Messages.UnterminatedRegExp);else if(n)"]"===e&&(n=!1);else{if("/"===e){r=!0;break}"["===e&&(n=!0)}r||this.throwUnexpectedToken(s.Messages.UnterminatedRegExp);var i=t.substr(1,t.length-2);return{value:i,literal:t}},e.prototype.scanRegExpFlags=function(){for(var e="",t="";!this.eof();){var n=this.source[this.index];if(!a.Character.isIdentifierPart(n.charCodeAt(0)))break;if(++this.index,"\\"!==n||this.eof())t+=n,e+=n;else if(n=this.source[this.index],"u"===n){++this.index;var r=this.index;if(n=this.scanHexEscape("u"))for(t+=n,e+="\\u";r=55296&&e<57343&&a.Character.isIdentifierStart(this.codePointAt(this.index))?this.scanIdentifier():this.scanPunctuator()},e}();t.Scanner=c},function(e,t){"use strict";var n={NonAsciiIdentifierStart:/[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B4\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309B-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCA0-\uDCDF\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]/,NonAsciiIdentifierPart:/[\xAA\xB5\xB7\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0-\u08B4\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C81-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1369-\u1371\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1CD0-\u1CD2\u1CD4-\u1CF6\u1CF8\u1CF9\u1D00-\u1DF5\u1DFC-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDCA-\uDDCC\uDDD0-\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE37\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9\uDF00-\uDF19\uDF1D-\uDF2B\uDF30-\uDF39]|\uD806[\uDCA0-\uDCE9\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF]/ +};t.Character={fromCodePoint:function(e){return e<65536?String.fromCharCode(e):String.fromCharCode(55296+(e-65536>>10))+String.fromCharCode(56320+(e-65536&1023))},isWhiteSpace:function(e){return 32===e||9===e||11===e||12===e||160===e||e>=5760&&[5760,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8239,8287,12288,65279].indexOf(e)>=0},isLineTerminator:function(e){return 10===e||13===e||8232===e||8233===e},isIdentifierStart:function(e){return 36===e||95===e||e>=65&&e<=90||e>=97&&e<=122||92===e||e>=128&&n.NonAsciiIdentifierStart.test(t.Character.fromCodePoint(e))},isIdentifierPart:function(e){return 36===e||95===e||e>=65&&e<=90||e>=97&&e<=122||e>=48&&e<=57||92===e||e>=128&&n.NonAsciiIdentifierPart.test(t.Character.fromCodePoint(e))},isDecimalDigit:function(e){return e>=48&&e<=57},isHexDigit:function(e){return e>=48&&e<=57||e>=65&&e<=70||e>=97&&e<=102},isOctalDigit:function(e){return e>=48&&e<=55}}},function(e,t,n){"use strict";var r=n(2),i=function(){function e(e){this.type=r.Syntax.ArrayExpression,this.elements=e}return e}();t.ArrayExpression=i;var o=function(){function e(e){this.type=r.Syntax.ArrayPattern,this.elements=e}return e}();t.ArrayPattern=o;var s=function(){function e(e,t,n){this.type=r.Syntax.ArrowFunctionExpression,this.id=null,this.params=e,this.body=t,this.generator=!1,this.expression=n}return e}();t.ArrowFunctionExpression=s;var a=function(){function e(e,t,n){this.type=r.Syntax.AssignmentExpression,this.operator=e,this.left=t,this.right=n}return e}();t.AssignmentExpression=a;var u=function(){function e(e,t){this.type=r.Syntax.AssignmentPattern,this.left=e,this.right=t}return e}();t.AssignmentPattern=u;var c=function(){function e(e,t,n){var i="||"===e||"&&"===e;this.type=i?r.Syntax.LogicalExpression:r.Syntax.BinaryExpression,this.operator=e,this.left=t,this.right=n}return e}();t.BinaryExpression=c;var l=function(){function e(e){this.type=r.Syntax.BlockStatement,this.body=e}return e}();t.BlockStatement=l;var h=function(){function e(e){this.type=r.Syntax.BreakStatement,this.label=e}return e}();t.BreakStatement=h;var p=function(){function e(e,t){this.type=r.Syntax.CallExpression,this.callee=e,this.arguments=t}return e}();t.CallExpression=p;var f=function(){function e(e,t){this.type=r.Syntax.CatchClause,this.param=e,this.body=t}return e}();t.CatchClause=f;var d=function(){function e(e){this.type=r.Syntax.ClassBody,this.body=e}return e}();t.ClassBody=d;var m=function(){function e(e,t,n){this.type=r.Syntax.ClassDeclaration,this.id=e,this.superClass=t,this.body=n}return e}();t.ClassDeclaration=m;var g=function(){function e(e,t,n){this.type=r.Syntax.ClassExpression,this.id=e,this.superClass=t,this.body=n}return e}();t.ClassExpression=g;var x=function(){function e(e,t){this.type=r.Syntax.MemberExpression,this.computed=!0,this.object=e,this.property=t}return e}();t.ComputedMemberExpression=x;var y=function(){function e(e,t,n){this.type=r.Syntax.ConditionalExpression,this.test=e,this.consequent=t,this.alternate=n}return e}();t.ConditionalExpression=y;var v=function(){function e(e){this.type=r.Syntax.ContinueStatement,this.label=e}return e}();t.ContinueStatement=v;var b=function(){function e(){this.type=r.Syntax.DebuggerStatement}return e}();t.DebuggerStatement=b;var D=function(){function e(e,t){this.type=r.Syntax.ExpressionStatement,this.expression=e,this.directive=t}return e}();t.Directive=D;var w=function(){function e(e,t){this.type=r.Syntax.DoWhileStatement,this.body=e,this.test=t}return e}();t.DoWhileStatement=w;var E=function(){function e(){this.type=r.Syntax.EmptyStatement}return e}();t.EmptyStatement=E;var k=function(){function e(e){this.type=r.Syntax.ExportAllDeclaration,this.source=e}return e}();t.ExportAllDeclaration=k;var A=function(){function e(e){this.type=r.Syntax.ExportDefaultDeclaration,this.declaration=e}return e}();t.ExportDefaultDeclaration=A;var C=function(){function e(e,t,n){this.type=r.Syntax.ExportNamedDeclaration,this.declaration=e,this.specifiers=t,this.source=n}return e}();t.ExportNamedDeclaration=C;var S=function(){function e(e,t){this.type=r.Syntax.ExportSpecifier,this.exported=t,this.local=e}return e}();t.ExportSpecifier=S;var F=function(){function e(e){this.type=r.Syntax.ExpressionStatement,this.expression=e}return e}();t.ExpressionStatement=F;var T=function(){function e(e,t,n){this.type=r.Syntax.ForInStatement,this.left=e,this.right=t,this.body=n,this.each=!1}return e}();t.ForInStatement=T;var B=function(){function e(e,t,n){this.type=r.Syntax.ForOfStatement,this.left=e,this.right=t,this.body=n}return e}();t.ForOfStatement=B;var N=function(){function e(e,t,n,i){this.type=r.Syntax.ForStatement,this.init=e,this.test=t,this.update=n,this.body=i}return e}();t.ForStatement=N;var I=function(){function e(e,t,n,i){this.type=r.Syntax.FunctionDeclaration,this.id=e,this.params=t,this.body=n,this.generator=i,this.expression=!1}return e}();t.FunctionDeclaration=I;var P=function(){function e(e,t,n,i){this.type=r.Syntax.FunctionExpression,this.id=e,this.params=t,this.body=n,this.generator=i,this.expression=!1}return e}();t.FunctionExpression=P;var M=function(){function e(e){this.type=r.Syntax.Identifier,this.name=e}return e}();t.Identifier=M;var O=function(){function e(e,t,n){this.type=r.Syntax.IfStatement,this.test=e,this.consequent=t,this.alternate=n}return e}();t.IfStatement=O;var _=function(){function e(e,t){this.type=r.Syntax.ImportDeclaration,this.specifiers=e,this.source=t}return e}();t.ImportDeclaration=_;var L=function(){function e(e){this.type=r.Syntax.ImportDefaultSpecifier,this.local=e}return e}();t.ImportDefaultSpecifier=L;var R=function(){function e(e){this.type=r.Syntax.ImportNamespaceSpecifier,this.local=e}return e}();t.ImportNamespaceSpecifier=R;var U=function(){function e(e,t){this.type=r.Syntax.ImportSpecifier,this.local=e,this.imported=t}return e}();t.ImportSpecifier=U;var j=function(){function e(e,t){this.type=r.Syntax.LabeledStatement,this.label=e,this.body=t}return e}();t.LabeledStatement=j;var z=function(){function e(e,t){this.type=r.Syntax.Literal,this.value=e,this.raw=t}return e}();t.Literal=z;var J=function(){function e(e,t){this.type=r.Syntax.MetaProperty,this.meta=e,this.property=t}return e}();t.MetaProperty=J;var X=function(){function e(e,t,n,i,o){this.type=r.Syntax.MethodDefinition,this.key=e,this.computed=t,this.value=n,this.kind=i,this.static=o}return e}();t.MethodDefinition=X;var Y=function(){function e(e,t){this.type=r.Syntax.NewExpression,this.callee=e,this.arguments=t}return e}();t.NewExpression=Y;var K=function(){function e(e){this.type=r.Syntax.ObjectExpression,this.properties=e}return e}();t.ObjectExpression=K;var W=function(){function e(e){this.type=r.Syntax.ObjectPattern,this.properties=e}return e}();t.ObjectPattern=W;var H=function(){function e(e,t){this.type=r.Syntax.Program,this.body=e,this.sourceType=t}return e}();t.Program=H;var q=function(){function e(e,t,n,i,o,s){this.type=r.Syntax.Property,this.key=t,this.computed=n,this.value=i,this.kind=e,this.method=o,this.shorthand=s}return e}();t.Property=q;var G=function(){function e(e,t,n){this.type=r.Syntax.Literal,this.value=e,this.raw=t,this.regex=n}return e}();t.RegexLiteral=G;var V=function(){function e(e){this.type=r.Syntax.RestElement,this.argument=e}return e}();t.RestElement=V;var $=function(){function e(e){this.type=r.Syntax.ReturnStatement,this.argument=e}return e}();t.ReturnStatement=$;var Z=function(){function e(e){this.type=r.Syntax.SequenceExpression,this.expressions=e}return e}();t.SequenceExpression=Z;var Q=function(){function e(e){this.type=r.Syntax.SpreadElement,this.argument=e}return e}();t.SpreadElement=Q;var ee=function(){function e(e,t){this.type=r.Syntax.MemberExpression,this.computed=!1,this.object=e,this.property=t}return e}();t.StaticMemberExpression=ee;var te=function(){function e(){this.type=r.Syntax.Super}return e}();t.Super=te;var ne=function(){function e(e,t){this.type=r.Syntax.SwitchCase,this.test=e,this.consequent=t}return e}();t.SwitchCase=ne;var re=function(){function e(e,t){this.type=r.Syntax.SwitchStatement,this.discriminant=e,this.cases=t}return e}();t.SwitchStatement=re;var ie=function(){function e(e,t){this.type=r.Syntax.TaggedTemplateExpression,this.tag=e,this.quasi=t}return e}();t.TaggedTemplateExpression=ie;var oe=function(){function e(e,t){this.type=r.Syntax.TemplateElement,this.value=e,this.tail=t}return e}();t.TemplateElement=oe;var se=function(){function e(e,t){this.type=r.Syntax.TemplateLiteral,this.quasis=e,this.expressions=t}return e}();t.TemplateLiteral=se;var ae=function(){function e(){this.type=r.Syntax.ThisExpression}return e}();t.ThisExpression=ae;var ue=function(){function e(e){this.type=r.Syntax.ThrowStatement,this.argument=e}return e}();t.ThrowStatement=ue;var ce=function(){function e(e,t,n){this.type=r.Syntax.TryStatement,this.block=e,this.handler=t,this.finalizer=n}return e}();t.TryStatement=ce;var le=function(){function e(e,t){this.type=r.Syntax.UnaryExpression,this.operator=e,this.argument=t,this.prefix=!0}return e}();t.UnaryExpression=le;var he=function(){function e(e,t,n){this.type=r.Syntax.UpdateExpression,this.operator=e,this.argument=t,this.prefix=n}return e}();t.UpdateExpression=he;var pe=function(){function e(e,t){this.type=r.Syntax.VariableDeclaration,this.declarations=e,this.kind=t}return e}();t.VariableDeclaration=pe;var fe=function(){function e(e,t){this.type=r.Syntax.VariableDeclarator,this.id=e,this.init=t}return e}();t.VariableDeclarator=fe;var de=function(){function e(e,t){this.type=r.Syntax.WhileStatement,this.test=e,this.body=t}return e}();t.WhileStatement=de;var me=function(){function e(e,t){this.type=r.Syntax.WithStatement,this.object=e,this.body=t}return e}();t.WithStatement=me;var ge=function(){function e(e,t){this.type=r.Syntax.YieldExpression,this.argument=e,this.delegate=t}return e}();t.YieldExpression=ge},function(e,t,n){"use strict";function r(e){var t;switch(e.type){case l.JSXSyntax.JSXIdentifier:var n=e;t=n.name;break;case l.JSXSyntax.JSXNamespacedName:var i=e;t=r(i.namespace)+":"+r(i.name);break;case l.JSXSyntax.JSXMemberExpression:var o=e;t=r(o.object)+"."+r(o.property)}return t}var i,o=this&&this.__extends||function(e,t){function n(){this.constructor=e}for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r]);e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)},s=n(9),a=n(7),u=n(3),c=n(12),l=n(13),h=n(10),p=n(14);!function(e){e[e.Identifier=100]="Identifier",e[e.Text=101]="Text"}(i||(i={})),a.TokenName[i.Identifier]="JSXIdentifier",a.TokenName[i.Text]="JSXText";var f=function(e){function t(t,n,r){e.call(this,t,n,r)}return o(t,e),t.prototype.parsePrimaryExpression=function(){return this.match("<")?this.parseJSXRoot():e.prototype.parsePrimaryExpression.call(this)},t.prototype.startJSX=function(){this.scanner.index=this.startMarker.index,this.scanner.lineNumber=this.startMarker.lineNumber,this.scanner.lineStart=this.startMarker.lineStart},t.prototype.finishJSX=function(){this.nextToken()},t.prototype.reenterJSX=function(){this.startJSX(),this.expectJSX("}"),this.config.tokens&&this.tokens.pop()},t.prototype.createJSXNode=function(){return this.collectComments(),{index:this.scanner.index,line:this.scanner.lineNumber,column:this.scanner.index-this.scanner.lineStart}},t.prototype.createJSXChildNode=function(){return{index:this.scanner.index,line:this.scanner.lineNumber,column:this.scanner.index-this.scanner.lineStart}},t.prototype.scanXHTMLEntity=function(e){for(var t="&",n=!0,r=!1,i=!1,o=!1;!this.scanner.eof()&&n&&!r;){var a=this.scanner.source[this.scanner.index];if(a===e)break;if(r=";"===a,t+=a,++this.scanner.index,!r)switch(t.length){case 2:i="#"===a;break;case 3:i&&(o="x"===a,n=o||s.Character.isDecimalDigit(a.charCodeAt(0)),i=i&&!o);break;default:n=n&&!(i&&!s.Character.isDecimalDigit(a.charCodeAt(0))),n=n&&!(o&&!s.Character.isHexDigit(a.charCodeAt(0)))}}if(n&&r&&t.length>2){var u=t.substr(1,t.length-2);i&&u.length>1?t=String.fromCharCode(parseInt(u.substr(1),10)):o&&u.length>2?t=String.fromCharCode(parseInt("0"+u.substr(1),16)):i||o||!c.XHTMLEntities[u]||(t=c.XHTMLEntities[u])}return t},t.prototype.lexJSX=function(){var e=this.scanner.source.charCodeAt(this.scanner.index);if(60===e||62===e||47===e||58===e||61===e||123===e||125===e){var t=this.scanner.source[this.scanner.index++];return{type:a.Token.Punctuator,value:t,lineNumber:this.scanner.lineNumber,lineStart:this.scanner.lineStart,start:this.scanner.index-1,end:this.scanner.index}}if(34===e||39===e){for(var n=this.scanner.index,r=this.scanner.source[this.scanner.index++],o="";!this.scanner.eof();){var u=this.scanner.source[this.scanner.index++];if(u===r)break;o+="&"===u?this.scanXHTMLEntity(r):u}return{type:a.Token.StringLiteral,value:o,lineNumber:this.scanner.lineNumber,lineStart:this.scanner.lineStart,start:n,end:this.scanner.index}}if(46===e){var c=this.scanner.source.charCodeAt(this.scanner.index+1),l=this.scanner.source.charCodeAt(this.scanner.index+2),t=46===c&&46===l?"...":".",n=this.scanner.index;return this.scanner.index+=t.length,{type:a.Token.Punctuator,value:t,lineNumber:this.scanner.lineNumber,lineStart:this.scanner.lineStart,start:n,end:this.scanner.index}}if(96===e)return{type:a.Token.Template,lineNumber:this.scanner.lineNumber,lineStart:this.scanner.lineStart,start:this.scanner.index,end:this.scanner.index};if(s.Character.isIdentifierStart(e)&&92!==e){var n=this.scanner.index;for(++this.scanner.index;!this.scanner.eof();){var u=this.scanner.source.charCodeAt(this.scanner.index);if(s.Character.isIdentifierPart(u)&&92!==u)++this.scanner.index;else{if(45!==u)break;++this.scanner.index}}var h=this.scanner.source.slice(n,this.scanner.index);return{type:i.Identifier,value:h,lineNumber:this.scanner.lineNumber,lineStart:this.scanner.lineStart,start:n,end:this.scanner.index}}this.scanner.throwUnexpectedToken()},t.prototype.nextJSXToken=function(){this.collectComments(),this.startMarker.index=this.scanner.index,this.startMarker.lineNumber=this.scanner.lineNumber,this.startMarker.lineStart=this.scanner.lineStart;var e=this.lexJSX();return this.lastMarker.index=this.scanner.index,this.lastMarker.lineNumber=this.scanner.lineNumber,this.lastMarker.lineStart=this.scanner.lineStart,this.config.tokens&&this.tokens.push(this.convertToken(e)),e},t.prototype.nextJSXText=function(){this.startMarker.index=this.scanner.index,this.startMarker.lineNumber=this.scanner.lineNumber,this.startMarker.lineStart=this.scanner.lineStart;for(var e=this.scanner.index,t="";!this.scanner.eof();){var n=this.scanner.source[this.scanner.index];if("{"===n||"<"===n)break;++this.scanner.index,t+=n,s.Character.isLineTerminator(n.charCodeAt(0))&&(++this.scanner.lineNumber,"\r"===n&&"\n"===this.scanner.source[this.scanner.index]&&++this.scanner.index,this.scanner.lineStart=this.scanner.index)}this.lastMarker.index=this.scanner.index,this.lastMarker.lineNumber=this.scanner.lineNumber,this.lastMarker.lineStart=this.scanner.lineStart;var r={type:i.Text,value:t,lineNumber:this.scanner.lineNumber,lineStart:this.scanner.lineStart,start:e,end:this.scanner.index};return t.length>0&&this.config.tokens&&this.tokens.push(this.convertToken(r)),r},t.prototype.peekJSXToken=function(){var e=this.scanner.index,t=this.scanner.lineNumber,n=this.scanner.lineStart;this.scanner.scanComments();var r=this.lexJSX();return this.scanner.index=e,this.scanner.lineNumber=t,this.scanner.lineStart=n,r},t.prototype.expectJSX=function(e){var t=this.nextJSXToken();t.type===a.Token.Punctuator&&t.value===e||this.throwUnexpectedToken(t)},t.prototype.matchJSX=function(e){var t=this.peekJSXToken();return t.type===a.Token.Punctuator&&t.value===e},t.prototype.parseJSXIdentifier=function(){var e=this.createJSXNode(),t=this.nextJSXToken();return t.type!==i.Identifier&&this.throwUnexpectedToken(t),this.finalize(e,new p.JSXIdentifier(t.value))},t.prototype.parseJSXElementName=function(){var e=this.createJSXNode(),t=this.parseJSXIdentifier();if(this.matchJSX(":")){var n=t;this.expectJSX(":");var r=this.parseJSXIdentifier();t=this.finalize(e,new p.JSXNamespacedName(n,r))}else if(this.matchJSX("."))for(;this.matchJSX(".");){var i=t;this.expectJSX(".");var o=this.parseJSXIdentifier();t=this.finalize(e,new p.JSXMemberExpression(i,o))}return t},t.prototype.parseJSXAttributeName=function(){var e,t=this.createJSXNode(),n=this.parseJSXIdentifier();if(this.matchJSX(":")){var r=n;this.expectJSX(":");var i=this.parseJSXIdentifier();e=this.finalize(t,new p.JSXNamespacedName(r,i))}else e=n;return e},t.prototype.parseJSXStringLiteralAttribute=function(){var e=this.createJSXNode(),t=this.nextJSXToken();t.type!==a.Token.StringLiteral&&this.throwUnexpectedToken(t);var n=this.getTokenRaw(t);return this.finalize(e,new h.Literal(t.value,n))},t.prototype.parseJSXExpressionAttribute=function(){var e=this.createJSXNode();this.expectJSX("{"),this.finishJSX(),this.match("}")&&this.tolerateError("JSX attributes must only be assigned a non-empty expression");var t=this.parseAssignmentExpression();return this.reenterJSX(),this.finalize(e,new p.JSXExpressionContainer(t))},t.prototype.parseJSXAttributeValue=function(){return this.matchJSX("{")?this.parseJSXExpressionAttribute():this.matchJSX("<")?this.parseJSXElement():this.parseJSXStringLiteralAttribute()},t.prototype.parseJSXNameValueAttribute=function(){var e=this.createJSXNode(),t=this.parseJSXAttributeName(),n=null;return this.matchJSX("=")&&(this.expectJSX("="),n=this.parseJSXAttributeValue()),this.finalize(e,new p.JSXAttribute(t,n))},t.prototype.parseJSXSpreadAttribute=function(){var e=this.createJSXNode();this.expectJSX("{"),this.expectJSX("..."),this.finishJSX();var t=this.parseAssignmentExpression();return this.reenterJSX(),this.finalize(e,new p.JSXSpreadAttribute(t))},t.prototype.parseJSXAttributes=function(){for(var e=[];!this.matchJSX("/")&&!this.matchJSX(">");){var t=this.matchJSX("{")?this.parseJSXSpreadAttribute():this.parseJSXNameValueAttribute();e.push(t)}return e},t.prototype.parseJSXOpeningElement=function(){var e=this.createJSXNode();this.expectJSX("<");var t=this.parseJSXElementName(),n=this.parseJSXAttributes(),r=this.matchJSX("/");return r&&this.expectJSX("/"),this.expectJSX(">"),this.finalize(e,new p.JSXOpeningElement(t,r,n))},t.prototype.parseJSXBoundaryElement=function(){var e=this.createJSXNode();if(this.expectJSX("<"),this.matchJSX("/")){this.expectJSX("/");var t=this.parseJSXElementName();return this.expectJSX(">"),this.finalize(e,new p.JSXClosingElement(t))}var n=this.parseJSXElementName(),r=this.parseJSXAttributes(),i=this.matchJSX("/");return i&&this.expectJSX("/"),this.expectJSX(">"),this.finalize(e,new p.JSXOpeningElement(n,i,r))},t.prototype.parseJSXEmptyExpression=function(){var e=this.createJSXChildNode();return this.collectComments(),this.lastMarker.index=this.scanner.index,this.lastMarker.lineNumber=this.scanner.lineNumber,this.lastMarker.lineStart=this.scanner.lineStart,this.finalize(e,new p.JSXEmptyExpression)},t.prototype.parseJSXExpressionContainer=function(){var e=this.createJSXNode();this.expectJSX("{");var t;return this.matchJSX("}")?(t=this.parseJSXEmptyExpression(),this.expectJSX("}")):(this.finishJSX(),t=this.parseAssignmentExpression(),this.reenterJSX()),this.finalize(e,new p.JSXExpressionContainer(t))},t.prototype.parseJSXChildren=function(){for(var e=[];!this.scanner.eof();){var t=this.createJSXChildNode(),n=this.nextJSXText();if(n.start0))break;var s=this.finalize(e.node,new p.JSXElement(e.opening,e.children,e.closing));e=t.pop(),e.children.push(s)}}return e},t.prototype.parseJSXElement=function(){var e=this.createJSXNode(),t=this.parseJSXOpeningElement(),n=[],r=null;if(!t.selfClosing){var i=this.parseComplexJSXElement({node:e,opening:t,closing:r,children:n});n=i.children,r=i.closing}return this.finalize(e,new p.JSXElement(t,n,r))},t.prototype.parseJSXRoot=function(){this.config.tokens&&this.tokens.pop(),this.startJSX();var e=this.parseJSXElement();return this.finishJSX(),e},t}(u.Parser);t.JSXParser=f},function(e,t){"use strict";t.XHTMLEntities={quot:'"',amp:"&",apos:"'",gt:">",nbsp:" ",iexcl:"¡",cent:"¢",pound:"£",curren:"¤",yen:"¥",brvbar:"¦",sect:"§",uml:"¨",copy:"©",ordf:"ª",laquo:"«",not:"¬",shy:"­",reg:"®",macr:"¯",deg:"°",plusmn:"±",sup2:"²",sup3:"³",acute:"´",micro:"µ",para:"¶",middot:"·",cedil:"¸",sup1:"¹",ordm:"º",raquo:"»",frac14:"¼",frac12:"½",frac34:"¾",iquest:"¿",Agrave:"À",Aacute:"Á",Acirc:"Â",Atilde:"Ã",Auml:"Ä",Aring:"Å",AElig:"Æ",Ccedil:"Ç",Egrave:"È",Eacute:"É",Ecirc:"Ê",Euml:"Ë",Igrave:"Ì",Iacute:"Í",Icirc:"Î",Iuml:"Ï",ETH:"Ð",Ntilde:"Ñ",Ograve:"Ò",Oacute:"Ó",Ocirc:"Ô",Otilde:"Õ",Ouml:"Ö",times:"×",Oslash:"Ø",Ugrave:"Ù",Uacute:"Ú",Ucirc:"Û",Uuml:"Ü",Yacute:"Ý",THORN:"Þ",szlig:"ß",agrave:"à",aacute:"á",acirc:"â",atilde:"ã",auml:"ä",aring:"å",aelig:"æ",ccedil:"ç",egrave:"è",eacute:"é",ecirc:"ê",euml:"ë",igrave:"ì",iacute:"í",icirc:"î",iuml:"ï",eth:"ð",ntilde:"ñ",ograve:"ò",oacute:"ó",ocirc:"ô",otilde:"õ",ouml:"ö",divide:"÷",oslash:"ø",ugrave:"ù",uacute:"ú",ucirc:"û",uuml:"ü",yacute:"ý",thorn:"þ",yuml:"ÿ",OElig:"Œ",oelig:"œ",Scaron:"Š",scaron:"š",Yuml:"Ÿ",fnof:"ƒ",circ:"ˆ",tilde:"˜",Alpha:"Α",Beta:"Β",Gamma:"Γ",Delta:"Δ",Epsilon:"Ε",Zeta:"Ζ",Eta:"Η",Theta:"Θ",Iota:"Ι",Kappa:"Κ",Lambda:"Λ",Mu:"Μ",Nu:"Ν",Xi:"Ξ",Omicron:"Ο",Pi:"Π",Rho:"Ρ",Sigma:"Σ",Tau:"Τ",Upsilon:"Υ",Phi:"Φ",Chi:"Χ",Psi:"Ψ",Omega:"Ω",alpha:"α",beta:"β",gamma:"γ",delta:"δ",epsilon:"ε",zeta:"ζ",eta:"η",theta:"θ",iota:"ι",kappa:"κ",lambda:"λ",mu:"μ",nu:"ν",xi:"ξ",omicron:"ο",pi:"π",rho:"ρ",sigmaf:"ς",sigma:"σ",tau:"τ",upsilon:"υ",phi:"φ",chi:"χ",psi:"ψ",omega:"ω",thetasym:"ϑ",upsih:"ϒ",piv:"ϖ",ensp:" ",emsp:" ",thinsp:" ",zwnj:"‌",zwj:"‍",lrm:"‎",rlm:"‏",ndash:"–",mdash:"—",lsquo:"‘",rsquo:"’",sbquo:"‚",ldquo:"“",rdquo:"”",bdquo:"„",dagger:"†",Dagger:"‡",bull:"•",hellip:"…",permil:"‰",prime:"′",Prime:"″",lsaquo:"‹",rsaquo:"›",oline:"‾",frasl:"⁄",euro:"€",image:"ℑ",weierp:"℘",real:"ℜ",trade:"™",alefsym:"ℵ",larr:"←",uarr:"↑",rarr:"→",darr:"↓",harr:"↔",crarr:"↵",lArr:"⇐",uArr:"⇑",rArr:"⇒",dArr:"⇓",hArr:"⇔",forall:"∀",part:"∂",exist:"∃",empty:"∅",nabla:"∇",isin:"∈",notin:"∉",ni:"∋",prod:"∏",sum:"∑",minus:"−",lowast:"∗",radic:"√",prop:"∝",infin:"∞",ang:"∠",and:"∧",or:"∨",cap:"∩",cup:"∪",int:"∫",there4:"∴",sim:"∼",cong:"≅",asymp:"≈",ne:"≠",equiv:"≡",le:"≤",ge:"≥",sub:"⊂",sup:"⊃",nsub:"⊄",sube:"⊆",supe:"⊇",oplus:"⊕",otimes:"⊗",perp:"⊥",sdot:"⋅",lceil:"⌈",rceil:"⌉",lfloor:"⌊",rfloor:"⌋",loz:"◊",spades:"♠",clubs:"♣",hearts:"♥",diams:"♦",lang:"⟨",rang:"⟩"}},function(e,t){"use strict";t.JSXSyntax={JSXAttribute:"JSXAttribute",JSXClosingElement:"JSXClosingElement",JSXElement:"JSXElement",JSXEmptyExpression:"JSXEmptyExpression",JSXExpressionContainer:"JSXExpressionContainer",JSXIdentifier:"JSXIdentifier",JSXMemberExpression:"JSXMemberExpression",JSXNamespacedName:"JSXNamespacedName",JSXOpeningElement:"JSXOpeningElement",JSXSpreadAttribute:"JSXSpreadAttribute",JSXText:"JSXText"}},function(e,t,n){"use strict";var r=n(13),i=function(){function e(e){this.type=r.JSXSyntax.JSXClosingElement,this.name=e}return e}();t.JSXClosingElement=i;var o=function(){function e(e,t,n){this.type=r.JSXSyntax.JSXElement,this.openingElement=e,this.children=t,this.closingElement=n}return e}();t.JSXElement=o;var s=function(){function e(){this.type=r.JSXSyntax.JSXEmptyExpression}return e}();t.JSXEmptyExpression=s;var a=function(){function e(e){this.type=r.JSXSyntax.JSXExpressionContainer,this.expression=e}return e}();t.JSXExpressionContainer=a;var u=function(){function e(e){this.type=r.JSXSyntax.JSXIdentifier,this.name=e}return e}();t.JSXIdentifier=u;var c=function(){function e(e,t){this.type=r.JSXSyntax.JSXMemberExpression,this.object=e,this.property=t}return e}();t.JSXMemberExpression=c;var l=function(){function e(e,t){this.type=r.JSXSyntax.JSXAttribute,this.name=e,this.value=t}return e}();t.JSXAttribute=l;var h=function(){function e(e,t){this.type=r.JSXSyntax.JSXNamespacedName,this.namespace=e,this.name=t}return e}();t.JSXNamespacedName=h;var p=function(){function e(e,t,n){this.type=r.JSXSyntax.JSXOpeningElement,this.name=e,this.selfClosing=t,this.attributes=n}return e}();t.JSXOpeningElement=p;var f=function(){function e(e){this.type=r.JSXSyntax.JSXSpreadAttribute,this.argument=e}return e}();t.JSXSpreadAttribute=f;var d=function(){function e(e,t){this.type=r.JSXSyntax.JSXText,this.value=e,this.raw=t}return e}();t.JSXText=d},function(e,t,n){"use strict";var r=n(8),i=n(6),o=n(7),s=function(){function e(){this.values=[],this.curly=this.paren=-1}return e.prototype.beforeFunctionExpression=function(e){return["(","{","[","in","typeof","instanceof","new","return","case","delete","throw","void","=","+=","-=","*=","**=","/=","%=","<<=",">>=",">>>=","&=","|=","^=",",","+","-","*","**","/","%","++","--","<<",">>",">>>","&","|","^","!","~","&&","||","?",":","===","==",">=","<=","<",">","!=","!=="].indexOf(e)>=0},e.prototype.isRegexStart=function(){var e=this.values[this.values.length-1],t=null!==e;switch(e){case"this":case"]":t=!1;break;case")":var n=this.values[this.paren-1];t="if"===n||"while"===n||"for"===n||"with"===n;break;case"}":if(t=!1,"function"===this.values[this.curly-3]){var r=this.values[this.curly-4];t=!!r&&!this.beforeFunctionExpression(r)}else if("function"===this.values[this.curly-4]){var i=this.values[this.curly-5];t=!i||!this.beforeFunctionExpression(i)}}return t},e.prototype.push=function(e){e.type===o.Token.Punctuator||e.type===o.Token.Keyword?("{"===e.value?this.curly=this.values.length:"("===e.value&&(this.paren=this.values.length),this.values.push(e.value)):this.values.push(null)},e}(),a=function(){function e(e,t){this.errorHandler=new i.ErrorHandler,this.errorHandler.tolerant=!!t&&("boolean"==typeof t.tolerant&&t.tolerant),this.scanner=new r.Scanner(e,this.errorHandler),this.scanner.trackComment=!!t&&("boolean"==typeof t.comment&&t.comment),this.trackRange=!!t&&("boolean"==typeof t.range&&t.range),this.trackLoc=!!t&&("boolean"==typeof t.loc&&t.loc),this.buffer=[],this.reader=new s}return e.prototype.errors=function(){return this.errorHandler.errors},e.prototype.getNextToken=function(){if(0===this.buffer.length){var e=this.scanner.scanComments();if(this.scanner.trackComment)for(var t=0;tr&&" "!==e[d+1],d=o);else if(!l(s))return le;m=m&&h(s)}u=u||f&&o-d-1>r&&" "!==e[d+1]}return a||u?" "===e[0]&&n>9?le:u?ce:ue:m&&!i(e)?se:ae}function d(e,t,n,r){e.dump=function(){function i(t){return u(e,t)}if(0===t.length)return"''";if(!e.noCompatMode&&oe.indexOf(t)!==-1)return"'"+t+"'";var o=e.indent*Math.max(1,n),a=e.lineWidth===-1?-1:Math.max(Math.min(e.lineWidth,40),e.lineWidth-o),c=r||e.flowLevel>-1&&n>=e.flowLevel;switch(f(t,c,e.indent,a,i)){case se:return t;case ae:return"'"+t.replace(/'/g,"''")+"'";case ue:return"|"+m(t,e.indent)+g(s(t,o));case ce:return">"+m(t,e.indent)+g(s(x(t,a),o));case le:return'"'+v(t,a)+'"';default:throw new N("impossible error: invalid scalar style")}}()}function m(e,t){var n=" "===e[0]?String(t):"",r="\n"===e[e.length-1],i=r&&("\n"===e[e.length-2]||"\n"===e),o=i?"+":r?"":"-";return n+o+"\n"}function g(e){return"\n"===e[e.length-1]?e.slice(0,-1):e}function x(e,t){for(var n,r,i=/(\n+)([^\n]*)/g,o=function(){var n=e.indexOf("\n");return n=n!==-1?n:e.length,i.lastIndex=n,y(e.slice(0,n),t)}(),s="\n"===e[0]||" "===e[0];r=i.exec(e);){var a=r[1],u=r[2];n=" "===u[0],o+=a+(s||n||""===u?"":"\n")+y(u,t),s=n}return o}function y(e,t){if(""===e||" "===e[0])return e;for(var n,r,i=/ [^ ]/g,o=0,s=0,a=0,u="";n=i.exec(e);)a=n.index,a-o>t&&(r=s>o?s:a,u+="\n"+e.slice(o,r),o=r+1),s=a;return u+="\n",u+=e.length-o>t&&s>o?e.slice(o,s)+"\n"+e.slice(s+1):e.slice(o),u.slice(1)}function v(e){for(var t,n,r="",o=0;o1024&&(a+="? "),a+=e.dump+": ",A(e,t,s,!1,!1)&&(a+=e.dump,u+=a));e.tag=c,e.dump="{"+u+"}"}function E(e,t,n,r){var i,o,s,u,c,l,h="",p=e.tag,f=Object.keys(n);if(e.sortKeys===!0)f.sort();else if("function"==typeof e.sortKeys)f.sort(e.sortKeys);else if(e.sortKeys)throw new N("sortKeys must be a boolean or a function"); +for(i=0,o=f.length;i1024,c&&(l+=e.dump&&L===e.dump.charCodeAt(0)?"?":"? "),l+=e.dump,c&&(l+=a(e,t)),A(e,t+1,u,!0,c)&&(l+=e.dump&&L===e.dump.charCodeAt(0)?":":": ",l+=e.dump,h+=l));e.tag=p,e.dump=h||"{}"}function k(e,t,n){var r,i,o,s,a,u;for(i=n?e.explicitTypes:e.implicitTypes,o=0,s=i.length;o tag resolver accepts not "'+u+'" style');r=a.represent[u](t,u)}e.dump=r}return!0}return!1}function A(e,t,n,r,i,o){e.tag=null,e.dump=n,k(e,n,!1)||k(e,n,!0);var s=M.call(e.dump);r&&(r=e.flowLevel<0||e.flowLevel>t);var a,u,c="[object Object]"===s||"[object Array]"===s;if(c&&(a=e.duplicates.indexOf(n),u=a!==-1),(null!==e.tag&&"?"!==e.tag||u||2!==e.indent&&t>0)&&(i=!1),u&&e.usedDuplicates[a])e.dump="*ref_"+a;else{if(c&&u&&!e.usedDuplicates[a]&&(e.usedDuplicates[a]=!0),"[object Object]"===s)r&&0!==Object.keys(e.dump).length?(E(e,t,e.dump,i),u&&(e.dump="&ref_"+a+e.dump)):(w(e,t,e.dump),u&&(e.dump="&ref_"+a+" "+e.dump));else if("[object Array]"===s)r&&0!==e.dump.length?(D(e,t,e.dump,i),u&&(e.dump="&ref_"+a+e.dump)):(b(e,t,e.dump),u&&(e.dump="&ref_"+a+" "+e.dump));else{if("[object String]"!==s){if(e.skipInvalid)return!1;throw new N("unacceptable kind of an object to dump "+s)}"?"!==e.tag&&d(e,e.dump,t,o)}null!==e.tag&&"?"!==e.tag&&(e.dump="!<"+e.tag+"> "+e.dump)}return!0}function C(e,t){var n,r,i=[],o=[];for(S(e,i,o),n=0,r=o.length;nlabel{font-size:12px;font-weight:700;display:flex;flex-direction:column;margin:-20px 15px 0 0;font-family:Titillium Web,sans-serif;color:#3b4151}.swagger-ui .scheme-container .schemes>label select{min-width:130px;text-transform:uppercase}.swagger-ui .loading-container{padding:40px 0 60px}.swagger-ui .loading-container .loading{position:relative}.swagger-ui .loading-container .loading:after{font-size:10px;font-weight:700;position:absolute;top:50%;left:50%;content:"loading";transform:translate(-50%,-50%);text-transform:uppercase;font-family:Titillium Web,sans-serif;color:#3b4151}.swagger-ui .loading-container .loading:before{position:absolute;top:50%;left:50%;display:block;width:60px;height:60px;margin:-30px;content:"";animation:rotation 1s infinite linear,opacity .5s;opacity:1;border:2px solid rgba(85,85,85,.1);border-top-color:rgba(0,0,0,.6);border-radius:100%;backface-visibility:hidden}@keyframes rotation{to{transform:rotate(1turn)}}@keyframes blinker{50%{opacity:0}}.swagger-ui .btn{font-size:14px;font-weight:700;padding:5px 23px;transition:all .3s;border:2px solid #888;border-radius:4px;background:transparent;box-shadow:0 1px 2px rgba(0,0,0,.1);font-family:Titillium Web,sans-serif;color:#3b4151}.swagger-ui .btn[disabled]{cursor:not-allowed;opacity:.3}.swagger-ui .btn:hover{box-shadow:0 0 5px rgba(0,0,0,.3)}.swagger-ui .btn.cancel{border-color:#ff6060;font-family:Titillium Web,sans-serif;color:#ff6060}.swagger-ui .btn.authorize{line-height:1;display:inline;color:#49cc90;border-color:#49cc90}.swagger-ui .btn.authorize span{float:left;padding:4px 20px 0 0}.swagger-ui .btn.authorize svg{fill:#49cc90}.swagger-ui .btn.execute{animation:swagger-ui-pulse 2s infinite;color:#fff;border-color:#4990e2}@keyframes swagger-ui-pulse{0%{color:#fff;background:#4990e2;box-shadow:0 0 0 0 rgba(73,144,226,.8)}70%{box-shadow:0 0 0 5px rgba(73,144,226,0)}to{color:#fff;background:#4990e2;box-shadow:0 0 0 0 rgba(73,144,226,0)}}.swagger-ui .btn-group{display:flex;padding:30px}.swagger-ui .btn-group .btn{flex:1}.swagger-ui .btn-group .btn:first-child{border-radius:4px 0 0 4px}.swagger-ui .btn-group .btn:last-child{border-radius:0 4px 4px 0}.swagger-ui .authorization__btn{padding:0 10px;border:none;background:none}.swagger-ui .authorization__btn.locked{opacity:1}.swagger-ui .authorization__btn.unlocked{opacity:.4}.swagger-ui .expand-methods,.swagger-ui .expand-operation{border:none;background:none}.swagger-ui .expand-methods svg,.swagger-ui .expand-operation svg{width:20px;height:20px}.swagger-ui .expand-methods{padding:0 10px}.swagger-ui .expand-methods:hover svg{fill:#444}.swagger-ui .expand-methods svg{transition:all .3s;fill:#777}.swagger-ui button{cursor:pointer;outline:none}.swagger-ui select{font-size:14px;font-weight:700;padding:5px 40px 5px 10px;border:2px solid #41444e;border-radius:4px;background:#f7f7f7 url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMCAyMCI+ICAgIDxwYXRoIGQ9Ik0xMy40MTggNy44NTljLjI3MS0uMjY4LjcwOS0uMjY4Ljk3OCAwIC4yNy4yNjguMjcyLjcwMSAwIC45NjlsLTMuOTA4IDMuODNjLS4yNy4yNjgtLjcwNy4yNjgtLjk3OSAwbC0zLjkwOC0zLjgzYy0uMjctLjI2Ny0uMjctLjcwMSAwLS45NjkuMjcxLS4yNjguNzA5LS4yNjguOTc4IDBMMTAgMTFsMy40MTgtMy4xNDF6Ii8+PC9zdmc+) right 10px center no-repeat;background-size:20px;box-shadow:0 1px 2px 0 rgba(0,0,0,.25);font-family:Titillium Web,sans-serif;color:#3b4151;appearance:none}.swagger-ui select[multiple]{margin:5px 0;padding:5px;background:#f7f7f7}.swagger-ui .opblock-body select{min-width:230px}.swagger-ui label{font-size:12px;font-weight:700;margin:0 0 5px;font-family:Titillium Web,sans-serif;color:#3b4151}.swagger-ui input[type=email],.swagger-ui input[type=password],.swagger-ui input[type=search],.swagger-ui input[type=text]{min-width:100px;margin:5px 0;padding:8px 10px;border:1px solid #d9d9d9;border-radius:4px;background:#fff}.swagger-ui input[type=email].invalid,.swagger-ui input[type=password].invalid,.swagger-ui input[type=search].invalid,.swagger-ui input[type=text].invalid{animation:shake .4s 1;border-color:#f93e3e;background:#feebeb}@keyframes shake{10%,90%{transform:translate3d(-1px,0,0)}20%,80%{transform:translate3d(2px,0,0)}30%,50%,70%{transform:translate3d(-4px,0,0)}40%,60%{transform:translate3d(4px,0,0)}}.swagger-ui textarea{font-size:12px;width:100%;min-height:280px;padding:10px;border:none;border-radius:4px;outline:none;background:hsla(0,0%,100%,.8);font-family:Source Code Pro,monospace;font-weight:600;color:#3b4151}.swagger-ui textarea:focus{border:2px solid #61affe}.swagger-ui textarea.curl{font-size:12px;min-height:100px;margin:0;padding:10px;resize:none;border-radius:4px;background:#41444e;font-family:Source Code Pro,monospace;font-weight:600;color:#fff}.swagger-ui .checkbox{padding:5px 0 10px;transition:opacity .5s;color:#333}.swagger-ui .checkbox label{display:flex}.swagger-ui .checkbox p{font-weight:400!important;font-style:italic;margin:0!important;font-family:Source Code Pro,monospace;font-weight:600;color:#3b4151}.swagger-ui .checkbox input[type=checkbox]{display:none}.swagger-ui .checkbox input[type=checkbox]+label>.item{position:relative;top:3px;display:inline-block;width:16px;height:16px;margin:0 8px 0 0;padding:5px;cursor:pointer;border-radius:1px;background:#e8e8e8;box-shadow:0 0 0 2px #e8e8e8;flex:none}.swagger-ui .checkbox input[type=checkbox]+label>.item:active{transform:scale(.9)}.swagger-ui .checkbox input[type=checkbox]:checked+label>.item{background:#e8e8e8 url("data:image/svg+xml;charset=utf-8,%3Csvg width='10' height='8' viewBox='3 7 10 8' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='%2341474E' fill-rule='evenodd' d='M6.333 15L3 11.667l1.333-1.334 2 2L11.667 7 13 8.333z'/%3E%3C/svg%3E") 50% no-repeat}.swagger-ui .dialog-ux{position:fixed;z-index:9999;top:0;right:0;bottom:0;left:0}.swagger-ui .dialog-ux .backdrop-ux{position:fixed;top:0;right:0;bottom:0;left:0;background:rgba(0,0,0,.8)}.swagger-ui .dialog-ux .modal-ux{position:absolute;z-index:9999;top:50%;left:50%;width:100%;min-width:300px;max-width:650px;transform:translate(-50%,-50%);border:1px solid #ebebeb;border-radius:4px;background:#fff;box-shadow:0 10px 30px 0 rgba(0,0,0,.2)}.swagger-ui .dialog-ux .modal-ux-content{overflow-y:auto;max-height:540px;padding:20px}.swagger-ui .dialog-ux .modal-ux-content p{font-size:12px;margin:0 0 5px;color:#41444e;font-family:Open Sans,sans-serif;color:#3b4151}.swagger-ui .dialog-ux .modal-ux-content h4{font-size:18px;font-weight:600;margin:15px 0 0;font-family:Titillium Web,sans-serif;color:#3b4151}.swagger-ui .dialog-ux .modal-ux-header{display:flex;padding:12px 0;border-bottom:1px solid #ebebeb;align-items:center}.swagger-ui .dialog-ux .modal-ux-header .close-modal{padding:0 10px;border:none;background:none;appearance:none}.swagger-ui .dialog-ux .modal-ux-header h3{font-size:20px;font-weight:600;margin:0;padding:0 20px;flex:1;font-family:Titillium Web,sans-serif;color:#3b4151}.swagger-ui .model{font-size:12px;font-weight:300;font-family:Source Code Pro,monospace;font-weight:600;color:#3b4151}.swagger-ui .model-toggle{font-size:10px;position:relative;top:6px;display:inline-block;margin:auto .3em;cursor:pointer;transition:transform .15s ease-in;transform:rotate(90deg);transform-origin:50% 50%}.swagger-ui .model-toggle.collapsed{transform:rotate(0deg)}.swagger-ui .model-toggle:after{display:block;width:20px;height:20px;content:"";background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath d='M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z'/%3E%3C/svg%3E") 50% no-repeat;background-size:100%}.swagger-ui .model-jump-to-path{position:relative;cursor:pointer}.swagger-ui .model-jump-to-path .view-line-link{position:absolute;top:-.4em;cursor:pointer}.swagger-ui .model-title{position:relative}.swagger-ui .model-title:hover .model-hint{visibility:visible}.swagger-ui .model-hint{position:absolute;top:-1.8em;visibility:hidden;padding:.1em .5em;white-space:nowrap;color:#ebebeb;border-radius:4px;background:rgba(0,0,0,.7)}.swagger-ui section.models{margin:30px 0;border:1px solid rgba(59,65,81,.3);border-radius:4px}.swagger-ui section.models.is-open{padding:0 0 20px}.swagger-ui section.models.is-open h4{margin:0 0 5px;border-bottom:1px solid rgba(59,65,81,.3)}.swagger-ui section.models h4{font-size:16px;display:flex;margin:0;padding:10px 20px 10px 10px;cursor:pointer;transition:all .2s;font-family:Titillium Web,sans-serif;color:#777;align-items:center}.swagger-ui section.models h4 svg{transition:all .4s}.swagger-ui section.models h4 span{flex:1}.swagger-ui section.models h4:hover{background:rgba(0,0,0,.02)}.swagger-ui section.models h5{font-size:16px;margin:0 0 10px;font-family:Titillium Web,sans-serif;color:#777}.swagger-ui section.models .model-jump-to-path{position:relative;top:5px}.swagger-ui section.models .model-container{margin:0 20px 15px;transition:all .5s;border-radius:4px;background:rgba(0,0,0,.05)}.swagger-ui section.models .model-container:hover{background:rgba(0,0,0,.07)}.swagger-ui section.models .model-container:first-of-type{margin:20px}.swagger-ui section.models .model-container:last-of-type{margin:0 20px}.swagger-ui section.models .model-box{background:none}.swagger-ui .model-box{padding:10px;border-radius:4px;background:rgba(0,0,0,.1)}.swagger-ui .model-box .model-jump-to-path{position:relative;top:4px}.swagger-ui .model-title{font-size:16px;font-family:Titillium Web,sans-serif;color:#555}.swagger-ui span>span.model,.swagger-ui span>span.model .brace-close{padding:0 0 0 10px}.swagger-ui .prop-type{color:#55a}.swagger-ui .prop-enum{display:block}.swagger-ui .prop-format{color:#999}.swagger-ui table{width:100%;padding:0 10px;border-collapse:collapse}.swagger-ui table.model tbody tr td{padding:0;vertical-align:top}.swagger-ui table.model tbody tr td:first-of-type{width:100px;padding:0}.swagger-ui table.headers td{font-size:12px;font-weight:300;vertical-align:middle;font-family:Source Code Pro,monospace;font-weight:600;color:#3b4151}.swagger-ui table tbody tr td{padding:10px 0 0;vertical-align:top}.swagger-ui table tbody tr td:first-of-type{width:20%;padding:10px 0}.swagger-ui table thead tr td,.swagger-ui table thead tr th{font-size:12px;font-weight:700;padding:12px 0;text-align:left;border-bottom:1px solid rgba(59,65,81,.2);font-family:Open Sans,sans-serif;color:#3b4151}.swagger-ui .parameters-col_description p{font-size:14px;margin:0;font-family:Open Sans,sans-serif;color:#3b4151}.swagger-ui .parameters-col_description input[type=text]{width:100%;max-width:340px}.swagger-ui .parameter__name{font-size:16px;font-weight:400;font-family:Titillium Web,sans-serif;color:#3b4151}.swagger-ui .parameter__name.required{font-weight:700}.swagger-ui .parameter__name.required:after{font-size:10px;position:relative;top:-6px;padding:5px;content:"required";color:rgba(255,0,0,.6)}.swagger-ui .parameter__in{font-size:12px;font-style:italic;font-family:Source Code Pro,monospace;font-weight:600;color:#888}.swagger-ui .table-container{padding:20px}.swagger-ui .topbar{padding:8px 30px;background-color:#89bf04}.swagger-ui .topbar .topbar-wrapper,.swagger-ui .topbar a{display:flex;align-items:center}.swagger-ui .topbar a{font-size:1.5em;font-weight:700;flex:1;max-width:300px;text-decoration:none;font-family:Titillium Web,sans-serif;color:#fff}.swagger-ui .topbar a span{margin:0;padding:0 10px}.swagger-ui .topbar .download-url-wrapper{display:flex;flex:3;justify-content:flex-end}.swagger-ui .topbar .download-url-wrapper input[type=text]{width:100%;min-width:350px;margin:0;border:2px solid #547f00;border-radius:4px 0 0 4px;outline:none}.swagger-ui .topbar .download-url-wrapper .select-label{display:flex;align-items:center;width:100%;max-width:600px;margin:0}.swagger-ui .topbar .download-url-wrapper .select-label span{font-size:16px;flex:1;padding:0 10px 0 0;text-align:right}.swagger-ui .topbar .download-url-wrapper .select-label select{flex:2;width:100%;border:2px solid #547f00;outline:none;box-shadow:none}.swagger-ui .topbar .download-url-wrapper .download-url-button{font-size:16px;font-weight:700;padding:4px 40px;border:none;border-radius:0 4px 4px 0;background:#547f00;font-family:Titillium Web,sans-serif;color:#fff}.swagger-ui .info{margin:50px 0}.swagger-ui .info hgroup.main{margin:0 0 20px}.swagger-ui .info hgroup.main a{font-size:12px}.swagger-ui .info li,.swagger-ui .info p,.swagger-ui .info table{font-size:14px;font-family:Open Sans,sans-serif;color:#3b4151}.swagger-ui .info h1,.swagger-ui .info h2,.swagger-ui .info h3,.swagger-ui .info h4,.swagger-ui .info h5{font-family:Open Sans,sans-serif;color:#3b4151}.swagger-ui .info code{padding:3px 5px;border-radius:4px;background:rgba(0,0,0,.05);font-family:Source Code Pro,monospace;font-weight:600;color:#9012fe}.swagger-ui .info a{font-size:14px;transition:all .4s;font-family:Open Sans,sans-serif;color:#4990e2}.swagger-ui .info a:hover{color:#1f69c0}.swagger-ui .info>div{margin:0 0 5px}.swagger-ui .info .base-url{font-size:12px;font-weight:300!important;margin:0;font-family:Source Code Pro,monospace;font-weight:600;color:#3b4151}.swagger-ui .info .title{font-size:36px;margin:0;font-family:Open Sans,sans-serif;color:#3b4151}.swagger-ui .info .title small{font-size:10px;position:relative;top:-5px;display:inline-block;margin:0 0 0 5px;padding:2px 4px;vertical-align:super;border-radius:57px;background:#7d8492}.swagger-ui .info .title small pre{margin:0;font-family:Titillium Web,sans-serif;color:#fff}.swagger-ui .auth-btn-wrapper{display:flex;padding:10px 0;justify-content:center}.swagger-ui .auth-wrapper{display:flex;flex:1;justify-content:flex-end}.swagger-ui .auth-wrapper .authorize{padding-right:20px}.swagger-ui .auth-container{margin:0 0 10px;padding:10px 20px;border-bottom:1px solid #ebebeb}.swagger-ui .auth-container:last-of-type{margin:0;padding:10px 20px;border:0}.swagger-ui .auth-container h4{margin:5px 0 15px!important}.swagger-ui .auth-container .wrapper{margin:0;padding:0}.swagger-ui .auth-container input[type=password],.swagger-ui .auth-container input[type=text]{min-width:230px}.swagger-ui .auth-container .errors{font-size:12px;padding:10px;border-radius:4px;font-family:Source Code Pro,monospace;font-weight:600;color:#3b4151}.swagger-ui .scopes h2{font-size:14px;font-family:Titillium Web,sans-serif;color:#3b4151}.swagger-ui .scope-def{padding:0 0 20px}.swagger-ui .errors-wrapper{margin:20px;padding:10px 20px;animation:scaleUp .5s;border:2px solid #f93e3e;border-radius:4px;background:rgba(249,62,62,.1)}.swagger-ui .errors-wrapper .error-wrapper{margin:0 0 10px}.swagger-ui .errors-wrapper .errors h4{font-size:14px;margin:0;font-family:Source Code Pro,monospace;font-weight:600;color:#3b4151}.swagger-ui .errors-wrapper .errors small{color:#666}.swagger-ui .errors-wrapper hgroup{display:flex;align-items:center}.swagger-ui .errors-wrapper hgroup h4{font-size:20px;margin:0;flex:1;font-family:Titillium Web,sans-serif;color:#3b4151}@keyframes scaleUp{0%{transform:scale(.8);opacity:0}to{transform:scale(1);opacity:1}}.swagger-ui .Resizer.vertical.disabled { + display: none; +} + +/*# sourceMappingURL=swagger-ui.css.map*/ \ No newline at end of file diff --git a/reference/dtr/2.6/cli/backup.md b/reference/dtr/2.6/cli/backup.md new file mode 100644 index 00000000000..1c14112aefb --- /dev/null +++ b/reference/dtr/2.6/cli/backup.md @@ -0,0 +1,56 @@ +--- +title: docker/dtr backup +description: Create a backup of DTR +keywords: dtr, cli, backup +redirect_from: + - /reference/dtr/2.5/cli/backup/ +--- + +Create a backup of DTR + +## Usage + +```bash +docker run -i --rm docker/dtr \ + backup [command options] > backup.tar +``` + +## Description + +This command creates a `tar` file with the contents of the volumes used by +DTR, and prints it. You can then use `docker/dtr restore` to restore the data +from an existing backup. + + +Note: + + * This command only creates backups of configurations, and image metadata. + It does not back up users and organizations. Users and organizations can be + backed up during a UCP backup. + + It also does not back up Docker images stored in your registry. + You should implement a separate backup policy for the Docker images stored + in your registry, taking into consideration whether your DTR installation is + configured to store images on the filesystem or is using a cloud provider. + + * This backup contains sensitive information and should be + stored securely. + + * Using the `--offline-backup` flag temporarily shuts down the RethinkDB container. + Take the replica out of your load balancer to avoid downtime. + + +## Options + +| Option | Environment Variable | Description | +|:------------------------------|:--------------------------|:-------------------------------------------------------------------------------------| +| `--debug` | $DEBUG | Enable debug mode for additional logs. | +| `--existing-replica-id` | $DTR_REPLICA_ID | The ID of an existing DTR replica. To add, remove or modify a DTR replica, you must connect to an existing healthy replica's database. | +| `--help-extended` | $DTR_EXTENDED_HELP | Display extended help text for a given command. | +| `--offline-backup` | $DTR_OFFLINE_BACKUP | This flag takes RethinkDB down during backup and takes a more reliable backup. If you back up DTR with this flag, RethinkDB will go down during backup. However, offline backups are guaranteed to be more consistent than online backups. | +| `--ucp-ca` | $UCP_CA | Use a PEM-encoded TLS CA certificate for UCP. Download the UCP TLS CA certificate from `https:///ca`, and use `--ucp-ca "$(cat ca.pem)"`. | +| `--ucp-insecure-tls` | $UCP_INSECURE_TLS | Disable TLS verification for UCP. The installation uses TLS but always trusts the TLS certificate used by UCP, which can lead to MITM (man-in-the-middle) attacks. For production deployments, use `--ucp-ca "$(cat ca.pem)"` instead. | +| `--ucp-password` | $UCP_PASSWORD | The UCP administrator password. | +| `--ucp-url` | $UCP_URL | The UCP URL including domain and port. | +| `--ucp-username` | $UCP_USERNAME | The UCP administrator username. | + diff --git a/reference/dtr/2.5/cli/destroy.md b/reference/dtr/2.6/cli/destroy.md similarity index 100% rename from reference/dtr/2.5/cli/destroy.md rename to reference/dtr/2.6/cli/destroy.md diff --git a/reference/dtr/2.6/cli/emergency-repair.md b/reference/dtr/2.6/cli/emergency-repair.md new file mode 100644 index 00000000000..601beee3748 --- /dev/null +++ b/reference/dtr/2.6/cli/emergency-repair.md @@ -0,0 +1,55 @@ +--- +title: docker/dtr emergency-repair +description: Recover DTR from loss of quorum +keywords: dtr, cli, emergency-repair +--- + +Recover DTR from loss of quorum + +## Usage + +```bash +docker run -it --rm docker/dtr \ + emergency-repair [command options] +``` + +## Description + + +This command repairs a DTR cluster that has lost quorum by reverting your +cluster to a single DTR replica. + +There are three steps you can take to recover an unhealthy DTR cluster: + +1. If the majority of replicas are healthy, remove the unhealthy nodes from + the cluster, and join new ones for high availability. +2. If the majority of replicas are unhealthy, use this command to revert your + cluster to a single DTR replica. +3. If you can't repair your cluster to a single replica, you'll have to + restore from an existing backup, using the `restore` command. + +When you run this command, a DTR replica of your choice is repaired and +turned into the only replica in the whole DTR cluster. +The containers for all the other DTR replicas are stopped and removed. When +using the `force` option, the volumes for these replicas are also deleted. + +After repairing the cluster, you should use the `join` command to add more +DTR replicas for high availability. + + +## Options + +| Option | Environment Variable | Description | +|:------------------------------|:--------------------------|:-------------------------------------------------------------------------------------| +| `--debug` | $DEBUG | Enable debug mode for additional logs. | +| `--existing-replica-id` | $DTR_REPLICA_ID | The ID of an existing DTR replica. To add, remove or modify DTR, you must connect to an existing healthy replica's database. | +| `--help-extended` | $DTR_EXTENDED_HELP | Display extended help text for a given command. | +| `--overlay-subnet` | $DTR_OVERLAY_SUBNET | The subnet used by the dtr-ol overlay network. Example: `10.0.0.0/24`. For high-availability, DTR creates an overlay network between UCP nodes. This flag allows you to choose the subnet for that network. Make sure the subnet you choose is not used on any machine where DTR replicas are deployed. | +| `--prune` | $PRUNE | Delete the data volumes of all unhealthy replicas. With this option, the volume of the DTR replica you're restoring is preserved but the volumes for all other replicas are deleted. This has the same result as completely uninstalling DTR from those replicas. | +| `--ucp-ca` | $UCP_CA | Use a PEM-encoded TLS CA certificate for UCP. Download the UCP TLS CA certificate from https:///ca, and use `--ucp-ca "$(cat ca.pem)"`. | +| `--ucp-insecure-tls` | $UCP_INSECURE_TLS | Disable TLS verification for UCP. The installation uses TLS but always trusts the TLS certificate used by UCP, which can lead to MITM (man-in-the-middle) attacks. For production deployments, use `--ucp-ca "$(cat ca.pem)"` instead. | +| `--ucp-password` | $UCP_PASSWORD | The UCP administrator password. | +| `--ucp-url` | $UCP_URL | The UCP URL including domain and port. | +| `--ucp-username` | $UCP_USERNAME | The UCP administrator username. | +| `--y, yes` | $YES | Answer yes to any prompts. | + diff --git a/reference/dtr/2.5/cli/images.md b/reference/dtr/2.6/cli/images.md similarity index 100% rename from reference/dtr/2.5/cli/images.md rename to reference/dtr/2.6/cli/images.md diff --git a/reference/dtr/2.6/cli/index.md b/reference/dtr/2.6/cli/index.md new file mode 100644 index 00000000000..90eddd1a5d1 --- /dev/null +++ b/reference/dtr/2.6/cli/index.md @@ -0,0 +1,39 @@ +--- +title: docker/dtr overview +description: Learn about the commands available in the docker/dtr image. +keywords: dtr, install, uninstall, configure +--- + +This tool has commands to install, configure, and backup Docker +Trusted Registry (DTR). It also allows uninstalling DTR. +By default the tool runs in interactive mode. It prompts you for +the values needed. + +Additional help is available for each command with the '--help' option. + + +## Usage + +```bash +docker run -it --rm docker/dtr \ + command [command options] +``` + + +If not specified, `docker/dtr` uses the `latest` tag by default. To work with a different version, specify it in the command. For example, `docker run -it --rm docker/dtr:2.6.0`. + + +## Commands + +| Option | Description | +|:-------------------------------------|:------------------------------------------------| +| [install](install/) | Install Docker Trusted Registry | +| [join](join/) | Add a new replica to an existing DTR cluster | +| [reconfigure](reconfigure/) | Change DTR configurations | +| [remove](remove/) | Remove a DTR replica from a cluster | +| [destroy](destroy/) | Destroy a DTR replica's data | +| [restore](restore/) | Install and restore DTR from an existing backup | +| [backup](backup/) | Create a backup of DTR | +| [upgrade](upgrade/) | Upgrade DTR 2.4.x cluster to this version | +| [images](images/) | List all the images necessary to install DTR | +| [emergency-repair](emergency-repair/) | Recover DTR from loss of quorum | diff --git a/reference/dtr/2.6/cli/install.md b/reference/dtr/2.6/cli/install.md new file mode 100644 index 00000000000..36cfed23114 --- /dev/null +++ b/reference/dtr/2.6/cli/install.md @@ -0,0 +1,64 @@ +--- +title: docker/dtr install +description: Install Docker Trusted Registry +keywords: dtr, cli, install +--- + +Install Docker Trusted Registry + +## Usage + +```bash +docker run -it --rm docker/dtr \ + install [command options] +``` + +## Description + + +This command installs Docker Trusted Registry (DTR) on a node managed by +Docker Universal Control Plane (UCP). + +After installing DTR, you can join additional DTR replicas using `docker/dtr join`. + +## Example Usage + +$ docker run -it --rm docker/dtr:{{ site.dtr_version }}.0 install \ + --ucp-node \ + --ucp-insecure-tls + +> Note: Use `--ucp-ca "$(cat ca.pem)"` instead of `--ucp-insecure-tls` for a production deployment. + +## Options + +| Option | Environment Variable | Description | +|:------------------------------|:--------------------------|:-------------------------------------------------------------------------------------| +| `--debug` | $DEBUG | Enable debug mode for additional logs. | +| `--dtr-ca` | $DTR_CA | Use a PEM-encoded TLS CA certificate for DTR. By default DTR generates a self-signed TLS certificate during deployment. You can use your own root CA public certificate with `--dtr-ca "$(cat ca.pem)"`. | +| `--dtr-cert` | $DTR_CERT | Use a PEM-encoded TLS certificate for DTR. By default DTR generates a self-signed TLS certificate during deployment. You can use your own public key certificate with `--dtr-cert "$(cat cert.pem)"`. If the certificate has been signed by an intermediate certificate authority, append its public key certificate at the end of the file to establish a chain of trust. | +| `--dtr-external-url` | $DTR_EXTERNAL_URL | URL of the host or load balancer clients use to reach DTR. When you use this flag, users are redirected to UCP for logging in. Once authenticated they are redirected to the URL you specify in this flag. If you don't use this flag, DTR is deployed without single sign-on with UCP. Users and teams are shared but users log in separately into the two applications. You can enable and disable single sign-on within your DTR system settings. Format `https://host[:port]`, where port is the value you used with `--replica-https-port`. | +| `--dtr-key` | $DTR_KEY | Use a PEM-encoded TLS private key for DTR. By default DTR generates a self-signed TLS certificate during deployment. You can use your own TLS private key with `--dtr-key "$(cat key.pem)"`. | +| `--dtr-storage-volume` | $DTR_STORAGE_VOLUME | Customize the volume to store Docker images. By default DTR creates a volume to store the Docker images in the local filesystem of the node where DTR is running, without high-availability. Use this flag to specify a full path or volume name for DTR to store images. For high-availability, make sure all DTR replicas can read and write data on this volume. If you're using NFS, use `--nfs-storage-url` instead. | +| `--enable-pprof` | $DTR_PPROF | Enables pprof profiling of the server. Use `--enable-pprof=false` to disable it. Once DTR is deployed with this flag, you can access the `pprof` endpoint for the api server at `/debug/pprof`, and the registry endpoint at `/registry_debug_pprof/debug/pprof`. | +| `--help-extended` | $DTR_EXTENDED_HELP | Display extended help text for a given command. | +| `--http-proxy` | $DTR_HTTP_PROXY | The HTTP proxy used for outgoing requests. | +| `--https-proxy` | $DTR_HTTPS_PROXY | The HTTPS proxy used for outgoing requests. | +| `--log-host` | $LOG_HOST | The syslog system to send logs to.The endpoint to send logs to. Use this flag if you set `--log-protocol` to `tcp` or `udp`. | +| `--log-level` | $LOG_LEVEL | Log level for all container logs when logging to syslog. Default: INFO. The supported log levels are debug, info, warn, error, or fatal. | +| `--log-protocol` | $LOG_PROTOCOL | The protocol for sending logs. Default is internal. By default, DTR internal components log information using the logger specified in the Docker daemon in the node where the DTR replica is deployed. Use this option to send DTR logs to an external syslog system. The supported values are `tcp`, `udp`, or `internal`. Internal is the default option, stopping DTR from sending logs to an external system. Use this flag with `--log-host`. | +| `--nfs-storage-url` | $NFS_STORAGE_URL | Use NFS to store Docker images following this format: `nfs:///`. By default, DTR creates a volume to store the Docker images in the local filesystem of the node where DTR is running, without high availability. To use this flag, you need to install an NFS client library like ***nfs-common*** in the node where you're deploying DTR. You can test this by running `showmount -e `. When you join new replicas, they will start using NFS so there is no need to specify this flag. To reconfigure DTR to stop using NFS, leave this option empty: `--nfs-storage-url ""`. See [USE NFS](/ee/dtr/admin/configure/external-storage/nfs/) for more details. | +| `--async-nfs` | $ASYNC_NFS | Use async NFS volume options on the replica specified in the `--existing-replica-id` option. The NFS configuration must be set with `--nfs-storage-url` explicitly to use this option. Using `--async-nfs` will bring down any containers on the replica that use the NFS volume, delete the NFS volume, bring it back up with the appropriate configuration, and restart any containers that were brought down. | +| `--nfs-options` | $NFS_OPTIONS | Pass in NFS volume options verbatim for the replica specified in the `--existing-replica-id` option. The NFS configuration must be set with `--nfs-storage-url` explicitly to use this option. Specifying `--nfs-options` will pass in character-for-character the options specified in the argument when creating or recreating the NFS volume. For instance, to use NFS v4 with async, pass in "rw,nfsvers=4,async" as the argument. | +| `--no-proxy` | $DTR_NO_PROXY | List of domains the proxy should not be used for. When using `--http-proxy` you can use this flag to specify a list of domains that you don't want to route through the proxy. Format `acme.com[, acme.org]`. | +| `--overlay-subnet` | $DTR_OVERLAY_SUBNET | The subnet used by the dtr-ol overlay network. Example: `10.0.0.0/24`. For high-availability, DTR creates an overlay network between UCP nodes. This flag allows you to choose the subnet for that network. Make sure the subnet you choose is not used on any machine where DTR replicas are deployed. | +| `--replica-http-port` | $REPLICA_HTTP_PORT | The public HTTP port for the DTR replica. Default is `80`. This allows you to customize the HTTP port where users can reach DTR. Once users access the HTTP port, they are redirected to use an HTTPS connection, using the port specified with `--replica-https-port`. This port can also be used for unencrypted health checks. | +| `--replica-https-port` | $REPLICA_HTTPS_PORT | The public HTTPS port for the DTR replica. Default is `443`. This allows you to customize the HTTPS port where users can reach DTR. Each replica can use a different port. | +| `--replica-id` | $DTR_INSTALL_REPLICA_ID | Assign a 12-character hexadecimal ID to the DTR replica. Random by default. | +| `--replica-rethinkdb-cache-mb` | $RETHINKDB_CACHE_MB | The maximum amount of space in MB for RethinkDB in-memory cache used by the given replica. Default is auto. Auto is `(available_memory - 1024) / 2`. This config allows changing the RethinkDB cache usage per replica. You need to run it once per replica to change each one. | +| `--ucp-ca` | $UCP_CA | Use a PEM-encoded TLS CA certificate for UCP. Download the UCP TLS CA certificate from `https:///ca`, and use `--ucp-ca "$(cat ca.pem)"`. | +| `--ucp-insecure-tls` | $UCP_INSECURE_TLS | Disable TLS verification for UCP. The installation uses TLS but always trusts the TLS certificate used by UCP, which can lead to MITM (man-in-the-middle) attacks. For production deployments, use `--ucp-ca "$(cat ca.pem)"` instead. | +| `--ucp-node` | $UCP_NODE | The hostname of the UCP node to deploy DTR. Random by default. You can find the hostnames of the nodes in the cluster in the UCP web interface, or by running `docker node ls` on a UCP manager node. | +| `--ucp-password` | $UCP_PASSWORD | The UCP administrator password. | +| `--ucp-url` | $UCP_URL | The UCP URL including domain and port. | +| `--ucp-username` | $UCP_USERNAME | The UCP administrator username. | + diff --git a/reference/dtr/2.6/cli/join.md b/reference/dtr/2.6/cli/join.md new file mode 100644 index 00000000000..d518a58877b --- /dev/null +++ b/reference/dtr/2.6/cli/join.md @@ -0,0 +1,45 @@ +--- +title: docker/dtr join +description: Add a new replica to an existing DTR cluster +keywords: dtr, cli, join +--- + +Add a new replica to an existing DTR cluster. Use SSH to log into any node that is already part of UCP. + +## Usage + +```bash +docker run -it --rm \ + docker/dtr:2.6.0 join \ + --ucp-node \ + --ucp-insecure-tls +``` + +## Description + +This command creates a replica of an existing DTR on a node managed by +Docker Universal Control Plane (UCP). + +For setting DTR for high-availability, create 3, 5, or 7 replicas of DTR. + + +## Options + +| Option | Environment Variable | Description | +|:------------------------------|:--------------------------|:-------------------------------------------------------------------------------------| +| `--debug` | $DEBUG | Enable debug mode for additional logs. | +| `--existing-replica-id` | $DTR_REPLICA_ID | The ID of an existing DTR replica. To add, remove or modify DTR, you must connect to an existing healthy replica's database. | +| `--help-extended` | $DTR_EXTENDED_HELP | Display extended help text for a given command. | +| `--replica-http-port` | $REPLICA_HTTP_PORT | The public HTTP port for the DTR replica. Default is `80`. This allows you to customize the HTTP port where users can reach DTR. Once users access the HTTP port, they are redirected to use an HTTPS connection, using the port specified with --replica-https-port. This port can also be used for unencrypted health checks. | +| `--replica-https-port` | $REPLICA_HTTPS_PORT | The public HTTPS port for the DTR replica. Default is `443`. This allows you to customize the HTTPS port where users can reach DTR. Each replica can use a different port. | +| `--replica-id` | $DTR_INSTALL_REPLICA_ID | Assign a 12-character hexadecimal ID to the DTR replica. Random by default. | +| `--replica-rethinkdb-cache-mb` | $RETHINKDB_CACHE_MB | The maximum amount of space in MB for RethinkDB in-memory cache used by the given replica. Default is auto. Auto is `(available_memory - 1024) / 2`. This config allows changing the RethinkDB cache usage per replica. You need to run it once per replica to change each one. | +| `--skip-network-test` | $DTR_SKIP_NETWORK_TEST | Don't test if overlay networks are working correctly between UCP nodes. For high-availability, DTR creates an overlay network between UCP nodes and tests that it is working when joining replicas. Don't use this option for production deployments. | +| `--ucp-ca` | $UCP_CA | Use a PEM-encoded TLS CA certificate for UCP.Download the UCP TLS CA certificate from `https:///ca`, and use `--ucp-ca "$(cat ca.pem)"`. | +| `--ucp-insecure-tls` | $UCP_INSECURE_TLS | Disable TLS verification for UCP. The installation uses TLS but always trusts the TLS certificate used by UCP, which can lead to MITM (man-in-the-middle) attacks. For production deployments, use `--ucp-ca "$(cat ca.pem)"` instead. | +| `--ucp-node` | $UCP_NODE | The hostname of the UCP node to deploy DTR. Random by default.You can find the hostnames of the nodes in the cluster in the UCP web interface, or by running `docker node ls` on a UCP manager node. | +| `--ucp-password` | $UCP_PASSWORD | The UCP administrator password. | +| `--ucp-url` | $UCP_URL | The UCP URL including domain and port. | +| `--ucp-username` | $UCP_USERNAME | The UCP administrator username. | +| `--unsafe-join` | $DTR_UNSAFE_JOIN | Join a new replica even if the cluster is unhealthy.Joining replicas to an unhealthy DTR cluster leads to split-brain scenarios, and data loss. Don't use this option for production deployments. | + diff --git a/reference/dtr/2.6/cli/reconfigure.md b/reference/dtr/2.6/cli/reconfigure.md new file mode 100644 index 00000000000..1c4b124dc18 --- /dev/null +++ b/reference/dtr/2.6/cli/reconfigure.md @@ -0,0 +1,55 @@ +--- +title: docker/dtr reconfigure +description: Change DTR configurations +keywords: dtr, cli, reconfigure +--- + +Change DTR configurations + +## Usage + +```bash +docker run -it --rm docker/dtr \ + reconfigure [command options] +``` + +## Description + + +This command changes DTR configuration settings. + +DTR is restarted for the new configurations to take effect. To have no down +time, configure your DTR for high availability. + + +## Options + +| Option | Environment Variable | Description | +|:------------------------------|:--------------------------|:-------------------------------------------------------------------------------------| +| `--debug` | $DEBUG | Enable debug mode for additional logs. | +| `--dtr-ca` | $DTR_CA | Use a PEM-encoded TLS CA certificate for DTR. By default DTR generates a self-signed TLS certificate during deployment. You can use your own root CA public certificate with `--dtr-ca "$(cat ca.pem)"`. | +| `--dtr-cert` | $DTR_CERT | Use a PEM-encoded TLS certificate for DTR. By default DTR generates a self-signed TLS certificate during deployment. You can use your own public key certificate with `--dtr-cert "$(cat cert.pem)"`. If the certificate has been signed by an intermediate certificate authority, append its public key certificate at the end of the file to establish a chain of trust. | +| `--dtr-external-url` | $DTR_EXTERNAL_URL | URL of the host or load balancer clients use to reach DTR. When you use this flag, users are redirected to UCP for logging in. Once authenticated they are redirected to the url you specify in this flag. If you don't use this flag, DTR is deployed without single sign-on with UCP. Users and teams are shared but users login separately into the two applications. You can enable and disable single sign-on in the DTR settings. Format `https://host[:port]`, where port is the value you used with `--replica-https-port`. | +| `--dtr-key` | $DTR_KEY | Use a PEM-encoded TLS private key for DTR. By default DTR generates a self-signed TLS certificate during deployment. You can use your own TLS private key with `--dtr-key "$(cat key.pem)"`. | +| `--dtr-storage-volume` | $DTR_STORAGE_VOLUME | Customize the volume to store Docker images. By default DTR creates a volume to store the Docker images in the local filesystem of the node where DTR is running, without high-availability. Use this flag to specify a full path or volume name for DTR to store images. For high-availability, make sure all DTR replicas can read and write data on this volume. If you're using NFS, use `--nfs-storage-url` instead. | +| `--enable-pprof` | $DTR_PPROF | Enables pprof profiling of the server. Use `--enable-pprof=false` to disable it. Once DTR is deployed with this flag, you can access the pprof endpoint for the api server at `/debug/pprof`, and the registry endpoint at `/registry_debug_pprof/debug/pprof`. | +| `--existing-replica-id` | $DTR_REPLICA_ID | The ID of an existing DTR replica. To add, remove or modify DTR, you must connect to an existing healthy replica's database. | +| `--help-extended` | $DTR_EXTENDED_HELP | Display extended help text for a given command. | +| `--http-proxy` | $DTR_HTTP_PROXY | The HTTP proxy used for outgoing requests. | +| `--https-proxy` | $DTR_HTTPS_PROXY | The HTTPS proxy used for outgoing requests. | +| `--log-host` | $LOG_HOST | The syslog system to send logs to. The endpoint to send logs to. Use this flag if you set `--log-protocol` to `tcp` or `udp`. | +| `--log-level` | $LOG_LEVEL | Log level for all container logs when logging to syslog. Default: INFO. The supported log levels are `debug`, `info`, `warn`, `error`, or `fatal`. | +| `--log-protocol` | $LOG_PROTOCOL | The protocol for sending logs. Default is internal. By default, DTR internal components log information using the logger specified in the Docker daemon in the node where the DTR replica is deployed. Use this option to send DTR logs to an external syslog system. The supported values are `tcp`, `udp`, and `internal`. Internal is the default option, stopping DTR from sending logs to an external system. Use this flag with `--log-host`. | +| `--nfs-storage-url` | $NFS_STORAGE_URL | Use NFS to store Docker images following this format: `nfs:///`. By default, DTR creates a volume to store the Docker images in the local filesystem of the node where DTR is running, without high availability. To use this flag, you need to install an NFS client library like `nfs-common` in the node where you're deploying DTR. You can test this by running `showmount -e `. When you join new replicas, they will start using NFS so there is no need to specify this flag. To reconfigure DTR to stop using NFS, leave this option empty: `--nfs-storage-url ""`. See [USE NFS](/ee/dtr/admin/configure/external-storage/nfs/) for more details. | +| `--async-nfs` | $ASYNC_NFS | Use async NFS volume options on the replica specified in the `--existing-replica-id` option. The NFS configuration must be set with `--nfs-storage-url` explicitly to use this option. Using `--async-nfs` will bring down any containers on the replica that use the NFS volume, delete the NFS volume, bring it back up with the appropriate configuration, and restart any containers that were brought down. | +| `--nfs-options` | $NFS_OPTIONS | Pass in NFS volume options verbatim for the replica specified in the `--existing-replica-id` option. The NFS configuration must be set with `--nfs-storage-url` explicitly to use this option. Specifying `--nfs-options` will pass in character-for-character the options specified in the argument when creating or recreating the NFS volume. For instance, to use NFS v4 with async, pass in "rw,nfsvers=4,async" as the argument. | +| `--no-proxy` | $DTR_NO_PROXY | List of domains the proxy should not be used for. When using `--http-proxy` you can use this flag to specify a list of domains that you don't want to route through the proxy. Format `acme.com[, acme.org]`. | +| `--replica-http-port` | $REPLICA_HTTP_PORT | The public HTTP port for the DTR replica. Default is `80`. This allows you to customize the HTTP port where users can reach DTR. Once users access the HTTP port, they are redirected to use an HTTPS connection, using the port specified with --replica-https-port. This port can also be used for unencrypted health checks. | +| `--replica-https-port` | $REPLICA_HTTPS_PORT | The public HTTPS port for the DTR replica. Default is `443`. This allows you to customize the HTTPS port where users can reach DTR. Each replica can use a different port. | +| `--replica-rethinkdb-cache-mb` | $RETHINKDB_CACHE_MB | The maximum amount of space in MB for RethinkDB in-memory cache used by the given replica. Default is auto. Auto is `(available_memory - 1024) / 2`. This config allows changing the RethinkDB cache usage per replica. You need to run it once per replica to change each one. | +| `--ucp-ca` | $UCP_CA | Use a PEM-encoded TLS CA certificate for UCP. Download the UCP TLS CA certificate from `https:///ca`, and use `--ucp-ca "$(cat ca.pem)"`. | +| `--ucp-insecure-tls` | $UCP_INSECURE_TLS | Disable TLS verification for UCP. The installation uses TLS but always trusts the TLS certificate used by UCP, which can lead to MITM (man-in-the-middle) attacks. For production deployments, use `--ucp-ca "$(cat ca.pem)"` instead. | +| `--ucp-password` | $UCP_PASSWORD | The UCP administrator password. | +| `--ucp-url` | $UCP_URL | The UCP URL including domain and port. | +| `--ucp-username` | $UCP_USERNAME | The UCP administrator username. | + diff --git a/reference/dtr/2.6/cli/remove.md b/reference/dtr/2.6/cli/remove.md new file mode 100644 index 00000000000..cc8720cb1e3 --- /dev/null +++ b/reference/dtr/2.6/cli/remove.md @@ -0,0 +1,38 @@ +--- +title: docker/dtr remove +description: Remove a DTR replica from a cluster +keywords: dtr, cli, remove +--- + +Remove a DTR replica from a cluster + +## Usage + +```bash +docker run -it --rm docker/dtr \ + remove [command options] +``` + +## Description + + +This command gracefully scales down your DTR cluster by removing exactly +one replica. All other replicas must be healthy and will remain healthy after +this operation. + + +## Options + +| Option | Environment Variable | Description | +|:------------------------------|:--------------------------|:-------------------------------------------------------------------------------------| +| `--debug` | $DEBUG | Enable debug mode for additional logs. | +| `--existing-replica-id` | $DTR_REPLICA_ID | The ID of an existing DTR replica. To add, remove or modify DTR, you must connect to an existing healthy replica's database. | +| `--help-extended` | $DTR_EXTENDED_HELP | Display extended help text for a given command. | +| `--replica-id` | $DTR_REMOVE_REPLICA_ID | DEPRECATED Alias for `--replica-ids`. | +| `--replica-ids` | $DTR_REMOVE_REPLICA_IDS | A comma separated list of IDs of replicas to remove from the cluster. | +| `--ucp-ca` | $UCP_CA | Use a PEM-encoded TLS CA certificate for UCP. Download the UCP TLS CA certificate from `https:///ca`, and use `--ucp-ca "$(cat ca.pem)"`. | +| `--ucp-insecure-tls` | $UCP_INSECURE_TLS | Disable TLS verification for UCP. The installation uses TLS but always trusts the TLS certificate used by UCP, which can lead to MITM (man-in-the-middle) attacks. For production deployments, use `--ucp-ca "$(cat ca.pem)"` instead. | +| `--ucp-password` | $UCP_PASSWORD | The UCP administrator password. | +| `--ucp-url` | $UCP_URL | The UCP URL including domain and port. | +| `--ucp-username` | $UCP_USERNAME | The UCP administrator username. | + diff --git a/reference/dtr/2.6/cli/restore.md b/reference/dtr/2.6/cli/restore.md new file mode 100644 index 00000000000..a832c000314 --- /dev/null +++ b/reference/dtr/2.6/cli/restore.md @@ -0,0 +1,70 @@ +--- +title: docker/dtr restore +description: Install and restore DTR from an existing backup +keywords: dtr, cli, restore +--- + +Install and restore DTR from an existing backup + +## Usage + +```bash +docker run -i --rm docker/dtr \ + restore [command options] < backup.tar +``` + +## Description + + +This command performs a fresh installation of DTR, and reconfigures it +with configuration data from a `tar` file generated by `docker/dtr backup`. + +There are three steps you can take to recover an unhealthy DTR cluster: + +1. If the majority of replicas are healthy, remove the unhealthy nodes from + the cluster, and join new nodes for high availability. +2. If the majority of replicas are unhealthy, use this command to revert your + cluster to a single DTR replica. +3. If you can't repair your cluster to a single replica, you'll have to + restore from an existing backup, using the `restore` command. + +This command does not restore Docker images. You should implement a separate +restore procedure for the Docker images stored in your registry, taking in +consideration whether your DTR installation is configured to store images on +the local filesystem or using a cloud provider. + +After restoring the cluster, you should use the `join` command to add more +DTR replicas for high availability. + + +## Options + +| Option | Environment Variable | Description | +|:------------------------------|:--------------------------|:-------------------------------------------------------------------------------------| +| `--debug` | $DEBUG | Enable debug mode for additional logs. | +| `--dtr-ca` | $DTR_CA | Use a PEM-encoded TLS CA certificate for DTR. By default DTR generates a self-signed TLS certificate during deployment. You can use your own TLS CA certificate with `--dtr-ca "$(cat ca.pem)"`. | +| `--dtr-cert` | $DTR_CERT | Use a PEM-encoded TLS certificate for DTR. By default DTR generates a self-signed TLS certificate during deployment. You can use your own TLS certificate with `--dtr-cert "$(cat ca.pem)"`. | +| `--dtr-external-url` | $DTR_EXTERNAL_URL | URL of the host or load balancer clients use to reach DTR. When you use this flag, users are redirected to UCP for logging in. Once authenticated they are redirected to the URL you specify in this flag. If you don't use this flag, DTR is deployed without single sign-on with UCP. Users and teams are shared but users log in separately into the two applications. You can enable and disable single sign-on within your DTR system settings. Format `https://host[:port]`, where port is the value you used with `--replica-https-port`. | +| `--dtr-key` | $DTR_KEY | Use a PEM-encoded TLS private key for DTR. By default DTR generates a self-signed TLS certificate during deployment. You can use your own TLS private key with `--dtr-key "$(cat ca.pem)"`. | +| `--dtr-storage-volume` | $DTR_STORAGE_VOLUME | Mandatory flag to allow for DTR to fall back to your configured storage setting at the time of backup. If you have previously configured DTR to use a full path or volume name for storage, specify this flag to use the same setting on restore. See [docker/dtr install](install.md) and [docker/dtr reconfigure](reconfigure.md) for usage details. Required if neither `--dtr-use-default-storage` nor `--nfs-storage-url` is set. | +| `--dtr-use-default-storage` | $DTR_DEFAULT_STORAGE | Mandatory flag to allow for DTR to fall back to either your local filesystem or cloud storage depending on what was configured at the time of backup. If cloud storage was configured, then the default storage on restore is cloud storage. Otherwise, local storage is used. Required if neither `--dtr-storage-volume` nor `--nfs-storage-url` is set. | +| `--nfs-storage-url` | $NFS_STORAGE_URL | Mandatory flag to allow for DTR to fall back to your configured storage setting at the time of backup. If NFS was previously configured, you must explicitly specify this flag to recover your NFS settings on restore. See [docker/dtr install](install.md) and [docker/dtr reconfigure](reconfigure.md) for NFS configuration options. Required if neither `--dtr-storage-volume` nor `--dtr-use-default-storage` is set. | +| `--enable-pprof` | $DTR_PPROF | Enables pprof profiling of the server. Use `--enable-pprof=false` to disable it. Once DTR is deployed with this flag, you can access the `pprof` endpoint for the api server at `/debug/pprof`, and the registry endpoint at `/registry_debug_pprof/debug/pprof`. | +| `--help-extended` | $DTR_EXTENDED_HELP | Display extended help text for a given command. | +| `--http-proxy` | $DTR_HTTP_PROXY | The HTTP proxy used for outgoing requests. | +| `--https-proxy` | $DTR_HTTPS_PROXY | The HTTPS proxy used for outgoing requests. | +| `--log-host` | $LOG_HOST | The syslog system to send logs to.The endpoint to send logs to. Use this flag if you set --log-protocol to tcp or udp. | +| `--log-level` | $LOG_LEVEL | Log level for all container logs when logging to syslog. Default: `INFO`. The supported log levels are `debug`, `info`, `warn`, `error`, or `fatal`. | +| `--log-protocol` | $LOG_PROTOCOL | The protocol for sending logs. Default is internal.By default, DTR internal components log information using the logger specified in the Docker daemon in the node where the DTR replica is deployed. Use this option to send DTR logs to an external syslog system. The supported values are tcp, udp, and internal. Internal is the default option, stopping DTR from sending logs to an external system. Use this flag with --log-host. | +| `--no-proxy` | $DTR_NO_PROXY | List of domains the proxy should not be used for.When using --http-proxy you can use this flag to specify a list of domains that you don't want to route through the proxy. Format acme.com[, acme.org]. | +| `--replica-http-port` | $REPLICA_HTTP_PORT | The public HTTP port for the DTR replica. Default is `80`. This allows you to customize the HTTP port where users can reach DTR. Once users access the HTTP port, they are redirected to use an HTTPS connection, using the port specified with `--replica-https-port`. This port can also be used for unencrypted health checks. | +| `--replica-https-port` | $REPLICA_HTTPS_PORT | The public HTTPS port for the DTR replica. Default is `443`. This allows you to customize the HTTPS port where users can reach DTR. Each replica can use a different port. | +| `--replica-id` | $DTR_INSTALL_REPLICA_ID | Assign a 12-character hexadecimal ID to the DTR replica. Random by default. | +| `--replica-rethinkdb-cache-mb` | $RETHINKDB_CACHE_MB | The maximum amount of space in MB for RethinkDB in-memory cache used by the given replica. Default is auto. Auto is `(available_memory - 1024) / 2`. This config allows changing the RethinkDB cache usage per replica. You need to run it once per replica to change each one. | +| `--ucp-ca` | $UCP_CA | Use a PEM-encoded TLS CA certificate for UCP. Download the UCP TLS CA certificate from `https:///ca`, and use `--ucp-ca "$(cat ca.pem)"`. | +| `--ucp-insecure-tls` | $UCP_INSECURE_TLS | Disable TLS verification for UCP. The installation uses TLS but always trusts the TLS certificate used by UCP, which can lead to MITM (man-in-the-middle) attacks. For production deployments, use `--ucp-ca "$(cat ca.pem)"` instead. | +| `--ucp-node` | $UCP_NODE | The hostname of the UCP node to deploy DTR. Random by default. You can find the hostnames of the nodes in the cluster in the UCP web interface, or by running `docker node ls` on a UCP manager node. | +| `--ucp-password` | $UCP_PASSWORD | The UCP administrator password. | +| `--ucp-url` | $UCP_URL | The UCP URL including domain and port. | +| `--ucp-username` | $UCP_USERNAME | The UCP administrator username. | + diff --git a/reference/dtr/2.6/cli/upgrade.md b/reference/dtr/2.6/cli/upgrade.md new file mode 100644 index 00000000000..b885f5706b8 --- /dev/null +++ b/reference/dtr/2.6/cli/upgrade.md @@ -0,0 +1,34 @@ +--- +title: docker/dtr upgrade +description: Upgrade DTR 2.5.x cluster to this version +keywords: dtr, cli, upgrade +--- + +Upgrade DTR 2.5.x cluster to this version + +## Usage + +```bash +docker run -it --rm docker/dtr \ + upgrade [command options] +``` + +## Description + + +This command upgrades DTR 2.5.x to the current version of this image. + + +## Options + +| Option | Environment Variable | Description | +|:------------------------------|:--------------------------|:-------------------------------------------------------------------------------------| +| `--debug` | $DEBUG | Enable debug mode for additional logs. | +| `--existing-replica-id` | $DTR_REPLICA_ID | The ID of an existing DTR replica. To add, remove or modify DTR, you must connect to an existing healthy replica's database. | +| `--help-extended` | $DTR_EXTENDED_HELP | Display extended help text for a given command. | +| `--ucp-ca` | $UCP_CA | Use a PEM-encoded TLS CA certificate for UCP. Download the UCP TLS CA certificate from `https:///ca`, and use `--ucp-ca "$(cat ca.pem)"`. | +| `--ucp-insecure-tls` | $UCP_INSECURE_TLS | Disable TLS verification for UCP. The installation uses TLS but always trusts the TLS certificate used by UCP, which can lead to MITM (man-in-the-middle) attacks. For production deployments, use `--ucp-ca "$(cat ca.pem)"` instead. | +| `--ucp-password` | $UCP_PASSWORD | The UCP administrator password. | +| `--ucp-url` | $UCP_URL | The UCP URL including domain and port. | +| `--ucp-username` | $UCP_USERNAME | The UCP administrator username. | + diff --git a/reference/ucp/3.0/api/index.md b/reference/ucp/3.0/api/index.md deleted file mode 100644 index 6db4fe4dbea..00000000000 --- a/reference/ucp/3.0/api/index.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -description: Learn how to use the Universal Control Plane REST API -keywords: ucp, api, reference -title: Universal Control Plane 3.0 API ---- - -
                -
                - - - - - - - - - - - - - - - - - - - - -
                diff --git a/reference/ucp/3.0/api/lang/en.js b/reference/ucp/3.0/api/lang/en.js deleted file mode 100644 index 776a8b72e0d..00000000000 --- a/reference/ucp/3.0/api/lang/en.js +++ /dev/null @@ -1,53 +0,0 @@ -'use strict'; - -/* jshint quotmark: double */ -window.SwaggerTranslator.learn({ - "Warning: Deprecated":"Warning: Deprecated", - "Implementation Notes":"Implementation Notes", - "Response Class":"Response Class", - "Status":"Status", - "Parameters":"Parameters", - "Parameter":"Parameter", - "Value":"Value", - "Description":"Description", - "Parameter Type":"Parameter Type", - "Data Type":"Data Type", - "Response Messages":"Response Messages", - "HTTP Status Code":"HTTP Status Code", - "Reason":"Reason", - "Response Model":"Response Model", - "Request URL":"Request URL", - "Response Body":"Response Body", - "Response Code":"Response Code", - "Response Headers":"Response Headers", - "Hide Response":"Hide Response", - "Headers":"Headers", - "Try it out!":"Try it out!", - "Show/Hide":"Show/Hide", - "List Operations":"List Operations", - "Expand Operations":"Expand Operations", - "Raw":"Raw", - "can't parse JSON. Raw result":"can't parse JSON. Raw result", - "Model Schema":"Model Schema", - "Model":"Model", - "apply":"apply", - "Username":"Username", - "Password":"Password", - "Terms of service":"Terms of service", - "Created by":"Created by", - "See more at":"See more at", - "Contact the developer":"Contact the developer", - "api version":"api version", - "Response Content Type":"Response Content Type", - "fetching resource":"fetching resource", - "fetching resource list":"fetching resource list", - "Explore":"Explore", - "Show Swagger Petstore Example Apis":"Show Swagger Petstore Example Apis", - "Can't read from server. It may not have the appropriate access-control-origin settings.":"Can't read from server. It may not have the appropriate access-control-origin settings.", - "Please specify the protocol for":"Please specify the protocol for", - "Can't read swagger JSON from":"Can't read swagger JSON from", - "Finished Loading Resource Information. Rendering Swagger UI":"Finished Loading Resource Information. Rendering Swagger UI", - "Unable to read api":"Unable to read api", - "from path":"from path", - "server returned":"server returned" -}); diff --git a/reference/ucp/3.0/api/lang/es.js b/reference/ucp/3.0/api/lang/es.js deleted file mode 100644 index a8dff60b6a9..00000000000 --- a/reference/ucp/3.0/api/lang/es.js +++ /dev/null @@ -1,52 +0,0 @@ -'use strict'; - -/* jshint quotmark: double */ -window.SwaggerTranslator.learn({ - "Warning: Deprecated":"Advertencia: Obsoleto", - "Implementation Notes":"Notas de implementación", - "Response Class":"Clase de la Respuesta", - "Status":"Status", - "Parameters":"Parámetros", - "Parameter":"Parámetro", - "Value":"Valor", - "Description":"Descripción", - "Parameter Type":"Tipo del Parámetro", - "Data Type":"Tipo del Dato", - "Response Messages":"Mensajes de la Respuesta", - "HTTP Status Code":"Código de Status HTTP", - "Reason":"Razón", - "Response Model":"Modelo de la Respuesta", - "Request URL":"URL de la Solicitud", - "Response Body":"Cuerpo de la Respuesta", - "Response Code":"Código de la Respuesta", - "Response Headers":"Encabezados de la Respuesta", - "Hide Response":"Ocultar Respuesta", - "Try it out!":"Pruébalo!", - "Show/Hide":"Mostrar/Ocultar", - "List Operations":"Listar Operaciones", - "Expand Operations":"Expandir Operaciones", - "Raw":"Crudo", - "can't parse JSON. Raw result":"no puede parsear el JSON. Resultado crudo", - "Model Schema":"Esquema del Modelo", - "Model":"Modelo", - "apply":"aplicar", - "Username":"Nombre de usuario", - "Password":"Contraseña", - "Terms of service":"Términos de Servicio", - "Created by":"Creado por", - "See more at":"Ver más en", - "Contact the developer":"Contactar al desarrollador", - "api version":"versión de la api", - "Response Content Type":"Tipo de Contenido (Content Type) de la Respuesta", - "fetching resource":"buscando recurso", - "fetching resource list":"buscando lista del recurso", - "Explore":"Explorar", - "Show Swagger Petstore Example Apis":"Mostrar Api Ejemplo de Swagger Petstore", - "Can't read from server. It may not have the appropriate access-control-origin settings.":"No se puede leer del servidor. Tal vez no tiene la configuración de control de acceso de origen (access-control-origin) apropiado.", - "Please specify the protocol for":"Por favor, especificar el protocola para", - "Can't read swagger JSON from":"No se puede leer el JSON de swagger desde", - "Finished Loading Resource Information. Rendering Swagger UI":"Finalizada la carga del recurso de Información. Mostrando Swagger UI", - "Unable to read api":"No se puede leer la api", - "from path":"desde ruta", - "server returned":"el servidor retornó" -}); diff --git a/reference/ucp/3.0/api/lang/pt.js b/reference/ucp/3.0/api/lang/pt.js deleted file mode 100644 index f2e7c13d413..00000000000 --- a/reference/ucp/3.0/api/lang/pt.js +++ /dev/null @@ -1,53 +0,0 @@ -'use strict'; - -/* jshint quotmark: double */ -window.SwaggerTranslator.learn({ - "Warning: Deprecated":"Aviso: Depreciado", - "Implementation Notes":"Notas de Implementação", - "Response Class":"Classe de resposta", - "Status":"Status", - "Parameters":"Parâmetros", - "Parameter":"Parâmetro", - "Value":"Valor", - "Description":"Descrição", - "Parameter Type":"Tipo de parâmetro", - "Data Type":"Tipo de dados", - "Response Messages":"Mensagens de resposta", - "HTTP Status Code":"Código de status HTTP", - "Reason":"Razão", - "Response Model":"Modelo resposta", - "Request URL":"URL requisição", - "Response Body":"Corpo da resposta", - "Response Code":"Código da resposta", - "Response Headers":"Cabeçalho da resposta", - "Headers":"Cabeçalhos", - "Hide Response":"Esconder resposta", - "Try it out!":"Tente agora!", - "Show/Hide":"Mostrar/Esconder", - "List Operations":"Listar operações", - "Expand Operations":"Expandir operações", - "Raw":"Cru", - "can't parse JSON. Raw result":"Falha ao analisar JSON. Resulto cru", - "Model Schema":"Modelo esquema", - "Model":"Modelo", - "apply":"Aplicar", - "Username":"Usuário", - "Password":"Senha", - "Terms of service":"Termos do serviço", - "Created by":"Criado por", - "See more at":"Veja mais em", - "Contact the developer":"Contate o desenvolvedor", - "api version":"Versão api", - "Response Content Type":"Tipo de conteúdo da resposta", - "fetching resource":"busca recurso", - "fetching resource list":"buscando lista de recursos", - "Explore":"Explorar", - "Show Swagger Petstore Example Apis":"Show Swagger Petstore Example Apis", - "Can't read from server. It may not have the appropriate access-control-origin settings.":"Não é possível ler do servidor. Pode não ter as apropriadas configurações access-control-origin", - "Please specify the protocol for":"Por favor especifique o protocolo", - "Can't read swagger JSON from":"Não é possível ler o JSON Swagger de", - "Finished Loading Resource Information. Rendering Swagger UI":"Carregar informação de recurso finalizada. Renderizando Swagger UI", - "Unable to read api":"Não foi possível ler api", - "from path":"do caminho", - "server returned":"servidor retornou" -}); diff --git a/reference/ucp/3.0/api/lang/ru.js b/reference/ucp/3.0/api/lang/ru.js deleted file mode 100644 index 065100f73f9..00000000000 --- a/reference/ucp/3.0/api/lang/ru.js +++ /dev/null @@ -1,52 +0,0 @@ -'use strict'; - -/* jshint quotmark: double */ -window.SwaggerTranslator.learn({ - "Warning: Deprecated":"Ворнинг: Депрекейтед", - "Implementation Notes":"Заметки", - "Response Class":"Пример ответа", - "Status":"Статус", - "Parameters":"Параметры", - "Parameter":"Параметр", - "Value":"Значение", - "Description":"Описание", - "Parameter Type":"Тип параметра", - "Data Type":"Тип данных", - "HTTP Status Code":"HTTP код", - "Reason":"Причина", - "Response Model":"Структура ответа", - "Request URL":"URL запроса", - "Response Body":"Тело ответа", - "Response Code":"HTTP код ответа", - "Response Headers":"Заголовки ответа", - "Hide Response":"Спрятать ответ", - "Response Messages":"Что может прийти в ответ", - "Try it out!":"Попробовать!", - "Show/Hide":"Показать/Скрыть", - "List Operations":"Операции кратко", - "Expand Operations":"Операции подробно", - "Raw":"В сыром виде", - "can't parse JSON. Raw result":"Не удается распарсить ответ:", - "Model Schema":"Структура", - "Model":"Описание", - "apply":"применить", - "Username":"Имя пользователя", - "Password":"Пароль", - "Terms of service":"Условия использования", - "Created by":"Разработано", - "See more at":"Еще тут", - "Contact the developer":"Связаться с разработчиком", - "api version":"Версия API", - "Response Content Type":"Content Type ответа", - "fetching resource":"Получение ресурса", - "fetching resource list":"Получение ресурсов", - "Explore":"Поехали", - "Show Swagger Petstore Example Apis":"Показать примеры АПИ", - "Can't read from server. It may not have the appropriate access-control-origin settings.":"Не удается получить ответ от сервера. Возможно, какая-то лажа с настройками доступа", - "Please specify the protocol for":"Пожалуйста, укажите протогол для", - "Can't read swagger JSON from":"Не получается прочитать swagger json из", - "Finished Loading Resource Information. Rendering Swagger UI":"Загрузка информации о ресурсах завершена. Рендерим", - "Unable to read api":"Не удалось прочитать api", - "from path":"по адресу", - "server returned":"сервер сказал" -}); diff --git a/reference/ucp/3.0/api/lang/tr.js b/reference/ucp/3.0/api/lang/tr.js deleted file mode 100644 index 16426a9c34b..00000000000 --- a/reference/ucp/3.0/api/lang/tr.js +++ /dev/null @@ -1,53 +0,0 @@ -'use strict'; - -/* jshint quotmark: double */ -window.SwaggerTranslator.learn({ - "Warning: Deprecated":"Uyarı: Deprecated", - "Implementation Notes":"Gerçekleştirim Notları", - "Response Class":"Dönen Sınıf", - "Status":"Statü", - "Parameters":"Parametreler", - "Parameter":"Parametre", - "Value":"Değer", - "Description":"Açıklama", - "Parameter Type":"Parametre Tipi", - "Data Type":"Veri Tipi", - "Response Messages":"Dönüş Mesajı", - "HTTP Status Code":"HTTP Statü Kodu", - "Reason":"Gerekçe", - "Response Model":"Dönüş Modeli", - "Request URL":"İstek URL", - "Response Body":"Dönüş İçeriği", - "Response Code":"Dönüş Kodu", - "Response Headers":"Dönüş Üst Bilgileri", - "Hide Response":"Dönüşü Gizle", - "Headers":"Üst Bilgiler", - "Try it out!":"Dene!", - "Show/Hide":"Göster/Gizle", - "List Operations":"Operasyonları Listele", - "Expand Operations":"Operasyonları Aç", - "Raw":"Ham", - "can't parse JSON. Raw result":"JSON çözümlenemiyor. Ham sonuç", - "Model Schema":"Model Şema", - "Model":"Model", - "apply":"uygula", - "Username":"Kullanıcı Adı", - "Password":"Parola", - "Terms of service":"Servis şartları", - "Created by":"Oluşturan", - "See more at":"Daha fazlası için", - "Contact the developer":"Geliştirici ile İletişime Geçin", - "api version":"api versiyon", - "Response Content Type":"Dönüş İçerik Tipi", - "fetching resource":"kaynak getiriliyor", - "fetching resource list":"kaynak listesi getiriliyor", - "Explore":"Keşfet", - "Show Swagger Petstore Example Apis":"Swagger Petstore Örnek Api'yi Gör", - "Can't read from server. It may not have the appropriate access-control-origin settings.":"Sunucudan okuma yapılamıyor. Sunucu access-control-origin ayarlarınızı kontrol edin.", - "Please specify the protocol for":"Lütfen istenen adres için protokol belirtiniz", - "Can't read swagger JSON from":"Swagger JSON bu kaynaktan okunamıyor", - "Finished Loading Resource Information. Rendering Swagger UI":"Kaynak baglantısı tamamlandı. Swagger UI gösterime hazırlanıyor", - "Unable to read api":"api okunamadı", - "from path":"yoldan", - "server returned":"sunucuya dönüldü" -}); diff --git a/reference/ucp/3.0/api/lang/translator.js b/reference/ucp/3.0/api/lang/translator.js deleted file mode 100644 index 591f6d40943..00000000000 --- a/reference/ucp/3.0/api/lang/translator.js +++ /dev/null @@ -1,39 +0,0 @@ -'use strict'; - -/** - * Translator for documentation pages. - * - * To enable translation you should include one of language-files in your index.html - * after . - * For example - - * - * If you wish to translate some new texsts you should do two things: - * 1. Add a new phrase pair ("New Phrase": "New Translation") into your language file (for example lang/ru.js). It will be great if you add it in other language files too. - * 2. Mark that text it templates this way New Phrase or . - * The main thing here is attribute data-sw-translate. Only inner html, title-attribute and value-attribute are going to translate. - * - */ -window.SwaggerTranslator = { - - _words:[], - - translate: function(sel) { - var $this = this; - sel = sel || '[data-sw-translate]'; - - $(sel).each(function() { - $(this).html($this._tryTranslate($(this).html())); - - $(this).val($this._tryTranslate($(this).val())); - $(this).attr('title', $this._tryTranslate($(this).attr('title'))); - }); - }, - - _tryTranslate: function(word) { - return this._words[$.trim(word)] !== undefined ? this._words[$.trim(word)] : word; - }, - - learn: function(wordsMap) { - this._words = wordsMap; - } -}; diff --git a/reference/ucp/3.0/cli/backup.md b/reference/ucp/3.0/cli/backup.md deleted file mode 100644 index f8c0252ecef..00000000000 --- a/reference/ucp/3.0/cli/backup.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: docker/ucp backup -description: Create a backup of a UCP manager node -keywords: ucp, cli, backup ---- - -Create a backup of a UCP manager node - -## Usage - -```bash -docker container run --log-driver none --rm \ - --name ucp \ - -v /var/run/docker.sock:/var/run/docker.sock \ - docker/ucp \ - backup [command options] > backup.tar -``` - -## Description - -This command creates a tar file with the contents of the volumes used by -this UCP manager node, and prints it. You can then use the `restore` command to -restore the data from an existing backup. - -To create backups of a multi-node cluster, you only need to back up a single -manager node. The restore operation will reconstitute a new UCP installation -from the backup of any previous manager. - -Note: - - * During the backup, UCP is temporarily stopped. This does not affect your - applications. - - * The backup contains private keys and other sensitive information. Use the - `--passphrase` flag to encrypt the backup with PGP-compatible encryption. - - -## Options - -| Option | Description | -|:--------------------------|:---------------------------| -|`--debug, D`|Enable debug mode| -|`--jsonlog`|Produce json formatted output for easier parsing| -|`--interactive, i`|Run in interactive mode and prompt for configuration values| -|`--id`|The ID of the UCP instance to back up| -|`--passphrase`|Encrypt the tar file with a passphrase| diff --git a/reference/ucp/3.0/cli/id.md b/reference/ucp/3.0/cli/id.md deleted file mode 100644 index 068e7614d02..00000000000 --- a/reference/ucp/3.0/cli/id.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: docker/ucp id -description: Print the ID of UCP running on this node -keywords: ucp, cli, id ---- - -Print the ID of UCP running on this node - -## Usage - -Run the UCP id command using the correct image version tag for UCP (i.e. docker/ucp:$version) - -``` -docker container run --rm \ - --name ucp \ - -v /var/run/docker.sock:/var/run/docker.sock \ - docker/ucp:$version \ - id -``` - -## Description - -This command prints the ID of the UCP components running on this node. This ID -matches what you see when running the `docker info` command while using -a client bundle. - -This ID is used by other commands as confirmation. - diff --git a/reference/ucp/3.0/cli/install.md b/reference/ucp/3.0/cli/install.md deleted file mode 100644 index 3dc06c8e911..00000000000 --- a/reference/ucp/3.0/cli/install.md +++ /dev/null @@ -1,87 +0,0 @@ ---- -title: docker/ucp install -description: Install UCP on this node -keywords: ucp, cli, install ---- - -Install UCP on this node - -## Usage - -```bash -docker container run --rm -it \ - --name ucp \ - -v /var/run/docker.sock:/var/run/docker.sock \ - docker/ucp \ - install [command options] -``` - -## Description - -This command initializes a new swarm, turns this node into a manager, and installs -Docker Universal Control Plane (UCP). - -When installing UCP you can customize: - - * The certificates used by the UCP web server. Create a volume - named `ucp-controller-server-certs` and copy the `ca.pem`, `cert.pem`, and `key.pem` - files to the root directory. Then run the install command with the - `--external-server-cert` flag. - - * The license used by UCP, by bind-mounting the file at - `/config/docker_subscription.lic` in the tool. E.g. `-v /path/to/my/config/docker_subscription.lic:/config/docker_subscription.lic` - or by specifying with `--license "$(cat license.lic)` - -If you're joining more nodes to this swarm, open the following ports in your -firewall: - - * 443 or the '--controller-port' - * 2376 or the '--swarm-port' - * 12376, 12379, 12380, 12381, 12382, 12383, 12384, 12385, 12386, 12387 - * 4789 (udp) and 7946 (tcp/udp) for overlay networking - -If you have SELinux policies enabled for your Docker install, you will need to -use `docker container run --rm -it --security-opt label=disable ...` when running this -command. - -## Options - -| Option | Description | -|:-------------------------|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `--debug, D` | Enable debug mode | -| `--jsonlog` | Produce json formatted output for easier parsing | -| `--interactive, i` | Run in interactive mode and prompt for configuration values | -| `--admin-username` | The UCP administrator username | -| `--admin-password` | The UCP administrator password | -| `--san` | Add subject alternative names to certificates (e.g. --san www1.acme.com --san www2.acme.com) | -| `--host-address` | The network address to advertise to other nodes. Format: IP address or network interface name | -| `--data-path-addr` | Address or interface to use for data path traffic. Format: IP address or network interface name | -| `--controller-port` | Port for the web UI and API | -| `--kube-apiserver-port` | Port for the Kubernetes API server (default: 6443) | -| `--swarm-port` | Port for the Docker Swarm manager. Used for backwards compatibility | -| `--swarm-grpc-port` | Port for communication between nodes | -| `--cni-installer-url` | A URL pointing to a Kubernetes YAML file to be used as an installer for the CNI plugin of the cluster. If specified, the default CNI plugin is not installed. If the URL uses the HTTPS scheme, no certificate verification is performed. | -| `--pod-cidr` | Kubernetes cluster IP pool for the pods to allocated IPs from (Default: 192.168.0.0/16) | -| `--cloud-provider` | The cloud provider for the cluster | -| `--dns` | Set custom DNS servers for the UCP containers | -| `--dns-opt` | Set DNS options for the UCP containers | -| `--dns-search` | Set custom DNS search domains for the UCP containers | -| `--unlock-key` | The unlock key for this swarm-mode cluster, if one exists. | -| `--existing-config` | Use the latest existing UCP config during this installation. The install fails if a config is not found. | -| `--force-minimums` | Force the install/upgrade even if the system doesn't meet the minimum requirements. | -| `--pull` | Pull UCP images: `always`, when `missing`, or `never` | -| `--registry-username` | Username to use when pulling images | -| `--registry-password` | Password to use when pulling images | -| `--kv-timeout` | Timeout in milliseconds for the key-value store | -| `--kv-snapshot-count` | Number of changes between key-value store snapshots | -| `--swarm-experimental` | Enable Docker Swarm experimental features. Used for backwards compatibility | -| `--disable-tracking` | Disable anonymous tracking and analytics | -| `--disable-usage` | Disable anonymous usage reporting | -| `--external-server-cert` | Use the certificates in the `ucp-controller-server-certs` volume instead of generating self-signed certs during installation | -| `--preserve-certs` | Don't generate certificates if they already exist | -| `--binpack` | Set the Docker Swarm scheduler to binpack mode. Used for backwards compatibility | -| `--random` | Set the Docker Swarm scheduler to random mode. Used for backwards compatibility | -| `--external-service-lb` | Set the external service load balancer reported in the UI | -| `--enable-profiling` | Enable performance profiling | -| `--license` | Add a license: e.g. --license "$(cat license.lic)" | -| `--force-insecure-tcp` | Force install to continue even with unauthenticated Docker Engine ports | diff --git a/reference/ucp/3.0/cli/restore.md b/reference/ucp/3.0/cli/restore.md deleted file mode 100644 index e5d966e5d19..00000000000 --- a/reference/ucp/3.0/cli/restore.md +++ /dev/null @@ -1,70 +0,0 @@ ---- -title: docker/ucp restore -description: Restore a UCP cluster from a backup -keywords: ucp, cli, restore ---- - -Restore a UCP cluster from a backup - -## Usage - -``` -docker container run --rm -i \ - --name ucp \ - -v /var/run/docker.sock:/var/run/docker.sock \ - docker/ucp \ - restore [command options] < backup.tar -``` - -## Description - -This command installs a new UCP cluster that is populated with the state of -a previous UCP manager node using a tar file generated by the `backup` command. -All UCP settings, users, teams and permissions will be restored from the backup -file. The Restore operation does not alter or recover any containers, networks, -volumes or services of an underlying cluster. - -The restore command can be performed on any manager node of an existing -cluster. If the current node does not belong in a cluster, one will be -initialized using the value of the `--host-address` flag. When restoring on an -existing swarm-mode cluster, no previous UCP components must be running on any -node of the cluster. This cleanup can be performed with the `uninstall-ucp` -command. - -If restore is performed on a different cluster than the one -where the backup file was taken on, the Cluster Root CA of the old UCP -installation will not be restored. This will invalidate any -previously issued Admin Client Bundles and all administrator will be required -to download new client bundles after the operation is completed. -Any existing Client Bundles for non-admin users will still be fully -operational. - -By default the backup tar file is read from stdin. You can also bind-mount the -backup file under /config/backup.tar, and run the restore command with the -`--interactive` flag. - -Notes: - - * Please run `uninstall-ucp` before attempting the restore operation on an - existing UCP cluster. - - * If your swarm-mode cluster has lost quorum and the original set of managers - are not recoverable, you can attempt to recover a single-manager cluster - with `docker swarm init --force-new-cluster`. - - * You can restore from a backup that was taken on a different manager node or - a different cluster altogether. - - -## Options - -| Option | Description | -|:-------------------|:----------------------------------------------------------------------------------------------| -| `--debug, D` | Enable debug mode | -| `--jsonlog` | Produce json formatted output for easier parsing | -| `--interactive, i` | Run in interactive mode and prompt for configuration values | -| `--passphrase` | Decrypt the backup tar file with the provided passphrase | -| `--san` | Add subject alternative names to certificates (e.g. --san www1.acme.com --san www2.acme.com) | -| `--host-address` | The network address to advertise to other nodes. Format: IP address or network interface name | -| `--data-path-addr` | Address or interface to use for data path traffic | -| `--unlock-key` | The unlock key for this swarm-mode cluster, if one exists. | diff --git a/reference/ucp/3.0/cli/support.md b/reference/ucp/3.0/cli/support.md deleted file mode 100644 index db1df798858..00000000000 --- a/reference/ucp/3.0/cli/support.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -title: docker/ucp support -description: Create a support dump for this UCP node -keywords: ucp, cli, support ---- - -Create a support dump for this UCP node - -## Usage - -``` -docker container run --rm \ - --name ucp \ - -v /var/run/docker.sock:/var/run/docker.sock \ - docker/ucp \ - support [command options] > docker-support.tgz -``` - -## Description - -This command creates a support dump file for this node, and prints it to stdout. - -## Options - -| Option | Description | -|:--------------------------|:---------------------------| -|`--debug, D`|Enable debug mode| -|`--jsonlog`|Produce json formatted output for easier parsing| - - diff --git a/reference/ucp/3.0/cli/upgrade.md b/reference/ucp/3.0/cli/upgrade.md deleted file mode 100644 index 9206d2b608a..00000000000 --- a/reference/ucp/3.0/cli/upgrade.md +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: docker/ucp upgrade -description: Upgrade the UCP components on this node -keywords: ucp, cli, upgrade ---- - -Upgrade the UCP cluster - -## Usage - -``` - docker container run --rm -it \ - --name ucp \ - -v /var/run/docker.sock:/var/run/docker.sock \ - docker/ucp \ - upgrade [command options] -``` - -## Description - -This command upgrades the UCP running on this cluster. - -Before performing an upgrade, you should perform a backup by using the -[backup](backup.md) command. - -After upgrading UCP, go to the UCP web UI and confirm each node is -healthy and that all nodes have been upgraded successfully. - - -## Options - -| Option | Description | -|:----------------------|:------------------------------------------------------------------------------------------------------| -| `--debug, D` | Enable debug mode | -| `--jsonlog` | Produce json formatted output for easier parsing | -| `--interactive, i` | Run in interactive mode and prompt for configuration values | -| `--admin-username` | The UCP administrator username | -| `--admin-password` | The UCP administrator password | -| `--pull` | Pull UCP images: `always`, when `missing`, or `never` | -| `--registry-username` | Username to use when pulling images | -| `--registry-password` | Password to use when pulling images | -| `--id` | The ID of the UCP instance to upgrade | -| `--host-address` | Override the previously configured host address with this IP or network interface | -| `--force-minimums` | Force the install/upgrade even if the system does not meet the minimum requirements | -| `--pod-cidr` | Kubernetes cluster IP pool for the pods to allocated IP from (Default: 192.168.0.0/16 | -| `--nodeport-range` | Allowed port range for Kubernetes services of type NodePort (Default: 32768-35535) | -| `--cloud-provider` | The cloud provider for the cluster | -| `--cni-installer-url` | A URL pointing to a kubernetes YAML file to be used as an installer for the CNI plugin of the cluster | diff --git a/reference/ucp/3.1/api/css/print.css b/reference/ucp/3.1/api/css/print.css new file mode 100644 index 00000000000..cd3aa8b6a4a --- /dev/null +++ b/reference/ucp/3.1/api/css/print.css @@ -0,0 +1,1172 @@ +/* Original style from softwaremaniacs.org (c) Ivan Sagalaev */ +.swagger-section pre code { + display: block; + padding: 0.5em; + background: #F0F0F0; +} +.swagger-section pre code, +.swagger-section pre .subst, +.swagger-section pre .tag .title, +.swagger-section pre .lisp .title, +.swagger-section pre .clojure .built_in, +.swagger-section pre .nginx .title { + color: black; +} +.swagger-section pre .string, +.swagger-section pre .title, +.swagger-section pre .constant, +.swagger-section pre .parent, +.swagger-section pre .tag .value, +.swagger-section pre .rules .value, +.swagger-section pre .rules .value .number, +.swagger-section pre .preprocessor, +.swagger-section pre .ruby .symbol, +.swagger-section pre .ruby .symbol .string, +.swagger-section pre .aggregate, +.swagger-section pre .template_tag, +.swagger-section pre .django .variable, +.swagger-section pre .smalltalk .class, +.swagger-section pre .addition, +.swagger-section pre .flow, +.swagger-section pre .stream, +.swagger-section pre .bash .variable, +.swagger-section pre .apache .tag, +.swagger-section pre .apache .cbracket, +.swagger-section pre .tex .command, +.swagger-section pre .tex .special, +.swagger-section pre .erlang_repl .function_or_atom, +.swagger-section pre .markdown .header { + color: #800; +} +.swagger-section pre .comment, +.swagger-section pre .annotation, +.swagger-section pre .template_comment, +.swagger-section pre .diff .header, +.swagger-section pre .chunk, +.swagger-section pre .markdown .blockquote { + color: #888; +} +.swagger-section pre .number, +.swagger-section pre .date, +.swagger-section pre .regexp, +.swagger-section pre .literal, +.swagger-section pre .smalltalk .symbol, +.swagger-section pre .smalltalk .char, +.swagger-section pre .go .constant, +.swagger-section pre .change, +.swagger-section pre .markdown .bullet, +.swagger-section pre .markdown .link_url { + color: #080; +} +.swagger-section pre .label, +.swagger-section pre .javadoc, +.swagger-section pre .ruby .string, +.swagger-section pre .decorator, +.swagger-section pre .filter .argument, +.swagger-section pre .localvars, +.swagger-section pre .array, +.swagger-section pre .attr_selector, +.swagger-section pre .important, +.swagger-section pre .pseudo, +.swagger-section pre .pi, +.swagger-section pre .doctype, +.swagger-section pre .deletion, +.swagger-section pre .envvar, +.swagger-section pre .shebang, +.swagger-section pre .apache .sqbracket, +.swagger-section pre .nginx .built_in, +.swagger-section pre .tex .formula, +.swagger-section pre .erlang_repl .reserved, +.swagger-section pre .prompt, +.swagger-section pre .markdown .link_label, +.swagger-section pre .vhdl .attribute, +.swagger-section pre .clojure .attribute, +.swagger-section pre .coffeescript .property { + color: #8888ff; +} +.swagger-section pre .keyword, +.swagger-section pre .id, +.swagger-section pre .phpdoc, +.swagger-section pre .title, +.swagger-section pre .built_in, +.swagger-section pre .aggregate, +.swagger-section pre .css .tag, +.swagger-section pre .javadoctag, +.swagger-section pre .phpdoc, +.swagger-section pre .yardoctag, +.swagger-section pre .smalltalk .class, +.swagger-section pre .winutils, +.swagger-section pre .bash .variable, +.swagger-section pre .apache .tag, +.swagger-section pre .go .typename, +.swagger-section pre .tex .command, +.swagger-section pre .markdown .strong, +.swagger-section pre .request, +.swagger-section pre .status { + font-weight: bold; +} +.swagger-section pre .markdown .emphasis { + font-style: italic; +} +.swagger-section pre .nginx .built_in { + font-weight: normal; +} +.swagger-section pre .coffeescript .javascript, +.swagger-section pre .javascript .xml, +.swagger-section pre .tex .formula, +.swagger-section pre .xml .javascript, +.swagger-section pre .xml .vbscript, +.swagger-section pre .xml .css, +.swagger-section pre .xml .cdata { + opacity: 0.5; +} +.swagger-section .swagger-ui-wrap { + line-height: 1; + font-family: "Droid Sans", sans-serif; + max-width: 960px; + margin-left: auto; + margin-right: auto; +} +.swagger-section .swagger-ui-wrap b, +.swagger-section .swagger-ui-wrap strong { + font-family: "Droid Sans", sans-serif; + font-weight: bold; +} +.swagger-section .swagger-ui-wrap q, +.swagger-section .swagger-ui-wrap blockquote { + quotes: none; +} +.swagger-section .swagger-ui-wrap p { + line-height: 1.4em; + padding: 0 0 10px; + color: #333333; +} +.swagger-section .swagger-ui-wrap q:before, +.swagger-section .swagger-ui-wrap q:after, +.swagger-section .swagger-ui-wrap blockquote:before, +.swagger-section .swagger-ui-wrap blockquote:after { + content: none; +} +.swagger-section .swagger-ui-wrap .heading_with_menu h1, +.swagger-section .swagger-ui-wrap .heading_with_menu h2, +.swagger-section .swagger-ui-wrap .heading_with_menu h3, +.swagger-section .swagger-ui-wrap .heading_with_menu h4, +.swagger-section .swagger-ui-wrap .heading_with_menu h5, +.swagger-section .swagger-ui-wrap .heading_with_menu h6 { + display: block; + clear: none; + float: left; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + width: 60%; +} +.swagger-section .swagger-ui-wrap table { + border-collapse: collapse; + border-spacing: 0; +} +.swagger-section .swagger-ui-wrap table thead tr th { + padding: 5px; + font-size: 0.9em; + color: #666666; + border-bottom: 1px solid #999999; +} +.swagger-section .swagger-ui-wrap table tbody tr:last-child td { + border-bottom: none; +} +.swagger-section .swagger-ui-wrap table tbody tr.offset { + background-color: #f0f0f0; +} +.swagger-section .swagger-ui-wrap table tbody tr td { + padding: 6px; + font-size: 0.9em; + border-bottom: 1px solid #cccccc; + vertical-align: top; + line-height: 1.3em; +} +.swagger-section .swagger-ui-wrap ol { + margin: 0px 0 10px; + padding: 0 0 0 18px; + list-style-type: decimal; +} +.swagger-section .swagger-ui-wrap ol li { + padding: 5px 0px; + font-size: 0.9em; + color: #333333; +} +.swagger-section .swagger-ui-wrap ol, +.swagger-section .swagger-ui-wrap ul { + list-style: none; +} +.swagger-section .swagger-ui-wrap h1 a, +.swagger-section .swagger-ui-wrap h2 a, +.swagger-section .swagger-ui-wrap h3 a, +.swagger-section .swagger-ui-wrap h4 a, +.swagger-section .swagger-ui-wrap h5 a, +.swagger-section .swagger-ui-wrap h6 a { + text-decoration: none; +} +.swagger-section .swagger-ui-wrap h1 a:hover, +.swagger-section .swagger-ui-wrap h2 a:hover, +.swagger-section .swagger-ui-wrap h3 a:hover, +.swagger-section .swagger-ui-wrap h4 a:hover, +.swagger-section .swagger-ui-wrap h5 a:hover, +.swagger-section .swagger-ui-wrap h6 a:hover { + text-decoration: underline; +} +.swagger-section .swagger-ui-wrap h1 span.divider, +.swagger-section .swagger-ui-wrap h2 span.divider, +.swagger-section .swagger-ui-wrap h3 span.divider, +.swagger-section .swagger-ui-wrap h4 span.divider, +.swagger-section .swagger-ui-wrap h5 span.divider, +.swagger-section .swagger-ui-wrap h6 span.divider { + color: #aaaaaa; +} +.swagger-section .swagger-ui-wrap a { + color: #547f00; +} +.swagger-section .swagger-ui-wrap a img { + border: none; +} +.swagger-section .swagger-ui-wrap article, +.swagger-section .swagger-ui-wrap aside, +.swagger-section .swagger-ui-wrap details, +.swagger-section .swagger-ui-wrap figcaption, +.swagger-section .swagger-ui-wrap figure, +.swagger-section .swagger-ui-wrap footer, +.swagger-section .swagger-ui-wrap header, +.swagger-section .swagger-ui-wrap hgroup, +.swagger-section .swagger-ui-wrap menu, +.swagger-section .swagger-ui-wrap nav, +.swagger-section .swagger-ui-wrap section, +.swagger-section .swagger-ui-wrap summary { + display: block; +} +.swagger-section .swagger-ui-wrap pre { + font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; + background-color: #fcf6db; + border: 1px solid #e5e0c6; + padding: 10px; +} +.swagger-section .swagger-ui-wrap pre code { + line-height: 1.6em; + background: none; +} +.swagger-section .swagger-ui-wrap .content > .content-type > div > label { + clear: both; + display: block; + color: #0F6AB4; + font-size: 1.1em; + margin: 0; + padding: 15px 0 5px; +} +.swagger-section .swagger-ui-wrap .content pre { + font-size: 12px; + margin-top: 5px; + padding: 5px; +} +.swagger-section .swagger-ui-wrap .icon-btn { + cursor: pointer; +} +.swagger-section .swagger-ui-wrap .info_title { + padding-bottom: 10px; + font-weight: bold; + font-size: 25px; +} +.swagger-section .swagger-ui-wrap .footer { + margin-top: 20px; +} +.swagger-section .swagger-ui-wrap p.big, +.swagger-section .swagger-ui-wrap div.big p { + font-size: 1em; + margin-bottom: 10px; +} +.swagger-section .swagger-ui-wrap form.fullwidth ol li.string input, +.swagger-section .swagger-ui-wrap form.fullwidth ol li.url input, +.swagger-section .swagger-ui-wrap form.fullwidth ol li.text textarea, +.swagger-section .swagger-ui-wrap form.fullwidth ol li.numeric input { + width: 500px !important; +} +.swagger-section .swagger-ui-wrap .info_license { + padding-bottom: 5px; +} +.swagger-section .swagger-ui-wrap .info_tos { + padding-bottom: 5px; +} +.swagger-section .swagger-ui-wrap .message-fail { + color: #cc0000; +} +.swagger-section .swagger-ui-wrap .info_url { + padding-bottom: 5px; +} +.swagger-section .swagger-ui-wrap .info_email { + padding-bottom: 5px; +} +.swagger-section .swagger-ui-wrap .info_name { + padding-bottom: 5px; +} +.swagger-section .swagger-ui-wrap .info_description { + padding-bottom: 10px; + font-size: 15px; +} +.swagger-section .swagger-ui-wrap .markdown ol li, +.swagger-section .swagger-ui-wrap .markdown ul li { + padding: 3px 0px; + line-height: 1.4em; + color: #333333; +} +.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.string input, +.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.url input, +.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.numeric input { + display: block; + padding: 4px; + width: auto; + clear: both; +} +.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.string input.title, +.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.url input.title, +.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.numeric input.title { + font-size: 1.3em; +} +.swagger-section .swagger-ui-wrap table.fullwidth { + width: 100%; +} +.swagger-section .swagger-ui-wrap .model-signature { + font-family: "Droid Sans", sans-serif; + font-size: 1em; + line-height: 1.5em; +} +.swagger-section .swagger-ui-wrap .model-signature .signature-nav a { + text-decoration: none; + color: #AAA; +} +.swagger-section .swagger-ui-wrap .model-signature .signature-nav a:hover { + text-decoration: underline; + color: black; +} +.swagger-section .swagger-ui-wrap .model-signature .signature-nav .selected { + color: black; + text-decoration: none; +} +.swagger-section .swagger-ui-wrap .model-signature .propType { + color: #5555aa; +} +.swagger-section .swagger-ui-wrap .model-signature pre:hover { + background-color: #ffffdd; +} +.swagger-section .swagger-ui-wrap .model-signature pre { + font-size: .85em; + line-height: 1.2em; + overflow: auto; + max-height: 200px; + cursor: pointer; +} +.swagger-section .swagger-ui-wrap .model-signature ul.signature-nav { + display: block; + margin: 0; + padding: 0; +} +.swagger-section .swagger-ui-wrap .model-signature ul.signature-nav li:last-child { + padding-right: 0; + border-right: none; +} +.swagger-section .swagger-ui-wrap .model-signature ul.signature-nav li { + float: left; + margin: 0 5px 5px 0; + padding: 2px 5px 2px 0; + border-right: 1px solid #ddd; +} +.swagger-section .swagger-ui-wrap .model-signature .propOpt { + color: #555; +} +.swagger-section .swagger-ui-wrap .model-signature .snippet small { + font-size: 0.75em; +} +.swagger-section .swagger-ui-wrap .model-signature .propOptKey { + font-style: italic; +} +.swagger-section .swagger-ui-wrap .model-signature .description .strong { + font-weight: bold; + color: #000; + font-size: .9em; +} +.swagger-section .swagger-ui-wrap .model-signature .description div { + font-size: 0.9em; + line-height: 1.5em; + margin-left: 1em; +} +.swagger-section .swagger-ui-wrap .model-signature .description .stronger { + font-weight: bold; + color: #000; +} +.swagger-section .swagger-ui-wrap .model-signature .description .propWrap .optionsWrapper { + border-spacing: 0; + position: absolute; + background-color: #ffffff; + border: 1px solid #bbbbbb; + display: none; + font-size: 11px; + max-width: 400px; + line-height: 30px; + color: black; + padding: 5px; + margin-left: 10px; +} +.swagger-section .swagger-ui-wrap .model-signature .description .propWrap .optionsWrapper th { + text-align: center; + background-color: #eeeeee; + border: 1px solid #bbbbbb; + font-size: 11px; + color: #666666; + font-weight: bold; + padding: 5px; + line-height: 15px; +} +.swagger-section .swagger-ui-wrap .model-signature .description .propWrap .optionsWrapper .optionName { + font-weight: bold; +} +.swagger-section .swagger-ui-wrap .model-signature .description .propDesc.markdown > p:first-child, +.swagger-section .swagger-ui-wrap .model-signature .description .propDesc.markdown > p:last-child { + display: inline; +} +.swagger-section .swagger-ui-wrap .model-signature .description .propDesc.markdown > p:not(:first-child):before { + display: block; + content: ''; +} +.swagger-section .swagger-ui-wrap .model-signature .description span:last-of-type.propDesc.markdown > p:only-child { + margin-right: -3px; +} +.swagger-section .swagger-ui-wrap .model-signature .propName { + font-weight: bold; +} +.swagger-section .swagger-ui-wrap .model-signature .signature-container { + clear: both; +} +.swagger-section .swagger-ui-wrap .body-textarea { + width: 300px; + height: 100px; + border: 1px solid #aaa; +} +.swagger-section .swagger-ui-wrap .markdown p code, +.swagger-section .swagger-ui-wrap .markdown li code { + font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; + background-color: #f0f0f0; + color: black; + padding: 1px 3px; +} +.swagger-section .swagger-ui-wrap .required { + font-weight: bold; +} +.swagger-section .swagger-ui-wrap input.parameter { + width: 300px; + border: 1px solid #aaa; +} +.swagger-section .swagger-ui-wrap h1 { + color: black; + font-size: 1.5em; + line-height: 1.3em; + padding: 10px 0 10px 0; + font-family: "Droid Sans", sans-serif; + font-weight: bold; +} +.swagger-section .swagger-ui-wrap .heading_with_menu { + float: none; + clear: both; + overflow: hidden; + display: block; +} +.swagger-section .swagger-ui-wrap .heading_with_menu ul { + display: block; + clear: none; + float: right; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + margin-top: 10px; +} +.swagger-section .swagger-ui-wrap h2 { + color: black; + font-size: 1.3em; + padding: 10px 0 10px 0; +} +.swagger-section .swagger-ui-wrap h2 a { + color: black; +} +.swagger-section .swagger-ui-wrap h2 span.sub { + font-size: 0.7em; + color: #999999; + font-style: italic; +} +.swagger-section .swagger-ui-wrap h2 span.sub a { + color: #777777; +} +.swagger-section .swagger-ui-wrap span.weak { + color: #666666; +} +.swagger-section .swagger-ui-wrap .message-success { + color: #89BF04; +} +.swagger-section .swagger-ui-wrap caption, +.swagger-section .swagger-ui-wrap th, +.swagger-section .swagger-ui-wrap td { + text-align: left; + font-weight: normal; + vertical-align: middle; +} +.swagger-section .swagger-ui-wrap .code { + font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; +} +.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.text textarea { + font-family: "Droid Sans", sans-serif; + height: 250px; + padding: 4px; + display: block; + clear: both; +} +.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.select select { + display: block; + clear: both; +} +.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.boolean { + float: none; + clear: both; + overflow: hidden; + display: block; +} +.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.boolean label { + display: block; + float: left; + clear: none; + margin: 0; + padding: 0; +} +.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.boolean input { + display: block; + float: left; + clear: none; + margin: 0 5px 0 0; +} +.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.required label { + color: black; +} +.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li label { + display: block; + clear: both; + width: auto; + padding: 0 0 3px; + color: #666666; +} +.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li label abbr { + padding-left: 3px; + color: #888888; +} +.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li p.inline-hints { + margin-left: 0; + font-style: italic; + font-size: 0.9em; + margin: 0; +} +.swagger-section .swagger-ui-wrap form.formtastic fieldset.buttons { + margin: 0; + padding: 0; +} +.swagger-section .swagger-ui-wrap span.blank, +.swagger-section .swagger-ui-wrap span.empty { + color: #888888; + font-style: italic; +} +.swagger-section .swagger-ui-wrap .markdown h3 { + color: #547f00; +} +.swagger-section .swagger-ui-wrap .markdown h4 { + color: #666666; +} +.swagger-section .swagger-ui-wrap .markdown pre { + font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; + background-color: #fcf6db; + border: 1px solid #e5e0c6; + padding: 10px; + margin: 0 0 10px 0; +} +.swagger-section .swagger-ui-wrap .markdown pre code { + line-height: 1.6em; +} +.swagger-section .swagger-ui-wrap div.gist { + margin: 20px 0 25px 0 !important; +} +.swagger-section .swagger-ui-wrap ul#resources { + font-family: "Droid Sans", sans-serif; + font-size: 0.9em; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource { + border-bottom: 1px solid #dddddd; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource:hover div.heading h2 a, +.swagger-section .swagger-ui-wrap ul#resources li.resource.active div.heading h2 a { + color: black; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource:hover div.heading ul.options li a, +.swagger-section .swagger-ui-wrap ul#resources li.resource.active div.heading ul.options li a { + color: #555555; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource:last-child { + border-bottom: none; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading { + border: 1px solid transparent; + float: none; + clear: both; + overflow: hidden; + display: block; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options { + overflow: hidden; + padding: 0; + display: block; + clear: none; + float: right; + margin: 14px 10px 0 0; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li { + float: left; + clear: none; + margin: 0; + padding: 2px 10px; + border-right: 1px solid #dddddd; + color: #666666; + font-size: 0.9em; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li a { + color: #aaaaaa; + text-decoration: none; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li a:hover { + text-decoration: underline; + color: black; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li a:hover, +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li a:active, +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li a.active { + text-decoration: underline; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li:first-child, +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li.first { + padding-left: 0; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li:last-child, +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li.last { + padding-right: 0; + border-right: none; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options:first-child, +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options.first { + padding-left: 0; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading h2 { + color: #999999; + padding-left: 0; + display: block; + clear: none; + float: left; + font-family: "Droid Sans", sans-serif; + font-weight: bold; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading h2 a { + color: #999999; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading h2 a:hover { + color: black; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation { + float: none; + clear: both; + overflow: hidden; + display: block; + margin: 0 0 10px; + padding: 0; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading { + float: none; + clear: both; + overflow: hidden; + display: block; + margin: 0; + padding: 0; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 { + display: block; + clear: none; + float: left; + width: auto; + margin: 0; + padding: 0; + line-height: 1.1em; + color: black; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span.path { + padding-left: 10px; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span.path a { + color: black; + text-decoration: none; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span.path a:hover { + text-decoration: underline; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span.http_method a { + text-transform: uppercase; + text-decoration: none; + color: white; + display: inline-block; + width: 50px; + font-size: 0.7em; + text-align: center; + padding: 7px 0 4px; + -moz-border-radius: 2px; + -webkit-border-radius: 2px; + -o-border-radius: 2px; + -ms-border-radius: 2px; + -khtml-border-radius: 2px; + border-radius: 2px; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span { + margin: 0; + padding: 0; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading ul.options { + overflow: hidden; + padding: 0; + display: block; + clear: none; + float: right; + margin: 6px 10px 0 0; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading ul.options li { + float: left; + clear: none; + margin: 0; + padding: 2px 10px; + font-size: 0.9em; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading ul.options li a { + text-decoration: none; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading ul.options li.access { + color: black; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content { + border-top: none; + padding: 10px; + -moz-border-radius-bottomleft: 6px; + -webkit-border-bottom-left-radius: 6px; + -o-border-bottom-left-radius: 6px; + -ms-border-bottom-left-radius: 6px; + -khtml-border-bottom-left-radius: 6px; + border-bottom-left-radius: 6px; + -moz-border-radius-bottomright: 6px; + -webkit-border-bottom-right-radius: 6px; + -o-border-bottom-right-radius: 6px; + -ms-border-bottom-right-radius: 6px; + -khtml-border-bottom-right-radius: 6px; + border-bottom-right-radius: 6px; + margin: 0 0 20px; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content h4 { + font-size: 1.1em; + margin: 0; + padding: 15px 0 5px; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content div.sandbox_header { + float: none; + clear: both; + overflow: hidden; + display: block; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content div.sandbox_header a { + padding: 4px 0 0 10px; + display: inline-block; + font-size: 0.9em; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content div.sandbox_header input.submit { + display: block; + clear: none; + float: left; + padding: 6px 8px; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content div.sandbox_header span.response_throbber { + background-image: url('../images/throbber.gif'); + width: 128px; + height: 16px; + display: block; + clear: none; + float: right; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content form input[type='text'].error { + outline: 2px solid black; + outline-color: #cc0000; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content div.response div.block pre { + font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; + padding: 10px; + font-size: 0.9em; + max-height: 400px; + overflow-y: auto; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading { + background-color: #f9f2e9; + border: 1px solid #f0e0ca; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading h3 span.http_method a { + background-color: #c5862b; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li { + border-right: 1px solid #dddddd; + border-right-color: #f0e0ca; + color: #c5862b; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li a { + color: #c5862b; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content { + background-color: #faf5ee; + border: 1px solid #f0e0ca; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content h4 { + color: #c5862b; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content div.sandbox_header a { + color: #dcb67f; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading { + background-color: #fcffcd; + border: 1px solid black; + border-color: #ffd20f; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading h3 span.http_method a { + text-transform: uppercase; + background-color: #ffd20f; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading ul.options li { + border-right: 1px solid #dddddd; + border-right-color: #ffd20f; + color: #ffd20f; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading ul.options li a { + color: #ffd20f; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.content { + background-color: #fcffcd; + border: 1px solid black; + border-color: #ffd20f; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.content h4 { + color: #ffd20f; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.content div.sandbox_header a { + color: #6fc992; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading { + background-color: #f5e8e8; + border: 1px solid #e8c6c7; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading h3 span.http_method a { + text-transform: uppercase; + background-color: #a41e22; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li { + border-right: 1px solid #dddddd; + border-right-color: #e8c6c7; + color: #a41e22; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li a { + color: #a41e22; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content { + background-color: #f7eded; + border: 1px solid #e8c6c7; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content h4 { + color: #a41e22; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content div.sandbox_header a { + color: #c8787a; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading { + background-color: #e7f6ec; + border: 1px solid #c3e8d1; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading h3 span.http_method a { + background-color: #10a54a; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li { + border-right: 1px solid #dddddd; + border-right-color: #c3e8d1; + color: #10a54a; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li a { + color: #10a54a; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content { + background-color: #ebf7f0; + border: 1px solid #c3e8d1; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content h4 { + color: #10a54a; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content div.sandbox_header a { + color: #6fc992; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading { + background-color: #FCE9E3; + border: 1px solid #F5D5C3; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading h3 span.http_method a { + background-color: #D38042; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading ul.options li { + border-right: 1px solid #dddddd; + border-right-color: #f0cecb; + color: #D38042; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading ul.options li a { + color: #D38042; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.content { + background-color: #faf0ef; + border: 1px solid #f0cecb; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.content h4 { + color: #D38042; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.content div.sandbox_header a { + color: #dcb67f; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading { + background-color: #e7f0f7; + border: 1px solid #c3d9ec; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading h3 span.http_method a { + background-color: #0f6ab4; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li { + border-right: 1px solid #dddddd; + border-right-color: #c3d9ec; + color: #0f6ab4; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li a { + color: #0f6ab4; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content { + background-color: #ebf3f9; + border: 1px solid #c3d9ec; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content h4 { + color: #0f6ab4; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content div.sandbox_header a { + color: #6fa5d2; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.heading { + background-color: #e7f0f7; + border: 1px solid #c3d9ec; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.heading h3 span.http_method a { + background-color: #0f6ab4; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.heading ul.options li { + border-right: 1px solid #dddddd; + border-right-color: #c3d9ec; + color: #0f6ab4; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.heading ul.options li a { + color: #0f6ab4; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.content { + background-color: #ebf3f9; + border: 1px solid #c3d9ec; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.content h4 { + color: #0f6ab4; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.content div.sandbox_header a { + color: #6fa5d2; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.content, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.content, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content { + border-top: none; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li:last-child, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li:last-child, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading ul.options li:last-child, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li:last-child, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading ul.options li:last-child, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li:last-child, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li.last, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li.last, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading ul.options li.last, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li.last, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading ul.options li.last, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li.last { + padding-right: 0; + border-right: none; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations ul.options li a:hover, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations ul.options li a:active, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations ul.options li a.active { + text-decoration: underline; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations ul.options li:first-child, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations ul.options li.first { + padding-left: 0; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations:first-child, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations.first { + padding-left: 0; +} +.swagger-section .swagger-ui-wrap p#colophon { + margin: 0 15px 40px 15px; + padding: 10px 0; + font-size: 0.8em; + border-top: 1px solid #dddddd; + font-family: "Droid Sans", sans-serif; + color: #999999; + font-style: italic; +} +.swagger-section .swagger-ui-wrap p#colophon a { + text-decoration: none; + color: #547f00; +} +.swagger-section .swagger-ui-wrap h3 { + color: black; + font-size: 1.1em; + padding: 10px 0 10px 0; +} +.swagger-section .swagger-ui-wrap .markdown ol, +.swagger-section .swagger-ui-wrap .markdown ul { + font-family: "Droid Sans", sans-serif; + margin: 5px 0 10px; + padding: 0 0 0 18px; + list-style-type: disc; +} +.swagger-section .swagger-ui-wrap form.form_box { + background-color: #ebf3f9; + border: 1px solid #c3d9ec; + padding: 10px; +} +.swagger-section .swagger-ui-wrap form.form_box label { + color: #0f6ab4 !important; +} +.swagger-section .swagger-ui-wrap form.form_box input[type=submit] { + display: block; + padding: 10px; +} +.swagger-section .swagger-ui-wrap form.form_box p.weak { + font-size: 0.8em; +} +.swagger-section .swagger-ui-wrap form.form_box p { + font-size: 0.9em; + padding: 0 0 15px; + color: #7e7b6d; +} +.swagger-section .swagger-ui-wrap form.form_box p a { + color: #646257; +} +.swagger-section .swagger-ui-wrap form.form_box p strong { + color: black; +} +.swagger-section .swagger-ui-wrap .operation-status td.markdown > p:last-child { + padding-bottom: 0; +} +.swagger-section .title { + font-style: bold; +} +.swagger-section .secondary_form { + display: none; +} +.swagger-section .main_image { + display: block; + margin-left: auto; + margin-right: auto; +} +.swagger-section .oauth_body { + margin-left: 100px; + margin-right: 100px; +} +.swagger-section .oauth_submit { + text-align: center; +} +.swagger-section .api-popup-dialog { + z-index: 10000; + position: absolute; + width: 500px; + background: #FFF; + padding: 20px; + border: 1px solid #ccc; + border-radius: 5px; + display: none; + font-size: 13px; + color: #777; +} +.swagger-section .api-popup-dialog .api-popup-title { + font-size: 24px; + padding: 10px 0; +} +.swagger-section .api-popup-dialog .api-popup-title { + font-size: 24px; + padding: 10px 0; +} +.swagger-section .api-popup-dialog p.error-msg { + padding-left: 5px; + padding-bottom: 5px; +} +.swagger-section .api-popup-dialog button.api-popup-authbtn { + height: 30px; +} +.swagger-section .api-popup-dialog button.api-popup-cancel { + height: 30px; +} +.swagger-section .api-popup-scopes { + padding: 10px 20px; +} +.swagger-section .api-popup-scopes li { + padding: 5px 0; + line-height: 20px; +} +.swagger-section .api-popup-scopes .api-scope-desc { + padding-left: 20px; + font-style: italic; +} +.swagger-section .api-popup-scopes li input { + position: relative; + top: 2px; +} +.swagger-section .api-popup-actions { + padding-top: 10px; +} +#header { + display: none; +} +.swagger-section .swagger-ui-wrap .model-signature pre { + max-height: none; +} +.swagger-section .swagger-ui-wrap .body-textarea { + width: 100px; +} +.swagger-section .swagger-ui-wrap input.parameter { + width: 100px; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options { + display: none; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints { + display: block !important; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content { + display: block !important; +} diff --git a/reference/ucp/3.1/api/css/reset.css b/reference/ucp/3.1/api/css/reset.css new file mode 100644 index 00000000000..b2b078943c4 --- /dev/null +++ b/reference/ucp/3.1/api/css/reset.css @@ -0,0 +1,125 @@ +/* http://meyerweb.com/eric/tools/css/reset/ v2.0 | 20110126 */ +html, +body, +div, +span, +applet, +object, +iframe, +h1, +h2, +h3, +h4, +h5, +h6, +p, +blockquote, +pre, +a, +abbr, +acronym, +address, +big, +cite, +code, +del, +dfn, +em, +img, +ins, +kbd, +q, +s, +samp, +small, +strike, +strong, +sub, +sup, +tt, +var, +b, +u, +i, +center, +dl, +dt, +dd, +ol, +ul, +li, +fieldset, +form, +label, +legend, +table, +caption, +tbody, +tfoot, +thead, +tr, +th, +td, +article, +aside, +canvas, +details, +embed, +figure, +figcaption, +footer, +header, +hgroup, +menu, +nav, +output, +ruby, +section, +summary, +time, +mark, +audio, +video { + margin: 0; + padding: 0; + border: 0; + font-size: 100%; + font: inherit; + vertical-align: baseline; +} +/* HTML5 display-role reset for older browsers */ +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +menu, +nav, +section { + display: block; +} +body { + line-height: 1; +} +ol, +ul { + list-style: none; +} +blockquote, +q { + quotes: none; +} +blockquote:before, +blockquote:after, +q:before, +q:after { + content: ''; + content: none; +} +table { + border-collapse: collapse; + border-spacing: 0; +} diff --git a/reference/ucp/3.1/api/css/screen.css b/reference/ucp/3.1/api/css/screen.css new file mode 100644 index 00000000000..436cc28edd3 --- /dev/null +++ b/reference/ucp/3.1/api/css/screen.css @@ -0,0 +1,1279 @@ +/* Original style from softwaremaniacs.org (c) Ivan Sagalaev */ +.swagger-section pre code { + display: block; + padding: 0.5em; + background: #F0F0F0; +} +.swagger-section pre code, +.swagger-section pre .subst, +.swagger-section pre .tag .title, +.swagger-section pre .lisp .title, +.swagger-section pre .clojure .built_in, +.swagger-section pre .nginx .title { + color: black; +} +.swagger-section pre .string, +.swagger-section pre .title, +.swagger-section pre .constant, +.swagger-section pre .parent, +.swagger-section pre .tag .value, +.swagger-section pre .rules .value, +.swagger-section pre .rules .value .number, +.swagger-section pre .preprocessor, +.swagger-section pre .ruby .symbol, +.swagger-section pre .ruby .symbol .string, +.swagger-section pre .aggregate, +.swagger-section pre .template_tag, +.swagger-section pre .django .variable, +.swagger-section pre .smalltalk .class, +.swagger-section pre .addition, +.swagger-section pre .flow, +.swagger-section pre .stream, +.swagger-section pre .bash .variable, +.swagger-section pre .apache .tag, +.swagger-section pre .apache .cbracket, +.swagger-section pre .tex .command, +.swagger-section pre .tex .special, +.swagger-section pre .erlang_repl .function_or_atom, +.swagger-section pre .markdown .header { + color: #800; +} +.swagger-section pre .comment, +.swagger-section pre .annotation, +.swagger-section pre .template_comment, +.swagger-section pre .diff .header, +.swagger-section pre .chunk, +.swagger-section pre .markdown .blockquote { + color: #888; +} +.swagger-section pre .number, +.swagger-section pre .date, +.swagger-section pre .regexp, +.swagger-section pre .literal, +.swagger-section pre .smalltalk .symbol, +.swagger-section pre .smalltalk .char, +.swagger-section pre .go .constant, +.swagger-section pre .change, +.swagger-section pre .markdown .bullet, +.swagger-section pre .markdown .link_url { + color: #080; +} +.swagger-section pre .label, +.swagger-section pre .javadoc, +.swagger-section pre .ruby .string, +.swagger-section pre .decorator, +.swagger-section pre .filter .argument, +.swagger-section pre .localvars, +.swagger-section pre .array, +.swagger-section pre .attr_selector, +.swagger-section pre .important, +.swagger-section pre .pseudo, +.swagger-section pre .pi, +.swagger-section pre .doctype, +.swagger-section pre .deletion, +.swagger-section pre .envvar, +.swagger-section pre .shebang, +.swagger-section pre .apache .sqbracket, +.swagger-section pre .nginx .built_in, +.swagger-section pre .tex .formula, +.swagger-section pre .erlang_repl .reserved, +.swagger-section pre .prompt, +.swagger-section pre .markdown .link_label, +.swagger-section pre .vhdl .attribute, +.swagger-section pre .clojure .attribute, +.swagger-section pre .coffeescript .property { + color: #8888ff; +} +.swagger-section pre .keyword, +.swagger-section pre .id, +.swagger-section pre .phpdoc, +.swagger-section pre .title, +.swagger-section pre .built_in, +.swagger-section pre .aggregate, +.swagger-section pre .css .tag, +.swagger-section pre .javadoctag, +.swagger-section pre .phpdoc, +.swagger-section pre .yardoctag, +.swagger-section pre .smalltalk .class, +.swagger-section pre .winutils, +.swagger-section pre .bash .variable, +.swagger-section pre .apache .tag, +.swagger-section pre .go .typename, +.swagger-section pre .tex .command, +.swagger-section pre .markdown .strong, +.swagger-section pre .request, +.swagger-section pre .status { + font-weight: bold; +} +.swagger-section pre .markdown .emphasis { + font-style: italic; +} +.swagger-section pre .nginx .built_in { + font-weight: normal; +} +.swagger-section pre .coffeescript .javascript, +.swagger-section pre .javascript .xml, +.swagger-section pre .tex .formula, +.swagger-section pre .xml .javascript, +.swagger-section pre .xml .vbscript, +.swagger-section pre .xml .css, +.swagger-section pre .xml .cdata { + opacity: 0.5; +} +.swagger-section .swagger-ui-wrap { + line-height: 1; + font-family: "Droid Sans", sans-serif; + max-width: 960px; + margin-left: auto; + margin-right: auto; +} +.swagger-section .swagger-ui-wrap b, +.swagger-section .swagger-ui-wrap strong { + font-family: "Droid Sans", sans-serif; + font-weight: bold; +} +.swagger-section .swagger-ui-wrap q, +.swagger-section .swagger-ui-wrap blockquote { + quotes: none; +} +.swagger-section .swagger-ui-wrap p { + line-height: 1.4em; + padding: 0 0 10px; + color: #333333; +} +.swagger-section .swagger-ui-wrap q:before, +.swagger-section .swagger-ui-wrap q:after, +.swagger-section .swagger-ui-wrap blockquote:before, +.swagger-section .swagger-ui-wrap blockquote:after { + content: none; +} +.swagger-section .swagger-ui-wrap .heading_with_menu h1, +.swagger-section .swagger-ui-wrap .heading_with_menu h2, +.swagger-section .swagger-ui-wrap .heading_with_menu h3, +.swagger-section .swagger-ui-wrap .heading_with_menu h4, +.swagger-section .swagger-ui-wrap .heading_with_menu h5, +.swagger-section .swagger-ui-wrap .heading_with_menu h6 { + display: block; + clear: none; + float: left; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + width: 60%; +} +.swagger-section .swagger-ui-wrap table { + border-collapse: collapse; + border-spacing: 0; +} +.swagger-section .swagger-ui-wrap table thead tr th { + padding: 5px; + font-size: 0.9em; + color: #666666; + border-bottom: 1px solid #999999; +} +.swagger-section .swagger-ui-wrap table tbody tr:last-child td { + border-bottom: none; +} +.swagger-section .swagger-ui-wrap table tbody tr.offset { + background-color: #f0f0f0; +} +.swagger-section .swagger-ui-wrap table tbody tr td { + padding: 6px; + font-size: 0.9em; + border-bottom: 1px solid #cccccc; + vertical-align: top; + line-height: 1.3em; +} +.swagger-section .swagger-ui-wrap ol { + margin: 0px 0 10px; + padding: 0 0 0 18px; + list-style-type: decimal; +} +.swagger-section .swagger-ui-wrap ol li { + padding: 5px 0px; + font-size: 0.9em; + color: #333333; +} +.swagger-section .swagger-ui-wrap ol, +.swagger-section .swagger-ui-wrap ul { + list-style: none; +} +.swagger-section .swagger-ui-wrap h1 a, +.swagger-section .swagger-ui-wrap h2 a, +.swagger-section .swagger-ui-wrap h3 a, +.swagger-section .swagger-ui-wrap h4 a, +.swagger-section .swagger-ui-wrap h5 a, +.swagger-section .swagger-ui-wrap h6 a { + text-decoration: none; +} +.swagger-section .swagger-ui-wrap h1 a:hover, +.swagger-section .swagger-ui-wrap h2 a:hover, +.swagger-section .swagger-ui-wrap h3 a:hover, +.swagger-section .swagger-ui-wrap h4 a:hover, +.swagger-section .swagger-ui-wrap h5 a:hover, +.swagger-section .swagger-ui-wrap h6 a:hover { + text-decoration: underline; +} +.swagger-section .swagger-ui-wrap h1 span.divider, +.swagger-section .swagger-ui-wrap h2 span.divider, +.swagger-section .swagger-ui-wrap h3 span.divider, +.swagger-section .swagger-ui-wrap h4 span.divider, +.swagger-section .swagger-ui-wrap h5 span.divider, +.swagger-section .swagger-ui-wrap h6 span.divider { + color: #aaaaaa; +} +.swagger-section .swagger-ui-wrap a { + color: #547f00; +} +.swagger-section .swagger-ui-wrap a img { + border: none; +} +.swagger-section .swagger-ui-wrap article, +.swagger-section .swagger-ui-wrap aside, +.swagger-section .swagger-ui-wrap details, +.swagger-section .swagger-ui-wrap figcaption, +.swagger-section .swagger-ui-wrap figure, +.swagger-section .swagger-ui-wrap footer, +.swagger-section .swagger-ui-wrap header, +.swagger-section .swagger-ui-wrap hgroup, +.swagger-section .swagger-ui-wrap menu, +.swagger-section .swagger-ui-wrap nav, +.swagger-section .swagger-ui-wrap section, +.swagger-section .swagger-ui-wrap summary { + display: block; +} +.swagger-section .swagger-ui-wrap pre { + font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; + background-color: #fcf6db; + border: 1px solid #e5e0c6; + padding: 10px; +} +.swagger-section .swagger-ui-wrap pre code { + line-height: 1.6em; + background: none; +} +.swagger-section .swagger-ui-wrap .content > .content-type > div > label { + clear: both; + display: block; + color: #0F6AB4; + font-size: 1.1em; + margin: 0; + padding: 15px 0 5px; +} +.swagger-section .swagger-ui-wrap .content pre { + font-size: 12px; + margin-top: 5px; + padding: 5px; +} +.swagger-section .swagger-ui-wrap .icon-btn { + cursor: pointer; +} +.swagger-section .swagger-ui-wrap .info_title { + padding-bottom: 10px; + font-weight: bold; + font-size: 25px; +} +.swagger-section .swagger-ui-wrap .footer { + margin-top: 20px; +} +.swagger-section .swagger-ui-wrap p.big, +.swagger-section .swagger-ui-wrap div.big p { + font-size: 1em; + margin-bottom: 10px; +} +.swagger-section .swagger-ui-wrap form.fullwidth ol li.string input, +.swagger-section .swagger-ui-wrap form.fullwidth ol li.url input, +.swagger-section .swagger-ui-wrap form.fullwidth ol li.text textarea, +.swagger-section .swagger-ui-wrap form.fullwidth ol li.numeric input { + width: 500px !important; +} +.swagger-section .swagger-ui-wrap .info_license { + padding-bottom: 5px; +} +.swagger-section .swagger-ui-wrap .info_tos { + padding-bottom: 5px; +} +.swagger-section .swagger-ui-wrap .message-fail { + color: #cc0000; +} +.swagger-section .swagger-ui-wrap .info_url { + padding-bottom: 5px; +} +.swagger-section .swagger-ui-wrap .info_email { + padding-bottom: 5px; +} +.swagger-section .swagger-ui-wrap .info_name { + padding-bottom: 5px; +} +.swagger-section .swagger-ui-wrap .info_description { + padding-bottom: 10px; + font-size: 15px; +} +.swagger-section .swagger-ui-wrap .markdown ol li, +.swagger-section .swagger-ui-wrap .markdown ul li { + padding: 3px 0px; + line-height: 1.4em; + color: #333333; +} +.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.string input, +.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.url input, +.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.numeric input { + display: block; + padding: 4px; + width: auto; + clear: both; +} +.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.string input.title, +.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.url input.title, +.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.numeric input.title { + font-size: 1.3em; +} +.swagger-section .swagger-ui-wrap table.fullwidth { + width: 100%; +} +.swagger-section .swagger-ui-wrap .model-signature { + font-family: "Droid Sans", sans-serif; + font-size: 1em; + line-height: 1.5em; +} +.swagger-section .swagger-ui-wrap .model-signature .signature-nav a { + text-decoration: none; + color: #AAA; +} +.swagger-section .swagger-ui-wrap .model-signature .signature-nav a:hover { + text-decoration: underline; + color: black; +} +.swagger-section .swagger-ui-wrap .model-signature .signature-nav .selected { + color: black; + text-decoration: none; +} +.swagger-section .swagger-ui-wrap .model-signature .propType { + color: #5555aa; +} +.swagger-section .swagger-ui-wrap .model-signature pre:hover { + background-color: #ffffdd; +} +.swagger-section .swagger-ui-wrap .model-signature pre { + font-size: .85em; + line-height: 1.2em; + overflow: auto; + max-height: 200px; + cursor: pointer; +} +.swagger-section .swagger-ui-wrap .model-signature ul.signature-nav { + display: block; + margin: 0; + padding: 0; +} +.swagger-section .swagger-ui-wrap .model-signature ul.signature-nav li:last-child { + padding-right: 0; + border-right: none; +} +.swagger-section .swagger-ui-wrap .model-signature ul.signature-nav li { + float: left; + margin: 0 5px 5px 0; + padding: 2px 5px 2px 0; + border-right: 1px solid #ddd; +} +.swagger-section .swagger-ui-wrap .model-signature .propOpt { + color: #555; +} +.swagger-section .swagger-ui-wrap .model-signature .snippet small { + font-size: 0.75em; +} +.swagger-section .swagger-ui-wrap .model-signature .propOptKey { + font-style: italic; +} +.swagger-section .swagger-ui-wrap .model-signature .description .strong { + font-weight: bold; + color: #000; + font-size: .9em; +} +.swagger-section .swagger-ui-wrap .model-signature .description div { + font-size: 0.9em; + line-height: 1.5em; + margin-left: 1em; +} +.swagger-section .swagger-ui-wrap .model-signature .description .stronger { + font-weight: bold; + color: #000; +} +.swagger-section .swagger-ui-wrap .model-signature .description .propWrap .optionsWrapper { + border-spacing: 0; + position: absolute; + background-color: #ffffff; + border: 1px solid #bbbbbb; + display: none; + font-size: 11px; + max-width: 400px; + line-height: 30px; + color: black; + padding: 5px; + margin-left: 10px; +} +.swagger-section .swagger-ui-wrap .model-signature .description .propWrap .optionsWrapper th { + text-align: center; + background-color: #eeeeee; + border: 1px solid #bbbbbb; + font-size: 11px; + color: #666666; + font-weight: bold; + padding: 5px; + line-height: 15px; +} +.swagger-section .swagger-ui-wrap .model-signature .description .propWrap .optionsWrapper .optionName { + font-weight: bold; +} +.swagger-section .swagger-ui-wrap .model-signature .description .propDesc.markdown > p:first-child, +.swagger-section .swagger-ui-wrap .model-signature .description .propDesc.markdown > p:last-child { + display: inline; +} +.swagger-section .swagger-ui-wrap .model-signature .description .propDesc.markdown > p:not(:first-child):before { + display: block; + content: ''; +} +.swagger-section .swagger-ui-wrap .model-signature .description span:last-of-type.propDesc.markdown > p:only-child { + margin-right: -3px; +} +.swagger-section .swagger-ui-wrap .model-signature .propName { + font-weight: bold; +} +.swagger-section .swagger-ui-wrap .model-signature .signature-container { + clear: both; +} +.swagger-section .swagger-ui-wrap .body-textarea { + width: 300px; + height: 100px; + border: 1px solid #aaa; +} +.swagger-section .swagger-ui-wrap .markdown p code, +.swagger-section .swagger-ui-wrap .markdown li code { + font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; + background-color: #f0f0f0; + color: black; + padding: 1px 3px; +} +.swagger-section .swagger-ui-wrap .required { + font-weight: bold; +} +.swagger-section .swagger-ui-wrap input.parameter { + width: 300px; + border: 1px solid #aaa; +} +.swagger-section .swagger-ui-wrap h1 { + color: black; + font-size: 1.5em; + line-height: 1.3em; + padding: 10px 0 10px 0; + font-family: "Droid Sans", sans-serif; + font-weight: bold; +} +.swagger-section .swagger-ui-wrap .heading_with_menu { + float: none; + clear: both; + overflow: hidden; + display: block; +} +.swagger-section .swagger-ui-wrap .heading_with_menu ul { + display: block; + clear: none; + float: right; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + margin-top: 10px; +} +.swagger-section .swagger-ui-wrap h2 { + color: black; + font-size: 1.3em; + padding: 10px 0 10px 0; +} +.swagger-section .swagger-ui-wrap h2 a { + color: black; +} +.swagger-section .swagger-ui-wrap h2 span.sub { + font-size: 0.7em; + color: #999999; + font-style: italic; +} +.swagger-section .swagger-ui-wrap h2 span.sub a { + color: #777777; +} +.swagger-section .swagger-ui-wrap span.weak { + color: #666666; +} +.swagger-section .swagger-ui-wrap .message-success { + color: #89BF04; +} +.swagger-section .swagger-ui-wrap caption, +.swagger-section .swagger-ui-wrap th, +.swagger-section .swagger-ui-wrap td { + text-align: left; + font-weight: normal; + vertical-align: middle; +} +.swagger-section .swagger-ui-wrap .code { + font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; +} +.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.text textarea { + font-family: "Droid Sans", sans-serif; + height: 250px; + padding: 4px; + display: block; + clear: both; +} +.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.select select { + display: block; + clear: both; +} +.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.boolean { + float: none; + clear: both; + overflow: hidden; + display: block; +} +.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.boolean label { + display: block; + float: left; + clear: none; + margin: 0; + padding: 0; +} +.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.boolean input { + display: block; + float: left; + clear: none; + margin: 0 5px 0 0; +} +.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li.required label { + color: black; +} +.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li label { + display: block; + clear: both; + width: auto; + padding: 0 0 3px; + color: #666666; +} +.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li label abbr { + padding-left: 3px; + color: #888888; +} +.swagger-section .swagger-ui-wrap form.formtastic fieldset.inputs ol li p.inline-hints { + margin-left: 0; + font-style: italic; + font-size: 0.9em; + margin: 0; +} +.swagger-section .swagger-ui-wrap form.formtastic fieldset.buttons { + margin: 0; + padding: 0; +} +.swagger-section .swagger-ui-wrap span.blank, +.swagger-section .swagger-ui-wrap span.empty { + color: #888888; + font-style: italic; +} +.swagger-section .swagger-ui-wrap .markdown h3 { + color: #547f00; +} +.swagger-section .swagger-ui-wrap .markdown h4 { + color: #666666; +} +.swagger-section .swagger-ui-wrap .markdown pre { + font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; + background-color: #fcf6db; + border: 1px solid #e5e0c6; + padding: 10px; + margin: 0 0 10px 0; +} +.swagger-section .swagger-ui-wrap .markdown pre code { + line-height: 1.6em; +} +.swagger-section .swagger-ui-wrap div.gist { + margin: 20px 0 25px 0 !important; +} +.swagger-section .swagger-ui-wrap ul#resources { + font-family: "Droid Sans", sans-serif; + font-size: 0.9em; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource { + border-bottom: 1px solid #dddddd; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource:hover div.heading h2 a, +.swagger-section .swagger-ui-wrap ul#resources li.resource.active div.heading h2 a { + color: black; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource:hover div.heading ul.options li a, +.swagger-section .swagger-ui-wrap ul#resources li.resource.active div.heading ul.options li a { + color: #555555; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource:last-child { + border-bottom: none; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading { + border: 1px solid transparent; + float: none; + clear: both; + overflow: hidden; + display: block; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options { + overflow: hidden; + padding: 0; + display: block; + clear: none; + float: right; + margin: 14px 10px 0 0; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li { + float: left; + clear: none; + margin: 0; + padding: 2px 10px; + border-right: 1px solid #dddddd; + color: #666666; + font-size: 0.9em; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li a { + color: #aaaaaa; + text-decoration: none; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li a:hover { + text-decoration: underline; + color: black; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li a:hover, +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li a:active, +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li a.active { + text-decoration: underline; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li:first-child, +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li.first { + padding-left: 0; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li:last-child, +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options li.last { + padding-right: 0; + border-right: none; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options:first-child, +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading ul.options.first { + padding-left: 0; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading h2 { + color: #999999; + padding-left: 0; + display: block; + clear: none; + float: left; + font-family: "Droid Sans", sans-serif; + font-weight: bold; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading h2 a { + color: #999999; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading h2 a:hover { + color: black; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation { + float: none; + clear: both; + overflow: hidden; + display: block; + margin: 0 0 10px; + padding: 0; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading { + float: none; + clear: both; + overflow: hidden; + display: block; + margin: 0; + padding: 0; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 { + display: block; + clear: none; + float: left; + width: auto; + margin: 0; + padding: 0; + line-height: 1.1em; + color: black; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span.path { + padding-left: 10px; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span.path a { + color: black; + text-decoration: none; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span.path a:hover { + text-decoration: underline; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span.http_method a { + text-transform: uppercase; + text-decoration: none; + color: white; + display: inline-block; + width: 50px; + font-size: 0.7em; + text-align: center; + padding: 7px 0 4px; + -moz-border-radius: 2px; + -webkit-border-radius: 2px; + -o-border-radius: 2px; + -ms-border-radius: 2px; + -khtml-border-radius: 2px; + border-radius: 2px; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading h3 span { + margin: 0; + padding: 0; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading ul.options { + overflow: hidden; + padding: 0; + display: block; + clear: none; + float: right; + margin: 6px 10px 0 0; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading ul.options li { + float: left; + clear: none; + margin: 0; + padding: 2px 10px; + font-size: 0.9em; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading ul.options li a { + text-decoration: none; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.heading ul.options li.access { + color: black; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content { + border-top: none; + padding: 10px; + -moz-border-radius-bottomleft: 6px; + -webkit-border-bottom-left-radius: 6px; + -o-border-bottom-left-radius: 6px; + -ms-border-bottom-left-radius: 6px; + -khtml-border-bottom-left-radius: 6px; + border-bottom-left-radius: 6px; + -moz-border-radius-bottomright: 6px; + -webkit-border-bottom-right-radius: 6px; + -o-border-bottom-right-radius: 6px; + -ms-border-bottom-right-radius: 6px; + -khtml-border-bottom-right-radius: 6px; + border-bottom-right-radius: 6px; + margin: 0 0 20px; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content h4 { + font-size: 1.1em; + margin: 0; + padding: 15px 0 5px; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content div.sandbox_header { + float: none; + clear: both; + overflow: hidden; + display: block; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content div.sandbox_header a { + padding: 4px 0 0 10px; + display: inline-block; + font-size: 0.9em; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content div.sandbox_header input.submit { + display: block; + clear: none; + float: left; + padding: 6px 8px; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content div.sandbox_header span.response_throbber { + background-image: url('../images/throbber.gif'); + width: 128px; + height: 16px; + display: block; + clear: none; + float: right; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content form input[type='text'].error { + outline: 2px solid black; + outline-color: #cc0000; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content div.response div.block pre { + font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; + padding: 10px; + font-size: 0.9em; + max-height: 400px; + overflow-y: auto; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading { + background-color: #f9f2e9; + border: 1px solid #f0e0ca; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading h3 span.http_method a { + background-color: #c5862b; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li { + border-right: 1px solid #dddddd; + border-right-color: #f0e0ca; + color: #c5862b; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li a { + color: #c5862b; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content { + background-color: #faf5ee; + border: 1px solid #f0e0ca; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content h4 { + color: #c5862b; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content div.sandbox_header a { + color: #dcb67f; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading { + background-color: #fcffcd; + border: 1px solid black; + border-color: #ffd20f; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading h3 span.http_method a { + text-transform: uppercase; + background-color: #ffd20f; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading ul.options li { + border-right: 1px solid #dddddd; + border-right-color: #ffd20f; + color: #ffd20f; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading ul.options li a { + color: #ffd20f; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.content { + background-color: #fcffcd; + border: 1px solid black; + border-color: #ffd20f; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.content h4 { + color: #ffd20f; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.content div.sandbox_header a { + color: #6fc992; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading { + background-color: #f5e8e8; + border: 1px solid #e8c6c7; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading h3 span.http_method a { + text-transform: uppercase; + background-color: #a41e22; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li { + border-right: 1px solid #dddddd; + border-right-color: #e8c6c7; + color: #a41e22; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li a { + color: #a41e22; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content { + background-color: #f7eded; + border: 1px solid #e8c6c7; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content h4 { + color: #a41e22; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content div.sandbox_header a { + color: #c8787a; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading { + background-color: #e7f6ec; + border: 1px solid #c3e8d1; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading h3 span.http_method a { + background-color: #10a54a; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li { + border-right: 1px solid #dddddd; + border-right-color: #c3e8d1; + color: #10a54a; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li a { + color: #10a54a; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content { + background-color: #ebf7f0; + border: 1px solid #c3e8d1; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content h4 { + color: #10a54a; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content div.sandbox_header a { + color: #6fc992; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading { + background-color: #FCE9E3; + border: 1px solid #F5D5C3; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading h3 span.http_method a { + background-color: #D38042; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading ul.options li { + border-right: 1px solid #dddddd; + border-right-color: #f0cecb; + color: #D38042; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading ul.options li a { + color: #D38042; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.content { + background-color: #faf0ef; + border: 1px solid #f0cecb; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.content h4 { + color: #D38042; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.content div.sandbox_header a { + color: #dcb67f; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading { + background-color: #e7f0f7; + border: 1px solid #c3d9ec; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading h3 span.http_method a { + background-color: #0f6ab4; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li { + border-right: 1px solid #dddddd; + border-right-color: #c3d9ec; + color: #0f6ab4; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li a { + color: #0f6ab4; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content { + background-color: #ebf3f9; + border: 1px solid #c3d9ec; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content h4 { + color: #0f6ab4; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content div.sandbox_header a { + color: #6fa5d2; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.heading { + background-color: #e7f0f7; + border: 1px solid #c3d9ec; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.heading h3 span.http_method a { + background-color: #0f6ab4; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.heading ul.options li { + border-right: 1px solid #dddddd; + border-right-color: #c3d9ec; + color: #0f6ab4; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.heading ul.options li a { + color: #0f6ab4; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.content { + background-color: #ebf3f9; + border: 1px solid #c3d9ec; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.content h4 { + color: #0f6ab4; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.options div.content div.sandbox_header a { + color: #6fa5d2; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.content, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.content, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content { + border-top: none; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li:last-child, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li:last-child, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading ul.options li:last-child, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li:last-child, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading ul.options li:last-child, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li:last-child, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li.last, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li.last, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.head div.heading ul.options li.last, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li.last, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.patch div.heading ul.options li.last, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li.last { + padding-right: 0; + border-right: none; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations ul.options li a:hover, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations ul.options li a:active, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations ul.options li a.active { + text-decoration: underline; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations ul.options li:first-child, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations ul.options li.first { + padding-left: 0; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations:first-child, +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations.first { + padding-left: 0; +} +.swagger-section .swagger-ui-wrap p#colophon { + margin: 0 15px 40px 15px; + padding: 10px 0; + font-size: 0.8em; + border-top: 1px solid #dddddd; + font-family: "Droid Sans", sans-serif; + color: #999999; + font-style: italic; +} +.swagger-section .swagger-ui-wrap p#colophon a { + text-decoration: none; + color: #547f00; +} +.swagger-section .swagger-ui-wrap h3 { + color: black; + font-size: 1.1em; + padding: 10px 0 10px 0; +} +.swagger-section .swagger-ui-wrap .markdown ol, +.swagger-section .swagger-ui-wrap .markdown ul { + font-family: "Droid Sans", sans-serif; + margin: 5px 0 10px; + padding: 0 0 0 18px; + list-style-type: disc; +} +.swagger-section .swagger-ui-wrap form.form_box { + background-color: #ebf3f9; + border: 1px solid #c3d9ec; + padding: 10px; +} +.swagger-section .swagger-ui-wrap form.form_box label { + color: #0f6ab4 !important; +} +.swagger-section .swagger-ui-wrap form.form_box input[type=submit] { + display: block; + padding: 10px; +} +.swagger-section .swagger-ui-wrap form.form_box p.weak { + font-size: 0.8em; +} +.swagger-section .swagger-ui-wrap form.form_box p { + font-size: 0.9em; + padding: 0 0 15px; + color: #7e7b6d; +} +.swagger-section .swagger-ui-wrap form.form_box p a { + color: #646257; +} +.swagger-section .swagger-ui-wrap form.form_box p strong { + color: black; +} +.swagger-section .swagger-ui-wrap .operation-status td.markdown > p:last-child { + padding-bottom: 0; +} +.swagger-section .title { + font-style: bold; +} +.swagger-section .secondary_form { + display: none; +} +.swagger-section .main_image { + display: block; + margin-left: auto; + margin-right: auto; +} +.swagger-section .oauth_body { + margin-left: 100px; + margin-right: 100px; +} +.swagger-section .oauth_submit { + text-align: center; +} +.swagger-section .api-popup-dialog { + z-index: 10000; + position: absolute; + width: 500px; + background: #FFF; + padding: 20px; + border: 1px solid #ccc; + border-radius: 5px; + display: none; + font-size: 13px; + color: #777; +} +.swagger-section .api-popup-dialog .api-popup-title { + font-size: 24px; + padding: 10px 0; +} +.swagger-section .api-popup-dialog .api-popup-title { + font-size: 24px; + padding: 10px 0; +} +.swagger-section .api-popup-dialog p.error-msg { + padding-left: 5px; + padding-bottom: 5px; +} +.swagger-section .api-popup-dialog button.api-popup-authbtn { + height: 30px; +} +.swagger-section .api-popup-dialog button.api-popup-cancel { + height: 30px; +} +.swagger-section .api-popup-scopes { + padding: 10px 20px; +} +.swagger-section .api-popup-scopes li { + padding: 5px 0; + line-height: 20px; +} +.swagger-section .api-popup-scopes .api-scope-desc { + padding-left: 20px; + font-style: italic; +} +.swagger-section .api-popup-scopes li input { + position: relative; + top: 2px; +} +.swagger-section .api-popup-actions { + padding-top: 10px; +} +.swagger-section .access { + float: right; +} +.swagger-section .auth { + float: right; +} +.swagger-section .api-ic { + height: 18px; + vertical-align: middle; + display: inline-block; + background: url(../images/explorer_icons.png) no-repeat; +} +.swagger-section .api-ic .api_information_panel { + position: relative; + margin-top: 20px; + margin-left: -5px; + background: #FFF; + border: 1px solid #ccc; + border-radius: 5px; + display: none; + font-size: 13px; + max-width: 300px; + line-height: 30px; + color: black; + padding: 5px; +} +.swagger-section .api-ic .api_information_panel p .api-msg-enabled { + color: green; +} +.swagger-section .api-ic .api_information_panel p .api-msg-disabled { + color: red; +} +.swagger-section .api-ic:hover .api_information_panel { + position: absolute; + display: block; +} +.swagger-section .ic-info { + background-position: 0 0; + width: 18px; + margin-top: -6px; + margin-left: 4px; +} +.swagger-section .ic-warning { + background-position: -60px 0; + width: 18px; + margin-top: -6px; + margin-left: 4px; +} +.swagger-section .ic-error { + background-position: -30px 0; + width: 18px; + margin-top: -6px; + margin-left: 4px; +} +.swagger-section .ic-off { + background-position: -90px 0; + width: 58px; + margin-top: -4px; + cursor: pointer; +} +.swagger-section .ic-on { + background-position: -160px 0; + width: 58px; + margin-top: -4px; + cursor: pointer; +} +.swagger-section #header { + background-color: #89bf04; + padding: 14px; +} +.swagger-section #header a#logo { + font-size: 1.5em; + font-weight: bold; + text-decoration: none; + background: transparent url(../images/logo_small.png) no-repeat left center; + padding: 20px 0 20px 40px; + color: white; +} +.swagger-section #header form#api_selector { + display: block; + clear: none; + float: right; +} +.swagger-section #header form#api_selector .input { + display: block; + clear: none; + float: left; + margin: 0 10px 0 0; +} +.swagger-section #header form#api_selector .input input#input_apiKey { + width: 200px; +} +.swagger-section #header form#api_selector .input input#input_baseUrl { + width: 400px; +} +.swagger-section #header form#api_selector .input a#explore { + display: block; + text-decoration: none; + font-weight: bold; + padding: 6px 8px; + font-size: 0.9em; + color: white; + background-color: #547f00; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + -o-border-radius: 4px; + -ms-border-radius: 4px; + -khtml-border-radius: 4px; + border-radius: 4px; +} +.swagger-section #header form#api_selector .input a#explore:hover { + background-color: #547f00; +} +.swagger-section #header form#api_selector .input input { + font-size: 0.9em; + padding: 3px; + margin: 0; +} +.swagger-section #content_message { + margin: 10px 15px; + font-style: italic; + color: #999999; +} +.swagger-section #message-bar { + min-height: 30px; + text-align: center; + padding-top: 10px; +} diff --git a/reference/ucp/3.1/api/css/style.css b/reference/ucp/3.1/api/css/style.css new file mode 100644 index 00000000000..fc21a31db54 --- /dev/null +++ b/reference/ucp/3.1/api/css/style.css @@ -0,0 +1,250 @@ +.swagger-section #header a#logo { + font-size: 1.5em; + font-weight: bold; + text-decoration: none; + background: transparent url(../images/logo.png) no-repeat left center; + padding: 20px 0 20px 40px; +} +#text-head { + font-size: 80px; + font-family: 'Roboto', sans-serif; + color: #ffffff; + float: right; + margin-right: 20%; +} +.navbar-fixed-top .navbar-nav { + height: auto; +} +.navbar-fixed-top .navbar-brand { + height: auto; +} +.navbar-header { + height: auto; +} +.navbar-inverse { + background-color: #000; + border-color: #000; +} +#navbar-brand { + margin-left: 20%; +} +.navtext { + font-size: 10px; +} +.h1, +h1 { + font-size: 60px; +} +.navbar-default .navbar-header .navbar-brand { + color: #a2dfee; +} +/* tag titles */ +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading h2 a { + color: #393939; + font-family: 'Arvo', serif; + font-size: 1.5em; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading h2 a:hover { + color: black; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource div.heading h2 { + color: #525252; + padding-left: 0px; + display: block; + clear: none; + float: left; + font-family: 'Arvo', serif; + font-weight: bold; +} +.navbar-default .navbar-collapse, +.navbar-default .navbar-form { + border-color: #0A0A0A; +} +.container1 { + width: 1500px; + margin: auto; + margin-top: 0; + background-image: url('../images/shield.png'); + background-repeat: no-repeat; + background-position: -40px -20px; + margin-bottom: 210px; +} +.container-inner { + width: 1200px; + margin: auto; + background-color: rgba(223, 227, 228, 0.75); + padding-bottom: 40px; + padding-top: 40px; + border-radius: 15px; +} +.header-content { + padding: 0; + width: 1000px; +} +.title1 { + font-size: 80px; + font-family: 'Vollkorn', serif; + color: #404040; + text-align: center; + padding-top: 40px; + padding-bottom: 100px; +} +#icon { + margin-top: -18px; +} +.subtext { + font-size: 25px; + font-style: italic; + color: #08b; + text-align: right; + padding-right: 250px; +} +.bg-primary { + background-color: #00468b; +} +.navbar-default .nav > li > a, +.navbar-default .nav > li > a:focus { + color: #08b; +} +.navbar-default .nav > li > a, +.navbar-default .nav > li > a:hover { + color: #08b; +} +.navbar-default .nav > li > a, +.navbar-default .nav > li > a:focus:hover { + color: #08b; +} +.text-faded { + font-size: 25px; + font-family: 'Vollkorn', serif; +} +.section-heading { + font-family: 'Vollkorn', serif; + font-size: 45px; + padding-bottom: 10px; +} +hr { + border-color: #00468b; + padding-bottom: 10px; +} +.description { + margin-top: 20px; + padding-bottom: 200px; +} +.description li { + font-family: 'Vollkorn', serif; + font-size: 25px; + color: #525252; + margin-left: 28%; + padding-top: 5px; +} +.gap { + margin-top: 200px; +} +.troubleshootingtext { + color: rgba(255, 255, 255, 0.7); + padding-left: 30%; +} +.troubleshootingtext li { + list-style-type: circle; + font-size: 25px; + padding-bottom: 5px; +} +.overlay { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 1000; +} +.block.response_body.json:hover { + cursor: pointer; +} +.backdrop { + color: blue; +} +#myModal { + height: 100%; +} +.modal-backdrop { + bottom: 0; + position: fixed; +} +.curl { + padding: 10px; + font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; + font-size: 0.9em; + max-height: 400px; + margin-top: 5px; + overflow-y: auto; + background-color: #fcf6db; + border: 1px solid #e5e0c6; + border-radius: 4px; +} +.curl_title { + font-size: 1.1em; + margin: 0; + padding: 15px 0 5px; + font-family: 'Open Sans', 'Helvetica Neue', Arial, sans-serif; + font-weight: 500; + line-height: 1.1; +} +.footer { + display: none; +} +.swagger-section .swagger-ui-wrap h2 { + padding: 0; +} +h2 { + margin: 0; + margin-bottom: 5px; +} +.markdown p { + font-size: 15px; + font-family: 'Arvo', serif; +} +.swagger-section .swagger-ui-wrap .code { + font-size: 15px; + font-family: 'Arvo', serif; +} +.swagger-section .swagger-ui-wrap b { + font-family: 'Arvo', serif; +} +#signin:hover { + cursor: pointer; +} +.dropdown-menu { + padding: 15px; +} +.navbar-right .dropdown-menu { + left: 0; + right: auto; +} +#signinbutton { + width: 100%; + height: 32px; + font-size: 13px; + font-weight: bold; + color: #08b; +} +.navbar-default .nav > li .details { + color: #000000; + text-transform: none; + font-size: 15px; + font-weight: normal; + font-family: 'Open Sans', sans-serif; + font-style: italic; + line-height: 20px; + top: -2px; +} +.navbar-default .nav > li .details:hover { + color: black; +} +#signout { + width: 100%; + height: 32px; + font-size: 13px; + font-weight: bold; + color: #08b; +} diff --git a/reference/ucp/3.1/api/css/typography.css b/reference/ucp/3.1/api/css/typography.css new file mode 100644 index 00000000000..27c3751ac2e --- /dev/null +++ b/reference/ucp/3.1/api/css/typography.css @@ -0,0 +1,26 @@ +/* droid-sans-regular - latin */ +@font-face { + font-family: 'Droid Sans'; + font-style: normal; + font-weight: 400; + src: url('../fonts/droid-sans-v6-latin-regular.eot'); /* IE9 Compat Modes */ + src: local('Droid Sans'), local('DroidSans'), + url('../fonts/droid-sans-v6-latin-regular.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ + url('../fonts/droid-sans-v6-latin-regular.woff2') format('woff2'), /* Super Modern Browsers */ + url('../fonts/droid-sans-v6-latin-regular.woff') format('woff'), /* Modern Browsers */ + url('../fonts/droid-sans-v6-latin-regular.ttf') format('truetype'), /* Safari, Android, iOS */ + url('../fonts/droid-sans-v6-latin-regular.svg#DroidSans') format('svg'); /* Legacy iOS */ +} +/* droid-sans-700 - latin */ +@font-face { + font-family: 'Droid Sans'; + font-style: normal; + font-weight: 700; + src: url('../fonts/droid-sans-v6-latin-700.eot'); /* IE9 Compat Modes */ + src: local('Droid Sans Bold'), local('DroidSans-Bold'), + url('../fonts/droid-sans-v6-latin-700.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ + url('../fonts/droid-sans-v6-latin-700.woff2') format('woff2'), /* Super Modern Browsers */ + url('../fonts/droid-sans-v6-latin-700.woff') format('woff'), /* Modern Browsers */ + url('../fonts/droid-sans-v6-latin-700.ttf') format('truetype'), /* Safari, Android, iOS */ + url('../fonts/droid-sans-v6-latin-700.svg#DroidSans') format('svg'); /* Legacy iOS */ +} diff --git a/reference/ucp/3.1/api/custom/custom.css b/reference/ucp/3.1/api/custom/custom.css new file mode 100644 index 00000000000..c365077de36 --- /dev/null +++ b/reference/ucp/3.1/api/custom/custom.css @@ -0,0 +1,15 @@ +em { + font-weight: bold; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content h5 { + color: #10654A; +} +.swagger-section .swagger-ui-wrap ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation div.content h5 { + font-size: 1.0em; + margin: 0px; + padding: 15px 0px 5px; +} + +.swagger-section .swagger-ui-wrap table tr td:nth-child(2) textarea { + display: none !important; +} diff --git a/reference/ucp/3.1/api/docs.json b/reference/ucp/3.1/api/docs.json new file mode 100644 index 00000000000..1ebf08347b6 --- /dev/null +++ b/reference/ucp/3.1/api/docs.json @@ -0,0 +1,17275 @@ +{ + "swagger": "2.0", + "info": { + "description": "The Universal Control Plane API is a REST API, available using HTTPS, that enables programmatic access to swarm resources that are managed by UCP. UCP exposes the full Docker Engine API, so you can extend your existing code with UCP features. The API is secured with role-based access control so that only authorized users can make changes and deploy applications to your Docker swarm.\n\nThe UCP API is accessible in the same IP addresses and domain names that you use to access the web UI. It's the same API that the UCP web UI uses, so everything you can do on the UCP web UI from your browser, you can also do programmatically.\n\nThe system manages swarm resources by using collections, which you access through the `/collection` endpoint. For example, `GET /defaultCollection/\u003cuserID\u003e` retrieves the default collection for a user. [Learn more about resource collections](https://www.docker.com/ucp-3).\n\n- The `/roles` endpoint lets you enumerate and create custom permissions for accessing collections.\n\n- The `/accounts` endpoint enables managing users, teams, and organizations.\n\n- The `/configs` endpoint gives you access to the swarm's configuration.", + "title": "UCP API Documentation", + "version": "1.39" + }, + "paths": { + "/_ping": { + "get": { + "description": "Check the health of a UCP manager.\nUse the `_ping` endpoint to check the health of a single UCP manager node. The UCP manager validates that all of its internal components are working, and it returns either 200, if all components are healthy, or 500, if any aren't healthy.\n\nIf you’re accessing the `_ping` endpoint through a load balancer, you have no way of knowing which UCP manager node isn't healthy, because any manager node may be serving your request. Make sure you’re connecting directly to the URL of a manager node, and not a load balancer.", + "tags": [ + "UCP" + ], + "summary": "Check the health of a UCP manager.", + "operationId": "Ping", + "responses": { + "200": { + "description": "Success, manager healthy" + }, + "500": { + "description": "Failure, manager unhealthy" + }, + "default": { + "description": "Success, manager healthy" + } + } + } + }, + "/accounts/": { + "get": { + "description": "List user and organization accounts.\nLists information about user and organization accounts. Supports sorting and\nfiltering.\nRequires authentication and authorization as any user.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Accounts" + ], + "summary": "List user and organization accounts.", + "operationId": "ListAccounts", + "parameters": [ + { + "type": "string", + "default": "all", + "description": "Filter accounts by type or attribute - either \"users\", \"orgs\", \"admins\", \"non-admins\", \"active-users\", \"inactive-users\", or \"all\" (default). These filters cannot be combined in any way.", + "name": "filter", + "in": "query" + }, + { + "type": "string", + "default": "", + "description": "Specifies the ordering of the results - either \"name\" (default) or \"fullName\". Prefix with \"+\" (default) or \"-\" to specify acscending or descending order, respectively.", + "name": "order", + "in": "query" + }, + { + "type": "string", + "default": "", + "description": "Only return accounts with an order marker starting from this value.", + "name": "start", + "in": "query" + }, + { + "type": "int", + "default": "10", + "description": "Maximum number of accounts per page of results.", + "name": "limit", + "in": "query" + }, + { + "type": "string", + "default": "", + "description": "Additionally filter results to those which have either a name or full name which contains this case insensitive string", + "name": "contains", + "in": "query" + } + ], + "responses": { + "200": { + "description": "Success, page of accounts listed.", + "schema": { + "$ref": "#/definitions/responses.Accounts" + } + }, + "default": { + "description": "Success, page of accounts listed.", + "schema": { + "$ref": "#/definitions/responses.Accounts" + } + } + } + }, + "post": { + "description": "Create a user or organization account.\nTo search for and import a user from an LDAP directory, the system must be\nconfigured with LDAP integration.\nRequires authentication and authorization as an admin user.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Accounts" + ], + "summary": "Create a user or organization account.", + "operationId": "CreateAccount", + "parameters": [ + { + "type": "forms.CreateAccount", + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/forms.CreateAccount" + } + } + ], + "responses": { + "201": { + "description": "Success, account created.", + "schema": { + "$ref": "#/definitions/responses.Account" + } + } + } + }, + "patch": { + "description": "Update information about user accounts or organizations, in bulk.\nRequires authentication and authorization as an admin user.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Accounts" + ], + "summary": "Update information about user accounts or organizations, in bulk.", + "operationId": "BulkAccountOps", + "parameters": [ + { + "type": "forms.BulkOperations", + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/forms.BulkOperations" + } + } + ], + "responses": { + "200": { + "description": "Success, bulk operations performed. Any errors encountered for an operation are returned.", + "schema": { + "$ref": "#/definitions/responses.BulkResults" + } + }, + "default": { + "description": "Success, bulk operations performed. Any errors encountered for an operation are returned.", + "schema": { + "$ref": "#/definitions/responses.BulkResults" + } + } + } + } + }, + "/accounts/{accountNameOrID}": { + "get": { + "description": "Details for a user or organization account.\nRequires authentication and authorization as any user.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Accounts" + ], + "summary": "Details for a user or organization account.", + "operationId": "GetAccount", + "parameters": [ + { + "type": "string", + "default": "", + "description": "Name or id of account to fetch", + "name": "accountNameOrID", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "Success, account returned.", + "schema": { + "$ref": "#/definitions/responses.Account" + } + }, + "default": { + "description": "Success, account returned.", + "schema": { + "$ref": "#/definitions/responses.Account" + } + } + } + }, + "delete": { + "description": "Delete a user or organization account.\nIf the system is configured to import users from an LDAP directory, the user\nmay be created again if they still match the current LDAP search config.\nRequires authentication and authorization as an admin user.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Accounts" + ], + "summary": "Delete a user or organization account.", + "operationId": "DeleteAccount", + "parameters": [ + { + "type": "string", + "default": "", + "description": "Name or id of account to delete", + "name": "accountNameOrID", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "description": "Success, account deleted." + } + } + }, + "patch": { + "description": "Update details for a user or organization account.\nRequires authentication and authorization as an admin user, the target user (if\na user), or an admin member of the target organization (if an organization).", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Accounts" + ], + "summary": "Update details for a user or organization account.", + "operationId": "UpdateAccount", + "parameters": [ + { + "type": "string", + "default": "", + "description": "Name or id of account to update", + "name": "accountNameOrID", + "in": "path", + "required": true + }, + { + "type": "forms.UpdateAccount", + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/forms.UpdateAccount" + } + } + ], + "responses": { + "200": { + "description": "Success, account updated.", + "schema": { + "$ref": "#/definitions/responses.Account" + } + }, + "default": { + "description": "Success, account updated.", + "schema": { + "$ref": "#/definitions/responses.Account" + } + } + } + } + }, + "/accounts/{accountNameOrID}/publicKeys": { + "get": { + "description": "List accountPublicKeys in an account.\nLists accountPublicKeys in ascending order by key ID.\nRequires authentication and authorization as any user.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Account Public Keys", + "Accounts" + ], + "summary": "List accountPublicKeys in an account.", + "operationId": "ListAccountPublicKeys", + "parameters": [ + { + "type": "string", + "default": "", + "description": "Name or id of the account whose accountPublicKeys will be listed", + "name": "accountNameOrID", + "in": "path", + "required": true + }, + { + "type": "string", + "default": "", + "description": "Only return accountPublicKeys with a key ID greater than or equal to this name.", + "name": "start", + "in": "query" + }, + { + "type": "int", + "default": "10", + "description": "Maximum number of accountPublicKeys per page of results.", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "description": "Success, page of accountPublicKeys listed.", + "schema": { + "$ref": "#/definitions/responses.AccountPublicKeys" + } + }, + "default": { + "description": "Success, page of accountPublicKeys listed.", + "schema": { + "$ref": "#/definitions/responses.AccountPublicKeys" + } + } + } + }, + "post": { + "description": "Create a public key for an account.\nRequires authentication and authorization as an admin user, the target user (if\na user), or an admin member of the target organization (if an organization).", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Account Public Keys", + "Accounts" + ], + "summary": "Create a public key for an account.", + "operationId": "CreateAccountPublicKey", + "parameters": [ + { + "type": "string", + "default": "", + "description": "Name or id of account to fetch", + "name": "accountNameOrID", + "in": "path", + "required": true + }, + { + "type": "forms.CreateAccountPublicKey", + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/forms.CreateAccountPublicKey" + } + } + ], + "responses": { + "201": { + "description": "Success, account public key created.", + "schema": { + "$ref": "#/definitions/responses.AccountPublicKey" + } + } + } + } + }, + "/accounts/{accountNameOrID}/publicKeys/{keyID}": { + "delete": { + "description": "Remove an account public key.\nRequires authentication and authorization as an admin user, the target user (if\na user), or an admin member of the target organization (if an organization).", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Account Public Keys", + "Accounts" + ], + "summary": "Remove an account public key.", + "operationId": "DeleteAccountPublicKey", + "parameters": [ + { + "type": "string", + "default": "", + "description": "Name or id of the account", + "name": "accountNameOrID", + "in": "path", + "required": true + }, + { + "type": "string", + "default": "", + "description": "Public key id of the account", + "name": "keyID", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "description": "Success, acount public key removed." + } + } + }, + "patch": { + "description": "Update details for an account public key.\nRequires authentication and authorization as an admin user, the target user (if\na user), or an admin member of the target organization (if an organization).", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Account Public Keys", + "Accounts" + ], + "summary": "Update details for an account public key.", + "operationId": "UpdateAccountPublicKey", + "parameters": [ + { + "type": "string", + "default": "", + "description": "Name or id of the account", + "name": "accountNameOrID", + "in": "path", + "required": true + }, + { + "type": "string", + "default": "", + "description": "Public key id of the account", + "name": "keyID", + "in": "path", + "required": true + }, + { + "type": "forms.UpdateAccountPublicKey", + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/forms.UpdateAccountPublicKey" + } + } + ], + "responses": { + "200": { + "description": "Success, account public key updated.", + "schema": { + "$ref": "#/definitions/responses.AccountPublicKey" + } + }, + "default": { + "description": "Success, account public key updated.", + "schema": { + "$ref": "#/definitions/responses.AccountPublicKey" + } + } + } + } + }, + "/accounts/{orgNameOrID}/adminMemberSyncConfig": { + "get": { + "description": "Get options for syncing admin members of an organization.\nRequires authentication and authorization as an admin user or an admin member\nof the organization.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Organization Membership", + "Organizations", + "Accounts" + ], + "summary": "Get options for syncing admin members of an organization.", + "operationId": "GetOrganizationAdminSyncConfig", + "parameters": [ + { + "type": "string", + "default": "", + "description": "Name or id of organization whose LDAP sync options to be retrieved", + "name": "orgNameOrID", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "Success, LDAP sync options retrieved.", + "schema": { + "$ref": "#/definitions/responses.MemberSyncOpts" + } + }, + "default": { + "description": "Success, LDAP sync options retrieved.", + "schema": { + "$ref": "#/definitions/responses.MemberSyncOpts" + } + } + } + }, + "put": { + "description": "Set options for syncing admin members of an organization.\nEnabling sync of organization admin members will disable the ability to\ndirectly manage organization membership for any users imported from an LDAP\ndirectory. Their organization membership is instead set by being synced as an\nadmin member of the organization or by being a member of any team within the\norganization.\nRequires authentication and authorization as an admin user or an admin member\nof the organization.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Organization Membership", + "Organizations", + "Accounts" + ], + "summary": "Set options for syncing admin members of an organization.", + "operationId": "SetOrganizationAdminSyncConfig", + "parameters": [ + { + "type": "string", + "default": "", + "description": "Name or id of organization whose LDAP sync options to set", + "name": "orgNameOrID", + "in": "path", + "required": true + }, + { + "type": "forms.MemberSyncOpts", + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/forms.MemberSyncOpts" + } + } + ], + "responses": { + "200": { + "description": "Success, LDAP sync options set.", + "schema": { + "$ref": "#/definitions/responses.MemberSyncOpts" + } + }, + "default": { + "description": "Success, LDAP sync options set.", + "schema": { + "$ref": "#/definitions/responses.MemberSyncOpts" + } + } + } + } + }, + "/accounts/{orgNameOrID}/members": { + "get": { + "description": "List members of an organization.\nLists memberships in ascending order by user ID.\nRequires authentication and authorization as an admin user or a member of the\norganization.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Organization Membership", + "Organizations", + "Accounts" + ], + "summary": "List members of an organization.", + "operationId": "ListOrganizationMembers", + "parameters": [ + { + "type": "string", + "default": "", + "description": "Name or id of organization whose members will be listed", + "name": "orgNameOrID", + "in": "path", + "required": true + }, + { + "type": "string", + "default": "all", + "description": "Filter members by type - either 'admins', 'non-admins', or 'all' (default).", + "name": "filter", + "in": "query" + }, + { + "type": "string", + "default": "", + "description": "Only return members with a user ID greater than or equal to this ID.", + "name": "start", + "in": "query" + }, + { + "type": "int", + "default": "10", + "description": "Maximum number of members per page of results.", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "description": "Success, page of organization members listed.", + "schema": { + "$ref": "#/definitions/responses.Members" + } + }, + "default": { + "description": "Success, page of organization members listed.", + "schema": { + "$ref": "#/definitions/responses.Members" + } + } + } + } + }, + "/accounts/{orgNameOrID}/members/{memberNameOrID}": { + "get": { + "description": "Details of a user's membership in an organization.\nRequires authentication and authorization as an admin user, a member of the\norganization, or the target user.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Organization Membership", + "Organizations", + "Accounts" + ], + "summary": "Details of a user's membership in an organization.", + "operationId": "GetOrganizationMembership", + "parameters": [ + { + "type": "string", + "default": "", + "description": "Name or id of organization in which the membership will be retrieved", + "name": "orgNameOrID", + "in": "path", + "required": true + }, + { + "type": "string", + "default": "", + "description": "Name or id of user whose membership will be retrieved", + "name": "memberNameOrID", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "Success, membership returned.", + "schema": { + "$ref": "#/definitions/responses.Member" + } + }, + "default": { + "description": "Success, membership returned.", + "schema": { + "$ref": "#/definitions/responses.Member" + } + } + } + }, + "put": { + "description": "Add a user to an organization.\nIf organization admin members are configured to be synced with LDAP, users\nwhich are imported from LDAP cannot be manually added as members of the\norganization and must be either synced as an organization admin member or be\nadded as a member of team within the organization.\nRequires authentication and authorization as an admin user or an admin member\nof the organization", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Organization Membership", + "Organizations", + "Accounts" + ], + "summary": "Add a user to an organization.", + "operationId": "AddOrganizationMember", + "parameters": [ + { + "type": "string", + "default": "", + "description": "Name or id of organization in which the membership will be added", + "name": "orgNameOrID", + "in": "path", + "required": true + }, + { + "type": "string", + "default": "", + "description": "Name or id of user which will be added as a member", + "name": "memberNameOrID", + "in": "path", + "required": true + }, + { + "type": "forms.SetMembership", + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/forms.SetMembership" + } + } + ], + "responses": { + "200": { + "description": "Success, membership set.", + "schema": { + "$ref": "#/definitions/responses.Member" + } + }, + "default": { + "description": "Success, membership set.", + "schema": { + "$ref": "#/definitions/responses.Member" + } + } + } + }, + "delete": { + "description": "Remove a user from an organization.\nRemoving a member of the organization will also remove them from any teams in\nthe organization. If organization admin members are configured to be synced\nwith LDAP, users which are imported from LDAP cannot be manually removed as\nmembers of the organization and must be either synced as an organization admin\nmember or removed as a member of all teams within the organization.\nRequires authentication and authorization as an admin user or an admin member\nof the organization.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Organization Membership", + "Organizations", + "Accounts" + ], + "summary": "Remove a user from an organization.", + "operationId": "DeleteOrganizationMember", + "parameters": [ + { + "type": "string", + "default": "", + "description": "Name or id of user whose membership will be deleted", + "name": "memberNameOrID", + "in": "path", + "required": true + }, + { + "type": "string", + "default": "", + "description": "Name or id of organization in which the membership will be deleted", + "name": "orgNameOrID", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "description": "Success, membership removed." + } + } + } + }, + "/accounts/{orgNameOrID}/members/{memberNameOrID}/teams": { + "get": { + "description": "List a user's team membership in an organization.\nLists team memberships in ascending order by team ID.\nRequires authentication and authorization as an admin user or a member of the\norganization.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Organization Membership", + "Organizations", + "Accounts" + ], + "summary": "List a user's team membership in an organization.", + "operationId": "ListOrganizationMemberTeams", + "parameters": [ + { + "type": "string", + "default": "", + "description": "Name or id of organization in which the member's team memberships will be listed", + "name": "orgNameOrID", + "in": "path", + "required": true + }, + { + "type": "string", + "default": "", + "description": "Name or id of user whose memberships will be listed", + "name": "memberNameOrID", + "in": "path", + "required": true + }, + { + "type": "string", + "default": "", + "description": "Only return team memberships with a team ID greater than or equal to this ID.", + "name": "start", + "in": "query" + }, + { + "type": "int", + "default": "10", + "description": "Maximum number of team memberships per page of results.", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "description": "Success, page of member's teams listed.", + "schema": { + "$ref": "#/definitions/responses.MemberTeams" + } + }, + "default": { + "description": "Success, page of member's teams listed.", + "schema": { + "$ref": "#/definitions/responses.MemberTeams" + } + } + } + } + }, + "/accounts/{orgNameOrID}/teams": { + "get": { + "description": "List teams in an organization.\nLists teams in ascending order by name.\nRequires authentication and authorization as an admin user or a member of the\norganization.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Teams", + "Organizations", + "Accounts" + ], + "summary": "List teams in an organization.", + "operationId": "ListTeams", + "parameters": [ + { + "type": "string", + "default": "", + "description": "Name or id of organization whose teams will be listed", + "name": "orgNameOrID", + "in": "path", + "required": true + }, + { + "type": "string", + "default": "", + "description": "Only return teams with a name greater than or equal to this name.", + "name": "start", + "in": "query" + }, + { + "type": "int", + "default": "10", + "description": "Maximum number of teams per page of results.", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "description": "Success, page of teams listed.", + "schema": { + "$ref": "#/definitions/responses.Teams" + } + }, + "default": { + "description": "Success, page of teams listed.", + "schema": { + "$ref": "#/definitions/responses.Teams" + } + } + } + }, + "post": { + "description": "Create a team.\nRequires authentication and authorization as an admin user or an admin member\nof the organization.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Teams", + "Organizations", + "Accounts" + ], + "summary": "Create a team.", + "operationId": "CreateTeam", + "parameters": [ + { + "type": "string", + "default": "", + "description": "Name or id of organization in which the team will be created", + "name": "orgNameOrID", + "in": "path", + "required": true + }, + { + "type": "forms.CreateTeam", + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/forms.CreateTeam" + } + } + ], + "responses": { + "201": { + "description": "Success, team created.", + "schema": { + "$ref": "#/definitions/responses.Team" + } + } + } + } + }, + "/accounts/{orgNameOrID}/teams/{teamNameOrID}": { + "get": { + "description": "Details for a team.\nRequires authentication and authorization as an admin user or a member of the\norganization.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Teams", + "Organizations", + "Accounts" + ], + "summary": "Details for a team.", + "operationId": "GetTeam", + "parameters": [ + { + "type": "string", + "default": "", + "description": "Name or id of team which will be retrieved", + "name": "teamNameOrID", + "in": "path", + "required": true + }, + { + "type": "string", + "default": "", + "description": "Name or id of organization in which the team will be retrieved", + "name": "orgNameOrID", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "Success, team returned.", + "schema": { + "$ref": "#/definitions/responses.Team" + } + }, + "default": { + "description": "Success, team returned.", + "schema": { + "$ref": "#/definitions/responses.Team" + } + } + } + }, + "delete": { + "description": "Delete a team.\nRequires authentication and authorization as an admin user or an admin member\nof the organization.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Teams", + "Organizations", + "Accounts" + ], + "summary": "Delete a team.", + "operationId": "DeleteTeam", + "parameters": [ + { + "type": "string", + "default": "", + "description": "Name or id of organization in which the team will be deleted", + "name": "orgNameOrID", + "in": "path", + "required": true + }, + { + "type": "string", + "default": "", + "description": "Name or id of team which will be deleted", + "name": "teamNameOrID", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "description": "Success, team deleted." + } + } + }, + "patch": { + "description": "Update details for a team.\nRequires authentication and authorization as an admin user, an admin member of\nthe organization, or an admin member of the team.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Teams", + "Organizations", + "Accounts" + ], + "summary": "Update details for a team.", + "operationId": "UpdateTeam", + "parameters": [ + { + "type": "string", + "default": "", + "description": "Name or id of organization in which the team will be updated", + "name": "orgNameOrID", + "in": "path", + "required": true + }, + { + "type": "string", + "default": "", + "description": "Name or id of team which will be updated", + "name": "teamNameOrID", + "in": "path", + "required": true + }, + { + "type": "forms.UpdateTeam", + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/forms.UpdateTeam" + } + } + ], + "responses": { + "200": { + "description": "Success, team updated.", + "schema": { + "$ref": "#/definitions/responses.Team" + } + }, + "default": { + "description": "Success, team updated.", + "schema": { + "$ref": "#/definitions/responses.Team" + } + } + } + } + }, + "/accounts/{orgNameOrID}/teams/{teamNameOrID}/groupLinkConfig": { + "get": { + "description": "Get options for linking group of a team.\nRequires authentication and authorization as an admin user, an admin group of\nthe organization, or an admin group of the team.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Team Membership", + "Teams", + "Organizations", + "Accounts" + ], + "summary": "Get options for linking group of a team.", + "operationId": "GetTeamGroupLinkConfig", + "parameters": [ + { + "type": "string", + "default": "", + "description": "Name or id of organization to which the team belongs", + "name": "orgNameOrID", + "in": "path", + "required": true + }, + { + "type": "string", + "default": "", + "description": "Name or id of team whose SAML link config will be retrieved", + "name": "teamNameOrID", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "Success, SAML link options retrieved.", + "schema": { + "$ref": "#/definitions/responses.GroupLinkOpts" + } + }, + "default": { + "description": "Success, SAML link options retrieved.", + "schema": { + "$ref": "#/definitions/responses.GroupLinkOpts" + } + } + } + }, + "put": { + "description": "Set options for linking this team with a group attribute from SAML assertions.\nEnabling link of team members will disable the ability to manually manage team\nmembership for any users imported from SAML. Their team membership is instead\nmanaged by the group attribute of the SAML assertion.\nRequires authentication and authorization as an admin user, an admin member of\nthe organization, or an admin member of the team.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Team Membership", + "Teams", + "Organizations", + "Accounts" + ], + "summary": "Set options for linking this team with a group attribute from SAML assertions.", + "operationId": "SetTeamGroupLinkConfig", + "parameters": [ + { + "type": "string", + "default": "", + "description": "Name or id of team whose SAML link config will be set", + "name": "teamNameOrID", + "in": "path", + "required": true + }, + { + "type": "string", + "default": "", + "description": "Name or id of organization to which the team belongs", + "name": "orgNameOrID", + "in": "path", + "required": true + }, + { + "type": "forms.GroupLinkOpts", + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/forms.GroupLinkOpts" + } + } + ], + "responses": { + "200": { + "description": "Success, SAML link options set.", + "schema": { + "$ref": "#/definitions/responses.GroupLinkOpts" + } + }, + "default": { + "description": "Success, SAML link options set.", + "schema": { + "$ref": "#/definitions/responses.GroupLinkOpts" + } + } + } + } + }, + "/accounts/{orgNameOrID}/teams/{teamNameOrID}/memberSyncConfig": { + "get": { + "description": "Get options for syncing members of a team.\nRequires authentication and authorization as an admin user, an admin member of\nthe organization, or an admin member of the team.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Team Membership", + "Teams", + "Organizations", + "Accounts" + ], + "summary": "Get options for syncing members of a team.", + "operationId": "GetTeamMemberSyncConfig", + "parameters": [ + { + "type": "string", + "default": "", + "description": "Name or id of organization to which the team belongs", + "name": "orgNameOrID", + "in": "path", + "required": true + }, + { + "type": "string", + "default": "", + "description": "Name or id of team whose LDAP sync config will be retrieved", + "name": "teamNameOrID", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "Success, LDAP sync options retrieved.", + "schema": { + "$ref": "#/definitions/responses.MemberSyncOpts" + } + }, + "default": { + "description": "Success, LDAP sync options retrieved.", + "schema": { + "$ref": "#/definitions/responses.MemberSyncOpts" + } + } + } + }, + "put": { + "description": "Set options for syncing members of a team.\nEnabling sync of team members will disable the ability to manually manage team\nmembership for any users imported from LDAP. Their team membership is instead\nmanaged by the LDAP sync.\nRequires authentication and authorization as an admin user, an admin member of\nthe organization, or an admin member of the team.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Team Membership", + "Teams", + "Organizations", + "Accounts" + ], + "summary": "Set options for syncing members of a team.", + "operationId": "SetTeamMemberSyncConfig", + "parameters": [ + { + "type": "string", + "default": "", + "description": "Name or id of organization to which the team belongs", + "name": "orgNameOrID", + "in": "path", + "required": true + }, + { + "type": "string", + "default": "", + "description": "Name or id of team whose LDAP sync config will be set", + "name": "teamNameOrID", + "in": "path", + "required": true + }, + { + "type": "forms.MemberSyncOpts", + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/forms.MemberSyncOpts" + } + } + ], + "responses": { + "200": { + "description": "Success, LDAP sync options set.", + "schema": { + "$ref": "#/definitions/responses.MemberSyncOpts" + } + }, + "default": { + "description": "Success, LDAP sync options set.", + "schema": { + "$ref": "#/definitions/responses.MemberSyncOpts" + } + } + } + } + }, + "/accounts/{orgNameOrID}/teams/{teamNameOrID}/members": { + "get": { + "description": "List members of a team.\nLists memberships in ascending order by user ID.\nRequires authentication and authorization as an admin user or a member of the\norganization.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Team Membership", + "Teams", + "Organizations", + "Accounts" + ], + "summary": "List members of a team.", + "operationId": "ListTeamMembers", + "parameters": [ + { + "type": "string", + "default": "", + "description": "Name or id of organization in which the team's members will be listed'", + "name": "orgNameOrID", + "in": "path", + "required": true + }, + { + "type": "string", + "default": "", + "description": "Name or id of team whose members will be listed", + "name": "teamNameOrID", + "in": "path", + "required": true + }, + { + "type": "string", + "default": "all", + "description": "Filter members by type - either 'admins', 'non-admins', or 'all' (default).", + "name": "filter", + "in": "query" + }, + { + "type": "string", + "default": "", + "description": "Only return members with a user ID greater than or equal to this ID.", + "name": "start", + "in": "query" + }, + { + "type": "int", + "default": "10", + "description": "Maximum number of members per page of results.", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "description": "Success, page of team members listed.", + "schema": { + "$ref": "#/definitions/responses.Members" + } + }, + "default": { + "description": "Success, page of team members listed.", + "schema": { + "$ref": "#/definitions/responses.Members" + } + } + } + } + }, + "/accounts/{orgNameOrID}/teams/{teamNameOrID}/members/{memberNameOrID}": { + "get": { + "description": "Details of a user's membership in a team.\nRequires authentication and authorization as an admin user or a member of the\norganization.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Team Membership", + "Teams", + "Organizations", + "Accounts" + ], + "summary": "Details of a user's membership in a team.", + "operationId": "GetTeamMembership", + "parameters": [ + { + "type": "string", + "default": "", + "description": "Name or id of user whose team membership will be retrieved", + "name": "memberNameOrID", + "in": "path", + "required": true + }, + { + "type": "string", + "default": "", + "description": "Name or id of organization in which the team membership will be retrieved", + "name": "orgNameOrID", + "in": "path", + "required": true + }, + { + "type": "string", + "default": "", + "description": "Name or id of the team in which the membership will be retrieved", + "name": "teamNameOrID", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "Success, team membership retuned.", + "schema": { + "$ref": "#/definitions/responses.Member" + } + }, + "default": { + "description": "Success, team membership retuned.", + "schema": { + "$ref": "#/definitions/responses.Member" + } + } + } + }, + "put": { + "description": "Add a user to a team.\nThe user will be added as a member of the organization if they are not already.\nIf team members are configured to be synced with LDAP, users which are imported\nfrom LDAP cannot be manually added as members of the team and must be synced\nwith LDAP.\nRequires authentication and authorization as an admin user, an admin member of\nthe organization, or an admin member of the team.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Team Membership", + "Teams", + "Organizations", + "Accounts" + ], + "summary": "Add a user to a team.", + "operationId": "AddTeamMember", + "parameters": [ + { + "type": "string", + "default": "", + "description": "Name or id of organization in which the team membership will be added", + "name": "orgNameOrID", + "in": "path", + "required": true + }, + { + "type": "string", + "default": "", + "description": "Name or id of the team in which the membership will be added", + "name": "teamNameOrID", + "in": "path", + "required": true + }, + { + "type": "string", + "default": "", + "description": "Name or id of user which will be added as a member", + "name": "memberNameOrID", + "in": "path", + "required": true + }, + { + "type": "forms.SetMembership", + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/forms.SetMembership" + } + } + ], + "responses": { + "200": { + "description": "Success, team membership set.", + "schema": { + "$ref": "#/definitions/responses.Member" + } + }, + "default": { + "description": "Success, team membership set.", + "schema": { + "$ref": "#/definitions/responses.Member" + } + } + } + }, + "delete": { + "description": "Remove a member from a team.\nThe user will remain a member of the organization. If team members are\nconfigured to be synced with LDAP, users which are imported from LDAP cannot be\nmanually removed as members of the team and must be synced with LDAP.\nRequires authentication and authorization as an admin user, an admin member of\nthe organization, or an admin member of the team.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Team Membership", + "Teams", + "Organizations", + "Accounts" + ], + "summary": "Remove a member from a team.", + "operationId": "DeleteTeamMember", + "parameters": [ + { + "type": "string", + "default": "", + "description": "Name or id of organization in which the team membership will be deleted", + "name": "orgNameOrID", + "in": "path", + "required": true + }, + { + "type": "string", + "default": "", + "description": "Name or id of the team in which the membership will be deleted", + "name": "teamNameOrID", + "in": "path", + "required": true + }, + { + "type": "string", + "default": "", + "description": "Name or id of user whose team membership will be deleted", + "name": "memberNameOrID", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "description": "Success, team membership deleted." + } + } + } + }, + "/accounts/{userNameOrID}/changePassword": { + "post": { + "description": "Change a user's password.\nRequires authentication and authorization as an admin user or the target user.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "User Accounts", + "Accounts" + ], + "summary": "Change a user's password.", + "operationId": "ChangePassword", + "parameters": [ + { + "type": "string", + "default": "", + "description": "Username or id of user whose password is to be changed", + "name": "userNameOrID", + "in": "path", + "required": true + }, + { + "type": "forms.ChangePassword", + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/forms.ChangePassword" + } + } + ], + "responses": { + "200": { + "description": "Success, password changed.", + "schema": { + "$ref": "#/definitions/responses.Account" + } + }, + "default": { + "description": "Success, password changed.", + "schema": { + "$ref": "#/definitions/responses.Account" + } + } + } + } + }, + "/accounts/{userNameOrID}/organizations": { + "get": { + "description": "List a user's organization memberships.\nLists organization memberships in ascending order by organization ID.\nRequires authentication and authorization as an admin user or the target user.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "User Accounts", + "Accounts" + ], + "summary": "List a user's organization memberships.", + "operationId": "ListUserOrganizations", + "parameters": [ + { + "type": "string", + "default": "", + "description": "Name or id of user to whose organizations will be listed", + "name": "userNameOrID", + "in": "path", + "required": true + }, + { + "type": "string", + "default": "", + "description": "Only return memberships with an org ID greater than or equal to this ID.", + "name": "start", + "in": "query" + }, + { + "type": "int", + "default": "10", + "description": "Maximum number of organizations per page of results.", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "description": "Success, page of user's organizations listed.", + "schema": { + "$ref": "#/definitions/responses.MemberOrgs" + } + }, + "default": { + "description": "Success, page of user's organizations listed.", + "schema": { + "$ref": "#/definitions/responses.MemberOrgs" + } + } + } + } + }, + "/api/composehelper": { + "get": { + "tags": [ + "UCP" + ], + "summary": "/api/composehelper", + "operationId": "restfulNoop", + "responses": {} + } + }, + "/api/ucp/app/render": { + "post": { + "tags": [ + "UCP" + ], + "summary": "/api/ucp/app/render", + "operationId": "restfulNoop", + "responses": {} + } + }, + "/api/ucp/config-toml": { + "get": { + "description": "Export the current UCP Configuration as a TOML file.", + "produces": [ + "application/toml" + ], + "tags": [ + "UCP" + ], + "summary": "Export the current UCP Configuration as a TOML file.", + "operationId": "Get Config TOML", + "responses": { + "200": { + "description": "Success", + "schema": { + "$ref": "#/definitions/config.UCPConfiguration" + } + }, + "default": { + "description": "Success", + "schema": { + "$ref": "#/definitions/config.UCPConfiguration" + } + } + } + }, + "put": { + "description": "Import UCP Configuration from a TOML file.", + "consumes": [ + "application/toml" + ], + "produces": [ + "application/json" + ], + "tags": [ + "UCP" + ], + "summary": "Import UCP Configuration from a TOML file.", + "operationId": "PUT Config TOML", + "responses": { + "200": { + "description": "Success", + "schema": { + "$ref": "#/definitions/api.putConfigOrLicenseResponse" + } + }, + "default": { + "description": "Success", + "schema": { + "$ref": "#/definitions/api.putConfigOrLicenseResponse" + } + } + } + } + }, + "/auth": { + "post": { + "description": "Validate credentials for a registry and, if available, get an identity token for accessing the registry without password.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "System" + ], + "summary": "Check auth configuration", + "operationId": "SystemAuth", + "parameters": [ + { + "description": "Authentication to check", + "name": "authConfig", + "in": "body", + "schema": { + "$ref": "#/definitions/AuthConfig" + } + } + ], + "responses": { + "200": { + "description": "An identity token was generated successfully.", + "schema": { + "type": "object", + "title": "SystemAuthResponse", + "required": [ + "Status" + ], + "properties": { + "IdentityToken": { + "description": "An opaque token used to authenticate a user after a successful login", + "type": "string", + "x-nullable": false + }, + "Status": { + "description": "The status of the authentication", + "type": "string", + "x-nullable": false + } + } + }, + "examples": { + "application/json": { + "IdentityToken": "9cbaf023786cd7...", + "Status": "Login Succeeded" + } + } + }, + "204": { + "description": "No error" + }, + "500": { + "description": "Server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/auth/login": { + "post": { + "description": "Submit a Login Form in exchange for a Session Token.", + "consumes": [ + "application/json" + ], + "tags": [ + "UCP" + ], + "summary": "Submit a Login Form in exchange for a Session Token.", + "operationId": "Login", + "parameters": [ + { + "type": "auth.Credentials", + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/auth.Credentials" + } + } + ], + "responses": { + "200": { + "description": "Success, login response returned.", + "schema": { + "$ref": "#/definitions/auth.LoginResponse" + } + }, + "401": { + "description": "Invalid username or password." + }, + "default": { + "description": "Success, login response returned.", + "schema": { + "$ref": "#/definitions/auth.LoginResponse" + } + } + } + } + }, + "/build": { + "post": { + "description": "Build an image from a tar archive with a `Dockerfile` in it.\n\nThe `Dockerfile` specifies how the image is built from the tar archive. It is typically in the archive's root, but can be at a different path or have a different name by specifying the `dockerfile` parameter. [See the `Dockerfile` reference for more information](https://docs.docker.com/engine/reference/builder/).\n\nThe Docker daemon performs a preliminary validation of the `Dockerfile` before starting the build, and returns an error if the syntax is incorrect. After that, each instruction is run one-by-one until the ID of the new image is output.\n\nThe build is canceled if the client drops the connection by quitting or being killed.\n", + "consumes": [ + "application/octet-stream" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Image" + ], + "summary": "Build an image", + "operationId": "ImageBuild", + "parameters": [ + { + "description": "A tar archive compressed with one of the following algorithms: identity (no compression), gzip, bzip2, xz.", + "name": "inputStream", + "in": "body", + "schema": { + "type": "string", + "format": "binary" + } + }, + { + "type": "string", + "default": "Dockerfile", + "description": "Path within the build context to the `Dockerfile`. This is ignored if `remote` is specified and points to an external `Dockerfile`.", + "name": "dockerfile", + "in": "query" + }, + { + "type": "string", + "description": "A name and optional tag to apply to the image in the `name:tag` format. If you omit the tag the default `latest` value is assumed. You can provide several `t` parameters.", + "name": "t", + "in": "query" + }, + { + "type": "string", + "description": "Extra hosts to add to /etc/hosts", + "name": "extrahosts", + "in": "query" + }, + { + "type": "string", + "description": "A Git repository URI or HTTP/HTTPS context URI. If the URI points to a single text file, the file’s contents are placed into a file called `Dockerfile` and the image is built from that file. If the URI points to a tarball, the file is downloaded by the daemon and the contents therein used as the context for the build. If the URI points to a tarball and the `dockerfile` parameter is also specified, there must be a file with the corresponding path inside the tarball.", + "name": "remote", + "in": "query" + }, + { + "type": "boolean", + "default": false, + "description": "Suppress verbose build output.", + "name": "q", + "in": "query" + }, + { + "type": "boolean", + "default": false, + "description": "Do not use the cache when building the image.", + "name": "nocache", + "in": "query" + }, + { + "type": "string", + "description": "JSON array of images used for build cache resolution.", + "name": "cachefrom", + "in": "query" + }, + { + "type": "string", + "description": "Attempt to pull the image even if an older image exists locally.", + "name": "pull", + "in": "query" + }, + { + "type": "boolean", + "default": true, + "description": "Remove intermediate containers after a successful build.", + "name": "rm", + "in": "query" + }, + { + "type": "boolean", + "default": false, + "description": "Always remove intermediate containers, even upon failure.", + "name": "forcerm", + "in": "query" + }, + { + "type": "integer", + "description": "Set memory limit for build.", + "name": "memory", + "in": "query" + }, + { + "type": "integer", + "description": "Total memory (memory + swap). Set as `-1` to disable swap.", + "name": "memswap", + "in": "query" + }, + { + "type": "integer", + "description": "CPU shares (relative weight).", + "name": "cpushares", + "in": "query" + }, + { + "type": "string", + "description": "CPUs in which to allow execution (e.g., `0-3`, `0,1`).", + "name": "cpusetcpus", + "in": "query" + }, + { + "type": "integer", + "description": "The length of a CPU period in microseconds.", + "name": "cpuperiod", + "in": "query" + }, + { + "type": "integer", + "description": "Microseconds of CPU time that the container can get in a CPU period.", + "name": "cpuquota", + "in": "query" + }, + { + "type": "string", + "description": "JSON map of string pairs for build-time variables. Users pass these values at build-time. Docker uses the buildargs as the environment context for commands run via the `Dockerfile` RUN instruction, or for variable expansion in other `Dockerfile` instructions. This is not meant for passing secret values.\n\nFor example, the build arg `FOO=bar` would become `{\"FOO\":\"bar\"}` in JSON. This would result in the the query parameter `buildargs={\"FOO\":\"bar\"}`. Note that `{\"FOO\":\"bar\"}` should be URI component encoded.\n\n[Read more about the buildargs instruction.](https://docs.docker.com/engine/reference/builder/#arg)\n", + "name": "buildargs", + "in": "query" + }, + { + "type": "integer", + "description": "Size of `/dev/shm` in bytes. The size must be greater than 0. If omitted the system uses 64MB.", + "name": "shmsize", + "in": "query" + }, + { + "type": "boolean", + "description": "Squash the resulting images layers into a single layer. *(Experimental release only.)*", + "name": "squash", + "in": "query" + }, + { + "type": "string", + "description": "Arbitrary key/value labels to set on the image, as a JSON map of string pairs.", + "name": "labels", + "in": "query" + }, + { + "type": "string", + "description": "Sets the networking mode for the run commands during build. Supported standard values are: `bridge`, `host`, `none`, and `container:\u003cname|id\u003e`. Any other value is taken as a custom network's name to which this container should connect to.", + "name": "networkmode", + "in": "query" + }, + { + "enum": [ + "application/x-tar" + ], + "type": "string", + "default": "application/x-tar", + "name": "Content-type", + "in": "header" + }, + { + "type": "string", + "description": "This is a base64-encoded JSON object with auth configurations for multiple registries that a build may refer to.\n\nThe key is a registry URL, and the value is an auth configuration object, [as described in the authentication section](#section/Authentication). For example:\n\n```\n{\n \"docker.example.com\": {\n \"username\": \"janedoe\",\n \"password\": \"hunter2\"\n },\n \"https://index.docker.io/v1/\": {\n \"username\": \"mobydock\",\n \"password\": \"conta1n3rize14\"\n }\n}\n```\n\nOnly the registry domain name (and port if not the default 443) are required. However, for legacy reasons, the Docker Hub registry must be specified with both a `https://` prefix and a `/v1/` suffix even though Docker will prefer to use the v2 registry API.\n", + "name": "X-Registry-Config", + "in": "header" + }, + { + "type": "string", + "default": "", + "description": "Platform in the format os[/arch[/variant]]", + "name": "platform", + "in": "query" + }, + { + "type": "string", + "default": "", + "description": "Target build stage", + "name": "target", + "in": "query" + } + ], + "responses": { + "200": { + "description": "no error" + }, + "400": { + "description": "Bad parameter", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "500": { + "description": "server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/collectionByPath": { + "get": { + "description": "Retrieve a single collection by path.", + "produces": [ + "application/json" + ], + "tags": [ + "UCP" + ], + "summary": "Retrieve a single collection by path.", + "operationId": "Get Collection by path", + "parameters": [ + { + "type": "string", + "default": "", + "description": "Path of the collection to get.", + "name": "path", + "in": "query" + } + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "$ref": "#/definitions/authz.Collection" + } + }, + "default": { + "description": "Success", + "schema": { + "$ref": "#/definitions/authz.Collection" + } + } + } + } + }, + "/collectionGrants": { + "get": { + "description": "Lists all collection grants", + "produces": [ + "application/json" + ], + "tags": [ + "UCP" + ], + "summary": "Lists all collection grants", + "operationId": "ListGrants", + "parameters": [ + { + "type": "string", + "default": "", + "description": "Filter grants by subjectID. Only a single value may be specified for this query parameter. A subjectID may be an account ID for a user or organization, or a team ID.", + "name": "subjectID", + "in": "query" + }, + { + "type": "string", + "default": "", + "description": "Filter grants by collection ID. Only a single value may be specified for this query parameter.", + "name": "objectID", + "in": "query" + }, + { + "type": "string", + "default": "", + "description": "Filter grants by roleID. Only a single value may be specified for this query parameter.", + "name": "roleID", + "in": "query" + }, + { + "type": "string", + "default": "all", + "description": "Filter grants by a subject type - either \"agent\", \"all\" (default), \"anonymous\", \"authenticated\", \"org\", \"team\", or \"user\" . These filters cannot be combined in any way.", + "name": "subjectType", + "in": "query" + }, + { + "type": "boolean", + "default": "false", + "description": "Expands the subject into a list of subjects that it belongs to.", + "name": "expandUser", + "in": "query" + }, + { + "type": "boolean", + "default": "false", + "description": "Include the collection paths in the response.", + "name": "showPaths", + "in": "query" + }, + { + "type": "string", + "default": "", + "description": "Only return grants with an order marker starting from this value.", + "name": "start", + "in": "query" + }, + { + "type": "int", + "default": "10", + "description": "Maximum number of grants per page of results.", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "$ref": "#/definitions/responses.Grants" + } + }, + "default": { + "description": "Success", + "schema": { + "$ref": "#/definitions/responses.Grants" + } + } + } + } + }, + "/collectionGrants/{subjectID}/{objectID}/{roleID}": { + "put": { + "description": "Creates a collection grant", + "tags": [ + "UCP" + ], + "summary": "Creates a collection grant", + "operationId": "CreateGrant", + "parameters": [ + { + "type": "string", + "default": "", + "description": "SubjectID of grant to create. For a service account, it should follow the format `system:serviceaccount:\u003cnamespace\u003e:\u003cserviceaccount\u003e`", + "name": "subjectID", + "in": "path", + "required": true + }, + { + "type": "string", + "default": "", + "description": "ObjectID of grant to create", + "name": "objectID", + "in": "path", + "required": true + }, + { + "type": "string", + "default": "", + "description": "RoleID of grant to create", + "name": "roleID", + "in": "path", + "required": true + } + ], + "responses": { + "201": { + "description": "Success" + } + } + }, + "delete": { + "description": "Deletes a collection grant.", + "tags": [ + "UCP" + ], + "summary": "Deletes a collection grant.", + "operationId": "DeleteGrant", + "parameters": [ + { + "type": "string", + "default": "", + "description": "SubjectID of grant to delete", + "name": "subjectID", + "in": "path", + "required": true + }, + { + "type": "string", + "default": "", + "description": "ObjectID of grant to delete", + "name": "objectID", + "in": "path", + "required": true + }, + { + "type": "string", + "default": "", + "description": "RoleID of grant to delete", + "name": "roleID", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "description": "Success" + } + } + } + }, + "/collections": { + "get": { + "description": "List all visible collections.", + "produces": [ + "application/json" + ], + "tags": [ + "UCP" + ], + "summary": "List all visible collections.", + "operationId": "List collections", + "parameters": [ + { + "type": "string", + "default": "", + "description": "Only return collections with an order marker starting from this value.", + "name": "start", + "in": "query" + }, + { + "type": "int", + "default": "10", + "description": "Maximum number of collections per page of results.", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/authz.Collection" + } + } + }, + "default": { + "description": "Success", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/authz.Collection" + } + } + } + } + }, + "post": { + "description": "Create a new collection of resources that share mutual authorization settings.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "UCP" + ], + "summary": "Create a new collection of resources that share mutual authorization settings.", + "operationId": "Create Collection", + "parameters": [ + { + "type": "authz.CollectionCreate", + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/authz.CollectionCreate" + } + } + ], + "responses": { + "201": { + "description": "Success", + "schema": { + "$ref": "#/definitions/authz.CollectionCreateResponse" + } + } + } + } + }, + "/collections/{id}": { + "get": { + "description": "Retrieve a single collection by ID.", + "produces": [ + "application/json" + ], + "tags": [ + "UCP" + ], + "summary": "Retrieve a single collection by ID.", + "operationId": "Get Collection", + "parameters": [ + { + "type": "string", + "default": "", + "description": "ID of the collection to get", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "$ref": "#/definitions/authz.Collection" + } + }, + "default": { + "description": "Success", + "schema": { + "$ref": "#/definitions/authz.Collection" + } + } + } + }, + "delete": { + "description": "Delete a single collection by ID.", + "tags": [ + "UCP" + ], + "summary": "Delete a single collection by ID.", + "operationId": "Delete Collection", + "parameters": [ + { + "type": "string", + "default": "", + "description": "ID of the collection to delete.", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "description": "Success" + } + } + }, + "patch": { + "description": "Updates an existing collection", + "consumes": [ + "application/json" + ], + "tags": [ + "UCP" + ], + "summary": "Updates an existing collection", + "operationId": "Update Collection", + "parameters": [ + { + "type": "string", + "default": "", + "description": "ID of the collection to update.", + "name": "id", + "in": "path", + "required": true + }, + { + "type": "authz.CollectionUpdate", + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/authz.CollectionUpdate" + } + } + ], + "responses": { + "200": { + "description": "Success" + }, + "default": { + "description": "Success" + } + } + } + }, + "/collections/{id}/children": { + "get": { + "description": "Retrieve all children collection to a specific collection.", + "produces": [ + "application/json" + ], + "tags": [ + "UCP" + ], + "summary": "Retrieve all children collection to a specific collection.", + "operationId": "Get Collection Children", + "parameters": [ + { + "type": "string", + "default": "", + "description": "ID of the collection whose children will be returned", + "name": "id", + "in": "path", + "required": true + }, + { + "type": "string", + "default": "", + "description": "Only return collections with an order marker starting from this value.", + "name": "start", + "in": "query" + }, + { + "type": "int", + "default": "10", + "description": "Maximum number of collections per page of results.", + "name": "limit", + "in": "query" + } + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/authz.Collection" + } + } + }, + "default": { + "description": "Success", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/authz.Collection" + } + } + } + } + } + }, + "/commit": { + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Image" + ], + "summary": "Create a new image from a container", + "operationId": "ImageCommit", + "parameters": [ + { + "description": "The container configuration", + "name": "containerConfig", + "in": "body", + "schema": { + "$ref": "#/definitions/ContainerConfig" + } + }, + { + "type": "string", + "description": "The ID or name of the container to commit", + "name": "container", + "in": "query" + }, + { + "type": "string", + "description": "Repository name for the created image", + "name": "repo", + "in": "query" + }, + { + "type": "string", + "description": "Tag name for the create image", + "name": "tag", + "in": "query" + }, + { + "type": "string", + "description": "Commit message", + "name": "comment", + "in": "query" + }, + { + "type": "string", + "description": "Author of the image (e.g., `John Hannibal Smith \u003channibal@a-team.com\u003e`)", + "name": "author", + "in": "query" + }, + { + "type": "boolean", + "default": true, + "description": "Whether to pause the container before committing", + "name": "pause", + "in": "query" + }, + { + "type": "string", + "description": "`Dockerfile` instructions to apply while committing", + "name": "changes", + "in": "query" + } + ], + "responses": { + "201": { + "description": "no error", + "schema": { + "$ref": "#/definitions/IdResponse" + } + }, + "404": { + "description": "no such container", + "schema": { + "$ref": "#/definitions/ErrorResponse" + }, + "examples": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + } + }, + "500": { + "description": "server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/configs": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "Config" + ], + "summary": "List configs", + "operationId": "ConfigList", + "parameters": [ + { + "type": "string", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to process on the configs list. Available filters:\n\n- `id=\u003cconfig id\u003e`\n- `label=\u003ckey\u003e or label=\u003ckey\u003e=value`\n- `name=\u003cconfig name\u003e`\n- `names=\u003cconfig name\u003e`\n", + "name": "filters", + "in": "query" + } + ], + "responses": { + "200": { + "description": "no error", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/Config" + }, + "example": [ + { + "CreatedAt": "2016-11-05T01:20:17.327670065Z", + "ID": "ktnbjxoalbkvbvedmg1urrz8h", + "Spec": { + "Name": "server.conf" + }, + "UpdatedAt": "2016-11-05T01:20:17.327670065Z", + "Version": { + "Index": 11 + } + } + ] + } + }, + "500": { + "description": "server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "503": { + "description": "node is not part of a swarm", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/configs/create": { + "post": { + "description": "If you create a UCP config with a name that starts with `com.docker.ucp.config`, UCP verifies that the config is valid before saving it. Also, UCP validates any licenses with names that start with `com.docker.license`.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Config" + ], + "summary": "Create a config", + "operationId": "ConfigCreate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/ConfigSpec" + }, + { + "type": "object", + "example": { + "Data": "VEhJUyBJUyBOT1QgQSBSRUFMIENFUlRJRklDQVRFCg==", + "Labels": { + "foo": "bar" + }, + "Name": "server.conf" + } + } + ] + } + } + ], + "responses": { + "201": { + "description": "no error", + "schema": { + "$ref": "#/definitions/IdResponse" + } + }, + "409": { + "description": "name conflicts with an existing object", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "500": { + "description": "server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "503": { + "description": "node is not part of a swarm", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/configs/{id}": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "Config" + ], + "summary": "Inspect a config", + "operationId": "ConfigInspect", + "parameters": [ + { + "type": "string", + "description": "ID of the config", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "no error", + "schema": { + "$ref": "#/definitions/Config" + }, + "examples": { + "application/json": { + "CreatedAt": "2016-11-05T01:20:17.327670065Z", + "ID": "ktnbjxoalbkvbvedmg1urrz8h", + "Spec": { + "Name": "app-dev.crt" + }, + "UpdatedAt": "2016-11-05T01:20:17.327670065Z", + "Version": { + "Index": 11 + } + } + } + }, + "404": { + "description": "config not found", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "500": { + "description": "server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "503": { + "description": "node is not part of a swarm", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + }, + "delete": { + "produces": [ + "application/json" + ], + "tags": [ + "Config" + ], + "summary": "Delete a config", + "operationId": "ConfigDelete", + "parameters": [ + { + "type": "string", + "description": "ID of the config", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "description": "no error" + }, + "404": { + "description": "config not found", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "500": { + "description": "server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "503": { + "description": "node is not part of a swarm", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/configs/{id}/update": { + "post": { + "tags": [ + "Config" + ], + "summary": "Update a Config", + "operationId": "ConfigUpdate", + "parameters": [ + { + "type": "string", + "description": "The ID or name of the config", + "name": "id", + "in": "path", + "required": true + }, + { + "description": "The spec of the config to update. Currently, only the Labels field can be updated. All other fields must remain unchanged from the [ConfigInspect endpoint](#operation/ConfigInspect) response values.", + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/ConfigSpec" + } + }, + { + "type": "integer", + "format": "int64", + "description": "The version number of the config object being updated. This is required to avoid conflicting writes.", + "name": "version", + "in": "query", + "required": true + } + ], + "responses": { + "200": { + "description": "no error" + }, + "400": { + "description": "bad parameter", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "404": { + "description": "no such config", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "500": { + "description": "server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "503": { + "description": "node is not part of a swarm", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/containers/create": { + "post": { + "consumes": [ + "application/json", + "application/octet-stream" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Container" + ], + "summary": "Create a container", + "operationId": "ContainerCreate", + "parameters": [ + { + "pattern": "/?[a-zA-Z0-9_-]+", + "type": "string", + "description": "Assign the specified name to the container. Must match `/?[a-zA-Z0-9_-]+`.", + "name": "name", + "in": "query" + }, + { + "description": "Container to create", + "name": "body", + "in": "body", + "required": true, + "schema": { + "allOf": [ + { + "$ref": "#/definitions/ContainerConfig", + "example": { + "AttachStderr": true, + "AttachStdin": false, + "AttachStdout": true, + "Cmd": [ + "date" + ], + "Domainname": "", + "Entrypoint": "", + "Env": [ + "FOO=bar", + "BAZ=quux" + ], + "ExposedPorts": { + "22/tcp": {} + }, + "HostConfig": { + "AutoRemove": true, + "Binds": [ + "/tmp:/tmp" + ], + "BlkioDeviceReadBps": [ + {} + ], + "BlkioDeviceReadIOps": [ + {} + ], + "BlkioDeviceWriteBps": [ + {} + ], + "BlkioDeviceWriteIOps": [ + {} + ], + "BlkioWeight": 300, + "BlkioWeightDevice": [ + {} + ], + "CapAdd": [ + "NET_ADMIN" + ], + "CapDrop": [ + "MKNOD" + ], + "CgroupParent": "", + "CpuPercent": 80, + "CpuPeriod": 100000, + "CpuQuota": 50000, + "CpuRealtimePeriod": 1000000, + "CpuRealtimeRuntime": 10000, + "CpuShares": 512, + "CpusetCpus": "0,1", + "CpusetMems": "0,1", + "Devices": [], + "Dns": [ + "8.8.8.8" + ], + "DnsOptions": [ + "" + ], + "DnsSearch": [ + "" + ], + "GroupAdd": [ + "newgroup" + ], + "KernelMemory": 0, + "Links": [ + "redis3:redis" + ], + "LogConfig": { + "Config": {}, + "Type": "json-file" + }, + "MaximumIOBps": 0, + "MaximumIOps": 0, + "Memory": 0, + "MemoryReservation": 0, + "MemorySwap": 0, + "MemorySwappiness": 60, + "NanoCPUs": 500000, + "NetworkMode": "bridge", + "OomKillDisable": false, + "OomScoreAdj": 500, + "PidMode": "", + "PidsLimit": -1, + "PortBindings": { + "22/tcp": [ + { + "HostPort": "11022" + } + ] + }, + "Privileged": false, + "PublishAllPorts": false, + "ReadonlyRootfs": false, + "RestartPolicy": { + "MaximumRetryCount": 0, + "Name": "" + }, + "SecurityOpt": [], + "ShmSize": 67108864, + "StorageOpt": {}, + "Ulimits": [ + {} + ], + "VolumeDriver": "", + "VolumesFrom": [ + "parent", + "other:ro" + ] + }, + "Hostname": "", + "Image": "ubuntu", + "Labels": { + "com.example.license": "GPL", + "com.example.vendor": "Acme", + "com.example.version": "1.0" + }, + "MacAddress": "12:34:56:78:9a:bc", + "NetworkDisabled": false, + "NetworkingConfig": { + "EndpointsConfig": { + "isolated_nw": { + "Aliases": [ + "server_x", + "server_y" + ], + "IPAMConfig": { + "IPv4Address": "172.20.30.33", + "IPv6Address": "2001:db8:abcd::3033", + "LinkLocalIPs": [ + "169.254.34.68", + "fe80::3468" + ] + }, + "Links": [ + "container_1", + "container_2" + ] + } + } + }, + "OpenStdin": false, + "StdinOnce": false, + "StopSignal": "SIGTERM", + "StopTimeout": 10, + "Tty": false, + "User": "", + "Volumes": { + "/volumes/data": {} + }, + "WorkingDir": "" + } + }, + { + "type": "object", + "properties": { + "HostConfig": { + "$ref": "#/definitions/HostConfig" + }, + "NetworkingConfig": { + "description": "This container's networking configuration.", + "type": "object", + "properties": { + "EndpointsConfig": { + "description": "A mapping of network name to endpoint configuration for that network.", + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/EndpointSettings" + } + } + } + } + }, + "example": { + "AttachStderr": true, + "AttachStdin": false, + "AttachStdout": true, + "Cmd": [ + "date" + ], + "Domainname": "", + "Entrypoint": "", + "Env": [ + "FOO=bar", + "BAZ=quux" + ], + "ExposedPorts": { + "22/tcp": {} + }, + "HostConfig": { + "AutoRemove": true, + "Binds": [ + "/tmp:/tmp" + ], + "BlkioDeviceReadBps": [ + {} + ], + "BlkioDeviceReadIOps": [ + {} + ], + "BlkioDeviceWriteBps": [ + {} + ], + "BlkioDeviceWriteIOps": [ + {} + ], + "BlkioWeight": 300, + "BlkioWeightDevice": [ + {} + ], + "CapAdd": [ + "NET_ADMIN" + ], + "CapDrop": [ + "MKNOD" + ], + "CgroupParent": "", + "CpuPercent": 80, + "CpuPeriod": 100000, + "CpuQuota": 50000, + "CpuRealtimePeriod": 1000000, + "CpuRealtimeRuntime": 10000, + "CpuShares": 512, + "CpusetCpus": "0,1", + "CpusetMems": "0,1", + "Devices": [], + "Dns": [ + "8.8.8.8" + ], + "DnsOptions": [ + "" + ], + "DnsSearch": [ + "" + ], + "GroupAdd": [ + "newgroup" + ], + "KernelMemory": 0, + "Links": [ + "redis3:redis" + ], + "LogConfig": { + "Config": {}, + "Type": "json-file" + }, + "MaximumIOBps": 0, + "MaximumIOps": 0, + "Memory": 0, + "MemoryReservation": 0, + "MemorySwap": 0, + "MemorySwappiness": 60, + "NanoCPUs": 500000, + "NetworkMode": "bridge", + "OomKillDisable": false, + "OomScoreAdj": 500, + "PidMode": "", + "PidsLimit": -1, + "PortBindings": { + "22/tcp": [ + { + "HostPort": "11022" + } + ] + }, + "Privileged": false, + "PublishAllPorts": false, + "ReadonlyRootfs": false, + "RestartPolicy": { + "MaximumRetryCount": 0, + "Name": "" + }, + "SecurityOpt": [], + "ShmSize": 67108864, + "StorageOpt": {}, + "Ulimits": [ + {} + ], + "VolumeDriver": "", + "VolumesFrom": [ + "parent", + "other:ro" + ] + }, + "Hostname": "", + "Image": "ubuntu", + "Labels": { + "com.example.license": "GPL", + "com.example.vendor": "Acme", + "com.example.version": "1.0" + }, + "MacAddress": "12:34:56:78:9a:bc", + "NetworkDisabled": false, + "NetworkingConfig": { + "EndpointsConfig": { + "isolated_nw": { + "Aliases": [ + "server_x", + "server_y" + ], + "IPAMConfig": { + "IPv4Address": "172.20.30.33", + "IPv6Address": "2001:db8:abcd::3033", + "LinkLocalIPs": [ + "169.254.34.68", + "fe80::3468" + ] + }, + "Links": [ + "container_1", + "container_2" + ] + } + } + }, + "OpenStdin": false, + "StdinOnce": false, + "StopSignal": "SIGTERM", + "StopTimeout": 10, + "Tty": false, + "User": "", + "Volumes": { + "/volumes/data": {} + }, + "WorkingDir": "" + } + } + ], + "example": { + "AttachStderr": true, + "AttachStdin": false, + "AttachStdout": true, + "Cmd": [ + "date" + ], + "Domainname": "", + "Entrypoint": "", + "Env": [ + "FOO=bar", + "BAZ=quux" + ], + "ExposedPorts": { + "22/tcp": {} + }, + "HostConfig": { + "AutoRemove": true, + "Binds": [ + "/tmp:/tmp" + ], + "BlkioDeviceReadBps": [ + {} + ], + "BlkioDeviceReadIOps": [ + {} + ], + "BlkioDeviceWriteBps": [ + {} + ], + "BlkioDeviceWriteIOps": [ + {} + ], + "BlkioWeight": 300, + "BlkioWeightDevice": [ + {} + ], + "CapAdd": [ + "NET_ADMIN" + ], + "CapDrop": [ + "MKNOD" + ], + "CgroupParent": "", + "CpuPercent": 80, + "CpuPeriod": 100000, + "CpuQuota": 50000, + "CpuRealtimePeriod": 1000000, + "CpuRealtimeRuntime": 10000, + "CpuShares": 512, + "CpusetCpus": "0,1", + "CpusetMems": "0,1", + "Devices": [], + "Dns": [ + "8.8.8.8" + ], + "DnsOptions": [ + "" + ], + "DnsSearch": [ + "" + ], + "GroupAdd": [ + "newgroup" + ], + "KernelMemory": 0, + "Links": [ + "redis3:redis" + ], + "LogConfig": { + "Config": {}, + "Type": "json-file" + }, + "MaximumIOBps": 0, + "MaximumIOps": 0, + "Memory": 0, + "MemoryReservation": 0, + "MemorySwap": 0, + "MemorySwappiness": 60, + "NanoCPUs": 500000, + "NetworkMode": "bridge", + "OomKillDisable": false, + "OomScoreAdj": 500, + "PidMode": "", + "PidsLimit": -1, + "PortBindings": { + "22/tcp": [ + { + "HostPort": "11022" + } + ] + }, + "Privileged": false, + "PublishAllPorts": false, + "ReadonlyRootfs": false, + "RestartPolicy": { + "MaximumRetryCount": 0, + "Name": "" + }, + "SecurityOpt": [], + "ShmSize": 67108864, + "StorageOpt": {}, + "Ulimits": [ + {} + ], + "VolumeDriver": "", + "VolumesFrom": [ + "parent", + "other:ro" + ] + }, + "Hostname": "", + "Image": "ubuntu", + "Labels": { + "com.example.license": "GPL", + "com.example.vendor": "Acme", + "com.example.version": "1.0" + }, + "MacAddress": "12:34:56:78:9a:bc", + "NetworkDisabled": false, + "NetworkingConfig": { + "EndpointsConfig": { + "isolated_nw": { + "Aliases": [ + "server_x", + "server_y" + ], + "IPAMConfig": { + "IPv4Address": "172.20.30.33", + "IPv6Address": "2001:db8:abcd::3033", + "LinkLocalIPs": [ + "169.254.34.68", + "fe80::3468" + ] + }, + "Links": [ + "container_1", + "container_2" + ] + } + } + }, + "OpenStdin": false, + "StdinOnce": false, + "StopSignal": "SIGTERM", + "StopTimeout": 10, + "Tty": false, + "User": "", + "Volumes": { + "/volumes/data": {} + }, + "WorkingDir": "" + } + } + } + ], + "responses": { + "201": { + "description": "Container created successfully", + "schema": { + "description": "OK response to ContainerCreate operation", + "type": "object", + "title": "ContainerCreateResponse", + "required": [ + "Id", + "Warnings" + ], + "properties": { + "Id": { + "description": "The ID of the created container", + "type": "string", + "x-nullable": false + }, + "Warnings": { + "description": "Warnings encountered when creating the container", + "type": "array", + "items": { + "type": "string" + }, + "x-nullable": false + } + } + }, + "examples": { + "application/json": { + "Id": "e90e34656806", + "Warnings": [] + } + } + }, + "400": { + "description": "bad parameter", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "404": { + "description": "no such container", + "schema": { + "$ref": "#/definitions/ErrorResponse" + }, + "examples": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + } + }, + "409": { + "description": "conflict", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "500": { + "description": "server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/containers/json": { + "get": { + "description": "Returns a list of containers. For details on the format, see [the inspect endpoint](#operation/ContainerInspect).\n\nNote that it uses a different, smaller representation of a container than inspecting a single container. For example,\nthe list of linked containers is not propagated .\n", + "produces": [ + "application/json" + ], + "tags": [ + "Container" + ], + "summary": "List containers", + "operationId": "ContainerList", + "parameters": [ + { + "type": "boolean", + "default": false, + "description": "Return all containers. By default, only running containers are shown", + "name": "all", + "in": "query" + }, + { + "type": "integer", + "description": "Return this number of most recently created containers, including non-running ones.", + "name": "limit", + "in": "query" + }, + { + "type": "boolean", + "default": false, + "description": "Return the size of container as fields `SizeRw` and `SizeRootFs`.", + "name": "size", + "in": "query" + }, + { + "type": "string", + "description": "Filters to process on the container list, encoded as JSON (a `map[string][]string`). For example, `{\"status\": [\"paused\"]}` will only return paused containers. Available filters:\n\n- `ancestor`=(`\u003cimage-name\u003e[:\u003ctag\u003e]`, `\u003cimage id\u003e`, or `\u003cimage@digest\u003e`)\n- `before`=(`\u003ccontainer id\u003e` or `\u003ccontainer name\u003e`)\n- `expose`=(`\u003cport\u003e[/\u003cproto\u003e]`|`\u003cstartport-endport\u003e/[\u003cproto\u003e]`)\n- `exited=\u003cint\u003e` containers with exit code of `\u003cint\u003e`\n- `health`=(`starting`|`healthy`|`unhealthy`|`none`)\n- `id=\u003cID\u003e` a container's ID\n- `isolation=`(`default`|`process`|`hyperv`) (Windows daemon only)\n- `is-task=`(`true`|`false`)\n- `label=key` or `label=\"key=value\"` of a container label\n- `name=\u003cname\u003e` a container's name\n- `network`=(`\u003cnetwork id\u003e` or `\u003cnetwork name\u003e`)\n- `publish`=(`\u003cport\u003e[/\u003cproto\u003e]`|`\u003cstartport-endport\u003e/[\u003cproto\u003e]`)\n- `since`=(`\u003ccontainer id\u003e` or `\u003ccontainer name\u003e`)\n- `status=`(`created`|`restarting`|`running`|`removing`|`paused`|`exited`|`dead`)\n- `volume`=(`\u003cvolume name\u003e` or `\u003cmount point destination\u003e`)\n", + "name": "filters", + "in": "query" + } + ], + "responses": { + "200": { + "description": "no error", + "schema": { + "$ref": "#/definitions/ContainerSummary" + }, + "examples": { + "application/json": [ + { + "Command": "echo 1", + "Created": 1367854155, + "HostConfig": { + "NetworkMode": "default" + }, + "Id": "8dfafdbc3a40", + "Image": "ubuntu:latest", + "ImageID": "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82", + "Labels": { + "com.example.license": "GPL", + "com.example.vendor": "Acme", + "com.example.version": "1.0" + }, + "Mounts": [ + { + "Destination": "/data", + "Driver": "local", + "Mode": "ro,Z", + "Name": "fac362...80535", + "Propagation": "", + "RW": false, + "Source": "/data" + } + ], + "Names": [ + "/boring_feynman" + ], + "NetworkSettings": { + "Networks": { + "bridge": { + "EndpointID": "2cdc4edb1ded3631c81f57966563e5c8525b81121bb3706a9a9a3ae102711f3f", + "Gateway": "172.17.0.1", + "GlobalIPv6Address": "", + "GlobalIPv6PrefixLen": 0, + "IPAddress": "172.17.0.2", + "IPPrefixLen": 16, + "IPv6Gateway": "", + "MacAddress": "02:42:ac:11:00:02", + "NetworkID": "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812" + } + } + }, + "Ports": [ + { + "PrivatePort": 2222, + "PublicPort": 3333, + "Type": "tcp" + } + ], + "SizeRootFs": 0, + "SizeRw": 12288, + "State": "Exited", + "Status": "Exit 0" + }, + { + "Command": "echo 222222", + "Created": 1367854155, + "HostConfig": { + "NetworkMode": "default" + }, + "Id": "9cd87474be90", + "Image": "ubuntu:latest", + "ImageID": "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82", + "Labels": {}, + "Mounts": [], + "Names": [ + "/coolName" + ], + "NetworkSettings": { + "Networks": { + "bridge": { + "EndpointID": "88eaed7b37b38c2a3f0c4bc796494fdf51b270c2d22656412a2ca5d559a64d7a", + "Gateway": "172.17.0.1", + "GlobalIPv6Address": "", + "GlobalIPv6PrefixLen": 0, + "IPAddress": "172.17.0.8", + "IPPrefixLen": 16, + "IPv6Gateway": "", + "MacAddress": "02:42:ac:11:00:08", + "NetworkID": "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812" + } + } + }, + "Ports": [], + "SizeRootFs": 0, + "SizeRw": 12288, + "State": "Exited", + "Status": "Exit 0" + }, + { + "Command": "echo 3333333333333333", + "Created": 1367854154, + "HostConfig": { + "NetworkMode": "default" + }, + "Id": "3176a2479c92", + "Image": "ubuntu:latest", + "ImageID": "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82", + "Labels": {}, + "Mounts": [], + "Names": [ + "/sleepy_dog" + ], + "NetworkSettings": { + "Networks": { + "bridge": { + "EndpointID": "8b27c041c30326d59cd6e6f510d4f8d1d570a228466f956edf7815508f78e30d", + "Gateway": "172.17.0.1", + "GlobalIPv6Address": "", + "GlobalIPv6PrefixLen": 0, + "IPAddress": "172.17.0.6", + "IPPrefixLen": 16, + "IPv6Gateway": "", + "MacAddress": "02:42:ac:11:00:06", + "NetworkID": "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812" + } + } + }, + "Ports": [], + "SizeRootFs": 0, + "SizeRw": 12288, + "State": "Exited", + "Status": "Exit 0" + }, + { + "Command": "echo 444444444444444444444444444444444", + "Created": 1367854152, + "HostConfig": { + "NetworkMode": "default" + }, + "Id": "4cb07b47f9fb", + "Image": "ubuntu:latest", + "ImageID": "d74508fb6632491cea586a1fd7d748dfc5274cd6fdfedee309ecdcbc2bf5cb82", + "Labels": {}, + "Mounts": [], + "Names": [ + "/running_cat" + ], + "NetworkSettings": { + "Networks": { + "bridge": { + "EndpointID": "d91c7b2f0644403d7ef3095985ea0e2370325cd2332ff3a3225c4247328e66e9", + "Gateway": "172.17.0.1", + "GlobalIPv6Address": "", + "GlobalIPv6PrefixLen": 0, + "IPAddress": "172.17.0.5", + "IPPrefixLen": 16, + "IPv6Gateway": "", + "MacAddress": "02:42:ac:11:00:05", + "NetworkID": "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812" + } + } + }, + "Ports": [], + "SizeRootFs": 0, + "SizeRw": 12288, + "State": "Exited", + "Status": "Exit 0" + } + ] + } + }, + "400": { + "description": "bad parameter", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "500": { + "description": "server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/containers/prune": { + "post": { + "produces": [ + "application/json" + ], + "tags": [ + "Container" + ], + "summary": "Delete stopped containers", + "operationId": "ContainerPrune", + "parameters": [ + { + "type": "string", + "description": "Filters to process on the prune list, encoded as JSON (a `map[string][]string`).\n\nAvailable filters:\n- `until=\u003ctimestamp\u003e` Prune containers created before this timestamp. The `\u003ctimestamp\u003e` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time.\n- `label` (`label=\u003ckey\u003e`, `label=\u003ckey\u003e=\u003cvalue\u003e`, `label!=\u003ckey\u003e`, or `label!=\u003ckey\u003e=\u003cvalue\u003e`) Prune containers with (or without, in case `label!=...` is used) the specified labels.\n", + "name": "filters", + "in": "query" + } + ], + "responses": { + "200": { + "description": "No error", + "schema": { + "type": "object", + "title": "ContainerPruneResponse", + "properties": { + "ContainersDeleted": { + "description": "Container IDs that were deleted", + "type": "array", + "items": { + "type": "string" + } + }, + "SpaceReclaimed": { + "description": "Disk space reclaimed in bytes", + "type": "integer", + "format": "int64" + } + } + } + }, + "500": { + "description": "Server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/containers/{id}": { + "delete": { + "tags": [ + "Container" + ], + "summary": "Remove a container", + "operationId": "ContainerDelete", + "parameters": [ + { + "type": "string", + "description": "ID or name of the container", + "name": "id", + "in": "path", + "required": true + }, + { + "type": "boolean", + "default": false, + "description": "Remove the volumes associated with the container.", + "name": "v", + "in": "query" + }, + { + "type": "boolean", + "default": false, + "description": "If the container is running, kill it before removing it.", + "name": "force", + "in": "query" + }, + { + "type": "boolean", + "default": false, + "description": "Remove the specified link associated with the container.", + "name": "link", + "in": "query" + } + ], + "responses": { + "204": { + "description": "no error" + }, + "400": { + "description": "bad parameter", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "404": { + "description": "no such container", + "schema": { + "$ref": "#/definitions/ErrorResponse" + }, + "examples": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + } + }, + "409": { + "description": "conflict", + "schema": { + "$ref": "#/definitions/ErrorResponse" + }, + "examples": { + "application/json": { + "message": "You cannot remove a running container: c2ada9df5af8. Stop the container before attempting removal or force remove" + } + } + }, + "500": { + "description": "server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/containers/{id}/archive": { + "get": { + "description": "Get a tar archive of a resource in the filesystem of container id.", + "produces": [ + "application/x-tar" + ], + "tags": [ + "Container" + ], + "summary": "Get an archive of a filesystem resource in a container", + "operationId": "ContainerArchive", + "parameters": [ + { + "type": "string", + "description": "ID or name of the container", + "name": "id", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Resource in the container’s filesystem to archive.", + "name": "path", + "in": "query", + "required": true + } + ], + "responses": { + "200": { + "description": "no error" + }, + "400": { + "description": "Bad parameter", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/ErrorResponse" + }, + { + "type": "object", + "properties": { + "message": { + "description": "The error message. Either \"must specify path parameter\" (path cannot be empty) or \"not a directory\" (path was asserted to be a directory but exists as a file).", + "type": "string", + "x-nullable": false + } + } + } + ] + } + }, + "404": { + "description": "Container or path does not exist", + "schema": { + "$ref": "#/definitions/ErrorResponse" + }, + "examples": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + } + }, + "500": { + "description": "server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + }, + "put": { + "description": "Upload a tar archive to be extracted to a path in the filesystem of container id.", + "consumes": [ + "application/x-tar", + "application/octet-stream" + ], + "tags": [ + "Container" + ], + "summary": "Extract an archive of files or folders to a directory in a container", + "operationId": "PutContainerArchive", + "parameters": [ + { + "type": "string", + "description": "ID or name of the container", + "name": "id", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Path to a directory in the container to extract the archive’s contents into. ", + "name": "path", + "in": "query", + "required": true + }, + { + "type": "string", + "description": "If “1”, “true”, or “True” then it will be an error if unpacking the given content would cause an existing directory to be replaced with a non-directory and vice versa.", + "name": "noOverwriteDirNonDir", + "in": "query" + }, + { + "description": "The input stream must be a tar archive compressed with one of the following algorithms: identity (no compression), gzip, bzip2, xz.", + "name": "inputStream", + "in": "body", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "The content was extracted successfully" + }, + "400": { + "description": "Bad parameter", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "403": { + "description": "Permission denied, the volume or container rootfs is marked as read-only.", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "404": { + "description": "No such container or path does not exist inside the container", + "schema": { + "$ref": "#/definitions/ErrorResponse" + }, + "examples": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + } + }, + "500": { + "description": "Server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + }, + "head": { + "description": "A response header `X-Docker-Container-Path-Stat` is return containing a base64 - encoded JSON object with some filesystem header information about the path.", + "tags": [ + "Container" + ], + "summary": "Get information about files in a container", + "operationId": "ContainerArchiveInfo", + "parameters": [ + { + "type": "string", + "description": "ID or name of the container", + "name": "id", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Resource in the container’s filesystem to archive.", + "name": "path", + "in": "query", + "required": true + } + ], + "responses": { + "200": { + "description": "no error", + "headers": { + "X-Docker-Container-Path-Stat": { + "type": "string", + "description": "A base64 - encoded JSON object with some filesystem header information about the path" + } + } + }, + "400": { + "description": "Bad parameter", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/ErrorResponse" + }, + { + "type": "object", + "properties": { + "message": { + "description": "The error message. Either \"must specify path parameter\" (path cannot be empty) or \"not a directory\" (path was asserted to be a directory but exists as a file).", + "type": "string", + "x-nullable": false + } + } + } + ] + } + }, + "404": { + "description": "Container or path does not exist", + "schema": { + "$ref": "#/definitions/ErrorResponse" + }, + "examples": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + } + }, + "500": { + "description": "Server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/containers/{id}/attach": { + "post": { + "description": "Attach to a container to read its output or send it input. You can attach to the same container multiple times and you can reattach to containers that have been detached.\n\nEither the `stream` or `logs` parameter must be `true` for this endpoint to do anything.\n\nSee [the documentation for the `docker attach` command](https://docs.docker.com/engine/reference/commandline/attach/) for more details.\n\n### Hijacking\n\nThis endpoint hijacks the HTTP connection to transport `stdin`, `stdout`, and `stderr` on the same socket.\n\nThis is the response from the daemon for an attach request:\n\n```\nHTTP/1.1 200 OK\nContent-Type: application/vnd.docker.raw-stream\n\n[STREAM]\n```\n\nAfter the headers and two new lines, the TCP connection can now be used for raw, bidirectional communication between the client and server.\n\nTo hint potential proxies about connection hijacking, the Docker client can also optionally send connection upgrade headers.\n\nFor example, the client sends this request to upgrade the connection:\n\n```\nPOST /containers/16253994b7c4/attach?stream=1\u0026stdout=1 HTTP/1.1\nUpgrade: tcp\nConnection: Upgrade\n```\n\nThe Docker daemon will respond with a `101 UPGRADED` response, and will similarly follow with the raw stream:\n\n```\nHTTP/1.1 101 UPGRADED\nContent-Type: application/vnd.docker.raw-stream\nConnection: Upgrade\nUpgrade: tcp\n\n[STREAM]\n```\n\n### Stream format\n\nWhen the TTY setting is disabled in [`POST /containers/create`](#operation/ContainerCreate), the stream over the hijacked connected is multiplexed to separate out `stdout` and `stderr`. The stream consists of a series of frames, each containing a header and a payload.\n\nThe header contains the information which the stream writes (`stdout` or `stderr`). It also contains the size of the associated frame encoded in the last four bytes (`uint32`).\n\nIt is encoded on the first eight bytes like this:\n\n```go\nheader := [8]byte{STREAM_TYPE, 0, 0, 0, SIZE1, SIZE2, SIZE3, SIZE4}\n```\n\n`STREAM_TYPE` can be:\n\n- 0: `stdin` (is written on `stdout`)\n- 1: `stdout`\n- 2: `stderr`\n\n`SIZE1, SIZE2, SIZE3, SIZE4` are the four bytes of the `uint32` size encoded as big endian.\n\nFollowing the header is the payload, which is the specified number of bytes of `STREAM_TYPE`.\n\nThe simplest way to implement this protocol is the following:\n\n1. Read 8 bytes.\n2. Choose `stdout` or `stderr` depending on the first byte.\n3. Extract the frame size from the last four bytes.\n4. Read the extracted size and output it on the correct output.\n5. Goto 1.\n\n### Stream format when using a TTY\n\nWhen the TTY setting is enabled in [`POST /containers/create`](#operation/ContainerCreate), the stream is not multiplexed. The data exchanged over the hijacked connection is simply the raw data from the process PTY and client's `stdin`.\n", + "produces": [ + "application/vnd.docker.raw-stream" + ], + "tags": [ + "Container" + ], + "summary": "Attach to a container", + "operationId": "ContainerAttach", + "parameters": [ + { + "type": "string", + "description": "ID or name of the container", + "name": "id", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Override the key sequence for detaching a container.Format is a single character `[a-Z]` or `ctrl-\u003cvalue\u003e` where `\u003cvalue\u003e` is one of: `a-z`, `@`, `^`, `[`, `,` or `_`.", + "name": "detachKeys", + "in": "query" + }, + { + "type": "boolean", + "default": false, + "description": "Replay previous logs from the container.\n\nThis is useful for attaching to a container that has started and you want to output everything since the container started.\n\nIf `stream` is also enabled, once all the previous output has been returned, it will seamlessly transition into streaming current output.\n", + "name": "logs", + "in": "query" + }, + { + "type": "boolean", + "default": false, + "description": "Stream attached streams from the time the request was made onwards", + "name": "stream", + "in": "query" + }, + { + "type": "boolean", + "default": false, + "description": "Attach to `stdin`", + "name": "stdin", + "in": "query" + }, + { + "type": "boolean", + "default": false, + "description": "Attach to `stdout`", + "name": "stdout", + "in": "query" + }, + { + "type": "boolean", + "default": false, + "description": "Attach to `stderr`", + "name": "stderr", + "in": "query" + } + ], + "responses": { + "101": { + "description": "no error, hints proxy about hijacking" + }, + "200": { + "description": "no error, no upgrade header found" + }, + "400": { + "description": "bad parameter", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "404": { + "description": "no such container", + "schema": { + "$ref": "#/definitions/ErrorResponse" + }, + "examples": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + } + }, + "500": { + "description": "server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/containers/{id}/changes": { + "get": { + "description": "Returns which files in a container's filesystem have been added, deleted,\nor modified. The `Kind` of modification can be one of:\n\n- `0`: Modified\n- `1`: Added\n- `2`: Deleted\n", + "produces": [ + "application/json" + ], + "tags": [ + "Container" + ], + "summary": "Get changes on a container’s filesystem", + "operationId": "ContainerChanges", + "parameters": [ + { + "type": "string", + "description": "ID or name of the container", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "The list of changes", + "schema": { + "type": "array", + "items": { + "description": "change item in response to ContainerChanges operation", + "type": "object", + "title": "ContainerChangeResponseItem", + "required": [ + "Path", + "Kind" + ], + "properties": { + "Kind": { + "description": "Kind of change", + "type": "integer", + "format": "uint8", + "enum": [ + 0, + 1, + 2 + ], + "x-nullable": false + }, + "Path": { + "description": "Path to file that has changed", + "type": "string", + "x-nullable": false + } + }, + "x-go-name": "ContainerChangeResponseItem" + } + }, + "examples": { + "application/json": [ + { + "Kind": 0, + "Path": "/dev" + }, + { + "Kind": 1, + "Path": "/dev/kmsg" + }, + { + "Kind": 1, + "Path": "/test" + } + ] + } + }, + "404": { + "description": "no such container", + "schema": { + "$ref": "#/definitions/ErrorResponse" + }, + "examples": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + } + }, + "500": { + "description": "server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/containers/{id}/exec": { + "post": { + "description": "Run a command inside a running container.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Exec" + ], + "summary": "Create an exec instance", + "operationId": "ContainerExec", + "parameters": [ + { + "description": "Exec configuration", + "name": "execConfig", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "AttachStderr": { + "description": "Attach to `stderr` of the exec command.", + "type": "boolean" + }, + "AttachStdin": { + "description": "Attach to `stdin` of the exec command.", + "type": "boolean" + }, + "AttachStdout": { + "description": "Attach to `stdout` of the exec command.", + "type": "boolean" + }, + "Cmd": { + "description": "Command to run, as a string or array of strings.", + "type": "array", + "items": { + "type": "string" + } + }, + "DetachKeys": { + "description": "Override the key sequence for detaching a container. Format is a single character `[a-Z]` or `ctrl-\u003cvalue\u003e` where `\u003cvalue\u003e` is one of: `a-z`, `@`, `^`, `[`, `,` or `_`.", + "type": "string" + }, + "Env": { + "description": "A list of environment variables in the form `[\"VAR=value\", ...]`.", + "type": "array", + "items": { + "type": "string" + } + }, + "Privileged": { + "description": "Runs the exec process with extended privileges.", + "type": "boolean", + "default": false + }, + "Tty": { + "description": "Allocate a pseudo-TTY.", + "type": "boolean" + }, + "User": { + "description": "The user, and optionally, group to run the exec process inside the container. Format is one of: `user`, `user:group`, `uid`, or `uid:gid`.", + "type": "string" + }, + "WorkingDir": { + "description": "The working directory for the exec process inside the container.", + "type": "string" + } + }, + "example": { + "AttachStderr": true, + "AttachStdin": false, + "AttachStdout": true, + "Cmd": [ + "date" + ], + "DetachKeys": "ctrl-p,ctrl-q", + "Env": [ + "FOO=bar", + "BAZ=quux" + ], + "Tty": false + } + } + }, + { + "type": "string", + "description": "ID or name of container", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "201": { + "description": "no error", + "schema": { + "$ref": "#/definitions/IdResponse" + } + }, + "404": { + "description": "no such container", + "schema": { + "$ref": "#/definitions/ErrorResponse" + }, + "examples": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + } + }, + "409": { + "description": "container is paused", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "500": { + "description": "Server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/containers/{id}/export": { + "get": { + "description": "Export the contents of a container as a tarball.", + "produces": [ + "application/octet-stream" + ], + "tags": [ + "Container" + ], + "summary": "Export a container", + "operationId": "ContainerExport", + "parameters": [ + { + "type": "string", + "description": "ID or name of the container", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "no error" + }, + "404": { + "description": "no such container", + "schema": { + "$ref": "#/definitions/ErrorResponse" + }, + "examples": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + } + }, + "500": { + "description": "server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/containers/{id}/json": { + "get": { + "description": "Return low-level information about a container.", + "produces": [ + "application/json" + ], + "tags": [ + "Container" + ], + "summary": "Inspect a container", + "operationId": "ContainerInspect", + "parameters": [ + { + "type": "string", + "description": "ID or name of the container", + "name": "id", + "in": "path", + "required": true + }, + { + "type": "boolean", + "default": false, + "description": "Return the size of container as fields `SizeRw` and `SizeRootFs`", + "name": "size", + "in": "query" + } + ], + "responses": { + "200": { + "description": "no error", + "schema": { + "type": "object", + "title": "ContainerInspectResponse", + "properties": { + "AppArmorProfile": { + "type": "string" + }, + "Args": { + "description": "The arguments to the command being run", + "type": "array", + "items": { + "type": "string" + } + }, + "Config": { + "$ref": "#/definitions/ContainerConfig" + }, + "Created": { + "description": "The time the container was created", + "type": "string" + }, + "Driver": { + "type": "string" + }, + "ExecIDs": { + "description": "IDs of exec instances that are running in the container.", + "type": "array", + "items": { + "type": "string" + }, + "x-nullable": true + }, + "GraphDriver": { + "$ref": "#/definitions/GraphDriverData" + }, + "HostConfig": { + "$ref": "#/definitions/HostConfig" + }, + "HostnamePath": { + "type": "string" + }, + "HostsPath": { + "type": "string" + }, + "Id": { + "description": "The ID of the container", + "type": "string" + }, + "Image": { + "description": "The container's image", + "type": "string" + }, + "LogPath": { + "type": "string" + }, + "MountLabel": { + "type": "string" + }, + "Mounts": { + "type": "array", + "items": { + "$ref": "#/definitions/MountPoint" + } + }, + "Name": { + "type": "string" + }, + "NetworkSettings": { + "$ref": "#/definitions/NetworkSettings" + }, + "Node": { + "description": "TODO", + "type": "object" + }, + "Path": { + "description": "The path to the command being run", + "type": "string" + }, + "ProcessLabel": { + "type": "string" + }, + "ResolvConfPath": { + "type": "string" + }, + "RestartCount": { + "type": "integer" + }, + "SizeRootFs": { + "description": "The total size of all the files in this container.", + "type": "integer", + "format": "int64" + }, + "SizeRw": { + "description": "The size of files that have been created or changed by this container.", + "type": "integer", + "format": "int64" + }, + "State": { + "description": "The state of the container.", + "type": "object", + "properties": { + "Dead": { + "type": "boolean" + }, + "Error": { + "type": "string" + }, + "ExitCode": { + "description": "The last exit code of this container", + "type": "integer" + }, + "FinishedAt": { + "description": "The time when this container last exited.", + "type": "string" + }, + "OOMKilled": { + "description": "Whether this container has been killed because it ran out of memory.", + "type": "boolean" + }, + "Paused": { + "description": "Whether this container is paused.", + "type": "boolean" + }, + "Pid": { + "description": "The process ID of this container", + "type": "integer" + }, + "Restarting": { + "description": "Whether this container is restarting.", + "type": "boolean" + }, + "Running": { + "description": "Whether this container is running.\n\nNote that a running container can be _paused_. The `Running` and `Paused`\nbooleans are not mutually exclusive:\n\nWhen pausing a container (on Linux), the cgroups freezer is used to suspend\nall processes in the container. Freezing the process requires the process to\nbe running. As a result, paused containers are both `Running` _and_ `Paused`.\n\nUse the `Status` field instead to determine if a container's state is \"running\".\n", + "type": "boolean" + }, + "StartedAt": { + "description": "The time when this container was last started.", + "type": "string" + }, + "Status": { + "description": "The status of the container. For example, `\"running\"` or `\"exited\"`.\n", + "type": "string", + "enum": [ + "created", + "running", + "paused", + "restarting", + "removing", + "exited", + "dead" + ] + } + } + } + } + }, + "examples": { + "application/json": { + "AppArmorProfile": "", + "Args": [ + "-c", + "exit 9" + ], + "Config": { + "AttachStderr": true, + "AttachStdin": false, + "AttachStdout": true, + "Cmd": [ + "/bin/sh", + "-c", + "exit 9" + ], + "Domainname": "", + "Env": [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" + ], + "Hostname": "ba033ac44011", + "Image": "ubuntu", + "Labels": { + "com.example.license": "GPL", + "com.example.vendor": "Acme", + "com.example.version": "1.0" + }, + "MacAddress": "", + "NetworkDisabled": false, + "OpenStdin": false, + "StdinOnce": false, + "StopSignal": "SIGTERM", + "StopTimeout": 10, + "Tty": false, + "User": "", + "Volumes": { + "/volumes/data": {} + }, + "WorkingDir": "" + }, + "Created": "2015-01-06T15:47:31.485331387Z", + "Driver": "devicemapper", + "ExecIDs": [ + "b35395de42bc8abd327f9dd65d913b9ba28c74d2f0734eeeae84fa1c616a0fca", + "3fc1232e5cd20c8de182ed81178503dc6437f4e7ef12b52cc5e8de020652f1c4" + ], + "HostConfig": { + "BlkioDeviceReadBps": [ + {} + ], + "BlkioDeviceReadIOps": [ + {} + ], + "BlkioDeviceWriteBps": [ + {} + ], + "BlkioDeviceWriteIOps": [ + {} + ], + "BlkioWeight": 0, + "BlkioWeightDevice": [ + {} + ], + "ContainerIDFile": "", + "CpuPercent": 80, + "CpuPeriod": 100000, + "CpuRealtimePeriod": 1000000, + "CpuRealtimeRuntime": 10000, + "CpuShares": 0, + "CpusetCpus": "", + "CpusetMems": "", + "Devices": [], + "IpcMode": "", + "KernelMemory": 0, + "LogConfig": { + "Type": "json-file" + }, + "LxcConf": [], + "MaximumIOBps": 0, + "MaximumIOps": 0, + "Memory": 0, + "MemoryReservation": 0, + "MemorySwap": 0, + "NetworkMode": "bridge", + "OomKillDisable": false, + "OomScoreAdj": 500, + "PidMode": "", + "PortBindings": {}, + "Privileged": false, + "PublishAllPorts": false, + "ReadonlyRootfs": false, + "RestartPolicy": { + "MaximumRetryCount": 2, + "Name": "on-failure" + }, + "ShmSize": 67108864, + "Sysctls": { + "net.ipv4.ip_forward": "1" + }, + "Ulimits": [ + {} + ], + "VolumeDriver": "" + }, + "HostnamePath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/hostname", + "HostsPath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/hosts", + "Id": "ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39", + "Image": "04c5d3b7b0656168630d3ba35d8889bd0e9caafcaeb3004d2bfbc47e7c5d35d2", + "LogPath": "/var/lib/docker/containers/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b-json.log", + "MountLabel": "", + "Mounts": [ + { + "Destination": "/data", + "Driver": "local", + "Mode": "ro,Z", + "Name": "fac362...80535", + "Propagation": "", + "RW": false, + "Source": "/data" + } + ], + "Name": "/boring_euclid", + "NetworkSettings": { + "Bridge": "", + "EndpointID": "", + "Gateway": "", + "GlobalIPv6Address": "", + "GlobalIPv6PrefixLen": 0, + "HairpinMode": false, + "IPAddress": "", + "IPPrefixLen": 0, + "IPv6Gateway": "", + "LinkLocalIPv6Address": "", + "LinkLocalIPv6PrefixLen": 0, + "MacAddress": "", + "Networks": { + "bridge": { + "EndpointID": "7587b82f0dada3656fda26588aee72630c6fab1536d36e394b2bfbcf898c971d", + "Gateway": "172.17.0.1", + "GlobalIPv6Address": "", + "GlobalIPv6PrefixLen": 0, + "IPAddress": "172.17.0.2", + "IPPrefixLen": 16, + "IPv6Gateway": "", + "MacAddress": "02:42:ac:12:00:02", + "NetworkID": "7ea29fc1412292a2d7bba362f9253545fecdfa8ce9a6e37dd10ba8bee7129812" + } + }, + "SandboxID": "", + "SandboxKey": "" + }, + "Path": "/bin/sh", + "ProcessLabel": "", + "ResolvConfPath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/resolv.conf", + "RestartCount": 1, + "State": { + "Dead": false, + "Error": "", + "ExitCode": 9, + "FinishedAt": "2015-01-06T15:47:32.080254511Z", + "OOMKilled": false, + "Paused": false, + "Pid": 0, + "Restarting": false, + "Running": true, + "StartedAt": "2015-01-06T15:47:32.072697474Z", + "Status": "running" + } + } + } + }, + "404": { + "description": "no such container", + "schema": { + "$ref": "#/definitions/ErrorResponse" + }, + "examples": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + } + }, + "500": { + "description": "server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/containers/{id}/kill": { + "post": { + "description": "Send a POSIX signal to a container, defaulting to killing to the container.", + "tags": [ + "Container" + ], + "summary": "Kill a container", + "operationId": "ContainerKill", + "parameters": [ + { + "type": "string", + "description": "ID or name of the container", + "name": "id", + "in": "path", + "required": true + }, + { + "type": "string", + "default": "SIGKILL", + "description": "Signal to send to the container as an integer or string (e.g. `SIGINT`)", + "name": "signal", + "in": "query" + } + ], + "responses": { + "204": { + "description": "no error" + }, + "404": { + "description": "no such container", + "schema": { + "$ref": "#/definitions/ErrorResponse" + }, + "examples": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + } + }, + "409": { + "description": "container is not running", + "schema": { + "$ref": "#/definitions/ErrorResponse" + }, + "examples": { + "application/json": { + "message": "Container d37cde0fe4ad63c3a7252023b2f9800282894247d145cb5933ddf6e52cc03a28 is not running" + } + } + }, + "500": { + "description": "server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/containers/{id}/logs": { + "get": { + "description": "Get `stdout` and `stderr` logs from a container.\n\nNote: This endpoint works only for containers with the `json-file` or `journald` logging driver.\n", + "tags": [ + "Container" + ], + "summary": "Get container logs", + "operationId": "ContainerLogs", + "parameters": [ + { + "type": "string", + "description": "ID or name of the container", + "name": "id", + "in": "path", + "required": true + }, + { + "type": "boolean", + "default": false, + "description": "Return the logs as a stream.\n\nThis will return a `101` HTTP response with a `Connection: upgrade` header, then hijack the HTTP connection to send raw output. For more information about hijacking and the stream format, [see the documentation for the attach endpoint](#operation/ContainerAttach).\n", + "name": "follow", + "in": "query" + }, + { + "type": "boolean", + "default": false, + "description": "Return logs from `stdout`", + "name": "stdout", + "in": "query" + }, + { + "type": "boolean", + "default": false, + "description": "Return logs from `stderr`", + "name": "stderr", + "in": "query" + }, + { + "type": "integer", + "default": 0, + "description": "Only return logs since this time, as a UNIX timestamp", + "name": "since", + "in": "query" + }, + { + "type": "integer", + "default": 0, + "description": "Only return logs before this time, as a UNIX timestamp", + "name": "until", + "in": "query" + }, + { + "type": "boolean", + "default": false, + "description": "Add timestamps to every log line", + "name": "timestamps", + "in": "query" + }, + { + "type": "string", + "default": "all", + "description": "Only return this number of log lines from the end of the logs. Specify as an integer or `all` to output all log lines.", + "name": "tail", + "in": "query" + } + ], + "responses": { + "101": { + "description": "logs returned as a stream", + "schema": { + "type": "string", + "format": "binary" + } + }, + "200": { + "description": "logs returned as a string in response body", + "schema": { + "type": "string" + } + }, + "404": { + "description": "no such container", + "schema": { + "$ref": "#/definitions/ErrorResponse" + }, + "examples": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + } + }, + "500": { + "description": "server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/containers/{id}/pause": { + "post": { + "description": "Use the cgroups freezer to suspend all processes in a container.\n\nTraditionally, when suspending a process the `SIGSTOP` signal is used, which is observable by the process being suspended. With the cgroups freezer the process is unaware, and unable to capture, that it is being suspended, and subsequently resumed.\n", + "tags": [ + "Container" + ], + "summary": "Pause a container", + "operationId": "ContainerPause", + "parameters": [ + { + "type": "string", + "description": "ID or name of the container", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "description": "no error" + }, + "404": { + "description": "no such container", + "schema": { + "$ref": "#/definitions/ErrorResponse" + }, + "examples": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + } + }, + "500": { + "description": "server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/containers/{id}/rename": { + "post": { + "tags": [ + "Container" + ], + "summary": "Rename a container", + "operationId": "ContainerRename", + "parameters": [ + { + "type": "string", + "description": "ID or name of the container", + "name": "id", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "New name for the container", + "name": "name", + "in": "query", + "required": true + } + ], + "responses": { + "204": { + "description": "no error" + }, + "404": { + "description": "no such container", + "schema": { + "$ref": "#/definitions/ErrorResponse" + }, + "examples": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + } + }, + "409": { + "description": "name already in use", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "500": { + "description": "server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/containers/{id}/resize": { + "post": { + "description": "Resize the TTY for a container. You must restart the container for the resize to take effect.", + "consumes": [ + "application/octet-stream" + ], + "produces": [ + "text/plain" + ], + "tags": [ + "Container" + ], + "summary": "Resize a container TTY", + "operationId": "ContainerResize", + "parameters": [ + { + "type": "string", + "description": "ID or name of the container", + "name": "id", + "in": "path", + "required": true + }, + { + "type": "integer", + "description": "Height of the tty session in characters", + "name": "h", + "in": "query" + }, + { + "type": "integer", + "description": "Width of the tty session in characters", + "name": "w", + "in": "query" + } + ], + "responses": { + "200": { + "description": "no error" + }, + "404": { + "description": "no such container", + "schema": { + "$ref": "#/definitions/ErrorResponse" + }, + "examples": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + } + }, + "500": { + "description": "cannot resize container", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/containers/{id}/restart": { + "post": { + "tags": [ + "Container" + ], + "summary": "Restart a container", + "operationId": "ContainerRestart", + "parameters": [ + { + "type": "string", + "description": "ID or name of the container", + "name": "id", + "in": "path", + "required": true + }, + { + "type": "integer", + "description": "Number of seconds to wait before killing the container", + "name": "t", + "in": "query" + } + ], + "responses": { + "204": { + "description": "no error" + }, + "404": { + "description": "no such container", + "schema": { + "$ref": "#/definitions/ErrorResponse" + }, + "examples": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + } + }, + "500": { + "description": "server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/containers/{id}/start": { + "post": { + "tags": [ + "Container" + ], + "summary": "Start a container", + "operationId": "ContainerStart", + "parameters": [ + { + "type": "string", + "description": "ID or name of the container", + "name": "id", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Override the key sequence for detaching a container. Format is a single character `[a-Z]` or `ctrl-\u003cvalue\u003e` where `\u003cvalue\u003e` is one of: `a-z`, `@`, `^`, `[`, `,` or `_`.", + "name": "detachKeys", + "in": "query" + } + ], + "responses": { + "204": { + "description": "no error" + }, + "304": { + "description": "container already started", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "404": { + "description": "no such container", + "schema": { + "$ref": "#/definitions/ErrorResponse" + }, + "examples": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + } + }, + "500": { + "description": "server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/containers/{id}/stats": { + "get": { + "description": "This endpoint returns a live stream of a container’s resource usage\nstatistics.\n\nThe `precpu_stats` is the CPU statistic of the *previous* read, and is\nused to calculate the CPU usage percentage. It is not an exact copy\nof the `cpu_stats` field.\n\nIf either `precpu_stats.online_cpus` or `cpu_stats.online_cpus` is\nnil then for compatibility with older daemons the length of the\ncorresponding `cpu_usage.percpu_usage` array should be used.\n", + "produces": [ + "application/json" + ], + "tags": [ + "Container" + ], + "summary": "Get container stats based on resource usage", + "operationId": "ContainerStats", + "parameters": [ + { + "type": "string", + "description": "ID or name of the container", + "name": "id", + "in": "path", + "required": true + }, + { + "type": "boolean", + "default": true, + "description": "Stream the output. If false, the stats will be output once and then it will disconnect.", + "name": "stream", + "in": "query" + } + ], + "responses": { + "200": { + "description": "no error", + "schema": { + "type": "object" + }, + "examples": { + "application/json": { + "blkio_stats": {}, + "cpu_stats": { + "cpu_usage": { + "percpu_usage": [ + 8646879, + 24472255, + 36438778, + 30657443 + ], + "total_usage": 100215355, + "usage_in_kernelmode": 30000000, + "usage_in_usermode": 50000000 + }, + "online_cpus": 4, + "system_cpu_usage": 739306590000000, + "throttling_data": { + "periods": 0, + "throttled_periods": 0, + "throttled_time": 0 + } + }, + "memory_stats": { + "failcnt": 0, + "limit": 67108864, + "max_usage": 6651904, + "stats": { + "active_anon": 6537216, + "active_file": 0, + "cache": 0, + "hierarchical_memory_limit": 67108864, + "inactive_anon": 0, + "inactive_file": 0, + "mapped_file": 0, + "pgfault": 964, + "pgmajfault": 0, + "pgpgin": 477, + "pgpgout": 414, + "rss": 6537216, + "rss_huge": 6291456, + "total_active_anon": 6537216, + "total_active_file": 0, + "total_cache": 0, + "total_inactive_anon": 0, + "total_inactive_file": 0, + "total_mapped_file": 0, + "total_pgfault": 964, + "total_pgmajfault": 0, + "total_pgpgin": 477, + "total_pgpgout": 414, + "total_rss": 6537216, + "total_rss_huge": 6291456, + "total_unevictable": 0, + "total_writeback": 0, + "unevictable": 0, + "writeback": 0 + }, + "usage": 6537216 + }, + "networks": { + "eth0": { + "rx_bytes": 5338, + "rx_dropped": 0, + "rx_errors": 0, + "rx_packets": 36, + "tx_bytes": 648, + "tx_dropped": 0, + "tx_errors": 0, + "tx_packets": 8 + }, + "eth5": { + "rx_bytes": 4641, + "rx_dropped": 0, + "rx_errors": 0, + "rx_packets": 26, + "tx_bytes": 690, + "tx_dropped": 0, + "tx_errors": 0, + "tx_packets": 9 + } + }, + "pids_stats": { + "current": 3 + }, + "precpu_stats": { + "cpu_usage": { + "percpu_usage": [ + 8646879, + 24350896, + 36438778, + 30657443 + ], + "total_usage": 100093996, + "usage_in_kernelmode": 30000000, + "usage_in_usermode": 50000000 + }, + "online_cpus": 4, + "system_cpu_usage": 9492140000000, + "throttling_data": { + "periods": 0, + "throttled_periods": 0, + "throttled_time": 0 + } + }, + "read": "2015-01-08T22:57:31.547920715Z" + } + } + }, + "404": { + "description": "no such container", + "schema": { + "$ref": "#/definitions/ErrorResponse" + }, + "examples": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + } + }, + "500": { + "description": "server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/containers/{id}/stop": { + "post": { + "tags": [ + "Container" + ], + "summary": "Stop a container", + "operationId": "ContainerStop", + "parameters": [ + { + "type": "string", + "description": "ID or name of the container", + "name": "id", + "in": "path", + "required": true + }, + { + "type": "integer", + "description": "Number of seconds to wait before killing the container", + "name": "t", + "in": "query" + } + ], + "responses": { + "204": { + "description": "no error" + }, + "304": { + "description": "container already stopped", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "404": { + "description": "no such container", + "schema": { + "$ref": "#/definitions/ErrorResponse" + }, + "examples": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + } + }, + "500": { + "description": "server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/containers/{id}/top": { + "get": { + "description": "On Unix systems, this is done by running the `ps` command. This endpoint is not supported on Windows.", + "tags": [ + "Container" + ], + "summary": "List processes running inside a container", + "operationId": "ContainerTop", + "parameters": [ + { + "type": "string", + "description": "ID or name of the container", + "name": "id", + "in": "path", + "required": true + }, + { + "type": "string", + "default": "-ef", + "description": "The arguments to pass to `ps`. For example, `aux`", + "name": "ps_args", + "in": "query" + } + ], + "responses": { + "200": { + "description": "no error", + "schema": { + "description": "OK response to ContainerTop operation", + "type": "object", + "title": "ContainerTopResponse", + "properties": { + "Processes": { + "description": "Each process running in the container, where each is process is an array of values corresponding to the titles", + "type": "array", + "items": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "Titles": { + "description": "The ps column titles", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "examples": { + "application/json": { + "Processes": [ + [ + "root", + "13642", + "882", + "0", + "17:03", + "pts/0", + "00:00:00", + "/bin/bash" + ], + [ + "root", + "13735", + "13642", + "0", + "17:06", + "pts/0", + "00:00:00", + "sleep 10" + ] + ], + "Titles": [ + "UID", + "PID", + "PPID", + "C", + "STIME", + "TTY", + "TIME", + "CMD" + ] + } + } + }, + "404": { + "description": "no such container", + "schema": { + "$ref": "#/definitions/ErrorResponse" + }, + "examples": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + } + }, + "500": { + "description": "server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/containers/{id}/unpause": { + "post": { + "description": "Resume a container which has been paused.", + "tags": [ + "Container" + ], + "summary": "Unpause a container", + "operationId": "ContainerUnpause", + "parameters": [ + { + "type": "string", + "description": "ID or name of the container", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "description": "no error" + }, + "404": { + "description": "no such container", + "schema": { + "$ref": "#/definitions/ErrorResponse" + }, + "examples": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + } + }, + "500": { + "description": "server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/containers/{id}/wait": { + "post": { + "description": "Block until a container stops, then returns the exit code.", + "produces": [ + "application/json" + ], + "tags": [ + "Container" + ], + "summary": "Wait for a container", + "operationId": "ContainerWait", + "parameters": [ + { + "type": "string", + "description": "ID or name of the container", + "name": "id", + "in": "path", + "required": true + }, + { + "type": "string", + "default": "not-running", + "description": "Wait until a container state reaches the given condition, either 'not-running' (default), 'next-exit', or 'removed'.", + "name": "condition", + "in": "query" + } + ], + "responses": { + "200": { + "description": "The container has exit.", + "schema": { + "description": "OK response to ContainerWait operation", + "type": "object", + "title": "ContainerWaitResponse", + "required": [ + "StatusCode" + ], + "properties": { + "Error": { + "description": "container waiting error, if any", + "type": "object", + "properties": { + "Message": { + "description": "Details of an error", + "type": "string" + } + } + }, + "StatusCode": { + "description": "Exit code of the container", + "type": "integer", + "x-nullable": false + } + } + } + }, + "404": { + "description": "no such container", + "schema": { + "$ref": "#/definitions/ErrorResponse" + }, + "examples": { + "application/json": { + "message": "No such container: c2ada9df5af8" + } + } + }, + "500": { + "description": "server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/defaultCollection/{userID}": { + "get": { + "description": "Retrieve a user's default collection.", + "produces": [ + "application/json" + ], + "tags": [ + "UCP" + ], + "summary": "Retrieve a user's default collection.", + "operationId": "Get user default collection", + "parameters": [ + { + "type": "string", + "default": "", + "description": "ID of the user", + "name": "userID", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "$ref": "#/definitions/authz.Collection" + } + }, + "default": { + "description": "Success", + "schema": { + "$ref": "#/definitions/authz.Collection" + } + } + } + }, + "put": { + "description": "Set a user's default collection.", + "consumes": [ + "application/json" + ], + "tags": [ + "UCP" + ], + "summary": "Set a user's default collection.", + "operationId": "Set user default collection", + "parameters": [ + { + "type": "string", + "default": "", + "description": "ID of the user", + "name": "userID", + "in": "path", + "required": true + }, + { + "type": "authz.CollectionID", + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/authz.CollectionID" + } + } + ], + "responses": { + "201": { + "description": "Success" + } + } + }, + "delete": { + "description": "Delete the default collection setting for a user", + "tags": [ + "UCP" + ], + "summary": "Delete the default collection setting for a user", + "operationId": "DeleteUserDefaultCollection", + "parameters": [ + { + "type": "string", + "default": "", + "description": "ID of the user whose default collection mapping will be deleted", + "name": "userID", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "description": "Success" + } + } + } + }, + "/defaultCollectionRole": { + "get": { + "description": "Retrieve the role for the logged-in user's default collection.", + "produces": [ + "application/json" + ], + "tags": [ + "UCP" + ], + "summary": "Retrieve the role for the logged-in user's default collection.", + "operationId": "Get the logged-in user's role for their default collection", + "responses": { + "200": { + "description": "Success", + "schema": { + "$ref": "#/definitions/role.Role" + } + }, + "default": { + "description": "Success", + "schema": { + "$ref": "#/definitions/role.Role" + } + } + } + } + }, + "/distribution/{name}/json": { + "get": { + "description": "Return image digest and platform information by contacting the registry.", + "produces": [ + "application/json" + ], + "tags": [ + "Distribution" + ], + "summary": "Get image information from the registry", + "operationId": "DistributionInspect", + "parameters": [ + { + "type": "string", + "description": "Image name or id", + "name": "name", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "descriptor and platform information", + "schema": { + "type": "object", + "title": "DistributionInspectResponse", + "required": [ + "Descriptor", + "Platforms" + ], + "properties": { + "Descriptor": { + "description": "A descriptor struct containing digest, media type, and size", + "type": "object", + "properties": { + "Digest": { + "type": "string" + }, + "MediaType": { + "type": "string" + }, + "Size": { + "type": "integer", + "format": "int64" + }, + "URLs": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "Platforms": { + "description": "An array containing all platforms supported by the image", + "type": "array", + "items": { + "type": "object", + "properties": { + "Architecture": { + "type": "string" + }, + "Features": { + "type": "array", + "items": { + "type": "string" + } + }, + "OS": { + "type": "string" + }, + "OSFeatures": { + "type": "array", + "items": { + "type": "string" + } + }, + "OSVersion": { + "type": "string" + }, + "Variant": { + "type": "string" + } + } + } + } + }, + "x-go-name": "DistributionInspect" + }, + "examples": { + "application/json": { + "Descriptor": { + "Digest": "sha256:c0537ff6a5218ef531ece93d4984efc99bbf3f7497c0a7726c88e2bb7584dc96", + "MediaType": "application/vnd.docker.distribution.manifest.v2+json", + "Size": 3987495, + "URLs": [ + "" + ] + }, + "Platforms": [ + { + "Architecture": "amd64", + "Features": [ + "" + ], + "OS": "linux", + "OSFeatures": [ + "" + ], + "OSVersion": "", + "Variant": "" + } + ] + } + } + }, + "401": { + "description": "Failed authentication or no image found", + "schema": { + "$ref": "#/definitions/ErrorResponse" + }, + "examples": { + "application/json": { + "message": "No such image: someimage (tag: latest)" + } + } + }, + "500": { + "description": "Server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/events": { + "get": { + "description": "Stream real-time events from the server.\n\nVarious objects within Docker report events when something happens to them.\n\nContainers report these events: `attach`, `commit`, `copy`, `create`, `destroy`, `detach`, `die`, `exec_create`, `exec_detach`, `exec_start`, `exec_die`, `export`, `health_status`, `kill`, `oom`, `pause`, `rename`, `resize`, `restart`, `start`, `stop`, `top`, `unpause`, and `update`\n\nImages report these events: `delete`, `import`, `load`, `pull`, `push`, `save`, `tag`, and `untag`\n\nVolumes report these events: `create`, `mount`, `unmount`, and `destroy`\n\nNetworks report these events: `create`, `connect`, `disconnect`, `destroy`, `update`, and `remove`\n\nThe Docker daemon reports these events: `reload`\n\nServices report these events: `create`, `update`, and `remove`\n\nNodes report these events: `create`, `update`, and `remove`\n\nSecrets report these events: `create`, `update`, and `remove`\n\nConfigs report these events: `create`, `update`, and `remove`\n", + "produces": [ + "application/json" + ], + "tags": [ + "System" + ], + "summary": "Monitor events", + "operationId": "SystemEvents", + "parameters": [ + { + "type": "string", + "description": "Show events created since this timestamp then stream new events.", + "name": "since", + "in": "query" + }, + { + "type": "string", + "description": "Show events created until this timestamp then stop streaming.", + "name": "until", + "in": "query" + }, + { + "type": "string", + "description": "A JSON encoded value of filters (a `map[string][]string`) to process on the event list. Available filters:\n\n- `config=\u003cstring\u003e` config name or ID\n- `container=\u003cstring\u003e` container name or ID\n- `daemon=\u003cstring\u003e` daemon name or ID\n- `event=\u003cstring\u003e` event type\n- `image=\u003cstring\u003e` image name or ID\n- `label=\u003cstring\u003e` image or container label\n- `network=\u003cstring\u003e` network name or ID\n- `node=\u003cstring\u003e` node ID\n- `plugin`=\u003cstring\u003e plugin name or ID\n- `scope`=\u003cstring\u003e local or swarm\n- `secret=\u003cstring\u003e` secret name or ID\n- `service=\u003cstring\u003e` service name or ID\n- `type=\u003cstring\u003e` object to filter by, one of `container`, `image`, `volume`, `network`, `daemon`, `plugin`, `node`, `service`, `secret` or `config`\n- `volume=\u003cstring\u003e` volume name\n", + "name": "filters", + "in": "query" + } + ], + "responses": { + "200": { + "description": "no error", + "schema": { + "type": "object", + "title": "SystemEventsResponse", + "properties": { + "Action": { + "description": "The type of event", + "type": "string" + }, + "Actor": { + "type": "object", + "properties": { + "Attributes": { + "description": "Various key/value attributes of the object, depending on its type", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "ID": { + "description": "The ID of the object emitting the event", + "type": "string" + } + } + }, + "Type": { + "description": "The type of object emitting the event", + "type": "string" + }, + "time": { + "description": "Timestamp of event", + "type": "integer" + }, + "timeNano": { + "description": "Timestamp of event, with nanosecond accuracy", + "type": "integer", + "format": "int64" + } + } + }, + "examples": { + "application/json": { + "Action": "create", + "Actor": { + "Attributes": { + "com.example.some-label": "some-label-value", + "image": "alpine", + "name": "my-container" + }, + "ID": "ede54ee1afda366ab42f824e8a5ffd195155d853ceaec74a927f249ea270c743" + }, + "Type": "container", + "time": 1461943101 + } + } + }, + "400": { + "description": "bad parameter", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "500": { + "description": "server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/exec/{id}/json": { + "get": { + "description": "Return low-level information about an exec instance.", + "produces": [ + "application/json" + ], + "tags": [ + "Exec" + ], + "summary": "Inspect an exec instance", + "operationId": "ExecInspect", + "parameters": [ + { + "type": "string", + "description": "Exec instance ID", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "No error", + "schema": { + "type": "object", + "title": "ExecInspectResponse", + "properties": { + "CanRemove": { + "type": "boolean" + }, + "ContainerID": { + "type": "string" + }, + "DetachKeys": { + "type": "string" + }, + "ExitCode": { + "type": "integer" + }, + "ID": { + "type": "string" + }, + "OpenStderr": { + "type": "boolean" + }, + "OpenStdin": { + "type": "boolean" + }, + "OpenStdout": { + "type": "boolean" + }, + "Pid": { + "description": "The system process ID for the exec process.", + "type": "integer" + }, + "ProcessConfig": { + "$ref": "#/definitions/ProcessConfig" + }, + "Running": { + "type": "boolean" + } + } + }, + "examples": { + "application/json": { + "CanRemove": false, + "ContainerID": "b53ee82b53a40c7dca428523e34f741f3abc51d9f297a14ff874bf761b995126", + "DetachKeys": "", + "ExitCode": 2, + "ID": "f33bbfb39f5b142420f4759b2348913bd4a8d1a6d7fd56499cb41a1bb91d7b3b", + "OpenStderr": true, + "OpenStdin": true, + "OpenStdout": true, + "Pid": 42000, + "ProcessConfig": { + "arguments": [ + "-c", + "exit 2" + ], + "entrypoint": "sh", + "privileged": false, + "tty": true, + "user": "1000" + }, + "Running": false + } + } + }, + "404": { + "description": "No such exec instance", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "500": { + "description": "Server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/exec/{id}/resize": { + "post": { + "description": "Resize the TTY session used by an exec instance. This endpoint only works if `tty` was specified as part of creating and starting the exec instance.", + "tags": [ + "Exec" + ], + "summary": "Resize an exec instance", + "operationId": "ExecResize", + "parameters": [ + { + "type": "string", + "description": "Exec instance ID", + "name": "id", + "in": "path", + "required": true + }, + { + "type": "integer", + "description": "Height of the TTY session in characters", + "name": "h", + "in": "query" + }, + { + "type": "integer", + "description": "Width of the TTY session in characters", + "name": "w", + "in": "query" + } + ], + "responses": { + "201": { + "description": "No error" + }, + "404": { + "description": "No such exec instance", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/exec/{id}/start": { + "post": { + "description": "Starts a previously set up exec instance. If detach is true, this endpoint returns immediately after starting the command. Otherwise, it sets up an interactive session with the command.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/vnd.docker.raw-stream" + ], + "tags": [ + "Exec" + ], + "summary": "Start an exec instance", + "operationId": "ExecStart", + "parameters": [ + { + "name": "execStartConfig", + "in": "body", + "schema": { + "type": "object", + "properties": { + "Detach": { + "description": "Detach from the command.", + "type": "boolean" + }, + "Tty": { + "description": "Allocate a pseudo-TTY.", + "type": "boolean" + } + }, + "example": { + "Detach": false, + "Tty": false + } + } + }, + { + "type": "string", + "description": "Exec instance ID", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "No error" + }, + "404": { + "description": "No such exec instance", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "409": { + "description": "Container is stopped or paused", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/id/": { + "get": { + "description": "Identify the Currently Authenticated Account.", + "produces": [ + "application/json" + ], + "tags": [ + "Identity" + ], + "summary": "Identify the Currently Authenticated Account.", + "operationId": "ID", + "responses": { + "200": { + "description": "Success, current account returned." + }, + "default": { + "description": "Success, current account returned." + } + } + } + }, + "/id/logout": { + "post": { + "description": "Delete the current session is use.", + "produces": [ + "application/json" + ], + "tags": [ + "Identity" + ], + "summary": "Delete the current session is use.", + "operationId": "Logout", + "responses": { + "204": { + "description": "Success, current session deleted." + } + } + } + }, + "/images/create": { + "post": { + "description": "Create an image by either pulling it from a registry or importing it.\n\nThe `create` request pulls the image onto every node in the swarm that exists at that time and that have the right operating system. Nodes that join the swarm later or that don't have the same base OS as the image won't get the image.", + "consumes": [ + "text/plain", + "application/octet-stream" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Image" + ], + "summary": "Create an image", + "operationId": "ImageCreate", + "parameters": [ + { + "type": "string", + "description": "Name of the image to pull. The name may include a tag or digest. This parameter may only be used when pulling an image. The pull is cancelled if the HTTP connection is closed.", + "name": "fromImage", + "in": "query" + }, + { + "type": "string", + "description": "Source to import. The value may be a URL from which the image can be retrieved or `-` to read the image from the request body. This parameter may only be used when importing an image.", + "name": "fromSrc", + "in": "query" + }, + { + "type": "string", + "description": "Repository name given to an image when it is imported. The repo may include a tag. This parameter may only be used when importing an image.", + "name": "repo", + "in": "query" + }, + { + "type": "string", + "description": "Tag or digest. If empty when pulling an image, this causes all tags for the given image to be pulled.", + "name": "tag", + "in": "query" + }, + { + "description": "Image content if the value `-` has been specified in fromSrc query parameter", + "name": "inputImage", + "in": "body", + "schema": { + "type": "string" + } + }, + { + "type": "string", + "description": "A base64-encoded auth configuration. [See the authentication section for details.](#section/Authentication)", + "name": "X-Registry-Auth", + "in": "header" + }, + { + "type": "string", + "default": "", + "description": "Platform in the format os[/arch[/variant]]", + "name": "platform", + "in": "query" + } + ], + "responses": { + "200": { + "description": "no error" + }, + "404": { + "description": "repository does not exist or no read access", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "500": { + "description": "server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/images/get": { + "get": { + "description": "Get a tarball containing all images and metadata for several image repositories.\n\nFor each value of the `names` parameter: if it is a specific name and tag (e.g. `ubuntu:latest`), then only that image (and its parents) are returned; if it is an image ID, similarly only that image (and its parents) are returned and there would be no names referenced in the 'repositories' file for this image ID.\n\nFor details on the format, see [the export image endpoint](#operation/ImageGet).\n", + "produces": [ + "application/x-tar" + ], + "tags": [ + "Image" + ], + "summary": "Export several images", + "operationId": "ImageGetAll", + "parameters": [ + { + "type": "array", + "items": { + "type": "string" + }, + "description": "Image names to filter by", + "name": "names", + "in": "query" + } + ], + "responses": { + "200": { + "description": "no error", + "schema": { + "type": "string", + "format": "binary" + } + }, + "500": { + "description": "server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/images/json": { + "get": { + "description": "Returns a list of images on the server. Note that it uses a different, smaller representation of an image than inspecting a single image.\n\nThis endpoint returns the union of all images on all nodes in the cluster.", + "produces": [ + "application/json" + ], + "tags": [ + "Image" + ], + "summary": "List Images", + "operationId": "ImageList", + "parameters": [ + { + "type": "boolean", + "default": false, + "description": "Show all images. Only images from a final layer (no children) are shown by default.", + "name": "all", + "in": "query" + }, + { + "type": "string", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to process on the images list. Available filters:\n\n- `before`=(`\u003cimage-name\u003e[:\u003ctag\u003e]`, `\u003cimage id\u003e` or `\u003cimage@digest\u003e`)\n- `dangling=true`\n- `label=key` or `label=\"key=value\"` of an image label\n- `reference`=(`\u003cimage-name\u003e[:\u003ctag\u003e]`)\n- `since`=(`\u003cimage-name\u003e[:\u003ctag\u003e]`, `\u003cimage id\u003e` or `\u003cimage@digest\u003e`)\n", + "name": "filters", + "in": "query" + }, + { + "type": "boolean", + "default": false, + "description": "Show digest information as a `RepoDigests` field on each image.", + "name": "digests", + "in": "query" + } + ], + "responses": { + "200": { + "description": "Summary image data for the images matching the query", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/ImageSummary" + } + }, + "examples": { + "application/json": [ + { + "Containers": 2, + "Created": 1474925151, + "Id": "sha256:e216a057b1cb1efc11f8a268f37ef62083e70b1b38323ba252e25ac88904a7e8", + "Labels": {}, + "ParentId": "", + "RepoDigests": [ + "ubuntu@sha256:992069aee4016783df6345315302fa59681aae51a8eeb2f889dea59290f21787" + ], + "RepoTags": [ + "ubuntu:12.04", + "ubuntu:precise" + ], + "SharedSize": 0, + "Size": 103579269, + "VirtualSize": 103579269 + }, + { + "Containers": 5, + "Created": 1403128455, + "Id": "sha256:3e314f95dcace0f5e4fd37b10862fe8398e3c60ed36600bc0ca5fda78b087175", + "Labels": {}, + "ParentId": "", + "RepoDigests": [ + "ubuntu@sha256:002fba3e3255af10be97ea26e476692a7ebed0bb074a9ab960b2e7a1526b15d7", + "ubuntu@sha256:68ea0200f0b90df725d99d823905b04cf844f6039ef60c60bf3e019915017bd3" + ], + "RepoTags": [ + "ubuntu:12.10", + "ubuntu:quantal" + ], + "SharedSize": 0, + "Size": 172064416, + "VirtualSize": 172064416 + } + ] + } + }, + "500": { + "description": "server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/images/load": { + "post": { + "description": "Load a set of images and tags into a repository.\n\nFor details on the format, see [the export image endpoint](#operation/ImageGet).\n\n\nThe image is loaded on all nodes in the swarm that are compatible with the image's architecture. For example, Windows images aren't loaded on Linux nodes, and vice-versa.", + "consumes": [ + "application/x-tar" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Image" + ], + "summary": "Import images", + "operationId": "ImageLoad", + "parameters": [ + { + "description": "Tar archive containing images", + "name": "imagesTarball", + "in": "body", + "schema": { + "type": "string", + "format": "binary" + } + }, + { + "type": "boolean", + "default": false, + "description": "Suppress progress details during load.", + "name": "quiet", + "in": "query" + } + ], + "responses": { + "200": { + "description": "no error" + }, + "500": { + "description": "server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/images/prune": { + "post": { + "produces": [ + "application/json" + ], + "tags": [ + "Image" + ], + "summary": "Delete unused images", + "operationId": "ImagePrune", + "parameters": [ + { + "type": "string", + "description": "Filters to process on the prune list, encoded as JSON (a `map[string][]string`). Available filters:\n\n- `dangling=\u003cboolean\u003e` When set to `true` (or `1`), prune only\n unused *and* untagged images. When set to `false`\n (or `0`), all unused images are pruned.\n- `until=\u003cstring\u003e` Prune images created before this timestamp. The `\u003ctimestamp\u003e` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time.\n- `label` (`label=\u003ckey\u003e`, `label=\u003ckey\u003e=\u003cvalue\u003e`, `label!=\u003ckey\u003e`, or `label!=\u003ckey\u003e=\u003cvalue\u003e`) Prune images with (or without, in case `label!=...` is used) the specified labels.\n", + "name": "filters", + "in": "query" + } + ], + "responses": { + "200": { + "description": "No error", + "schema": { + "type": "object", + "title": "ImagePruneResponse", + "properties": { + "ImagesDeleted": { + "description": "Images that were deleted", + "type": "array", + "items": { + "$ref": "#/definitions/ImageDeleteResponseItem" + } + }, + "SpaceReclaimed": { + "description": "Disk space reclaimed in bytes", + "type": "integer", + "format": "int64" + } + } + } + }, + "500": { + "description": "Server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/images/search": { + "get": { + "description": "Search for an image on Docker Hub.", + "produces": [ + "application/json" + ], + "tags": [ + "Image" + ], + "summary": "Search images", + "operationId": "ImageSearch", + "parameters": [ + { + "type": "string", + "description": "Term to search", + "name": "term", + "in": "query", + "required": true + }, + { + "type": "integer", + "description": "Maximum number of results to return", + "name": "limit", + "in": "query" + }, + { + "type": "string", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to process on the images list. Available filters:\n\n- `is-automated=(true|false)`\n- `is-official=(true|false)`\n- `stars=\u003cnumber\u003e` Matches images that has at least 'number' stars.\n", + "name": "filters", + "in": "query" + } + ], + "responses": { + "200": { + "description": "No error", + "schema": { + "type": "array", + "items": { + "type": "object", + "title": "ImageSearchResponseItem", + "properties": { + "description": { + "type": "string" + }, + "is_automated": { + "type": "boolean" + }, + "is_official": { + "type": "boolean" + }, + "name": { + "type": "string" + }, + "star_count": { + "type": "integer" + } + } + } + }, + "examples": { + "application/json": [ + { + "description": "", + "is_automated": false, + "is_official": false, + "name": "wma55/u1210sshd", + "star_count": 0 + }, + { + "description": "", + "is_automated": false, + "is_official": false, + "name": "jdswinbank/sshd", + "star_count": 0 + }, + { + "description": "", + "is_automated": false, + "is_official": false, + "name": "vgauthier/sshd", + "star_count": 0 + } + ] + } + }, + "500": { + "description": "Server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/images/{name}": { + "delete": { + "description": "Remove an image, along with any untagged parent images that were\nreferenced by that image.\n\nImages can't be removed if they have descendant images, are being\nused by a running container or are being used by a build.\n", + "produces": [ + "application/json" + ], + "tags": [ + "Image" + ], + "summary": "Remove an image", + "operationId": "ImageDelete", + "parameters": [ + { + "type": "string", + "description": "Image name or ID", + "name": "name", + "in": "path", + "required": true + }, + { + "type": "boolean", + "default": false, + "description": "Remove the image even if it is being used by stopped containers or has other tags", + "name": "force", + "in": "query" + }, + { + "type": "boolean", + "default": false, + "description": "Do not delete untagged parent images", + "name": "noprune", + "in": "query" + } + ], + "responses": { + "200": { + "description": "The image was deleted successfully", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/ImageDeleteResponseItem" + } + }, + "examples": { + "application/json": [ + { + "Untagged": "3e2f21a89f" + }, + { + "Deleted": "3e2f21a89f" + }, + { + "Deleted": "53b4f83ac9" + } + ] + } + }, + "404": { + "description": "No such image", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "409": { + "description": "Conflict", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "500": { + "description": "Server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/images/{name}/get": { + "get": { + "description": "Get a tarball containing all images and metadata for a repository.\n\nIf `name` is a specific name and tag (e.g. `ubuntu:latest`), then only that image (and its parents) are returned. If `name` is an image ID, similarly only that image (and its parents) are returned, but with the exclusion of the `repositories` file in the tarball, as there were no image names referenced.\n\n### Image tarball format\n\nAn image tarball contains one directory per image layer (named using its long ID), each containing these files:\n\n- `VERSION`: currently `1.0` - the file format version\n- `json`: detailed layer information, similar to `docker inspect layer_id`\n- `layer.tar`: A tarfile containing the filesystem changes in this layer\n\nThe `layer.tar` file contains `aufs` style `.wh..wh.aufs` files and directories for storing attribute changes and deletions.\n\nIf the tarball defines a repository, the tarball should also include a `repositories` file at the root that contains a list of repository and tag names mapped to layer IDs.\n\n```json\n{\n \"hello-world\": {\n \"latest\": \"565a9d68a73f6706862bfe8409a7f659776d4d60a8d096eb4a3cbce6999cc2a1\"\n }\n}\n```\n", + "produces": [ + "application/x-tar" + ], + "tags": [ + "Image" + ], + "summary": "Export an image", + "operationId": "ImageGet", + "parameters": [ + { + "type": "string", + "description": "Image name or ID", + "name": "name", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "no error", + "schema": { + "type": "string", + "format": "binary" + } + }, + "500": { + "description": "server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/images/{name}/history": { + "get": { + "description": "Return parent layers of an image.", + "produces": [ + "application/json" + ], + "tags": [ + "Image" + ], + "summary": "Get the history of an image", + "operationId": "ImageHistory", + "parameters": [ + { + "type": "string", + "description": "Image name or ID", + "name": "name", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "List of image layers", + "schema": { + "type": "array", + "items": { + "description": "individual image layer information in response to ImageHistory operation", + "type": "object", + "title": "HistoryResponseItem", + "required": [ + "Id", + "Created", + "CreatedBy", + "Tags", + "Size", + "Comment" + ], + "properties": { + "Comment": { + "type": "string", + "x-nullable": false + }, + "Created": { + "type": "integer", + "format": "int64", + "x-nullable": false + }, + "CreatedBy": { + "type": "string", + "x-nullable": false + }, + "Id": { + "type": "string", + "x-nullable": false + }, + "Size": { + "type": "integer", + "format": "int64", + "x-nullable": false + }, + "Tags": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "x-go-name": "HistoryResponseItem" + } + }, + "examples": { + "application/json": [ + { + "Comment": "", + "Created": 1398108230, + "CreatedBy": "/bin/sh -c #(nop) ADD file:eb15dbd63394e063b805a3c32ca7bf0266ef64676d5a6fab4801f2e81e2a5148 in /", + "Id": "3db9c44f45209632d6050b35958829c3a2aa256d81b9a7be45b362ff85c54710", + "Size": 182964289, + "Tags": [ + "ubuntu:lucid", + "ubuntu:10.04" + ] + }, + { + "Comment": "", + "Created": 1398108222, + "CreatedBy": "/bin/sh -c #(nop) MAINTAINER Tianon Gravi \u003cadmwiggin@gmail.com\u003e - mkimage-debootstrap.sh -i iproute,iputils-ping,ubuntu-minimal -t lucid.tar.xz lucid http://archive.ubuntu.com/ubuntu/", + "Id": "6cfa4d1f33fb861d4d114f43b25abd0ac737509268065cdfd69d544a59c85ab8", + "Size": 0, + "Tags": [] + }, + { + "Comment": "Imported from -", + "Created": 1371157430, + "CreatedBy": "", + "Id": "511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d4d2698e22c158", + "Size": 0, + "Tags": [ + "scratch12:latest", + "scratch:latest" + ] + } + ] + } + }, + "404": { + "description": "No such image", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "500": { + "description": "Server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/images/{name}/json": { + "get": { + "description": "Return low-level information about an image.", + "produces": [ + "application/json" + ], + "tags": [ + "Image" + ], + "summary": "Inspect an image", + "operationId": "ImageInspect", + "parameters": [ + { + "type": "string", + "description": "Image name or id", + "name": "name", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "No error", + "schema": { + "$ref": "#/definitions/Image" + }, + "examples": { + "application/json": { + "Architecture": "amd64", + "Author": "", + "Comment": "", + "Config": { + "AttachStderr": false, + "AttachStdin": false, + "AttachStdout": false, + "Cmd": [ + "/bin/bash" + ], + "Domainname": "", + "Env": [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" + ], + "Hostname": "e611e15f9c9d", + "Image": "91e54dfb11794fad694460162bf0cb0a4fa710cfa3f60979c177d920813e267c", + "Labels": { + "com.example.license": "GPL", + "com.example.vendor": "Acme", + "com.example.version": "1.0" + }, + "MacAddress": "", + "NetworkDisabled": false, + "OnBuild": [], + "OpenStdin": false, + "PublishService": "", + "StdinOnce": false, + "Tty": false, + "User": "", + "WorkingDir": "" + }, + "Container": "cb91e48a60d01f1e27028b4fc6819f4f290b3cf12496c8176ec714d0d390984a", + "ContainerConfig": { + "AttachStderr": false, + "AttachStdin": false, + "AttachStdout": false, + "Cmd": [ + "/bin/sh", + "-c", + "#(nop) LABEL com.example.vendor=Acme com.example.license=GPL com.example.version=1.0" + ], + "Domainname": "", + "Env": [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" + ], + "Hostname": "e611e15f9c9d", + "Image": "91e54dfb11794fad694460162bf0cb0a4fa710cfa3f60979c177d920813e267c", + "Labels": { + "com.example.license": "GPL", + "com.example.vendor": "Acme", + "com.example.version": "1.0" + }, + "MacAddress": "", + "NetworkDisabled": false, + "OnBuild": [], + "OpenStdin": false, + "PublishService": "", + "StdinOnce": false, + "Tty": false, + "User": "", + "WorkingDir": "" + }, + "Created": "2015-09-10T08:30:53.26995814Z", + "DockerVersion": "1.9.0-dev", + "GraphDriver": { + "Data": {}, + "Name": "aufs" + }, + "Id": "sha256:85f05633ddc1c50679be2b16a0479ab6f7637f8884e0cfe0f4d20e1ebb3d6e7c", + "Os": "linux", + "Parent": "sha256:91e54dfb11794fad694460162bf0cb0a4fa710cfa3f60979c177d920813e267c", + "RepoDigests": [ + "localhost:5000/test/busybox/example@sha256:cbbf2f9a99b47fc460d422812b6a5adff7dfee951d8fa2e4a98caa0382cfbdbf" + ], + "RepoTags": [ + "example:1.0", + "example:latest", + "example:stable" + ], + "RootFS": { + "Layers": [ + "sha256:1834950e52ce4d5a88a1bbd131c537f4d0e56d10ff0dd69e66be3b7dfa9df7e6", + "sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef" + ], + "Type": "layers" + }, + "Size": 0, + "VirtualSize": 188359297 + } + } + }, + "404": { + "description": "No such image", + "schema": { + "$ref": "#/definitions/ErrorResponse" + }, + "examples": { + "application/json": { + "message": "No such image: someimage (tag: latest)" + } + } + }, + "500": { + "description": "Server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/images/{name}/push": { + "post": { + "description": "Push an image to a registry.\n\nIf you wish to push an image on to a private registry, that image must already have a tag which references the registry. For example, `registry.example.com/myimage:latest`.\n\nThe push is cancelled if the HTTP connection is closed.\n", + "consumes": [ + "application/octet-stream" + ], + "tags": [ + "Image" + ], + "summary": "Push an image", + "operationId": "ImagePush", + "parameters": [ + { + "type": "string", + "description": "Image name or ID.", + "name": "name", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "The tag to associate with the image on the registry.", + "name": "tag", + "in": "query" + }, + { + "type": "string", + "description": "A base64-encoded auth configuration. [See the authentication section for details.](#section/Authentication)", + "name": "X-Registry-Auth", + "in": "header", + "required": true + } + ], + "responses": { + "200": { + "description": "No error" + }, + "404": { + "description": "No such image", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "500": { + "description": "Server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/images/{name}/tag": { + "post": { + "description": "Tag an image so that it becomes part of a repository.", + "tags": [ + "Image" + ], + "summary": "Tag an image", + "operationId": "ImageTag", + "parameters": [ + { + "type": "string", + "description": "Image name or ID to tag.", + "name": "name", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "The repository to tag in. For example, `someuser/someimage`.", + "name": "repo", + "in": "query" + }, + { + "type": "string", + "description": "The name of the new tag.", + "name": "tag", + "in": "query" + } + ], + "responses": { + "201": { + "description": "No error" + }, + "400": { + "description": "Bad parameter", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "404": { + "description": "No such image", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "409": { + "description": "Conflict", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "500": { + "description": "Server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/info": { + "get": { + "description": "UCP returns a combination of info about the swarm, including:\n\n- Swarm manager status\n\n- Swarm scheduler strategy\n\n- Swarm-manager endpoints that are useful for administrator access when troubleshooting\n\n- Engine proxy endpoints for each node in the swarm that are useful for troubleshooting\n\n- Plugins present on the current manager node\n\n- Engine information for the current manager node", + "produces": [ + "application/json" + ], + "tags": [ + "System" + ], + "summary": "Get system information", + "operationId": "SystemInfo", + "responses": { + "200": { + "description": "No error", + "schema": { + "$ref": "#/definitions/SystemInfo" + } + }, + "500": { + "description": "Server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/kubernetesNamespaces": { + "get": { + "description": "Lists all namespaces for which a user has a grant", + "produces": [ + "application/json" + ], + "tags": [ + "UCP" + ], + "summary": "Lists all namespaces for which a user has a grant", + "operationId": "ListUserNamespaces", + "responses": { + "200": { + "description": "Success", + "schema": { + "$ref": "#/definitions/v1.NamespaceList" + } + }, + "default": { + "description": "Success", + "schema": { + "$ref": "#/definitions/v1.NamespaceList" + } + } + } + } + }, + "/metricsdiscovery": { + "get": { + "tags": [ + "UCP" + ], + "summary": "/metricsdiscovery", + "operationId": "restfulNoop", + "responses": {} + } + }, + "/networks": { + "get": { + "description": "Returns a list of networks. For details on the format, see [the network inspect endpoint](#operation/NetworkInspect).\n\nNote that it uses a different, smaller representation of a network than inspecting a single network. For example,\nthe list of containers attached to the network is not propagated in API versions 1.28 and up.\n\n\nNode-specific networks, like those with bridge and third-party drivers, are prefixed with the node name.", + "produces": [ + "application/json" + ], + "tags": [ + "Network" + ], + "summary": "List networks", + "operationId": "NetworkList", + "parameters": [ + { + "type": "string", + "description": "JSON encoded value of the filters (a `map[string][]string`) to process on the networks list. Available filters:\n\n- `driver=\u003cdriver-name\u003e` Matches a network's driver.\n- `id=\u003cnetwork-id\u003e` Matches all or part of a network ID.\n- `label=\u003ckey\u003e` or `label=\u003ckey\u003e=\u003cvalue\u003e` of a network label.\n- `name=\u003cnetwork-name\u003e` Matches all or part of a network name.\n- `scope=[\"swarm\"|\"global\"|\"local\"]` Filters networks by scope (`swarm`, `global`, or `local`).\n- `type=[\"custom\"|\"builtin\"]` Filters networks by type. The `custom` keyword returns all user-defined networks.\n", + "name": "filters", + "in": "query" + } + ], + "responses": { + "200": { + "description": "No error", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/Network" + } + }, + "examples": { + "application/json": [ + { + "Attachable": false, + "Created": "2016-10-19T06:21:00.416543526Z", + "Driver": "bridge", + "EnableIPv6": false, + "IPAM": { + "Config": [ + { + "Subnet": "172.17.0.0/16" + } + ], + "Driver": "default" + }, + "Id": "f2de39df4171b0dc801e8002d1d999b77256983dfc63041c0f34030aa3977566", + "Ingress": false, + "Internal": false, + "Name": "bridge", + "Options": { + "com.docker.network.bridge.default_bridge": "true", + "com.docker.network.bridge.enable_icc": "true", + "com.docker.network.bridge.enable_ip_masquerade": "true", + "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", + "com.docker.network.bridge.name": "docker0", + "com.docker.network.driver.mtu": "1500" + }, + "Scope": "local" + }, + { + "Attachable": false, + "Containers": {}, + "Created": "0001-01-01T00:00:00Z", + "Driver": "null", + "EnableIPv6": false, + "IPAM": { + "Config": [], + "Driver": "default" + }, + "Id": "e086a3893b05ab69242d3c44e49483a3bbbd3a26b46baa8f61ab797c1088d794", + "Ingress": false, + "Internal": false, + "Name": "none", + "Options": {}, + "Scope": "local" + }, + { + "Attachable": false, + "Containers": {}, + "Created": "0001-01-01T00:00:00Z", + "Driver": "host", + "EnableIPv6": false, + "IPAM": { + "Config": [], + "Driver": "default" + }, + "Id": "13e871235c677f196c4e1ecebb9dc733b9b2d2ab589e30c539efeda84a24215e", + "Ingress": false, + "Internal": false, + "Name": "host", + "Options": {}, + "Scope": "local" + } + ] + } + }, + "500": { + "description": "Server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/networks/create": { + "post": { + "description": "If the name is prefixed with the name of a node, the `create` request is sent to the specified node. Use the '/' character to separate the node name, like `testnode/testnet`.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Network" + ], + "summary": "Create a network", + "operationId": "NetworkCreate", + "parameters": [ + { + "description": "Network configuration", + "name": "networkConfig", + "in": "body", + "required": true, + "schema": { + "type": "object", + "required": [ + "Name" + ], + "properties": { + "Attachable": { + "description": "Globally scoped network is manually attachable by regular containers from workers in swarm mode.", + "type": "boolean" + }, + "CheckDuplicate": { + "description": "Check for networks with duplicate names. Since Network is primarily keyed based on a random ID and not on the name, and network name is strictly a user-friendly alias to the network which is uniquely identified using ID, there is no guaranteed way to check for duplicates. CheckDuplicate is there to provide a best effort checking of any networks which has the same name but it is not guaranteed to catch all name collisions.", + "type": "boolean" + }, + "Driver": { + "description": "Name of the network driver plugin to use.", + "type": "string", + "default": "bridge" + }, + "EnableIPv6": { + "description": "Enable IPv6 on the network.", + "type": "boolean" + }, + "IPAM": { + "description": "Optional custom IP scheme for the network.", + "$ref": "#/definitions/IPAM" + }, + "Ingress": { + "description": "Ingress network is the network which provides the routing-mesh in swarm mode.", + "type": "boolean" + }, + "Internal": { + "description": "Restrict external access to the network.", + "type": "boolean" + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "Name": { + "description": "The network's name.", + "type": "string" + }, + "Options": { + "description": "Network specific options to be used by the drivers.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + }, + "example": { + "Attachable": false, + "CheckDuplicate": false, + "Driver": "bridge", + "EnableIPv6": true, + "IPAM": { + "Config": [ + { + "Gateway": "172.20.10.11", + "IPRange": "172.20.10.0/24", + "Subnet": "172.20.0.0/16" + }, + { + "Gateway": "2001:db8:abcd::1011", + "Subnet": "2001:db8:abcd::/64" + } + ], + "Driver": "default", + "Options": { + "foo": "bar" + } + }, + "Ingress": false, + "Internal": true, + "Labels": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + }, + "Name": "isolated_nw", + "Options": { + "com.docker.network.bridge.default_bridge": "true", + "com.docker.network.bridge.enable_icc": "true", + "com.docker.network.bridge.enable_ip_masquerade": "true", + "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", + "com.docker.network.bridge.name": "docker0", + "com.docker.network.driver.mtu": "1500" + } + } + } + } + ], + "responses": { + "201": { + "description": "No error", + "schema": { + "type": "object", + "title": "NetworkCreateResponse", + "properties": { + "Id": { + "description": "The ID of the created network.", + "type": "string" + }, + "Warning": { + "type": "string" + } + }, + "example": { + "Id": "22be93d5babb089c5aab8dbc369042fad48ff791584ca2da2100db837a1c7c30", + "Warning": "" + } + } + }, + "403": { + "description": "operation not supported for pre-defined networks", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "404": { + "description": "plugin not found", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "500": { + "description": "Server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/networks/prune": { + "post": { + "description": "Not supported on UCP.", + "produces": [ + "application/json" + ], + "tags": [ + "Network" + ], + "summary": "Delete unused networks", + "operationId": "NetworkPrune", + "parameters": [ + { + "type": "string", + "description": "Filters to process on the prune list, encoded as JSON (a `map[string][]string`).\n\nAvailable filters:\n- `until=\u003ctimestamp\u003e` Prune networks created before this timestamp. The `\u003ctimestamp\u003e` can be Unix timestamps, date formatted timestamps, or Go duration strings (e.g. `10m`, `1h30m`) computed relative to the daemon machine’s time.\n- `label` (`label=\u003ckey\u003e`, `label=\u003ckey\u003e=\u003cvalue\u003e`, `label!=\u003ckey\u003e`, or `label!=\u003ckey\u003e=\u003cvalue\u003e`) Prune networks with (or without, in case `label!=...` is used) the specified labels.\n", + "name": "filters", + "in": "query" + } + ], + "responses": { + "200": { + "description": "No error", + "schema": { + "type": "object", + "title": "NetworkPruneResponse", + "properties": { + "NetworksDeleted": { + "description": "Networks that were deleted", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "500": { + "description": "Server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/networks/{id}": { + "get": { + "description": "Node-specific networks, like those with bridge and third-party drivers, are prefixed with the node name.", + "produces": [ + "application/json" + ], + "tags": [ + "Network" + ], + "summary": "Inspect a network", + "operationId": "NetworkInspect", + "parameters": [ + { + "type": "string", + "description": "Network ID or name", + "name": "id", + "in": "path", + "required": true + }, + { + "type": "boolean", + "default": false, + "description": "Detailed inspect output for troubleshooting", + "name": "verbose", + "in": "query" + }, + { + "type": "string", + "description": "Filter the network by scope (swarm, global, or local)", + "name": "scope", + "in": "query" + } + ], + "responses": { + "200": { + "description": "No error", + "schema": { + "$ref": "#/definitions/Network" + } + }, + "404": { + "description": "Network not found", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "500": { + "description": "Server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + }, + "delete": { + "tags": [ + "Network" + ], + "summary": "Remove a network", + "operationId": "NetworkDelete", + "parameters": [ + { + "type": "string", + "description": "Network ID or name", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "description": "No error" + }, + "403": { + "description": "operation not supported for pre-defined networks", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "404": { + "description": "no such network", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "500": { + "description": "Server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/networks/{id}/connect": { + "post": { + "consumes": [ + "application/json" + ], + "tags": [ + "Network" + ], + "summary": "Connect a container to a network", + "operationId": "NetworkConnect", + "parameters": [ + { + "type": "string", + "description": "Network ID or name", + "name": "id", + "in": "path", + "required": true + }, + { + "name": "container", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "Container": { + "description": "The ID or name of the container to connect to the network.", + "type": "string" + }, + "EndpointConfig": { + "$ref": "#/definitions/EndpointSettings" + } + }, + "example": { + "Container": "3613f73ba0e4", + "EndpointConfig": { + "IPAMConfig": { + "IPv4Address": "172.24.56.89", + "IPv6Address": "2001:db8::5689" + } + } + } + } + } + ], + "responses": { + "200": { + "description": "No error" + }, + "403": { + "description": "Operation not supported for swarm scoped networks", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "404": { + "description": "Network or container not found", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "500": { + "description": "Server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/networks/{id}/disconnect": { + "post": { + "consumes": [ + "application/json" + ], + "tags": [ + "Network" + ], + "summary": "Disconnect a container from a network", + "operationId": "NetworkDisconnect", + "parameters": [ + { + "type": "string", + "description": "Network ID or name", + "name": "id", + "in": "path", + "required": true + }, + { + "name": "container", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "Container": { + "description": "The ID or name of the container to disconnect from the network.", + "type": "string" + }, + "Force": { + "description": "Force the container to disconnect from the network.", + "type": "boolean" + } + } + } + } + ], + "responses": { + "200": { + "description": "No error" + }, + "403": { + "description": "Operation not supported for swarm scoped networks", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "404": { + "description": "Network or container not found", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "500": { + "description": "Server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/nodes": { + "get": { + "description": "UCP augments the `Status.State` based on the status of the UCP components running on the current node.", + "tags": [ + "Node" + ], + "summary": "List nodes", + "operationId": "NodeList", + "parameters": [ + { + "type": "string", + "description": "Filters to process on the nodes list, encoded as JSON (a `map[string][]string`).\n\nAvailable filters:\n- `id=\u003cnode id\u003e`\n- `label=\u003cengine label\u003e`\n- `membership=`(`accepted`|`pending`)`\n- `name=\u003cnode name\u003e`\n- `role=`(`manager`|`worker`)`\n", + "name": "filters", + "in": "query" + } + ], + "responses": { + "200": { + "description": "no error", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/Node" + } + } + }, + "500": { + "description": "server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "503": { + "description": "node is not part of a swarm", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/nodes/{id}": { + "get": { + "description": "UCP augments the `Status.State` based on the status of the UCP components running on the current node.", + "tags": [ + "Node" + ], + "summary": "Inspect a node", + "operationId": "NodeInspect", + "parameters": [ + { + "type": "string", + "description": "The ID or name of the node", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "no error", + "schema": { + "$ref": "#/definitions/Node" + } + }, + "404": { + "description": "no such node", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "500": { + "description": "server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "503": { + "description": "node is not part of a swarm", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + }, + "delete": { + "description": "If the current node is a manager, to keep the system healthy UCP attempts to unwind swarm components, like the KV store and auth store, from the node.", + "tags": [ + "Node" + ], + "summary": "Delete a node", + "operationId": "NodeDelete", + "parameters": [ + { + "type": "string", + "description": "The ID or name of the node", + "name": "id", + "in": "path", + "required": true + }, + { + "type": "boolean", + "default": false, + "description": "Force remove a node from the swarm", + "name": "force", + "in": "query" + } + ], + "responses": { + "200": { + "description": "no error" + }, + "404": { + "description": "no such node", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "500": { + "description": "server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "503": { + "description": "node is not part of a swarm", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/nodes/{id}/update": { + "post": { + "tags": [ + "Node" + ], + "summary": "Update a node", + "operationId": "NodeUpdate", + "parameters": [ + { + "type": "string", + "description": "The ID of the node", + "name": "id", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/NodeSpec" + } + }, + { + "type": "integer", + "format": "int64", + "description": "The version number of the node object being updated. This is required to avoid conflicting writes.", + "name": "version", + "in": "query", + "required": true + } + ], + "responses": { + "200": { + "description": "no error" + }, + "400": { + "description": "bad parameter", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "404": { + "description": "no such node", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "500": { + "description": "server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "503": { + "description": "node is not part of a swarm", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/plugins": { + "get": { + "description": "Returns information about installed plugins.\n\nNOTE: This API endpoint does not work through the UCP API. Admins can use this API directly on each individual node's Docker daemon.", + "produces": [ + "application/json" + ], + "tags": [ + "Plugin" + ], + "summary": "List plugins", + "operationId": "PluginList", + "parameters": [ + { + "type": "string", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to process on the plugin list. Available filters:\n\n- `capability=\u003ccapability name\u003e`\n- `enable=\u003ctrue\u003e|\u003cfalse\u003e`\n", + "name": "filters", + "in": "query" + } + ], + "responses": { + "200": { + "description": "No error", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/Plugin" + } + } + }, + "500": { + "description": "Server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/plugins/create": { + "post": { + "description": "\n\nNOTE: This API endpoint does not work through the UCP API. Admins can use this API directly on each individual node's Docker daemon.", + "consumes": [ + "application/x-tar" + ], + "tags": [ + "Plugin" + ], + "summary": "Create a plugin", + "operationId": "PluginCreate", + "parameters": [ + { + "type": "string", + "description": "The name of the plugin. The `:latest` tag is optional, and is the default if omitted.", + "name": "name", + "in": "query", + "required": true + }, + { + "description": "Path to tar containing plugin rootfs and manifest", + "name": "tarContext", + "in": "body", + "schema": { + "type": "string", + "format": "binary" + } + } + ], + "responses": { + "204": { + "description": "no error" + }, + "500": { + "description": "server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/plugins/pull": { + "post": { + "description": "Pulls and installs a plugin. After the plugin is installed, it can be enabled using the [`POST /plugins/{name}/enable` endpoint](#operation/PostPluginsEnable).\n\n\nNOTE: This API endpoint does not work through the UCP API. Admins can use this API directly on each individual node's Docker daemon.", + "produces": [ + "application/json" + ], + "tags": [ + "Plugin" + ], + "summary": "Install a plugin", + "operationId": "PluginPull", + "parameters": [ + { + "type": "string", + "description": "Remote reference for plugin to install.\n\nThe `:latest` tag is optional, and is used as the default if omitted.\n", + "name": "remote", + "in": "query", + "required": true + }, + { + "type": "string", + "description": "Local name for the pulled plugin.\n\nThe `:latest` tag is optional, and is used as the default if omitted.\n", + "name": "name", + "in": "query" + }, + { + "type": "string", + "description": "A base64-encoded auth configuration to use when pulling a plugin from a registry. [See the authentication section for details.](#section/Authentication)", + "name": "X-Registry-Auth", + "in": "header" + }, + { + "name": "body", + "in": "body", + "schema": { + "type": "array", + "items": { + "description": "Describes a permission accepted by the user upon installing the plugin.", + "type": "object", + "properties": { + "Description": { + "type": "string" + }, + "Name": { + "type": "string" + }, + "Value": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "example": [ + { + "Description": "", + "Name": "network", + "Value": [ + "host" + ] + }, + { + "Description": "", + "Name": "mount", + "Value": [ + "/data" + ] + }, + { + "Description": "", + "Name": "device", + "Value": [ + "/dev/cpu_dma_latency" + ] + } + ] + } + } + ], + "responses": { + "204": { + "description": "no error" + }, + "500": { + "description": "server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/plugins/{name}": { + "delete": { + "description": "\n\nNOTE: This API endpoint does not work through the UCP API. Admins can use this API directly on each individual node's Docker daemon.", + "tags": [ + "Plugin" + ], + "summary": "Remove a plugin", + "operationId": "PluginDelete", + "parameters": [ + { + "type": "string", + "description": "The name of the plugin. The `:latest` tag is optional, and is the default if omitted.", + "name": "name", + "in": "path", + "required": true + }, + { + "type": "boolean", + "default": false, + "description": "Disable the plugin before removing. This may result in issues if the plugin is in use by a container.", + "name": "force", + "in": "query" + } + ], + "responses": { + "200": { + "description": "no error", + "schema": { + "$ref": "#/definitions/Plugin" + } + }, + "404": { + "description": "plugin is not installed", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "500": { + "description": "server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/plugins/{name}/disable": { + "post": { + "description": "\n\nNOTE: This API endpoint does not work through the UCP API. Admins can use this API directly on each individual node's Docker daemon.", + "tags": [ + "Plugin" + ], + "summary": "Disable a plugin", + "operationId": "PluginDisable", + "parameters": [ + { + "type": "string", + "description": "The name of the plugin. The `:latest` tag is optional, and is the default if omitted.", + "name": "name", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "no error" + }, + "404": { + "description": "plugin is not installed", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "500": { + "description": "server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/plugins/{name}/enable": { + "post": { + "description": "\n\nNOTE: This API endpoint does not work through the UCP API. Admins can use this API directly on each individual node's Docker daemon.", + "tags": [ + "Plugin" + ], + "summary": "Enable a plugin", + "operationId": "PluginEnable", + "parameters": [ + { + "type": "string", + "description": "The name of the plugin. The `:latest` tag is optional, and is the default if omitted.", + "name": "name", + "in": "path", + "required": true + }, + { + "type": "integer", + "default": 0, + "description": "Set the HTTP client timeout (in seconds)", + "name": "timeout", + "in": "query" + } + ], + "responses": { + "200": { + "description": "no error" + }, + "404": { + "description": "plugin is not installed", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "500": { + "description": "server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/plugins/{name}/push": { + "post": { + "description": "Push a plugin to the registry.\n\n\nNOTE: This API endpoint does not work through the UCP API. Admins can use this API directly on each individual node's Docker daemon.", + "tags": [ + "Plugin" + ], + "summary": "Push a plugin", + "operationId": "PluginPush", + "parameters": [ + { + "type": "string", + "description": "The name of the plugin. The `:latest` tag is optional, and is the default if omitted.", + "name": "name", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "no error" + }, + "404": { + "description": "plugin not installed", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "500": { + "description": "server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/plugins/{name}/set": { + "post": { + "description": "\n\nNOTE: This API endpoint does not work through the UCP API. Admins can use this API directly on each individual node's Docker daemon.", + "consumes": [ + "application/json" + ], + "tags": [ + "Plugin" + ], + "summary": "Configure a plugin", + "operationId": "PluginSet", + "parameters": [ + { + "type": "string", + "description": "The name of the plugin. The `:latest` tag is optional, and is the default if omitted.", + "name": "name", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "DEBUG=1" + ] + } + } + ], + "responses": { + "204": { + "description": "No error" + }, + "404": { + "description": "Plugin not installed", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "500": { + "description": "Server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/plugins/{name}/upgrade": { + "post": { + "description": "\n\nNOTE: This API endpoint does not work through the UCP API. Admins can use this API directly on each individual node's Docker daemon.", + "tags": [ + "Plugin" + ], + "summary": "Upgrade a plugin", + "operationId": "PluginUpgrade", + "parameters": [ + { + "type": "string", + "description": "The name of the plugin. The `:latest` tag is optional, and is the default if omitted.", + "name": "name", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "Remote reference to upgrade to.\n\nThe `:latest` tag is optional, and is used as the default if omitted.\n", + "name": "remote", + "in": "query", + "required": true + }, + { + "type": "string", + "description": "A base64-encoded auth configuration to use when pulling a plugin from a registry. [See the authentication section for details.](#section/Authentication)", + "name": "X-Registry-Auth", + "in": "header" + }, + { + "name": "body", + "in": "body", + "schema": { + "type": "array", + "items": { + "description": "Describes a permission accepted by the user upon installing the plugin.", + "type": "object", + "properties": { + "Description": { + "type": "string" + }, + "Name": { + "type": "string" + }, + "Value": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "example": [ + { + "Description": "", + "Name": "network", + "Value": [ + "host" + ] + }, + { + "Description": "", + "Name": "mount", + "Value": [ + "/data" + ] + }, + { + "Description": "", + "Name": "device", + "Value": [ + "/dev/cpu_dma_latency" + ] + } + ] + } + } + ], + "responses": { + "204": { + "description": "no error" + }, + "404": { + "description": "plugin not installed", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "500": { + "description": "server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/roles": { + "get": { + "description": "Lists all roles in the system.", + "produces": [ + "application/json" + ], + "tags": [ + "UCP" + ], + "summary": "Lists all roles in the system.", + "operationId": "ListRoles", + "responses": { + "200": { + "description": "Success", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/role.Role" + } + } + }, + "default": { + "description": "Success", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/role.Role" + } + } + } + } + }, + "post": { + "description": "Creates a new custom role", + "consumes": [ + "application/json" + ], + "tags": [ + "UCP" + ], + "summary": "Creates a new custom role", + "operationId": "CreateRole", + "parameters": [ + { + "type": "role.Role", + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/role.Role" + } + } + ], + "responses": { + "201": { + "description": "Success", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/authz.RoleCreateResponse" + } + } + } + } + } + }, + "/roles/{role}": { + "get": { + "description": "Retrieves a single role by ID", + "produces": [ + "application/json" + ], + "tags": [ + "UCP" + ], + "summary": "Retrieves a single role by ID", + "operationId": "GetRole", + "parameters": [ + { + "type": "string", + "default": "", + "description": "Name of the role to get", + "name": "role", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "Success", + "schema": { + "$ref": "#/definitions/role.Role" + } + }, + "default": { + "description": "Success", + "schema": { + "$ref": "#/definitions/role.Role" + } + } + } + }, + "delete": { + "description": "Deletes a role by name", + "produces": [ + "application/json" + ], + "tags": [ + "UCP" + ], + "summary": "Deletes a role by name", + "operationId": "DeleteRole", + "parameters": [ + { + "type": "string", + "default": "", + "description": "Name of the role to delete", + "name": "role", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "description": "Success" + } + } + } + }, + "/secrets": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "Secret" + ], + "summary": "List secrets", + "operationId": "SecretList", + "parameters": [ + { + "type": "string", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to process on the secrets list. Available filters:\n\n- `id=\u003csecret id\u003e`\n- `label=\u003ckey\u003e or label=\u003ckey\u003e=value`\n- `name=\u003csecret name\u003e`\n- `names=\u003csecret name\u003e`\n", + "name": "filters", + "in": "query" + } + ], + "responses": { + "200": { + "description": "no error", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/Secret" + }, + "example": [ + { + "CreatedAt": "2017-07-20T13:55:28.678958722Z", + "ID": "blt1owaxmitz71s9v5zh81zun", + "Spec": { + "Driver": { + "Name": "secret-bucket", + "Options": { + "OptionA": "value for driver option A", + "OptionB": "value for driver option B" + } + }, + "Labels": { + "some.label": "some.value" + }, + "Name": "mysql-passwd" + }, + "UpdatedAt": "2017-07-20T13:55:28.678958722Z", + "Version": { + "Index": 85 + } + }, + { + "CreatedAt": "2016-11-05T01:20:17.327670065Z", + "ID": "ktnbjxoalbkvbvedmg1urrz8h", + "Spec": { + "Labels": { + "foo": "bar" + }, + "Name": "app-dev.crt" + }, + "UpdatedAt": "2016-11-05T01:20:17.327670065Z", + "Version": { + "Index": 11 + } + } + ] + } + }, + "500": { + "description": "server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "503": { + "description": "node is not part of a swarm", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/secrets/create": { + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Secret" + ], + "summary": "Create a secret", + "operationId": "SecretCreate", + "parameters": [ + { + "name": "body", + "in": "body", + "schema": { + "allOf": [ + { + "$ref": "#/definitions/SecretSpec" + }, + { + "type": "object", + "example": { + "Data": "VEhJUyBJUyBOT1QgQSBSRUFMIENFUlRJRklDQVRFCg==", + "Driver": { + "Name": "secret-bucket", + "Options": { + "OptionA": "value for driver option A", + "OptionB": "value for driver option B" + } + }, + "Labels": { + "foo": "bar" + }, + "Name": "app-key.crt" + } + } + ] + } + } + ], + "responses": { + "201": { + "description": "no error", + "schema": { + "$ref": "#/definitions/IdResponse" + } + }, + "409": { + "description": "name conflicts with an existing object", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "500": { + "description": "server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "503": { + "description": "node is not part of a swarm", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/secrets/{id}": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "Secret" + ], + "summary": "Inspect a secret", + "operationId": "SecretInspect", + "parameters": [ + { + "type": "string", + "description": "ID of the secret", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "no error", + "schema": { + "$ref": "#/definitions/Secret" + }, + "examples": { + "application/json": { + "CreatedAt": "2016-11-05T01:20:17.327670065Z", + "ID": "ktnbjxoalbkvbvedmg1urrz8h", + "Spec": { + "Driver": { + "Name": "secret-bucket", + "Options": { + "OptionA": "value for driver option A", + "OptionB": "value for driver option B" + } + }, + "Labels": { + "foo": "bar" + }, + "Name": "app-dev.crt" + }, + "UpdatedAt": "2016-11-05T01:20:17.327670065Z", + "Version": { + "Index": 11 + } + } + } + }, + "404": { + "description": "secret not found", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "500": { + "description": "server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "503": { + "description": "node is not part of a swarm", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + }, + "delete": { + "produces": [ + "application/json" + ], + "tags": [ + "Secret" + ], + "summary": "Delete a secret", + "operationId": "SecretDelete", + "parameters": [ + { + "type": "string", + "description": "ID of the secret", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "204": { + "description": "no error" + }, + "404": { + "description": "secret not found", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "500": { + "description": "server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "503": { + "description": "node is not part of a swarm", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/secrets/{id}/update": { + "post": { + "tags": [ + "Secret" + ], + "summary": "Update a Secret", + "operationId": "SecretUpdate", + "parameters": [ + { + "type": "string", + "description": "The ID or name of the secret", + "name": "id", + "in": "path", + "required": true + }, + { + "description": "The spec of the secret to update. Currently, only the Labels field can be updated. All other fields must remain unchanged from the [SecretInspect endpoint](#operation/SecretInspect) response values.", + "name": "body", + "in": "body", + "schema": { + "$ref": "#/definitions/SecretSpec" + } + }, + { + "type": "integer", + "format": "int64", + "description": "The version number of the secret object being updated. This is required to avoid conflicting writes.", + "name": "version", + "in": "query", + "required": true + } + ], + "responses": { + "200": { + "description": "no error" + }, + "400": { + "description": "bad parameter", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "404": { + "description": "no such secret", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "500": { + "description": "server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "503": { + "description": "node is not part of a swarm", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/services": { + "get": { + "tags": [ + "Service" + ], + "summary": "List services", + "operationId": "ServiceList", + "parameters": [ + { + "type": "string", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to process on the services list. Available filters:\n\n- `id=\u003cservice id\u003e`\n- `label=\u003cservice label\u003e`\n- `mode=[\"replicated\"|\"global\"]`\n- `name=\u003cservice name\u003e`\n", + "name": "filters", + "in": "query" + } + ], + "responses": { + "200": { + "description": "no error", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/Service" + } + } + }, + "500": { + "description": "server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "503": { + "description": "node is not part of a swarm", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/services/create": { + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Service" + ], + "summary": "Create a service", + "operationId": "ServiceCreate", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "allOf": [ + { + "$ref": "#/definitions/ServiceSpec" + }, + { + "type": "object", + "example": { + "EndpointSpec": { + "Ports": [ + { + "Protocol": "tcp", + "PublishedPort": 8080, + "TargetPort": 80 + } + ] + }, + "Labels": { + "foo": "bar" + }, + "Mode": { + "Replicated": { + "Replicas": 4 + } + }, + "Name": "web", + "RollbackConfig": { + "Delay": 1000000000, + "FailureAction": "pause", + "MaxFailureRatio": 0.15, + "Monitor": 15000000000, + "Parallelism": 1 + }, + "TaskTemplate": { + "ContainerSpec": { + "DNSConfig": { + "Nameservers": [ + "8.8.8.8" + ], + "Options": [ + "timeout:3" + ], + "Search": [ + "example.org" + ] + }, + "Hosts": [ + "10.10.10.10 host1", + "ABCD:EF01:2345:6789:ABCD:EF01:2345:6789 host2" + ], + "Image": "nginx:alpine", + "Mounts": [ + { + "ReadOnly": true, + "Source": "web-data", + "Target": "/usr/share/nginx/html", + "Type": "volume", + "VolumeOptions": { + "DriverConfig": {}, + "Labels": { + "com.example.something": "something-value" + } + } + } + ], + "Secrets": [ + { + "File": { + "GID": "33", + "Mode": 384, + "Name": "www.example.org.key", + "UID": "33" + }, + "SecretID": "fpjqlhnwb19zds35k8wn80lq9", + "SecretName": "example_org_domain_key" + } + ], + "User": "33" + }, + "LogDriver": { + "Name": "json-file", + "Options": { + "max-file": "3", + "max-size": "10M" + } + }, + "Placement": {}, + "Resources": { + "Limits": { + "MemoryBytes": 104857600 + }, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "on-failure", + "Delay": 10000000000, + "MaxAttempts": 10 + } + }, + "UpdateConfig": { + "Delay": 1000000000, + "FailureAction": "pause", + "MaxFailureRatio": 0.15, + "Monitor": 15000000000, + "Parallelism": 2 + } + } + } + ] + } + }, + { + "type": "string", + "description": "A base64-encoded auth configuration for pulling from private registries. [See the authentication section for details.](#section/Authentication)", + "name": "X-Registry-Auth", + "in": "header" + } + ], + "responses": { + "201": { + "description": "no error", + "schema": { + "type": "object", + "title": "ServiceCreateResponse", + "properties": { + "ID": { + "description": "The ID of the created service.", + "type": "string" + }, + "Warning": { + "description": "Optional warning message", + "type": "string" + } + }, + "example": { + "ID": "ak7w3gjqoa3kuz8xcpnyy0pvl", + "Warning": "unable to pin image doesnotexist:latest to digest: image library/doesnotexist:latest not found" + } + } + }, + "400": { + "description": "bad parameter", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "403": { + "description": "network is not eligible for services", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "409": { + "description": "name conflicts with an existing service", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "500": { + "description": "server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "503": { + "description": "node is not part of a swarm", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/services/{id}": { + "get": { + "tags": [ + "Service" + ], + "summary": "Inspect a service", + "operationId": "ServiceInspect", + "parameters": [ + { + "type": "string", + "description": "ID or name of service.", + "name": "id", + "in": "path", + "required": true + }, + { + "type": "boolean", + "default": false, + "description": "Fill empty fields with default values.", + "name": "insertDefaults", + "in": "query" + } + ], + "responses": { + "200": { + "description": "no error", + "schema": { + "$ref": "#/definitions/Service" + } + }, + "404": { + "description": "no such service", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "500": { + "description": "server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "503": { + "description": "node is not part of a swarm", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + }, + "delete": { + "tags": [ + "Service" + ], + "summary": "Delete a service", + "operationId": "ServiceDelete", + "parameters": [ + { + "type": "string", + "description": "ID or name of service.", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "no error" + }, + "404": { + "description": "no such service", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "500": { + "description": "server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "503": { + "description": "node is not part of a swarm", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/services/{id}/logs": { + "get": { + "description": "Get `stdout` and `stderr` logs from a service.\n\n**Note**: This endpoint works only for services with the `json-file` or `journald` logging drivers.\n", + "produces": [ + "application/vnd.docker.raw-stream", + "application/json" + ], + "tags": [ + "Service" + ], + "summary": "Get service logs", + "operationId": "ServiceLogs", + "parameters": [ + { + "type": "string", + "description": "ID or name of the service", + "name": "id", + "in": "path", + "required": true + }, + { + "type": "boolean", + "default": false, + "description": "Show service context and extra details provided to logs.", + "name": "details", + "in": "query" + }, + { + "type": "boolean", + "default": false, + "description": "Return the logs as a stream.\n\nThis will return a `101` HTTP response with a `Connection: upgrade` header, then hijack the HTTP connection to send raw output. For more information about hijacking and the stream format, [see the documentation for the attach endpoint](#operation/ContainerAttach).\n", + "name": "follow", + "in": "query" + }, + { + "type": "boolean", + "default": false, + "description": "Return logs from `stdout`", + "name": "stdout", + "in": "query" + }, + { + "type": "boolean", + "default": false, + "description": "Return logs from `stderr`", + "name": "stderr", + "in": "query" + }, + { + "type": "integer", + "default": 0, + "description": "Only return logs since this time, as a UNIX timestamp", + "name": "since", + "in": "query" + }, + { + "type": "boolean", + "default": false, + "description": "Add timestamps to every log line", + "name": "timestamps", + "in": "query" + }, + { + "type": "string", + "default": "all", + "description": "Only return this number of log lines from the end of the logs. Specify as an integer or `all` to output all log lines.", + "name": "tail", + "in": "query" + } + ], + "responses": { + "101": { + "description": "logs returned as a stream", + "schema": { + "type": "string", + "format": "binary" + } + }, + "200": { + "description": "logs returned as a string in response body", + "schema": { + "type": "string" + } + }, + "404": { + "description": "no such service", + "schema": { + "$ref": "#/definitions/ErrorResponse" + }, + "examples": { + "application/json": { + "message": "No such service: c2ada9df5af8" + } + } + }, + "500": { + "description": "server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "503": { + "description": "node is not part of a swarm", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/services/{id}/update": { + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Service" + ], + "summary": "Update a service", + "operationId": "ServiceUpdate", + "parameters": [ + { + "type": "string", + "description": "ID or name of service.", + "name": "id", + "in": "path", + "required": true + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "allOf": [ + { + "$ref": "#/definitions/ServiceSpec" + }, + { + "type": "object", + "example": { + "EndpointSpec": { + "Mode": "vip" + }, + "Mode": { + "Replicated": { + "Replicas": 1 + } + }, + "Name": "top", + "RollbackConfig": { + "Delay": 1000000000, + "FailureAction": "pause", + "MaxFailureRatio": 0.15, + "Monitor": 15000000000, + "Parallelism": 1 + }, + "TaskTemplate": { + "ContainerSpec": { + "Args": [ + "top" + ], + "Image": "busybox" + }, + "ForceUpdate": 0, + "Placement": {}, + "Resources": { + "Limits": {}, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "any", + "MaxAttempts": 0 + } + }, + "UpdateConfig": { + "Delay": 1000000000, + "FailureAction": "pause", + "MaxFailureRatio": 0.15, + "Monitor": 15000000000, + "Parallelism": 2 + } + } + } + ] + } + }, + { + "type": "integer", + "description": "The version number of the service object being updated. This is required to avoid conflicting writes.", + "name": "version", + "in": "query", + "required": true + }, + { + "type": "string", + "default": "spec", + "description": "If the X-Registry-Auth header is not specified, this parameter indicates where to find registry authorization credentials. The valid values are `spec` and `previous-spec`.", + "name": "registryAuthFrom", + "in": "query" + }, + { + "type": "string", + "description": "Set to this parameter to `previous` to cause a server-side rollback to the previous service spec. The supplied spec will be ignored in this case.", + "name": "rollback", + "in": "query" + }, + { + "type": "string", + "description": "A base64-encoded auth configuration for pulling from private registries. [See the authentication section for details.](#section/Authentication)", + "name": "X-Registry-Auth", + "in": "header" + } + ], + "responses": { + "200": { + "description": "no error", + "schema": { + "$ref": "#/definitions/ServiceUpdateResponse" + } + }, + "400": { + "description": "bad parameter", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "404": { + "description": "no such service", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "500": { + "description": "server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "503": { + "description": "node is not part of a swarm", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/swarm": { + "get": { + "tags": [ + "Swarm" + ], + "summary": "Inspect swarm", + "operationId": "SwarmInspect", + "responses": { + "200": { + "description": "no error", + "schema": { + "$ref": "#/definitions/Swarm" + } + }, + "404": { + "description": "no such swarm", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "500": { + "description": "server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "503": { + "description": "node is not part of a swarm", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/swarm/init": { + "post": { + "produces": [ + "application/json", + "text/plain" + ], + "tags": [ + "Swarm" + ], + "summary": "Initialize a new swarm", + "operationId": "SwarmInit", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "AdvertiseAddr": { + "description": "Externally reachable address advertised to other nodes. This can either be an address/port combination in the form `192.168.1.1:4567`, or an interface followed by a port number, like `eth0:4567`. If the port number is omitted, the port number from the listen address is used. If `AdvertiseAddr` is not specified, it will be automatically detected when possible.", + "type": "string" + }, + "DataPathAddr": { + "description": "Address or interface to use for data path traffic (format: `\u003cip|interface\u003e`), for example, `192.168.1.1`,\nor an interface, like `eth0`. If `DataPathAddr` is unspecified, the same address as `AdvertiseAddr`\nis used.\n\nThe `DataPathAddr` specifies the address that global scope network drivers will publish towards other\nnodes in order to reach the containers running on this node. Using this parameter it is possible to\nseparate the container data traffic from the management traffic of the cluster.\n", + "type": "string" + }, + "DefaultAddrPool": { + "description": "Default Address Pool specifies default subnet pools for global scope networks.\n", + "type": "array", + "items": { + "type": "string", + "example": [ + "10.10.0.0/16", + "20.20.0.0/16" + ] + } + }, + "ForceNewCluster": { + "description": "Force creation of a new swarm.", + "type": "boolean" + }, + "ListenAddr": { + "description": "Listen address used for inter-manager communication, as well as determining the networking interface used for the VXLAN Tunnel Endpoint (VTEP). This can either be an address/port combination in the form `192.168.1.1:4567`, or an interface followed by a port number, like `eth0:4567`. If the port number is omitted, the default swarm listening port is used.", + "type": "string" + }, + "Spec": { + "$ref": "#/definitions/SwarmSpec" + }, + "SubnetSize": { + "description": "SubnetSize specifies the subnet size of the networks created from the default subnet pool\n", + "type": "integer", + "format": "uint32" + } + }, + "example": { + "AdvertiseAddr": "192.168.1.1:2377", + "DefaultAddrPool": [ + "10.10.0.0/8", + "20.20.0.0/8" + ], + "ForceNewCluster": false, + "ListenAddr": "0.0.0.0:2377", + "Spec": { + "CAConfig": {}, + "Dispatcher": {}, + "EncryptionConfig": { + "AutoLockManagers": false + }, + "Orchestration": {}, + "Raft": {} + }, + "SubnetSize": 24 + } + } + } + ], + "responses": { + "200": { + "description": "no error", + "schema": { + "description": "The node ID", + "type": "string", + "example": "7v2t30z9blmxuhnyo6s4cpenp" + } + }, + "400": { + "description": "bad parameter", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "500": { + "description": "server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "503": { + "description": "node is already part of a swarm", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/swarm/join": { + "post": { + "tags": [ + "Swarm" + ], + "summary": "Join an existing swarm", + "operationId": "SwarmJoin", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "AdvertiseAddr": { + "description": "Externally reachable address advertised to other nodes. This can either be an address/port combination in the form `192.168.1.1:4567`, or an interface followed by a port number, like `eth0:4567`. If the port number is omitted, the port number from the listen address is used. If `AdvertiseAddr` is not specified, it will be automatically detected when possible.", + "type": "string" + }, + "DataPathAddr": { + "description": "Address or interface to use for data path traffic (format: `\u003cip|interface\u003e`), for example, `192.168.1.1`,\nor an interface, like `eth0`. If `DataPathAddr` is unspecified, the same address as `AdvertiseAddr`\nis used.\n\nThe `DataPathAddr` specifies the address that global scope network drivers will publish towards other\nnodes in order to reach the containers running on this node. Using this parameter it is possible to\nseparate the container data traffic from the management traffic of the cluster.\n", + "type": "string" + }, + "JoinToken": { + "description": "Secret token for joining this swarm.", + "type": "string" + }, + "ListenAddr": { + "description": "Listen address used for inter-manager communication if the node gets promoted to manager, as well as determining the networking interface used for the VXLAN Tunnel Endpoint (VTEP).", + "type": "string" + }, + "RemoteAddrs": { + "description": "Addresses of manager nodes already participating in the swarm.", + "type": "string" + } + }, + "example": { + "AdvertiseAddr": "192.168.1.1:2377", + "JoinToken": "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2", + "ListenAddr": "0.0.0.0:2377", + "RemoteAddrs": [ + "node1:2377" + ] + } + } + } + ], + "responses": { + "200": { + "description": "no error" + }, + "400": { + "description": "bad parameter", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "500": { + "description": "server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "503": { + "description": "node is already part of a swarm", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/swarm/leave": { + "post": { + "tags": [ + "Swarm" + ], + "summary": "Leave a swarm", + "operationId": "SwarmLeave", + "parameters": [ + { + "type": "boolean", + "default": false, + "description": "Force leave swarm, even if this is the last manager or that it will break the cluster.", + "name": "force", + "in": "query" + } + ], + "responses": { + "200": { + "description": "no error" + }, + "500": { + "description": "server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "503": { + "description": "node is not part of a swarm", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/swarm/update": { + "post": { + "tags": [ + "Swarm" + ], + "summary": "Update a swarm", + "operationId": "SwarmUpdate", + "parameters": [ + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/SwarmSpec" + } + }, + { + "type": "integer", + "format": "int64", + "description": "The version number of the swarm object being updated. This is required to avoid conflicting writes.", + "name": "version", + "in": "query", + "required": true + }, + { + "type": "boolean", + "default": false, + "description": "Rotate the worker join token.", + "name": "rotateWorkerToken", + "in": "query" + }, + { + "type": "boolean", + "default": false, + "description": "Rotate the manager join token.", + "name": "rotateManagerToken", + "in": "query" + }, + { + "type": "boolean", + "default": false, + "description": "Rotate the manager unlock key.", + "name": "rotateManagerUnlockKey", + "in": "query" + } + ], + "responses": { + "200": { + "description": "no error" + }, + "400": { + "description": "bad parameter", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "500": { + "description": "server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "503": { + "description": "node is not part of a swarm", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/tasks": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "Task" + ], + "summary": "List tasks", + "operationId": "TaskList", + "parameters": [ + { + "type": "string", + "description": "A JSON encoded value of the filters (a `map[string][]string`) to process on the tasks list. Available filters:\n\n- `desired-state=(running | shutdown | accepted)`\n- `id=\u003ctask id\u003e`\n- `label=key` or `label=\"key=value\"`\n- `name=\u003ctask name\u003e`\n- `node=\u003cnode id or name\u003e`\n- `service=\u003cservice name\u003e`\n", + "name": "filters", + "in": "query" + } + ], + "responses": { + "200": { + "description": "no error", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/Task" + }, + "example": [ + { + "CreatedAt": "2016-06-07T21:07:31.171892745Z", + "DesiredState": "running", + "ID": "0kzzo1i0y4jz6027t0k7aezc7", + "NetworksAttachments": [ + { + "Addresses": [ + "10.255.0.10/16" + ], + "Network": { + "CreatedAt": "2016-06-07T20:31:11.912919752Z", + "DriverState": { + "Name": "overlay", + "Options": { + "com.docker.network.driver.overlay.vxlanid_list": "256" + } + }, + "ID": "4qvuz4ko70xaltuqbt8956gd1", + "IPAMOptions": { + "Configs": [ + { + "Gateway": "10.255.0.1", + "Subnet": "10.255.0.0/16" + } + ], + "Driver": { + "Name": "default" + } + }, + "Spec": { + "DriverConfiguration": {}, + "IPAMOptions": { + "Configs": [ + { + "Gateway": "10.255.0.1", + "Subnet": "10.255.0.0/16" + } + ], + "Driver": {} + }, + "Labels": { + "com.docker.swarm.internal": "true" + }, + "Name": "ingress" + }, + "UpdatedAt": "2016-06-07T21:07:29.955277358Z", + "Version": { + "Index": 18 + } + } + } + ], + "NodeID": "60gvrl6tm78dmak4yl7srz94v", + "ServiceID": "9mnpnzenvg8p8tdbtq4wvbkcz", + "Slot": 1, + "Spec": { + "ContainerSpec": { + "Image": "redis" + }, + "Placement": {}, + "Resources": { + "Limits": {}, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "any", + "MaxAttempts": 0 + } + }, + "Status": { + "ContainerStatus": { + "ContainerID": "e5d62702a1b48d01c3e02ca1e0212a250801fa8d67caca0b6f35919ebc12f035", + "PID": 677 + }, + "Message": "started", + "State": "running", + "Timestamp": "2016-06-07T21:07:31.290032978Z" + }, + "UpdatedAt": "2016-06-07T21:07:31.376370513Z", + "Version": { + "Index": 71 + } + }, + { + "CreatedAt": "2016-06-07T21:07:30.019104782Z", + "DesiredState": "shutdown", + "ID": "1yljwbmlr8er2waf8orvqpwms", + "Name": "hopeful_cori", + "NetworksAttachments": [ + { + "Addresses": [ + "10.255.0.5/16" + ], + "Network": { + "CreatedAt": "2016-06-07T20:31:11.912919752Z", + "DriverState": { + "Name": "overlay", + "Options": { + "com.docker.network.driver.overlay.vxlanid_list": "256" + } + }, + "ID": "4qvuz4ko70xaltuqbt8956gd1", + "IPAMOptions": { + "Configs": [ + { + "Gateway": "10.255.0.1", + "Subnet": "10.255.0.0/16" + } + ], + "Driver": { + "Name": "default" + } + }, + "Spec": { + "DriverConfiguration": {}, + "IPAMOptions": { + "Configs": [ + { + "Gateway": "10.255.0.1", + "Subnet": "10.255.0.0/16" + } + ], + "Driver": {} + }, + "Labels": { + "com.docker.swarm.internal": "true" + }, + "Name": "ingress" + }, + "UpdatedAt": "2016-06-07T21:07:29.955277358Z", + "Version": { + "Index": 18 + } + } + } + ], + "NodeID": "60gvrl6tm78dmak4yl7srz94v", + "ServiceID": "9mnpnzenvg8p8tdbtq4wvbkcz", + "Slot": 1, + "Spec": { + "ContainerSpec": { + "Image": "redis" + }, + "Placement": {}, + "Resources": { + "Limits": {}, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "any", + "MaxAttempts": 0 + } + }, + "Status": { + "ContainerStatus": { + "ContainerID": "1cf8d63d18e79668b0004a4be4c6ee58cddfad2dae29506d8781581d0688a213" + }, + "Message": "shutdown", + "State": "shutdown", + "Timestamp": "2016-06-07T21:07:30.202183143Z" + }, + "UpdatedAt": "2016-06-07T21:07:30.231958098Z", + "Version": { + "Index": 30 + } + } + ] + } + }, + "500": { + "description": "server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "503": { + "description": "node is not part of a swarm", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/tasks/{id}": { + "get": { + "produces": [ + "application/json" + ], + "tags": [ + "Task" + ], + "summary": "Inspect a task", + "operationId": "TaskInspect", + "parameters": [ + { + "type": "string", + "description": "ID of the task", + "name": "id", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "no error", + "schema": { + "$ref": "#/definitions/Task" + } + }, + "404": { + "description": "no such task", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "500": { + "description": "server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "503": { + "description": "node is not part of a swarm", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/tasks/{id}/logs": { + "get": { + "description": "Get `stdout` and `stderr` logs from a task.\n\n**Note**: This endpoint works only for services with the `json-file` or `journald` logging drivers.\n", + "produces": [ + "application/vnd.docker.raw-stream", + "application/json" + ], + "tags": [ + "UCP" + ], + "summary": "Get task logs", + "operationId": "TaskLogs", + "parameters": [ + { + "type": "string", + "description": "ID of the task", + "name": "id", + "in": "path", + "required": true + }, + { + "type": "boolean", + "default": false, + "description": "Show task context and extra details provided to logs.", + "name": "details", + "in": "query" + }, + { + "type": "boolean", + "default": false, + "description": "Return the logs as a stream.\n\nThis will return a `101` HTTP response with a `Connection: upgrade` header, then hijack the HTTP connection to send raw output. For more information about hijacking and the stream format, [see the documentation for the attach endpoint](#operation/ContainerAttach).\n", + "name": "follow", + "in": "query" + }, + { + "type": "boolean", + "default": false, + "description": "Return logs from `stdout`", + "name": "stdout", + "in": "query" + }, + { + "type": "boolean", + "default": false, + "description": "Return logs from `stderr`", + "name": "stderr", + "in": "query" + }, + { + "type": "integer", + "default": 0, + "description": "Only return logs since this time, as a UNIX timestamp", + "name": "since", + "in": "query" + }, + { + "type": "boolean", + "default": false, + "description": "Add timestamps to every log line", + "name": "timestamps", + "in": "query" + }, + { + "type": "string", + "default": "all", + "description": "Only return this number of log lines from the end of the logs. Specify as an integer or `all` to output all log lines.", + "name": "tail", + "in": "query" + } + ], + "responses": { + "101": { + "description": "logs returned as a stream", + "schema": { + "type": "string", + "format": "binary" + } + }, + "200": { + "description": "logs returned as a string in response body", + "schema": { + "type": "string" + } + }, + "404": { + "description": "no such task", + "schema": { + "$ref": "#/definitions/ErrorResponse" + }, + "examples": { + "application/json": { + "message": "No such task: c2ada9df5af8" + } + } + }, + "500": { + "description": "server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "503": { + "description": "node is not part of a swarm", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/totalRole": { + "get": { + "description": "Returns a role with all operations that a user can perform against at least one collection in the system.", + "produces": [ + "application/json" + ], + "tags": [ + "UCP" + ], + "summary": "Returns a role with all operations that a user can perform against at least one collection in the system.", + "operationId": "TotalRole", + "responses": { + "200": { + "description": "Success", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/role.Role" + } + } + }, + "default": { + "description": "Success", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/role.Role" + } + } + } + } + } + }, + "/version": { + "get": { + "description": "Returns the version of Docker that is running and various information about the system that Docker is running on.", + "produces": [ + "application/json" + ], + "tags": [ + "System" + ], + "summary": "Get version", + "operationId": "SystemVersion", + "responses": { + "200": { + "description": "no error", + "schema": { + "type": "object", + "title": "SystemVersionResponse", + "properties": { + "ApiVersion": { + "type": "string" + }, + "Arch": { + "type": "string" + }, + "BuildTime": { + "type": "string" + }, + "Components": { + "type": "array", + "items": { + "type": "object", + "required": [ + "Name", + "Version" + ], + "properties": { + "Details": { + "type": "object", + "x-nullable": true + }, + "Name": { + "type": "string" + }, + "Version": { + "type": "string", + "x-nullable": false + } + }, + "x-go-name": "ComponentVersion" + } + }, + "Experimental": { + "type": "boolean" + }, + "GitCommit": { + "type": "string" + }, + "GoVersion": { + "type": "string" + }, + "KernelVersion": { + "type": "string" + }, + "MinAPIVersion": { + "type": "string" + }, + "Os": { + "type": "string" + }, + "Platform": { + "type": "object", + "required": [ + "Name" + ], + "properties": { + "Name": { + "type": "string" + } + } + }, + "Version": { + "type": "string" + } + } + }, + "examples": { + "application/json": { + "ApiVersion": "1.27", + "Arch": "amd64", + "BuildTime": "2016-06-14T07:09:13.444803460+00:00", + "Experimental": true, + "GitCommit": "deadbee", + "GoVersion": "go1.7.5", + "KernelVersion": "3.19.0-23-generic", + "MinAPIVersion": "1.12", + "Os": "linux", + "Version": "17.04.0" + } + } + }, + "500": { + "description": "server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/volumes": { + "get": { + "description": "If the name is prefixed with the name of a node, the request is sent to the specified node. Use the '/' character to distinguish the node name, like `testnode/testvolume`.", + "produces": [ + "application/json" + ], + "tags": [ + "Volume" + ], + "summary": "List volumes", + "operationId": "VolumeList", + "parameters": [ + { + "type": "string", + "format": "json", + "description": "JSON encoded value of the filters (a `map[string][]string`) to\nprocess on the volumes list. Available filters:\n\n- `dangling=\u003cboolean\u003e` When set to `true` (or `1`), returns all\n volumes that are not in use by a container. When set to `false`\n (or `0`), only volumes that are in use by one or more\n containers are returned.\n- `driver=\u003cvolume-driver-name\u003e` Matches volumes based on their driver.\n- `label=\u003ckey\u003e` or `label=\u003ckey\u003e:\u003cvalue\u003e` Matches volumes based on\n the presence of a `label` alone or a `label` and a value.\n- `name=\u003cvolume-name\u003e` Matches all or part of a volume name.\n", + "name": "filters", + "in": "query" + } + ], + "responses": { + "200": { + "description": "Summary volume data that matches the query", + "schema": { + "description": "Volume list response", + "type": "object", + "title": "VolumeListResponse", + "required": [ + "Volumes", + "Warnings" + ], + "properties": { + "Volumes": { + "description": "List of volumes", + "type": "array", + "items": { + "$ref": "#/definitions/Volume" + }, + "x-nullable": false + }, + "Warnings": { + "description": "Warnings that occurred when fetching the list of volumes", + "type": "array", + "items": { + "type": "string" + }, + "x-nullable": false + } + } + }, + "examples": { + "application/json": { + "Volumes": [ + { + "CreatedAt": "2017-07-19T12:00:26Z", + "Driver": "local", + "Labels": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + }, + "Mountpoint": "/var/lib/docker/volumes/tardis", + "Name": "tardis", + "Options": { + "device": "tmpfs", + "o": "size=100m,uid=1000", + "type": "tmpfs" + }, + "Scope": "local" + } + ], + "Warnings": [] + } + } + }, + "500": { + "description": "Server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/volumes/create": { + "post": { + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "Volume" + ], + "summary": "Create a volume", + "operationId": "VolumeCreate", + "parameters": [ + { + "description": "Volume configuration", + "name": "volumeConfig", + "in": "body", + "required": true, + "schema": { + "description": "Volume configuration", + "type": "object", + "title": "VolumeConfig", + "properties": { + "Driver": { + "description": "Name of the volume driver to use.", + "type": "string", + "default": "local", + "x-nullable": false + }, + "DriverOpts": { + "description": "A mapping of driver options and values. These options are passed directly to the driver and are driver specific.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "Name": { + "description": "The new volume's name. If not specified, Docker generates a name.", + "type": "string", + "x-nullable": false + } + }, + "example": { + "Driver": "custom", + "Labels": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + }, + "Name": "tardis" + } + } + } + ], + "responses": { + "201": { + "description": "The volume was created successfully", + "schema": { + "$ref": "#/definitions/Volume" + } + }, + "500": { + "description": "Server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/volumes/prune": { + "post": { + "produces": [ + "application/json" + ], + "tags": [ + "Volume" + ], + "summary": "Delete unused volumes", + "operationId": "VolumePrune", + "parameters": [ + { + "type": "string", + "description": "Filters to process on the prune list, encoded as JSON (a `map[string][]string`).\n\nAvailable filters:\n- `label` (`label=\u003ckey\u003e`, `label=\u003ckey\u003e=\u003cvalue\u003e`, `label!=\u003ckey\u003e`, or `label!=\u003ckey\u003e=\u003cvalue\u003e`) Prune volumes with (or without, in case `label!=...` is used) the specified labels.\n", + "name": "filters", + "in": "query" + } + ], + "responses": { + "200": { + "description": "No error", + "schema": { + "type": "object", + "title": "VolumePruneResponse", + "properties": { + "SpaceReclaimed": { + "description": "Disk space reclaimed in bytes", + "type": "integer", + "format": "int64" + }, + "VolumesDeleted": { + "description": "Volumes that were deleted", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "500": { + "description": "Server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + }, + "/volumes/{name}": { + "get": { + "description": "If the name is prefixed with the name of a node, the request is sent to the specified node. Use the '/' character to distinguish the node name, like `testnode/testvolume`.", + "produces": [ + "application/json" + ], + "tags": [ + "Volume" + ], + "summary": "Inspect a volume", + "operationId": "VolumeInspect", + "parameters": [ + { + "type": "string", + "description": "Volume name or ID", + "name": "name", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "No error", + "schema": { + "$ref": "#/definitions/Volume" + } + }, + "404": { + "description": "No such volume", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "500": { + "description": "Server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + }, + "delete": { + "description": "Instruct the driver to remove the volume.", + "tags": [ + "Volume" + ], + "summary": "Remove a volume", + "operationId": "VolumeDelete", + "parameters": [ + { + "type": "string", + "description": "Volume name or ID", + "name": "name", + "in": "path", + "required": true + }, + { + "type": "boolean", + "default": false, + "description": "Force the removal of the volume", + "name": "force", + "in": "query" + } + ], + "responses": { + "204": { + "description": "The volume was removed" + }, + "404": { + "description": "No such volume or volume driver", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "409": { + "description": "Volume is in use and cannot be removed", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + }, + "500": { + "description": "Server error", + "schema": { + "$ref": "#/definitions/ErrorResponse" + } + } + } + } + } + }, + "definitions": { + "Address": { + "description": "Address represents an IPv4 or IPv6 IP address.", + "type": "object", + "properties": { + "Addr": { + "description": "IP address.", + "type": "string" + }, + "PrefixLen": { + "description": "Mask length of the IP address.", + "type": "integer" + } + } + }, + "AuthConfig": { + "type": "object", + "properties": { + "email": { + "type": "string" + }, + "password": { + "type": "string" + }, + "serveraddress": { + "type": "string" + }, + "username": { + "type": "string" + } + }, + "example": { + "password": "xxxx", + "serveraddress": "https://index.docker.io/v1/", + "username": "hannibal" + } + }, + "BuildInfo": { + "type": "object", + "properties": { + "aux": { + "$ref": "#/definitions/ImageID" + }, + "error": { + "type": "string" + }, + "errorDetail": { + "$ref": "#/definitions/ErrorDetail" + }, + "id": { + "type": "string" + }, + "progress": { + "type": "string" + }, + "progressDetail": { + "$ref": "#/definitions/ProgressDetail" + }, + "status": { + "type": "string" + }, + "stream": { + "type": "string" + } + } + }, + "ClusterInfo": { + "description": "ClusterInfo represents information about the swarm as is returned by the\n\"/info\" endpoint. Join-tokens are not included.\n", + "type": "object", + "properties": { + "CreatedAt": { + "description": "Date and time at which the swarm was initialised in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "type": "string", + "format": "dateTime", + "example": "2016-08-18T10:44:24.496525531Z" + }, + "ID": { + "description": "The ID of the swarm.", + "type": "string", + "example": "abajmipo7b4xz5ip2nrla6b11" + }, + "RootRotationInProgress": { + "description": "Whether there is currently a root CA rotation in progress for the swarm", + "type": "boolean", + "example": false + }, + "Spec": { + "$ref": "#/definitions/SwarmSpec" + }, + "TLSInfo": { + "$ref": "#/definitions/TLSInfo" + }, + "UpdatedAt": { + "description": "Date and time at which the swarm was last updated in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "type": "string", + "format": "dateTime", + "example": "2017-08-09T07:09:37.632105588Z" + }, + "Version": { + "$ref": "#/definitions/ObjectVersion" + } + }, + "x-nullable": true + }, + "Commit": { + "description": "Commit holds the Git-commit (SHA1) that a binary was built from, as\nreported in the version-string of external tools, such as `containerd`,\nor `runC`.\n", + "type": "object", + "properties": { + "Expected": { + "description": "Commit ID of external tool expected by dockerd as set at build time.\n", + "type": "string", + "example": "2d41c047c83e09a6d61d464906feb2a2f3c52aa4" + }, + "ID": { + "description": "Actual commit ID of external tool.", + "type": "string", + "example": "cfb82a876ecc11b5ca0977d1733adbe58599088a" + } + } + }, + "Config": { + "type": "object", + "properties": { + "CreatedAt": { + "type": "string", + "format": "dateTime" + }, + "ID": { + "type": "string" + }, + "Spec": { + "$ref": "#/definitions/ConfigSpec" + }, + "UpdatedAt": { + "type": "string", + "format": "dateTime" + }, + "Version": { + "$ref": "#/definitions/ObjectVersion" + } + } + }, + "ConfigSpec": { + "type": "object", + "properties": { + "Data": { + "description": "Base64-url-safe-encoded ([RFC 4648](https://tools.ietf.org/html/rfc4648#section-3.2))\nconfig data.\n", + "type": "string" + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "Name": { + "description": "User-defined name of the config.", + "type": "string" + }, + "Templating": { + "description": "Templating driver, if applicable\n\nTemplating controls whether and how to evaluate the config payload as\na template. If no driver is set, no templating is used.\n", + "$ref": "#/definitions/Driver" + } + } + }, + "ContainerConfig": { + "description": "Configuration for a container that is portable between hosts", + "type": "object", + "properties": { + "ArgsEscaped": { + "description": "Command is already escaped (Windows only)", + "type": "boolean" + }, + "AttachStderr": { + "description": "Whether to attach to `stderr`.", + "type": "boolean", + "default": true + }, + "AttachStdin": { + "description": "Whether to attach to `stdin`.", + "type": "boolean", + "default": false + }, + "AttachStdout": { + "description": "Whether to attach to `stdout`.", + "type": "boolean", + "default": true + }, + "Cmd": { + "description": "Command to run specified as a string or an array of strings.", + "type": "array", + "items": { + "type": "string" + } + }, + "Domainname": { + "description": "The domain name to use for the container.", + "type": "string" + }, + "Entrypoint": { + "description": "The entry point for the container as a string or an array of strings.\n\nIf the array consists of exactly one empty string (`[\"\"]`) then the entry point is reset to system default (i.e., the entry point used by docker when there is no `ENTRYPOINT` instruction in the `Dockerfile`).\n", + "type": "array", + "items": { + "type": "string" + } + }, + "Env": { + "description": "A list of environment variables to set inside the container in the form `[\"VAR=value\", ...]`. A variable without `=` is removed from the environment, rather than to have an empty value.\n", + "type": "array", + "items": { + "type": "string" + } + }, + "ExposedPorts": { + "description": "An object mapping ports to an empty object in the form:\n\n`{\"\u003cport\u003e/\u003ctcp|udp|sctp\u003e\": {}}`\n", + "type": "object", + "additionalProperties": { + "type": "object", + "default": {}, + "enum": [ + {} + ] + } + }, + "Healthcheck": { + "$ref": "#/definitions/HealthConfig" + }, + "Hostname": { + "description": "The hostname to use for the container, as a valid RFC 1123 hostname.", + "type": "string" + }, + "Image": { + "description": "The name of the image to use when creating the container", + "type": "string" + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "MacAddress": { + "description": "MAC address of the container.", + "type": "string" + }, + "NetworkDisabled": { + "description": "Disable networking for the container.", + "type": "boolean" + }, + "OnBuild": { + "description": "`ONBUILD` metadata that were defined in the image's `Dockerfile`.", + "type": "array", + "items": { + "type": "string" + } + }, + "OpenStdin": { + "description": "Open `stdin`", + "type": "boolean", + "default": false + }, + "Shell": { + "description": "Shell for when `RUN`, `CMD`, and `ENTRYPOINT` uses a shell.", + "type": "array", + "items": { + "type": "string" + } + }, + "StdinOnce": { + "description": "Close `stdin` after one attached client disconnects", + "type": "boolean", + "default": false + }, + "StopSignal": { + "description": "Signal to stop a container as a string or unsigned integer.", + "type": "string", + "default": "SIGTERM" + }, + "StopTimeout": { + "description": "Timeout to stop a container in seconds.", + "type": "integer", + "default": 10 + }, + "Tty": { + "description": "Attach standard streams to a TTY, including `stdin` if it is not closed.", + "type": "boolean", + "default": false + }, + "User": { + "description": "The user that commands are run as inside the container.", + "type": "string" + }, + "Volumes": { + "description": "An object mapping mount point paths inside the container to empty objects.", + "type": "object", + "additionalProperties": { + "type": "object", + "default": {}, + "enum": [ + {} + ] + } + }, + "WorkingDir": { + "description": "The working directory for commands to run in.", + "type": "string" + } + } + }, + "ContainerSummary": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Command": { + "description": "Command to run when starting the container", + "type": "string" + }, + "Created": { + "description": "When the container was created", + "type": "integer", + "format": "int64" + }, + "HostConfig": { + "type": "object", + "properties": { + "NetworkMode": { + "type": "string" + } + } + }, + "Id": { + "description": "The ID of this container", + "type": "string", + "x-go-name": "ID" + }, + "Image": { + "description": "The name of the image used when creating this container", + "type": "string" + }, + "ImageID": { + "description": "The ID of the image that this container was created from", + "type": "string" + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "Mounts": { + "type": "array", + "items": { + "$ref": "#/definitions/Mount" + } + }, + "Names": { + "description": "The names that this container has been given", + "type": "array", + "items": { + "type": "string" + } + }, + "NetworkSettings": { + "description": "A summary of the container's network settings", + "type": "object", + "properties": { + "Networks": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/EndpointSettings" + } + } + } + }, + "Ports": { + "description": "The ports exposed by this container", + "type": "array", + "items": { + "$ref": "#/definitions/Port" + } + }, + "SizeRootFs": { + "description": "The total size of all the files in this container", + "type": "integer", + "format": "int64" + }, + "SizeRw": { + "description": "The size of files that have been created or changed by this container", + "type": "integer", + "format": "int64" + }, + "State": { + "description": "The state of this container (e.g. `Exited`)", + "type": "string" + }, + "Status": { + "description": "Additional human-readable status of this container (e.g. `Exit 0`)", + "type": "string" + } + } + } + }, + "CreateImageInfo": { + "type": "object", + "properties": { + "error": { + "type": "string" + }, + "id": { + "type": "string" + }, + "progress": { + "type": "string" + }, + "progressDetail": { + "$ref": "#/definitions/ProgressDetail" + }, + "status": { + "type": "string" + } + } + }, + "DeviceMapping": { + "description": "A device mapping between the host and container", + "type": "object", + "properties": { + "CgroupPermissions": { + "type": "string" + }, + "PathInContainer": { + "type": "string" + }, + "PathOnHost": { + "type": "string" + } + }, + "example": { + "CgroupPermissions": "mrw", + "PathInContainer": "/dev/deviceName", + "PathOnHost": "/dev/deviceName" + } + }, + "Driver": { + "description": "Driver represents a driver (network, logging, secrets).", + "type": "object", + "required": [ + "Name" + ], + "properties": { + "Name": { + "description": "Name of the driver.", + "type": "string", + "x-nullable": false, + "example": "some-driver" + }, + "Options": { + "description": "Key/value map of driver-specific options.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "x-nullable": false, + "example": { + "OptionA": "value for driver-specific option A", + "OptionB": "value for driver-specific option B" + } + } + } + }, + "EndpointIPAMConfig": { + "description": "EndpointIPAMConfig represents an endpoint's IPAM configuration.\n", + "type": "object", + "properties": { + "IPv4Address": { + "type": "string", + "example": "172.20.30.33" + }, + "IPv6Address": { + "type": "string", + "example": "2001:db8:abcd::3033" + }, + "LinkLocalIPs": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "169.254.34.68", + "fe80::3468" + ] + } + }, + "x-nullable": true + }, + "EndpointPortConfig": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Protocol": { + "type": "string", + "enum": [ + "tcp", + "udp", + "sctp" + ] + }, + "PublishMode": { + "description": "The mode in which port is published.\n\n\u003cp\u003e\u003cbr /\u003e\u003c/p\u003e\n\n- \"ingress\" makes the target port accessible on on every node,\n regardless of whether there is a task for the service running on\n that node or not.\n- \"host\" bypasses the routing mesh and publish the port directly on\n the swarm node where that service is running.\n", + "type": "string", + "default": "ingress", + "enum": [ + "ingress", + "host" + ], + "example": "ingress" + }, + "PublishedPort": { + "description": "The port on the swarm hosts.", + "type": "integer" + }, + "TargetPort": { + "description": "The port inside the container.", + "type": "integer" + } + } + }, + "EndpointSettings": { + "description": "Configuration for a network endpoint.", + "type": "object", + "properties": { + "Aliases": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "server_x", + "server_y" + ] + }, + "DriverOpts": { + "description": "DriverOpts is a mapping of driver options and values. These options\nare passed directly to the driver and are driver specific.\n", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "x-nullable": true, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + }, + "EndpointID": { + "description": "Unique ID for the service endpoint in a Sandbox.\n", + "type": "string", + "example": "b88f5b905aabf2893f3cbc4ee42d1ea7980bbc0a92e2c8922b1e1795298afb0b" + }, + "Gateway": { + "description": "Gateway address for this network.\n", + "type": "string", + "example": "172.17.0.1" + }, + "GlobalIPv6Address": { + "description": "Global IPv6 address.\n", + "type": "string", + "example": "2001:db8::5689" + }, + "GlobalIPv6PrefixLen": { + "description": "Mask length of the global IPv6 address.\n", + "type": "integer", + "format": "int64", + "example": 64 + }, + "IPAMConfig": { + "$ref": "#/definitions/EndpointIPAMConfig" + }, + "IPAddress": { + "description": "IPv4 address.\n", + "type": "string", + "example": "172.17.0.4" + }, + "IPPrefixLen": { + "description": "Mask length of the IPv4 address.\n", + "type": "integer", + "example": 16 + }, + "IPv6Gateway": { + "description": "IPv6 gateway address.\n", + "type": "string", + "example": "2001:db8:2::100" + }, + "Links": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "container_1", + "container_2" + ] + }, + "MacAddress": { + "description": "MAC address for the endpoint on this network.\n", + "type": "string", + "example": "02:42:ac:11:00:04" + }, + "NetworkID": { + "description": "Unique ID of the network.\n", + "type": "string", + "example": "08754567f1f40222263eab4102e1c733ae697e8e354aa9cd6e18d7402835292a" + } + } + }, + "EndpointSpec": { + "description": "Properties that can be configured to access and load balance a service.", + "type": "object", + "properties": { + "Mode": { + "description": "The mode of resolution to use for internal load balancing between tasks.", + "type": "string", + "default": "vip", + "enum": [ + "vip", + "dnsrr" + ] + }, + "Ports": { + "description": "List of exposed ports that this service is accessible on from the outside. Ports can only be provided if `vip` resolution mode is used.", + "type": "array", + "items": { + "$ref": "#/definitions/EndpointPortConfig" + } + } + } + }, + "EngineDescription": { + "description": "EngineDescription provides information about an engine.", + "type": "object", + "properties": { + "EngineVersion": { + "type": "string", + "example": "17.06.0" + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "foo": "bar" + } + }, + "Plugins": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Type": { + "type": "string" + } + } + }, + "example": [ + { + "Name": "awslogs", + "Type": "Log" + }, + { + "Name": "fluentd", + "Type": "Log" + }, + { + "Name": "gcplogs", + "Type": "Log" + }, + { + "Name": "gelf", + "Type": "Log" + }, + { + "Name": "journald", + "Type": "Log" + }, + { + "Name": "json-file", + "Type": "Log" + }, + { + "Name": "logentries", + "Type": "Log" + }, + { + "Name": "splunk", + "Type": "Log" + }, + { + "Name": "syslog", + "Type": "Log" + }, + { + "Name": "bridge", + "Type": "Network" + }, + { + "Name": "host", + "Type": "Network" + }, + { + "Name": "ipvlan", + "Type": "Network" + }, + { + "Name": "macvlan", + "Type": "Network" + }, + { + "Name": "null", + "Type": "Network" + }, + { + "Name": "overlay", + "Type": "Network" + }, + { + "Name": "local", + "Type": "Volume" + }, + { + "Name": "localhost:5000/vieux/sshfs:latest", + "Type": "Volume" + }, + { + "Name": "vieux/sshfs:latest", + "Type": "Volume" + } + ] + } + } + }, + "ErrorDetail": { + "type": "object", + "properties": { + "code": { + "type": "integer" + }, + "message": { + "type": "string" + } + } + }, + "ErrorResponse": { + "description": "Represents an error.", + "type": "object", + "required": [ + "message" + ], + "properties": { + "message": { + "description": "The error message.", + "type": "string", + "x-nullable": false + } + }, + "example": { + "message": "Something went wrong." + } + }, + "GenericResources": { + "description": "User-defined resources can be either Integer resources (e.g, `SSD=3`) or String resources (e.g, `GPU=UUID1`)", + "type": "array", + "items": { + "type": "object", + "properties": { + "DiscreteResourceSpec": { + "type": "object", + "properties": { + "Kind": { + "type": "string" + }, + "Value": { + "type": "integer", + "format": "int64" + } + } + }, + "NamedResourceSpec": { + "type": "object", + "properties": { + "Kind": { + "type": "string" + }, + "Value": { + "type": "string" + } + } + } + } + }, + "example": [ + { + "DiscreteResourceSpec": { + "Kind": "SSD", + "Value": 3 + } + }, + { + "NamedResourceSpec": { + "Kind": "GPU", + "Value": "UUID1" + } + }, + { + "NamedResourceSpec": { + "Kind": "GPU", + "Value": "UUID2" + } + } + ] + }, + "GraphDriverData": { + "description": "Information about a container's graph driver.", + "type": "object", + "required": [ + "Name", + "Data" + ], + "properties": { + "Data": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "x-nullable": false + }, + "Name": { + "type": "string", + "x-nullable": false + } + } + }, + "HealthConfig": { + "description": "A test to perform to check that the container is healthy.", + "type": "object", + "properties": { + "Interval": { + "description": "The time to wait between checks in nanoseconds. It should be 0 or at least 1000000 (1 ms). 0 means inherit.", + "type": "integer" + }, + "Retries": { + "description": "The number of consecutive failures needed to consider a container as unhealthy. 0 means inherit.", + "type": "integer" + }, + "StartPeriod": { + "description": "Start period for the container to initialize before starting health-retries countdown in nanoseconds. It should be 0 or at least 1000000 (1 ms). 0 means inherit.", + "type": "integer" + }, + "Test": { + "description": "The test to perform. Possible values are:\n\n- `[]` inherit healthcheck from image or parent image\n- `[\"NONE\"]` disable healthcheck\n- `[\"CMD\", args...]` exec arguments directly\n- `[\"CMD-SHELL\", command]` run command with system's default shell\n", + "type": "array", + "items": { + "type": "string" + } + }, + "Timeout": { + "description": "The time to wait before considering the check to have hung. It should be 0 or at least 1000000 (1 ms). 0 means inherit.", + "type": "integer" + } + } + }, + "HostConfig": { + "description": "Container configuration that depends on the host we are running on", + "allOf": [ + { + "$ref": "#/definitions/Resources" + }, + { + "type": "object", + "properties": { + "AutoRemove": { + "description": "Automatically remove the container when the container's process exits. This has no effect if `RestartPolicy` is set.", + "type": "boolean" + }, + "Binds": { + "description": "A list of volume bindings for this container. Each volume binding is a string in one of these forms:\n\n- `host-src:container-dest` to bind-mount a host path into the container. Both `host-src`, and `container-dest` must be an _absolute_ path.\n- `host-src:container-dest:ro` to make the bind mount read-only inside the container. Both `host-src`, and `container-dest` must be an _absolute_ path.\n- `volume-name:container-dest` to bind-mount a volume managed by a volume driver into the container. `container-dest` must be an _absolute_ path.\n- `volume-name:container-dest:ro` to mount the volume read-only inside the container. `container-dest` must be an _absolute_ path.\n", + "type": "array", + "items": { + "type": "string" + } + }, + "CapAdd": { + "description": "A list of kernel capabilities to add to the container.", + "type": "array", + "items": { + "type": "string" + } + }, + "CapDrop": { + "description": "A list of kernel capabilities to drop from the container.", + "type": "array", + "items": { + "type": "string" + } + }, + "Cgroup": { + "description": "Cgroup to use for the container.", + "type": "string" + }, + "ConsoleSize": { + "description": "Initial console size, as an `[height, width]` array. (Windows only)", + "type": "array", + "maxItems": 2, + "minItems": 2, + "items": { + "type": "integer", + "minimum": 0 + } + }, + "ContainerIDFile": { + "description": "Path to a file where the container ID is written", + "type": "string" + }, + "Dns": { + "description": "A list of DNS servers for the container to use.", + "type": "array", + "items": { + "type": "string" + } + }, + "DnsOptions": { + "description": "A list of DNS options.", + "type": "array", + "items": { + "type": "string" + } + }, + "DnsSearch": { + "description": "A list of DNS search domains.", + "type": "array", + "items": { + "type": "string" + } + }, + "ExtraHosts": { + "description": "A list of hostnames/IP mappings to add to the container's `/etc/hosts` file. Specified in the form `[\"hostname:IP\"]`.\n", + "type": "array", + "items": { + "type": "string" + } + }, + "GroupAdd": { + "description": "A list of additional groups that the container process will run as.", + "type": "array", + "items": { + "type": "string" + } + }, + "IpcMode": { + "description": "IPC sharing mode for the container. Possible values are:\n\n- `\"none\"`: own private IPC namespace, with /dev/shm not mounted\n- `\"private\"`: own private IPC namespace\n- `\"shareable\"`: own private IPC namespace, with a possibility to share it with other containers\n- `\"container:\u003cname|id\u003e\"`: join another (shareable) container's IPC namespace\n- `\"host\"`: use the host system's IPC namespace\n\nIf not specified, daemon default is used, which can either be `\"private\"`\nor `\"shareable\"`, depending on daemon version and configuration.\n", + "type": "string" + }, + "Isolation": { + "description": "Isolation technology of the container. (Windows only)", + "type": "string", + "enum": [ + "default", + "process", + "hyperv" + ] + }, + "Links": { + "description": "A list of links for the container in the form `container_name:alias`.", + "type": "array", + "items": { + "type": "string" + } + }, + "LogConfig": { + "description": "The logging configuration for this container", + "type": "object", + "properties": { + "Config": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "Type": { + "type": "string", + "enum": [ + "json-file", + "syslog", + "journald", + "gelf", + "fluentd", + "awslogs", + "splunk", + "etwlogs", + "none" + ] + } + } + }, + "MaskedPaths": { + "description": "The list of paths to be masked inside the container (this overrides the default set of paths)", + "type": "array", + "items": { + "type": "string" + } + }, + "Mounts": { + "description": "Specification for mounts to be added to the container.", + "type": "array", + "items": { + "$ref": "#/definitions/Mount" + } + }, + "NetworkMode": { + "description": "Network mode to use for this container. Supported standard values are: `bridge`, `host`, `none`, and `container:\u003cname|id\u003e`. Any other value is taken as a custom network's name to which this container should connect to.", + "type": "string" + }, + "OomScoreAdj": { + "description": "An integer value containing the score given to the container in order to tune OOM killer preferences.", + "type": "integer", + "example": 500 + }, + "PidMode": { + "description": "Set the PID (Process) Namespace mode for the container. It can be either:\n\n- `\"container:\u003cname|id\u003e\"`: joins another container's PID namespace\n- `\"host\"`: use the host's PID namespace inside the container\n", + "type": "string" + }, + "PortBindings": { + "$ref": "#/definitions/PortMap" + }, + "Privileged": { + "description": "Gives the container full access to the host.", + "type": "boolean" + }, + "PublishAllPorts": { + "description": "Allocates an ephemeral host port for all of a container's\nexposed ports.\n\nPorts are de-allocated when the container stops and allocated when the container starts.\nThe allocated port might be changed when restarting the container.\n\nThe port is selected from the ephemeral port range that depends on the kernel.\nFor example, on Linux the range is defined by `/proc/sys/net/ipv4/ip_local_port_range`.\n", + "type": "boolean" + }, + "ReadonlyPaths": { + "description": "The list of paths to be set as read-only inside the container (this overrides the default set of paths)", + "type": "array", + "items": { + "type": "string" + } + }, + "ReadonlyRootfs": { + "description": "Mount the container's root filesystem as read only.", + "type": "boolean" + }, + "RestartPolicy": { + "$ref": "#/definitions/RestartPolicy" + }, + "Runtime": { + "description": "Runtime to use with this container.", + "type": "string" + }, + "SecurityOpt": { + "description": "A list of string values to customize labels for MLS systems, such as SELinux.", + "type": "array", + "items": { + "type": "string" + } + }, + "ShmSize": { + "description": "Size of `/dev/shm` in bytes. If omitted, the system uses 64MB.", + "type": "integer", + "minimum": 0 + }, + "StorageOpt": { + "description": "Storage driver options for this container, in the form `{\"size\": \"120G\"}`.\n", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "Sysctls": { + "description": "A list of kernel parameters (sysctls) to set in the container. For example: `{\"net.ipv4.ip_forward\": \"1\"}`\n", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "Tmpfs": { + "description": "A map of container directories which should be replaced by tmpfs mounts, and their corresponding mount options. For example: `{ \"/run\": \"rw,noexec,nosuid,size=65536k\" }`.\n", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "UTSMode": { + "description": "UTS namespace to use for the container.", + "type": "string" + }, + "UsernsMode": { + "description": "Sets the usernamespace mode for the container when usernamespace remapping option is enabled.", + "type": "string" + }, + "VolumeDriver": { + "description": "Driver that this container uses to mount volumes.", + "type": "string" + }, + "VolumesFrom": { + "description": "A list of volumes to inherit from another container, specified in the form `\u003ccontainer name\u003e[:\u003cro|rw\u003e]`.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + ] + }, + "IPAM": { + "type": "object", + "properties": { + "Config": { + "description": "List of IPAM configuration options, specified as a map: `{\"Subnet\": \u003cCIDR\u003e, \"IPRange\": \u003cCIDR\u003e, \"Gateway\": \u003cIP address\u003e, \"AuxAddress\": \u003cdevice_name:IP address\u003e}`", + "type": "array", + "items": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + }, + "Driver": { + "description": "Name of the IPAM driver to use.", + "type": "string", + "default": "default" + }, + "Options": { + "description": "Driver-specific options, specified as a map.", + "type": "array", + "items": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + } + }, + "IdResponse": { + "description": "Response to an API call that returns just an Id", + "type": "object", + "required": [ + "Id" + ], + "properties": { + "Id": { + "description": "The id of the newly created object.", + "type": "string", + "x-nullable": false + } + } + }, + "Image": { + "type": "object", + "required": [ + "Id", + "Parent", + "Comment", + "Created", + "Container", + "DockerVersion", + "Author", + "Architecture", + "Os", + "Size", + "VirtualSize", + "GraphDriver", + "RootFS" + ], + "properties": { + "Architecture": { + "type": "string", + "x-nullable": false + }, + "Author": { + "type": "string", + "x-nullable": false + }, + "Comment": { + "type": "string", + "x-nullable": false + }, + "Config": { + "$ref": "#/definitions/ContainerConfig" + }, + "Container": { + "type": "string", + "x-nullable": false + }, + "ContainerConfig": { + "$ref": "#/definitions/ContainerConfig" + }, + "Created": { + "type": "string", + "x-nullable": false + }, + "DockerVersion": { + "type": "string", + "x-nullable": false + }, + "GraphDriver": { + "$ref": "#/definitions/GraphDriverData" + }, + "Id": { + "type": "string", + "x-nullable": false + }, + "Metadata": { + "type": "object", + "properties": { + "LastTagTime": { + "type": "string", + "format": "dateTime" + } + } + }, + "Os": { + "type": "string", + "x-nullable": false + }, + "OsVersion": { + "type": "string" + }, + "Parent": { + "type": "string", + "x-nullable": false + }, + "RepoDigests": { + "type": "array", + "items": { + "type": "string" + } + }, + "RepoTags": { + "type": "array", + "items": { + "type": "string" + } + }, + "RootFS": { + "type": "object", + "required": [ + "Type" + ], + "properties": { + "BaseLayer": { + "type": "string" + }, + "Layers": { + "type": "array", + "items": { + "type": "string" + } + }, + "Type": { + "type": "string", + "x-nullable": false + } + } + }, + "Size": { + "type": "integer", + "format": "int64", + "x-nullable": false + }, + "VirtualSize": { + "type": "integer", + "format": "int64", + "x-nullable": false + } + } + }, + "ImageDeleteResponseItem": { + "type": "object", + "properties": { + "Deleted": { + "description": "The image ID of an image that was deleted", + "type": "string" + }, + "Untagged": { + "description": "The image ID of an image that was untagged", + "type": "string" + } + } + }, + "ImageID": { + "description": "Image ID or Digest", + "type": "object", + "properties": { + "ID": { + "type": "string" + } + }, + "example": { + "ID": "sha256:85f05633ddc1c50679be2b16a0479ab6f7637f8884e0cfe0f4d20e1ebb3d6e7c" + } + }, + "ImageSummary": { + "type": "object", + "required": [ + "Id", + "ParentId", + "RepoTags", + "RepoDigests", + "Created", + "Size", + "SharedSize", + "VirtualSize", + "Labels", + "Containers" + ], + "properties": { + "Containers": { + "type": "integer", + "x-nullable": false + }, + "Created": { + "type": "integer", + "x-nullable": false + }, + "Id": { + "type": "string", + "x-nullable": false + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "x-nullable": false + }, + "ParentId": { + "type": "string", + "x-nullable": false + }, + "RepoDigests": { + "type": "array", + "items": { + "type": "string" + }, + "x-nullable": false + }, + "RepoTags": { + "type": "array", + "items": { + "type": "string" + }, + "x-nullable": false + }, + "SharedSize": { + "type": "integer", + "x-nullable": false + }, + "Size": { + "type": "integer", + "x-nullable": false + }, + "VirtualSize": { + "type": "integer", + "x-nullable": false + } + } + }, + "IndexInfo": { + "description": "IndexInfo contains information about a registry.", + "type": "object", + "properties": { + "Mirrors": { + "description": "List of mirrors, expressed as URIs.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "https://hub-mirror.corp.example.com:5000/", + "https://registry-2.docker.io/", + "https://registry-3.docker.io/" + ] + }, + "Name": { + "description": "Name of the registry, such as \"docker.io\".\n", + "type": "string", + "example": "docker.io" + }, + "Official": { + "description": "Indicates whether this is an official registry (i.e., Docker Hub / docker.io)\n", + "type": "boolean", + "example": true + }, + "Secure": { + "description": "Indicates if the registry is part of the list of insecure\nregistries.\n\nIf `false`, the registry is insecure. Insecure registries accept\nun-encrypted (HTTP) and/or untrusted (HTTPS with certificates from\nunknown CAs) communication.\n\n\u003e **Warning**: Insecure registries can be useful when running a local\n\u003e registry. However, because its use creates security vulnerabilities\n\u003e it should ONLY be enabled for testing purposes. For increased\n\u003e security, users should add their CA to their system's list of\n\u003e trusted CAs instead of enabling this option.\n", + "type": "boolean", + "example": true + } + }, + "x-nullable": true + }, + "JoinTokens": { + "description": "JoinTokens contains the tokens workers and managers need to join the swarm.\n", + "type": "object", + "properties": { + "Manager": { + "description": "The token managers can use to join the swarm.\n", + "type": "string", + "example": "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-7p73s1dx5in4tatdymyhg9hu2" + }, + "Worker": { + "description": "The token workers can use to join the swarm.\n", + "type": "string", + "example": "SWMTKN-1-3pu6hszjas19xyp7ghgosyx9k8atbfcr8p2is99znpy26u2lkl-1awxwuwd3z9j1z3puu7rcgdbx" + } + } + }, + "LocalNodeState": { + "description": "Current local status of this node.", + "type": "string", + "default": "", + "enum": [ + "", + "inactive", + "pending", + "active", + "error", + "locked" + ], + "example": "active" + }, + "ManagerStatus": { + "description": "ManagerStatus represents the status of a manager.\n\nIt provides the current status of a node's manager component, if the node\nis a manager.\n", + "type": "object", + "properties": { + "Addr": { + "description": "The IP address and port at which the manager is reachable.\n", + "type": "string", + "example": "10.0.0.46:2377" + }, + "Leader": { + "type": "boolean", + "default": false, + "example": true + }, + "Reachability": { + "$ref": "#/definitions/Reachability" + } + }, + "x-nullable": true + }, + "Mount": { + "type": "object", + "properties": { + "BindOptions": { + "description": "Optional configuration for the `bind` type.", + "type": "object", + "properties": { + "Propagation": { + "description": "A propagation mode with the value `[r]private`, `[r]shared`, or `[r]slave`.", + "type": "string", + "enum": [ + "private", + "rprivate", + "shared", + "rshared", + "slave", + "rslave" + ] + } + } + }, + "Consistency": { + "description": "The consistency requirement for the mount: `default`, `consistent`, `cached`, or `delegated`.", + "type": "string" + }, + "ReadOnly": { + "description": "Whether the mount should be read-only.", + "type": "boolean" + }, + "Source": { + "description": "Mount source (e.g. a volume name, a host path).", + "type": "string" + }, + "Target": { + "description": "Container path.", + "type": "string" + }, + "TmpfsOptions": { + "description": "Optional configuration for the `tmpfs` type.", + "type": "object", + "properties": { + "Mode": { + "description": "The permission mode for the tmpfs mount in an integer.", + "type": "integer" + }, + "SizeBytes": { + "description": "The size for the tmpfs mount in bytes.", + "type": "integer", + "format": "int64" + } + } + }, + "Type": { + "description": "The mount type. Available types:\n\n- `bind` Mounts a file or directory from the host into the container. Must exist prior to creating the container.\n- `volume` Creates a volume with the given name and options (or uses a pre-existing volume with the same name and options). These are **not** removed when the container is removed.\n- `tmpfs` Create a tmpfs with the given options. The mount source cannot be specified for tmpfs.\n", + "type": "string", + "enum": [ + "bind", + "volume", + "tmpfs" + ] + }, + "VolumeOptions": { + "description": "Optional configuration for the `volume` type.", + "type": "object", + "properties": { + "DriverConfig": { + "description": "Map of driver specific options", + "type": "object", + "properties": { + "Name": { + "description": "Name of the driver to use to create the volume.", + "type": "string" + }, + "Options": { + "description": "key/value map of driver specific options.", + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "NoCopy": { + "description": "Populate volume with data from the target.", + "type": "boolean", + "default": false + } + } + } + } + }, + "MountPoint": { + "description": "A mount point inside a container", + "type": "object", + "properties": { + "Destination": { + "type": "string" + }, + "Driver": { + "type": "string" + }, + "Mode": { + "type": "string" + }, + "Name": { + "type": "string" + }, + "Propagation": { + "type": "string" + }, + "RW": { + "type": "boolean" + }, + "Source": { + "type": "string" + }, + "Type": { + "type": "string" + } + } + }, + "Network": { + "type": "object", + "properties": { + "Attachable": { + "type": "boolean" + }, + "Containers": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/NetworkContainer" + } + }, + "Created": { + "type": "string", + "format": "dateTime" + }, + "Driver": { + "type": "string" + }, + "EnableIPv6": { + "type": "boolean" + }, + "IPAM": { + "$ref": "#/definitions/IPAM" + }, + "Id": { + "type": "string" + }, + "Ingress": { + "type": "boolean" + }, + "Internal": { + "type": "boolean" + }, + "Labels": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "Name": { + "type": "string" + }, + "Options": { + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "Scope": { + "type": "string" + } + }, + "example": { + "Attachable": false, + "Containers": { + "19a4d5d687db25203351ed79d478946f861258f018fe384f229f2efa4b23513c": { + "EndpointID": "628cadb8bcb92de107b2a1e516cbffe463e321f548feb37697cce00ad694f21a", + "IPv4Address": "172.19.0.2/16", + "IPv6Address": "", + "MacAddress": "02:42:ac:13:00:02", + "Name": "test" + } + }, + "Created": "2016-10-19T04:33:30.360899459Z", + "Driver": "bridge", + "EnableIPv6": false, + "IPAM": { + "Config": [ + { + "Gateway": "172.19.0.1", + "Subnet": "172.19.0.0/16" + } + ], + "Driver": "default", + "Options": { + "foo": "bar" + } + }, + "Id": "7d86d31b1478e7cca9ebed7e73aa0fdeec46c5ca29497431d3007d2d9e15ed99", + "Ingress": false, + "Internal": false, + "Labels": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + }, + "Name": "net01", + "Options": { + "com.docker.network.bridge.default_bridge": "true", + "com.docker.network.bridge.enable_icc": "true", + "com.docker.network.bridge.enable_ip_masquerade": "true", + "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", + "com.docker.network.bridge.name": "docker0", + "com.docker.network.driver.mtu": "1500" + }, + "Scope": "local" + } + }, + "NetworkContainer": { + "type": "object", + "properties": { + "EndpointID": { + "type": "string" + }, + "IPv4Address": { + "type": "string" + }, + "IPv6Address": { + "type": "string" + }, + "MacAddress": { + "type": "string" + }, + "Name": { + "type": "string" + } + } + }, + "NetworkSettings": { + "description": "NetworkSettings exposes the network settings in the API", + "type": "object", + "properties": { + "Bridge": { + "description": "Name of the network'a bridge (for example, `docker0`).", + "type": "string", + "example": "docker0" + }, + "EndpointID": { + "description": "EndpointID uniquely represents a service endpoint in a Sandbox.\n\n\u003cp\u003e\u003cbr /\u003e\u003c/p\u003e\n\n\u003e **Deprecated**: This field is only propagated when attached to the\n\u003e default \"bridge\" network. Use the information from the \"bridge\"\n\u003e network inside the `Networks` map instead, which contains the same\n\u003e information. This field was deprecated in Docker 1.9 and is scheduled\n\u003e to be removed in Docker 17.12.0\n", + "type": "string", + "example": "b88f5b905aabf2893f3cbc4ee42d1ea7980bbc0a92e2c8922b1e1795298afb0b" + }, + "Gateway": { + "description": "Gateway address for the default \"bridge\" network.\n\n\u003cp\u003e\u003cbr /\u003e\u003c/p\u003e\n\n\u003e **Deprecated**: This field is only propagated when attached to the\n\u003e default \"bridge\" network. Use the information from the \"bridge\"\n\u003e network inside the `Networks` map instead, which contains the same\n\u003e information. This field was deprecated in Docker 1.9 and is scheduled\n\u003e to be removed in Docker 17.12.0\n", + "type": "string", + "example": "172.17.0.1" + }, + "GlobalIPv6Address": { + "description": "Global IPv6 address for the default \"bridge\" network.\n\n\u003cp\u003e\u003cbr /\u003e\u003c/p\u003e\n\n\u003e **Deprecated**: This field is only propagated when attached to the\n\u003e default \"bridge\" network. Use the information from the \"bridge\"\n\u003e network inside the `Networks` map instead, which contains the same\n\u003e information. This field was deprecated in Docker 1.9 and is scheduled\n\u003e to be removed in Docker 17.12.0\n", + "type": "string", + "example": "2001:db8::5689" + }, + "GlobalIPv6PrefixLen": { + "description": "Mask length of the global IPv6 address.\n\n\u003cp\u003e\u003cbr /\u003e\u003c/p\u003e\n\n\u003e **Deprecated**: This field is only propagated when attached to the\n\u003e default \"bridge\" network. Use the information from the \"bridge\"\n\u003e network inside the `Networks` map instead, which contains the same\n\u003e information. This field was deprecated in Docker 1.9 and is scheduled\n\u003e to be removed in Docker 17.12.0\n", + "type": "integer", + "example": 64 + }, + "HairpinMode": { + "description": "Indicates if hairpin NAT should be enabled on the virtual interface.\n", + "type": "boolean", + "example": false + }, + "IPAddress": { + "description": "IPv4 address for the default \"bridge\" network.\n\n\u003cp\u003e\u003cbr /\u003e\u003c/p\u003e\n\n\u003e **Deprecated**: This field is only propagated when attached to the\n\u003e default \"bridge\" network. Use the information from the \"bridge\"\n\u003e network inside the `Networks` map instead, which contains the same\n\u003e information. This field was deprecated in Docker 1.9 and is scheduled\n\u003e to be removed in Docker 17.12.0\n", + "type": "string", + "example": "172.17.0.4" + }, + "IPPrefixLen": { + "description": "Mask length of the IPv4 address.\n\n\u003cp\u003e\u003cbr /\u003e\u003c/p\u003e\n\n\u003e **Deprecated**: This field is only propagated when attached to the\n\u003e default \"bridge\" network. Use the information from the \"bridge\"\n\u003e network inside the `Networks` map instead, which contains the same\n\u003e information. This field was deprecated in Docker 1.9 and is scheduled\n\u003e to be removed in Docker 17.12.0\n", + "type": "integer", + "example": 16 + }, + "IPv6Gateway": { + "description": "IPv6 gateway address for this network.\n\n\u003cp\u003e\u003cbr /\u003e\u003c/p\u003e\n\n\u003e **Deprecated**: This field is only propagated when attached to the\n\u003e default \"bridge\" network. Use the information from the \"bridge\"\n\u003e network inside the `Networks` map instead, which contains the same\n\u003e information. This field was deprecated in Docker 1.9 and is scheduled\n\u003e to be removed in Docker 17.12.0\n", + "type": "string", + "example": "2001:db8:2::100" + }, + "LinkLocalIPv6Address": { + "description": "IPv6 unicast address using the link-local prefix.", + "type": "string", + "example": "fe80::42:acff:fe11:1" + }, + "LinkLocalIPv6PrefixLen": { + "description": "Prefix length of the IPv6 unicast address.", + "type": "integer", + "example": "64" + }, + "MacAddress": { + "description": "MAC address for the container on the default \"bridge\" network.\n\n\u003cp\u003e\u003cbr /\u003e\u003c/p\u003e\n\n\u003e **Deprecated**: This field is only propagated when attached to the\n\u003e default \"bridge\" network. Use the information from the \"bridge\"\n\u003e network inside the `Networks` map instead, which contains the same\n\u003e information. This field was deprecated in Docker 1.9 and is scheduled\n\u003e to be removed in Docker 17.12.0\n", + "type": "string", + "example": "02:42:ac:11:00:04" + }, + "Networks": { + "description": "Information about all networks that the container is connected to.\n", + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/EndpointSettings" + } + }, + "Ports": { + "$ref": "#/definitions/PortMap" + }, + "SandboxID": { + "description": "SandboxID uniquely represents a container's network stack.", + "type": "string", + "example": "9d12daf2c33f5959c8bf90aa513e4f65b561738661003029ec84830cd503a0c3" + }, + "SandboxKey": { + "description": "SandboxKey identifies the sandbox", + "type": "string", + "example": "/var/run/docker/netns/8ab54b426c38" + }, + "SecondaryIPAddresses": { + "type": "array", + "items": { + "$ref": "#/definitions/Address" + }, + "x-nullable": true + }, + "SecondaryIPv6Addresses": { + "type": "array", + "items": { + "$ref": "#/definitions/Address" + }, + "x-nullable": true + } + } + }, + "Node": { + "type": "object", + "properties": { + "CreatedAt": { + "description": "Date and time at which the node was added to the swarm in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "type": "string", + "format": "dateTime", + "example": "2016-08-18T10:44:24.496525531Z" + }, + "Description": { + "$ref": "#/definitions/NodeDescription" + }, + "ID": { + "type": "string", + "example": "24ifsmvkjbyhk" + }, + "ManagerStatus": { + "$ref": "#/definitions/ManagerStatus" + }, + "Spec": { + "$ref": "#/definitions/NodeSpec" + }, + "Status": { + "$ref": "#/definitions/NodeStatus" + }, + "UpdatedAt": { + "description": "Date and time at which the node was last updated in\n[RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format with nano-seconds.\n", + "type": "string", + "format": "dateTime", + "example": "2017-08-09T07:09:37.632105588Z" + }, + "Version": { + "$ref": "#/definitions/ObjectVersion" + } + } + }, + "NodeDescription": { + "description": "NodeDescription encapsulates the properties of the Node as reported by the\nagent.\n", + "type": "object", + "properties": { + "Engine": { + "$ref": "#/definitions/EngineDescription" + }, + "Hostname": { + "type": "string", + "example": "bf3067039e47" + }, + "Platform": { + "$ref": "#/definitions/Platform" + }, + "Resources": { + "$ref": "#/definitions/ResourceObject" + }, + "TLSInfo": { + "$ref": "#/definitions/TLSInfo" + } + } + }, + "NodeSpec": { + "type": "object", + "properties": { + "Availability": { + "description": "Availability of the node.", + "type": "string", + "enum": [ + "active", + "pause", + "drain" + ], + "example": "active" + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "Name": { + "description": "Name for the node.", + "type": "string", + "example": "my-node" + }, + "Role": { + "description": "Role of the node.", + "type": "string", + "enum": [ + "worker", + "manager" + ], + "example": "manager" + } + }, + "example": { + "Availability": "active", + "Labels": { + "foo": "bar" + }, + "Name": "node-name", + "Role": "manager" + } + }, + "NodeState": { + "description": "NodeState represents the state of a node.", + "type": "string", + "enum": [ + "unknown", + "down", + "ready", + "disconnected" + ], + "example": "ready" + }, + "NodeStatus": { + "description": "NodeStatus represents the status of a node.\n\nIt provides the current status of the node, as seen by the manager.\n", + "type": "object", + "properties": { + "Addr": { + "description": "IP address of the node.", + "type": "string", + "example": "172.17.0.2" + }, + "Message": { + "type": "string", + "example": "" + }, + "State": { + "$ref": "#/definitions/NodeState" + } + } + }, + "ObjectVersion": { + "description": "The version number of the object such as node, service, etc. This is needed to avoid conflicting writes.\nThe client must send the version number along with the modified specification when updating these objects.\nThis approach ensures safe concurrency and determinism in that the change on the object\nmay not be applied if the version number has changed from the last read. In other words,\nif two update requests specify the same base version, only one of the requests can succeed.\nAs a result, two separate update requests that happen at the same time will not\nunintentionally overwrite each other.\n", + "type": "object", + "properties": { + "Index": { + "type": "integer", + "format": "uint64", + "example": 373531 + } + } + }, + "PeerNode": { + "description": "Represents a peer-node in the swarm", + "properties": { + "Addr": { + "description": "IP address and ports at which this node can be reached.\n", + "type": "string" + }, + "NodeID": { + "description": "Unique identifier of for this node in the swarm.", + "type": "string" + } + } + }, + "Platform": { + "description": "Platform represents the platform (Arch/OS).\n", + "type": "object", + "properties": { + "Architecture": { + "description": "Architecture represents the hardware architecture (for example,\n`x86_64`).\n", + "type": "string", + "example": "x86_64" + }, + "OS": { + "description": "OS represents the Operating System (for example, `linux` or `windows`).\n", + "type": "string", + "example": "linux" + } + } + }, + "Plugin": { + "description": "A plugin for the Engine API", + "type": "object", + "required": [ + "Settings", + "Enabled", + "Config", + "Name" + ], + "properties": { + "Config": { + "description": "The config of a plugin.", + "type": "object", + "required": [ + "Description", + "Documentation", + "Interface", + "Entrypoint", + "WorkDir", + "Network", + "Linux", + "PidHost", + "PropagatedMount", + "IpcHost", + "Mounts", + "Env", + "Args" + ], + "properties": { + "Args": { + "type": "object", + "required": [ + "Name", + "Description", + "Settable", + "Value" + ], + "properties": { + "Description": { + "type": "string", + "x-nullable": false, + "example": "command line arguments" + }, + "Name": { + "type": "string", + "x-nullable": false, + "example": "args" + }, + "Settable": { + "type": "array", + "items": { + "type": "string" + } + }, + "Value": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "x-nullable": false + }, + "Description": { + "type": "string", + "x-nullable": false, + "example": "A sample volume plugin for Docker" + }, + "DockerVersion": { + "description": "Docker Version used to create the plugin", + "type": "string", + "x-nullable": false, + "example": "17.06.0-ce" + }, + "Documentation": { + "type": "string", + "x-nullable": false, + "example": "https://docs.docker.com/engine/extend/plugins/" + }, + "Entrypoint": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "/usr/bin/sample-volume-plugin", + "/data" + ] + }, + "Env": { + "type": "array", + "items": { + "$ref": "#/definitions/PluginEnv" + }, + "example": [ + { + "Description": "If set, prints debug messages", + "Name": "DEBUG", + "Settable": null, + "Value": "0" + } + ] + }, + "Interface": { + "description": "The interface between Docker and the plugin", + "type": "object", + "required": [ + "Types", + "Socket" + ], + "properties": { + "ProtocolScheme": { + "description": "Protocol to use for clients connecting to the plugin.", + "type": "string", + "enum": [ + "", + "moby.plugins.http/v1" + ], + "example": "some.protocol/v1.0" + }, + "Socket": { + "type": "string", + "x-nullable": false, + "example": "plugins.sock" + }, + "Types": { + "type": "array", + "items": { + "$ref": "#/definitions/PluginInterfaceType" + }, + "example": [ + "docker.volumedriver/1.0" + ] + } + }, + "x-nullable": false + }, + "IpcHost": { + "type": "boolean", + "x-nullable": false, + "example": false + }, + "Linux": { + "type": "object", + "required": [ + "Capabilities", + "AllowAllDevices", + "Devices" + ], + "properties": { + "AllowAllDevices": { + "type": "boolean", + "x-nullable": false, + "example": false + }, + "Capabilities": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "CAP_SYS_ADMIN", + "CAP_SYSLOG" + ] + }, + "Devices": { + "type": "array", + "items": { + "$ref": "#/definitions/PluginDevice" + } + } + }, + "x-nullable": false + }, + "Mounts": { + "type": "array", + "items": { + "$ref": "#/definitions/PluginMount" + } + }, + "Network": { + "type": "object", + "required": [ + "Type" + ], + "properties": { + "Type": { + "type": "string", + "x-nullable": false, + "example": "host" + } + }, + "x-nullable": false + }, + "PidHost": { + "type": "boolean", + "x-nullable": false, + "example": false + }, + "PropagatedMount": { + "type": "string", + "x-nullable": false, + "example": "/mnt/volumes" + }, + "User": { + "type": "object", + "properties": { + "GID": { + "type": "integer", + "format": "uint32", + "example": 1000 + }, + "UID": { + "type": "integer", + "format": "uint32", + "example": 1000 + } + }, + "x-nullable": false + }, + "WorkDir": { + "type": "string", + "x-nullable": false, + "example": "/bin/" + }, + "rootfs": { + "type": "object", + "properties": { + "diff_ids": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "sha256:675532206fbf3030b8458f88d6e26d4eb1577688a25efec97154c94e8b6b4887", + "sha256:e216a057b1cb1efc11f8a268f37ef62083e70b1b38323ba252e25ac88904a7e8" + ] + }, + "type": { + "type": "string", + "example": "layers" + } + } + } + }, + "x-nullable": false + }, + "Enabled": { + "description": "True if the plugin is running. False if the plugin is not running, only installed.", + "type": "boolean", + "x-nullable": false, + "example": true + }, + "Id": { + "type": "string", + "example": "5724e2c8652da337ab2eedd19fc6fc0ec908e4bd907c7421bf6a8dfc70c4c078" + }, + "Name": { + "type": "string", + "x-nullable": false, + "example": "tiborvass/sample-volume-plugin" + }, + "PluginReference": { + "description": "plugin remote reference used to push/pull the plugin", + "type": "string", + "x-nullable": false, + "example": "localhost:5000/tiborvass/sample-volume-plugin:latest" + }, + "Settings": { + "description": "Settings that can be modified by users.", + "type": "object", + "required": [ + "Args", + "Devices", + "Env", + "Mounts" + ], + "properties": { + "Args": { + "type": "array", + "items": { + "type": "string" + } + }, + "Devices": { + "type": "array", + "items": { + "$ref": "#/definitions/PluginDevice" + } + }, + "Env": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "DEBUG=0" + ] + }, + "Mounts": { + "type": "array", + "items": { + "$ref": "#/definitions/PluginMount" + } + } + }, + "x-nullable": false + } + } + }, + "PluginDevice": { + "type": "object", + "required": [ + "Name", + "Description", + "Settable", + "Path" + ], + "properties": { + "Description": { + "type": "string", + "x-nullable": false + }, + "Name": { + "type": "string", + "x-nullable": false + }, + "Path": { + "type": "string", + "example": "/dev/fuse" + }, + "Settable": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "x-nullable": false + }, + "PluginEnv": { + "type": "object", + "required": [ + "Name", + "Description", + "Settable", + "Value" + ], + "properties": { + "Description": { + "type": "string", + "x-nullable": false + }, + "Name": { + "type": "string", + "x-nullable": false + }, + "Settable": { + "type": "array", + "items": { + "type": "string" + } + }, + "Value": { + "type": "string" + } + }, + "x-nullable": false + }, + "PluginInterfaceType": { + "type": "object", + "required": [ + "Prefix", + "Capability", + "Version" + ], + "properties": { + "Capability": { + "type": "string", + "x-nullable": false + }, + "Prefix": { + "type": "string", + "x-nullable": false + }, + "Version": { + "type": "string", + "x-nullable": false + } + }, + "x-nullable": false + }, + "PluginMount": { + "type": "object", + "required": [ + "Name", + "Description", + "Settable", + "Source", + "Destination", + "Type", + "Options" + ], + "properties": { + "Description": { + "type": "string", + "x-nullable": false, + "example": "This is a mount that's used by the plugin." + }, + "Destination": { + "type": "string", + "x-nullable": false, + "example": "/mnt/state" + }, + "Name": { + "type": "string", + "x-nullable": false, + "example": "some-mount" + }, + "Options": { + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "rbind", + "rw" + ] + }, + "Settable": { + "type": "array", + "items": { + "type": "string" + } + }, + "Source": { + "type": "string", + "example": "/var/lib/docker/plugins/" + }, + "Type": { + "type": "string", + "x-nullable": false, + "example": "bind" + } + }, + "x-nullable": false + }, + "PluginsInfo": { + "description": "Available plugins per type.\n\n\u003cp\u003e\u003cbr /\u003e\u003c/p\u003e\n\n\u003e **Note**: Only unmanaged (V1) plugins are included in this list.\n\u003e V1 plugins are \"lazily\" loaded, and are not returned in this list\n\u003e if there is no resource using the plugin.\n", + "type": "object", + "properties": { + "Authorization": { + "description": "Names of available authorization plugins.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "img-authz-plugin", + "hbm" + ] + }, + "Log": { + "description": "Names of available logging-drivers, and logging-driver plugins.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "awslogs", + "fluentd", + "gcplogs", + "gelf", + "journald", + "json-file", + "logentries", + "splunk", + "syslog" + ] + }, + "Network": { + "description": "Names of available network-drivers, and network-driver plugins.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "bridge", + "host", + "ipvlan", + "macvlan", + "null", + "overlay" + ] + }, + "Volume": { + "description": "Names of available volume-drivers, and network-driver plugins.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "local" + ] + } + } + }, + "Port": { + "description": "An open port on a container", + "type": "object", + "required": [ + "PrivatePort", + "Type" + ], + "properties": { + "IP": { + "description": "Host IP address that the container's port is mapped to", + "type": "string", + "format": "ip-address" + }, + "PrivatePort": { + "description": "Port on the container", + "type": "integer", + "format": "uint16", + "x-nullable": false + }, + "PublicPort": { + "description": "Port exposed on the host", + "type": "integer", + "format": "uint16" + }, + "Type": { + "type": "string", + "enum": [ + "tcp", + "udp", + "sctp" + ], + "x-nullable": false + } + }, + "example": { + "PrivatePort": 8080, + "PublicPort": 80, + "Type": "tcp" + } + }, + "PortBinding": { + "description": "PortBinding represents a binding between a host IP address and a host\nport.\n", + "type": "object", + "properties": { + "HostIp": { + "description": "Host IP address that the container's port is mapped to.", + "type": "string", + "example": "127.0.0.1" + }, + "HostPort": { + "description": "Host port number that the container's port is mapped to.", + "type": "string", + "example": "4443" + } + }, + "x-nullable": true + }, + "PortMap": { + "description": "PortMap describes the mapping of container ports to host ports, using the\ncontainer's port-number and protocol as key in the format `\u003cport\u003e/\u003cprotocol\u003e`,\nfor example, `80/udp`.\n\nIf a container's port is mapped for multiple protocols, separate entries\nare added to the mapping table.\n", + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "$ref": "#/definitions/PortBinding" + } + }, + "example": { + "2377/tcp": null, + "443/tcp": [ + { + "HostIp": "127.0.0.1", + "HostPort": "4443" + } + ], + "53/udp": [ + { + "HostIp": "0.0.0.0", + "HostPort": "53" + } + ], + "80/tcp": [ + { + "HostIp": "0.0.0.0", + "HostPort": "80" + }, + { + "HostIp": "0.0.0.0", + "HostPort": "8080" + } + ], + "80/udp": [ + { + "HostIp": "0.0.0.0", + "HostPort": "80" + } + ] + } + }, + "ProcessConfig": { + "type": "object", + "properties": { + "arguments": { + "type": "array", + "items": { + "type": "string" + } + }, + "entrypoint": { + "type": "string" + }, + "privileged": { + "type": "boolean" + }, + "tty": { + "type": "boolean" + }, + "user": { + "type": "string" + } + } + }, + "ProgressDetail": { + "type": "object", + "properties": { + "current": { + "type": "integer" + }, + "total": { + "type": "integer" + } + } + }, + "PushImageInfo": { + "type": "object", + "properties": { + "error": { + "type": "string" + }, + "progress": { + "type": "string" + }, + "progressDetail": { + "$ref": "#/definitions/ProgressDetail" + }, + "status": { + "type": "string" + } + } + }, + "Reachability": { + "description": "Reachability represents the reachability of a node.", + "type": "string", + "enum": [ + "unknown", + "unreachable", + "reachable" + ], + "example": "reachable" + }, + "RegistryServiceConfig": { + "description": "RegistryServiceConfig stores daemon registry services configuration.\n", + "type": "object", + "properties": { + "AllowNondistributableArtifactsCIDRs": { + "description": "List of IP ranges to which nondistributable artifacts can be pushed,\nusing the CIDR syntax [RFC 4632](https://tools.ietf.org/html/4632).\n\nSome images (for example, Windows base images) contain artifacts\nwhose distribution is restricted by license. When these images are\npushed to a registry, restricted artifacts are not included.\n\nThis configuration override this behavior, and enables the daemon to\npush nondistributable artifacts to all registries whose resolved IP\naddress is within the subnet described by the CIDR syntax.\n\nThis option is useful when pushing images containing\nnondistributable artifacts to a registry on an air-gapped network so\nhosts on that network can pull the images without connecting to\nanother server.\n\n\u003e **Warning**: Nondistributable artifacts typically have restrictions\n\u003e on how and where they can be distributed and shared. Only use this\n\u003e feature to push artifacts to private registries and ensure that you\n\u003e are in compliance with any terms that cover redistributing\n\u003e nondistributable artifacts.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "::1/128", + "127.0.0.0/8" + ] + }, + "AllowNondistributableArtifactsHostnames": { + "description": "List of registry hostnames to which nondistributable artifacts can be\npushed, using the format `\u003chostname\u003e[:\u003cport\u003e]` or `\u003cIP address\u003e[:\u003cport\u003e]`.\n\nSome images (for example, Windows base images) contain artifacts\nwhose distribution is restricted by license. When these images are\npushed to a registry, restricted artifacts are not included.\n\nThis configuration override this behavior for the specified\nregistries.\n\nThis option is useful when pushing images containing\nnondistributable artifacts to a registry on an air-gapped network so\nhosts on that network can pull the images without connecting to\nanother server.\n\n\u003e **Warning**: Nondistributable artifacts typically have restrictions\n\u003e on how and where they can be distributed and shared. Only use this\n\u003e feature to push artifacts to private registries and ensure that you\n\u003e are in compliance with any terms that cover redistributing\n\u003e nondistributable artifacts.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "registry.internal.corp.example.com:3000", + "[2001:db8:a0b:12f0::1]:443" + ] + }, + "IndexConfigs": { + "type": "object", + "additionalProperties": { + "$ref": "#/definitions/IndexInfo" + }, + "example": { + "127.0.0.1:5000": { + "Mirrors": [], + "Name": "127.0.0.1:5000", + "Official": false, + "Secure": false + }, + "[2001:db8:a0b:12f0::1]:80": { + "Mirrors": [], + "Name": "[2001:db8:a0b:12f0::1]:80", + "Official": false, + "Secure": false + }, + "docker.io": { + "Mirrors": [ + "https://hub-mirror.corp.example.com:5000/" + ], + "Name": "docker.io", + "Official": true, + "Secure": true + }, + "registry.internal.corp.example.com:3000": { + "Mirrors": [], + "Name": "registry.internal.corp.example.com:3000", + "Official": false, + "Secure": false + } + } + }, + "InsecureRegistryCIDRs": { + "description": "List of IP ranges of insecure registries, using the CIDR syntax\n([RFC 4632](https://tools.ietf.org/html/4632)). Insecure registries\naccept un-encrypted (HTTP) and/or untrusted (HTTPS with certificates\nfrom unknown CAs) communication.\n\nBy default, local registries (`127.0.0.0/8`) are configured as\ninsecure. All other registries are secure. Communicating with an\ninsecure registry is not possible if the daemon assumes that registry\nis secure.\n\nThis configuration override this behavior, insecure communication with\nregistries whose resolved IP address is within the subnet described by\nthe CIDR syntax.\n\nRegistries can also be marked insecure by hostname. Those registries\nare listed under `IndexConfigs` and have their `Secure` field set to\n`false`.\n\n\u003e **Warning**: Using this option can be useful when running a local\n\u003e registry, but introduces security vulnerabilities. This option\n\u003e should therefore ONLY be used for testing purposes. For increased\n\u003e security, users should add their CA to their system's list of trusted\n\u003e CAs instead of enabling this option.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "::1/128", + "127.0.0.0/8" + ] + }, + "Mirrors": { + "description": "List of registry URLs that act as a mirror for the official\n(`docker.io`) registry.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "https://hub-mirror.corp.example.com:5000/", + "https://[2001:db8:a0b:12f0::1]/" + ] + } + }, + "x-nullable": true + }, + "ResourceObject": { + "description": "An object describing the resources which can be advertised by a node and requested by a task", + "type": "object", + "properties": { + "GenericResources": { + "$ref": "#/definitions/GenericResources" + }, + "MemoryBytes": { + "type": "integer", + "format": "int64", + "example": 8272408576 + }, + "NanoCPUs": { + "type": "integer", + "format": "int64", + "example": 4000000000 + } + } + }, + "Resources": { + "description": "A container's resources (cgroups config, ulimits, etc)", + "type": "object", + "properties": { + "BlkioDeviceReadBps": { + "description": "Limit read rate (bytes per second) from a device, in the form `[{\"Path\": \"device_path\", \"Rate\": rate}]`.\n", + "type": "array", + "items": { + "$ref": "#/definitions/ThrottleDevice" + } + }, + "BlkioDeviceReadIOps": { + "description": "Limit read rate (IO per second) from a device, in the form `[{\"Path\": \"device_path\", \"Rate\": rate}]`.\n", + "type": "array", + "items": { + "$ref": "#/definitions/ThrottleDevice" + } + }, + "BlkioDeviceWriteBps": { + "description": "Limit write rate (bytes per second) to a device, in the form `[{\"Path\": \"device_path\", \"Rate\": rate}]`.\n", + "type": "array", + "items": { + "$ref": "#/definitions/ThrottleDevice" + } + }, + "BlkioDeviceWriteIOps": { + "description": "Limit write rate (IO per second) to a device, in the form `[{\"Path\": \"device_path\", \"Rate\": rate}]`.\n", + "type": "array", + "items": { + "$ref": "#/definitions/ThrottleDevice" + } + }, + "BlkioWeight": { + "description": "Block IO weight (relative weight).", + "type": "integer", + "maximum": 1000, + "minimum": 0 + }, + "BlkioWeightDevice": { + "description": "Block IO weight (relative device weight) in the form `[{\"Path\": \"device_path\", \"Weight\": weight}]`.\n", + "type": "array", + "items": { + "type": "object", + "properties": { + "Path": { + "type": "string" + }, + "Weight": { + "type": "integer", + "minimum": 0 + } + } + } + }, + "CgroupParent": { + "description": "Path to `cgroups` under which the container's `cgroup` is created. If the path is not absolute, the path is considered to be relative to the `cgroups` path of the init process. Cgroups are created if they do not already exist.", + "type": "string" + }, + "CpuCount": { + "description": "The number of usable CPUs (Windows only).\n\nOn Windows Server containers, the processor resource controls are mutually exclusive. The order of precedence is `CPUCount` first, then `CPUShares`, and `CPUPercent` last.\n", + "type": "integer", + "format": "int64" + }, + "CpuPercent": { + "description": "The usable percentage of the available CPUs (Windows only).\n\nOn Windows Server containers, the processor resource controls are mutually exclusive. The order of precedence is `CPUCount` first, then `CPUShares`, and `CPUPercent` last.\n", + "type": "integer", + "format": "int64" + }, + "CpuPeriod": { + "description": "The length of a CPU period in microseconds.", + "type": "integer", + "format": "int64" + }, + "CpuQuota": { + "description": "Microseconds of CPU time that the container can get in a CPU period.", + "type": "integer", + "format": "int64" + }, + "CpuRealtimePeriod": { + "description": "The length of a CPU real-time period in microseconds. Set to 0 to allocate no time allocated to real-time tasks.", + "type": "integer", + "format": "int64" + }, + "CpuRealtimeRuntime": { + "description": "The length of a CPU real-time runtime in microseconds. Set to 0 to allocate no time allocated to real-time tasks.", + "type": "integer", + "format": "int64" + }, + "CpuShares": { + "description": "An integer value representing this container's relative CPU weight versus other containers.", + "type": "integer" + }, + "CpusetCpus": { + "description": "CPUs in which to allow execution (e.g., `0-3`, `0,1`)", + "type": "string", + "example": "0-3" + }, + "CpusetMems": { + "description": "Memory nodes (MEMs) in which to allow execution (0-3, 0,1). Only effective on NUMA systems.", + "type": "string" + }, + "DeviceCgroupRules": { + "description": "a list of cgroup rules to apply to the container", + "type": "array", + "items": { + "type": "string", + "example": "c 13:* rwm" + } + }, + "Devices": { + "description": "A list of devices to add to the container.", + "type": "array", + "items": { + "$ref": "#/definitions/DeviceMapping" + } + }, + "DiskQuota": { + "description": "Disk limit (in bytes).", + "type": "integer", + "format": "int64" + }, + "IOMaximumBandwidth": { + "description": "Maximum IO in bytes per second for the container system drive (Windows only)", + "type": "integer", + "format": "int64" + }, + "IOMaximumIOps": { + "description": "Maximum IOps for the container system drive (Windows only)", + "type": "integer", + "format": "int64" + }, + "Init": { + "description": "Run an init inside the container that forwards signals and reaps processes. This field is omitted if empty, and the default (as configured on the daemon) is used.", + "type": "boolean", + "x-nullable": true + }, + "KernelMemory": { + "description": "Kernel memory limit in bytes.", + "type": "integer", + "format": "int64" + }, + "Memory": { + "description": "Memory limit in bytes.", + "type": "integer", + "format": "int64", + "default": 0 + }, + "MemoryReservation": { + "description": "Memory soft limit in bytes.", + "type": "integer", + "format": "int64" + }, + "MemorySwap": { + "description": "Total memory limit (memory + swap). Set as `-1` to enable unlimited swap.", + "type": "integer", + "format": "int64" + }, + "MemorySwappiness": { + "description": "Tune a container's memory swappiness behavior. Accepts an integer between 0 and 100.", + "type": "integer", + "format": "int64", + "maximum": 100, + "minimum": 0 + }, + "NanoCPUs": { + "description": "CPU quota in units of 10\u003csup\u003e-9\u003c/sup\u003e CPUs.", + "type": "integer", + "format": "int64" + }, + "OomKillDisable": { + "description": "Disable OOM Killer for the container.", + "type": "boolean" + }, + "PidsLimit": { + "description": "Tune a container's pids limit. Set -1 for unlimited.", + "type": "integer", + "format": "int64" + }, + "Ulimits": { + "description": "A list of resource limits to set in the container. For example: `{\"Name\": \"nofile\", \"Soft\": 1024, \"Hard\": 2048}`\"\n", + "type": "array", + "items": { + "type": "object", + "properties": { + "Hard": { + "description": "Hard limit", + "type": "integer" + }, + "Name": { + "description": "Name of ulimit", + "type": "string" + }, + "Soft": { + "description": "Soft limit", + "type": "integer" + } + } + } + } + } + }, + "RestartPolicy": { + "description": "The behavior to apply when the container exits. The default is not to restart.\n\nAn ever increasing delay (double the previous delay, starting at 100ms) is added before each restart to prevent flooding the server.\n", + "type": "object", + "properties": { + "MaximumRetryCount": { + "description": "If `on-failure` is used, the number of times to retry before giving up", + "type": "integer" + }, + "Name": { + "description": "- Empty string means not to restart\n- `always` Always restart\n- `unless-stopped` Restart always except when the user has manually stopped the container\n- `on-failure` Restart only when the container exit code is non-zero\n", + "type": "string", + "enum": [ + "", + "always", + "unless-stopped", + "on-failure" + ] + } + } + }, + "Runtime": { + "description": "Runtime describes an [OCI compliant](https://github.com/opencontainers/runtime-spec)\nruntime.\n\nThe runtime is invoked by the daemon via the `containerd` daemon. OCI\nruntimes act as an interface to the Linux kernel namespaces, cgroups,\nand SELinux.\n", + "type": "object", + "properties": { + "path": { + "description": "Name and, optional, path, of the OCI executable binary.\n\nIf the path is omitted, the daemon searches the host's `$PATH` for the\nbinary and uses the first result.\n", + "type": "string", + "example": "/usr/local/bin/my-oci-runtime" + }, + "runtimeArgs": { + "description": "List of command-line arguments to pass to the runtime when invoked.\n", + "type": "array", + "items": { + "type": "string" + }, + "x-nullable": true, + "example": [ + "--debug", + "--systemd-cgroup=false" + ] + } + } + }, + "Secret": { + "type": "object", + "properties": { + "CreatedAt": { + "type": "string", + "format": "dateTime", + "example": "2017-07-20T13:55:28.678958722Z" + }, + "ID": { + "type": "string", + "example": "blt1owaxmitz71s9v5zh81zun" + }, + "Spec": { + "$ref": "#/definitions/SecretSpec" + }, + "UpdatedAt": { + "type": "string", + "format": "dateTime", + "example": "2017-07-20T13:55:28.678958722Z" + }, + "Version": { + "$ref": "#/definitions/ObjectVersion" + } + } + }, + "SecretSpec": { + "type": "object", + "properties": { + "Data": { + "description": "Base64-url-safe-encoded ([RFC 4648](https://tools.ietf.org/html/rfc4648#section-3.2))\ndata to store as secret.\n\nThis field is only used to _create_ a secret, and is not returned by\nother endpoints.\n", + "type": "string", + "example": "" + }, + "Driver": { + "description": "Name of the secrets driver used to fetch the secret's value from an external secret store", + "$ref": "#/definitions/Driver" + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + } + }, + "Name": { + "description": "User-defined name of the secret.", + "type": "string" + }, + "Templating": { + "description": "Templating driver, if applicable\n\nTemplating controls whether and how to evaluate the config payload as\na template. If no driver is set, no templating is used.\n", + "$ref": "#/definitions/Driver" + } + } + }, + "Service": { + "type": "object", + "properties": { + "CreatedAt": { + "type": "string", + "format": "dateTime" + }, + "Endpoint": { + "type": "object", + "properties": { + "Ports": { + "type": "array", + "items": { + "$ref": "#/definitions/EndpointPortConfig" + } + }, + "Spec": { + "$ref": "#/definitions/EndpointSpec" + }, + "VirtualIPs": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Addr": { + "type": "string" + }, + "NetworkID": { + "type": "string" + } + } + } + } + } + }, + "ID": { + "type": "string" + }, + "Spec": { + "$ref": "#/definitions/ServiceSpec" + }, + "UpdateStatus": { + "description": "The status of a service update.", + "type": "object", + "properties": { + "CompletedAt": { + "type": "string", + "format": "dateTime" + }, + "Message": { + "type": "string" + }, + "StartedAt": { + "type": "string", + "format": "dateTime" + }, + "State": { + "type": "string", + "enum": [ + "updating", + "paused", + "completed" + ] + } + } + }, + "UpdatedAt": { + "type": "string", + "format": "dateTime" + }, + "Version": { + "$ref": "#/definitions/ObjectVersion" + } + }, + "example": { + "CreatedAt": "2016-06-07T21:05:51.880065305Z", + "Endpoint": { + "Ports": [ + { + "Protocol": "tcp", + "PublishedPort": 30001, + "TargetPort": 6379 + } + ], + "Spec": { + "Mode": "vip", + "Ports": [ + { + "Protocol": "tcp", + "PublishedPort": 30001, + "TargetPort": 6379 + } + ] + }, + "VirtualIPs": [ + { + "Addr": "10.255.0.2/16", + "NetworkID": "4qvuz4ko70xaltuqbt8956gd1" + }, + { + "Addr": "10.255.0.3/16", + "NetworkID": "4qvuz4ko70xaltuqbt8956gd1" + } + ] + }, + "ID": "9mnpnzenvg8p8tdbtq4wvbkcz", + "Spec": { + "EndpointSpec": { + "Mode": "vip", + "Ports": [ + { + "Protocol": "tcp", + "PublishedPort": 30001, + "TargetPort": 6379 + } + ] + }, + "Mode": { + "Replicated": { + "Replicas": 1 + } + }, + "Name": "hopeful_cori", + "RollbackConfig": { + "Delay": 1000000000, + "FailureAction": "pause", + "MaxFailureRatio": 0.15, + "Monitor": 15000000000, + "Parallelism": 1 + }, + "TaskTemplate": { + "ContainerSpec": { + "Image": "redis" + }, + "ForceUpdate": 0, + "Placement": {}, + "Resources": { + "Limits": {}, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "any", + "MaxAttempts": 0 + } + }, + "UpdateConfig": { + "Delay": 1000000000, + "FailureAction": "pause", + "MaxFailureRatio": 0.15, + "Monitor": 15000000000, + "Parallelism": 1 + } + }, + "UpdatedAt": "2016-06-07T21:07:29.962229872Z", + "Version": { + "Index": 19 + } + } + }, + "ServiceSpec": { + "description": "User modifiable configuration for a service.", + "properties": { + "EndpointSpec": { + "$ref": "#/definitions/EndpointSpec" + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "Mode": { + "description": "Scheduling mode for the service.", + "type": "object", + "properties": { + "Global": { + "type": "object" + }, + "Replicated": { + "type": "object", + "properties": { + "Replicas": { + "type": "integer", + "format": "int64" + } + } + } + } + }, + "Name": { + "description": "Name of the service.", + "type": "string" + }, + "Networks": { + "description": "Array of network names or IDs to attach the service to.", + "type": "array", + "items": { + "type": "object", + "properties": { + "Aliases": { + "type": "array", + "items": { + "type": "string" + } + }, + "Target": { + "type": "string" + } + } + } + }, + "RollbackConfig": { + "description": "Specification for the rollback strategy of the service.", + "type": "object", + "properties": { + "Delay": { + "description": "Amount of time between rollback iterations, in nanoseconds.", + "type": "integer", + "format": "int64" + }, + "FailureAction": { + "description": "Action to take if an rolled back task fails to run, or stops running during the rollback.", + "type": "string", + "enum": [ + "continue", + "pause" + ] + }, + "MaxFailureRatio": { + "description": "The fraction of tasks that may fail during a rollback before the failure action is invoked, specified as a floating point number between 0 and 1.", + "type": "number", + "default": 0 + }, + "Monitor": { + "description": "Amount of time to monitor each rolled back task for failures, in nanoseconds.", + "type": "integer", + "format": "int64" + }, + "Order": { + "description": "The order of operations when rolling back a task. Either the old task is shut down before the new task is started, or the new task is started before the old task is shut down.", + "type": "string", + "enum": [ + "stop-first", + "start-first" + ] + }, + "Parallelism": { + "description": "Maximum number of tasks to be rolled back in one iteration (0 means unlimited parallelism).", + "type": "integer", + "format": "int64" + } + } + }, + "TaskTemplate": { + "$ref": "#/definitions/TaskSpec" + }, + "UpdateConfig": { + "description": "Specification for the update strategy of the service.", + "type": "object", + "properties": { + "Delay": { + "description": "Amount of time between updates, in nanoseconds.", + "type": "integer", + "format": "int64" + }, + "FailureAction": { + "description": "Action to take if an updated task fails to run, or stops running during the update.", + "type": "string", + "enum": [ + "continue", + "pause", + "rollback" + ] + }, + "MaxFailureRatio": { + "description": "The fraction of tasks that may fail during an update before the failure action is invoked, specified as a floating point number between 0 and 1.", + "type": "number", + "default": 0 + }, + "Monitor": { + "description": "Amount of time to monitor each updated task for failures, in nanoseconds.", + "type": "integer", + "format": "int64" + }, + "Order": { + "description": "The order of operations when rolling out an updated task. Either the old task is shut down before the new task is started, or the new task is started before the old task is shut down.", + "type": "string", + "enum": [ + "stop-first", + "start-first" + ] + }, + "Parallelism": { + "description": "Maximum number of tasks to be updated in one iteration (0 means unlimited parallelism).", + "type": "integer", + "format": "int64" + } + } + } + } + }, + "ServiceUpdateResponse": { + "type": "object", + "properties": { + "Warnings": { + "description": "Optional warning messages", + "type": "array", + "items": { + "type": "string" + } + } + }, + "example": { + "Warning": "unable to pin image doesnotexist:latest to digest: image library/doesnotexist:latest not found" + } + }, + "Swarm": { + "type": "object", + "allOf": [ + { + "$ref": "#/definitions/ClusterInfo" + }, + { + "type": "object", + "properties": { + "JoinTokens": { + "$ref": "#/definitions/JoinTokens" + } + } + } + ] + }, + "SwarmInfo": { + "description": "Represents generic information about swarm.\n", + "type": "object", + "properties": { + "Cluster": { + "$ref": "#/definitions/ClusterInfo" + }, + "ControlAvailable": { + "type": "boolean", + "default": false, + "example": true + }, + "Error": { + "type": "string", + "default": "" + }, + "LocalNodeState": { + "$ref": "#/definitions/LocalNodeState" + }, + "Managers": { + "description": "Total number of managers in the swarm.", + "type": "integer", + "x-nullable": true, + "example": 3 + }, + "NodeAddr": { + "description": "IP address at which this node can be reached by other nodes in the\nswarm.\n", + "type": "string", + "default": "", + "example": "10.0.0.46" + }, + "NodeID": { + "description": "Unique identifier of for this node in the swarm.", + "type": "string", + "default": "", + "example": "k67qz4598weg5unwwffg6z1m1" + }, + "Nodes": { + "description": "Total number of nodes in the swarm.", + "type": "integer", + "x-nullable": true, + "example": 4 + }, + "RemoteManagers": { + "description": "List of ID's and addresses of other managers in the swarm.\n", + "type": "array", + "items": { + "$ref": "#/definitions/PeerNode" + }, + "x-nullable": true, + "example": [ + { + "Addr": "10.0.0.158:2377", + "NodeID": "71izy0goik036k48jg985xnds" + }, + { + "Addr": "10.0.0.159:2377", + "NodeID": "79y6h1o4gv8n120drcprv5nmc" + }, + { + "Addr": "10.0.0.46:2377", + "NodeID": "k67qz4598weg5unwwffg6z1m1" + } + ] + } + } + }, + "SwarmSpec": { + "description": "User modifiable swarm configuration.", + "type": "object", + "properties": { + "CAConfig": { + "description": "CA configuration.", + "type": "object", + "properties": { + "ExternalCAs": { + "description": "Configuration for forwarding signing requests to an external certificate authority.", + "type": "array", + "items": { + "type": "object", + "properties": { + "CACert": { + "description": "The root CA certificate (in PEM format) this external CA uses to issue TLS certificates (assumed to be to the current swarm root CA certificate if not provided).", + "type": "string" + }, + "Options": { + "description": "An object with key/value pairs that are interpreted as protocol-specific options for the external CA driver.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "Protocol": { + "description": "Protocol for communication with the external CA (currently only `cfssl` is supported).", + "type": "string", + "default": "cfssl", + "enum": [ + "cfssl" + ] + }, + "URL": { + "description": "URL where certificate signing requests should be sent.", + "type": "string" + } + } + } + }, + "ForceRotate": { + "description": "An integer whose purpose is to force swarm to generate a new signing CA certificate and key, if none have been specified in `SigningCACert` and `SigningCAKey`", + "type": "integer", + "format": "uint64" + }, + "NodeCertExpiry": { + "description": "The duration node certificates are issued for.", + "type": "integer", + "format": "int64", + "example": 7776000000000000 + }, + "SigningCACert": { + "description": "The desired signing CA certificate for all swarm node TLS leaf certificates, in PEM format.", + "type": "string" + }, + "SigningCAKey": { + "description": "The desired signing CA key for all swarm node TLS leaf certificates, in PEM format.", + "type": "string" + } + }, + "x-nullable": true + }, + "Dispatcher": { + "description": "Dispatcher configuration.", + "type": "object", + "properties": { + "HeartbeatPeriod": { + "description": "The delay for an agent to send a heartbeat to the dispatcher.", + "type": "integer", + "format": "int64", + "example": 5000000000 + } + }, + "x-nullable": true + }, + "EncryptionConfig": { + "description": "Parameters related to encryption-at-rest.", + "type": "object", + "properties": { + "AutoLockManagers": { + "description": "If set, generate a key and use it to lock data stored on the managers.", + "type": "boolean", + "example": false + } + } + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "com.example.corp.department": "engineering", + "com.example.corp.type": "production" + } + }, + "Name": { + "description": "Name of the swarm.", + "type": "string", + "example": "default" + }, + "Orchestration": { + "description": "Orchestration configuration.", + "type": "object", + "properties": { + "TaskHistoryRetentionLimit": { + "description": "The number of historic tasks to keep per instance or node. If negative, never remove completed or failed tasks.", + "type": "integer", + "format": "int64", + "example": 10 + } + }, + "x-nullable": true + }, + "Raft": { + "description": "Raft configuration.", + "type": "object", + "properties": { + "ElectionTick": { + "description": "The number of ticks that a follower will wait for a message from the leader before becoming a candidate and starting an election. `ElectionTick` must be greater than `HeartbeatTick`.\n\nA tick currently defaults to one second, so these translate directly to seconds currently, but this is NOT guaranteed.\n", + "type": "integer", + "example": 3 + }, + "HeartbeatTick": { + "description": "The number of ticks between heartbeats. Every HeartbeatTick ticks, the leader will send a heartbeat to the followers.\n\nA tick currently defaults to one second, so these translate directly to seconds currently, but this is NOT guaranteed.\n", + "type": "integer", + "example": 1 + }, + "KeepOldSnapshots": { + "description": "The number of snapshots to keep beyond the current snapshot.", + "type": "integer", + "format": "uint64" + }, + "LogEntriesForSlowFollowers": { + "description": "The number of log entries to keep around to sync up slow followers after a snapshot is created.", + "type": "integer", + "format": "uint64", + "example": 500 + }, + "SnapshotInterval": { + "description": "The number of log entries between snapshots.", + "type": "integer", + "format": "uint64", + "example": 10000 + } + } + }, + "TaskDefaults": { + "description": "Defaults for creating tasks in this cluster.", + "type": "object", + "properties": { + "LogDriver": { + "description": "The log driver to use for tasks created in the orchestrator if\nunspecified by a service.\n\nUpdating this value only affects new tasks. Existing tasks continue\nto use their previously configured log driver until recreated.\n", + "type": "object", + "properties": { + "Name": { + "description": "The log driver to use as a default for new tasks.\n", + "type": "string", + "example": "json-file" + }, + "Options": { + "description": "Driver-specific options for the selectd log driver, specified\nas key/value pairs.\n", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "example": { + "max-file": "10", + "max-size": "100m" + } + } + } + } + } + } + } + }, + "SystemInfo": { + "type": "object", + "properties": { + "Architecture": { + "description": "Hardware architecture of the host, as returned by the Go runtime\n(`GOARCH`).\n\nA full list of possible values can be found in the [Go documentation](https://golang.org/doc/install/source#environment).\n", + "type": "string", + "example": "x86_64" + }, + "BridgeNfIp6tables": { + "description": "Indicates if `bridge-nf-call-ip6tables` is available on the host.", + "type": "boolean", + "example": true + }, + "BridgeNfIptables": { + "description": "Indicates if `bridge-nf-call-iptables` is available on the host.", + "type": "boolean", + "example": true + }, + "CPUSet": { + "description": "Indicates if CPUsets (cpuset.cpus, cpuset.mems) are supported by the host.\n\nSee [cpuset(7)](https://www.kernel.org/doc/Documentation/cgroup-v1/cpusets.txt)\n", + "type": "boolean", + "example": true + }, + "CPUShares": { + "description": "Indicates if CPU Shares limiting is supported by the host.", + "type": "boolean", + "example": true + }, + "CgroupDriver": { + "description": "The driver to use for managing cgroups.\n", + "type": "string", + "default": "cgroupfs", + "enum": [ + "cgroupfs", + "systemd" + ], + "example": "cgroupfs" + }, + "ClusterAdvertise": { + "description": "The network endpoint that the Engine advertises for the purpose of\nnode discovery. ClusterAdvertise is a `host:port` combination on which\nthe daemon is reachable by other hosts.\n\n\u003cp\u003e\u003cbr /\u003e\u003c/p\u003e\n\n\u003e **Note**: This field is only propagated when using standalone Swarm\n\u003e mode, and overlay networking using an external k/v store. Overlay\n\u003e networks with Swarm mode enabled use the built-in raft store, and\n\u003e this field will be empty.\n", + "type": "string", + "example": "node5.corp.example.com:8000" + }, + "ClusterStore": { + "description": "URL of the distributed storage backend.\n\n\nThe storage backend is used for multihost networking (to store\nnetwork and endpoint information) and by the node discovery mechanism.\n\n\u003cp\u003e\u003cbr /\u003e\u003c/p\u003e\n\n\u003e **Note**: This field is only propagated when using standalone Swarm\n\u003e mode, and overlay networking using an external k/v store. Overlay\n\u003e networks with Swarm mode enabled use the built-in raft store, and\n\u003e this field will be empty.\n", + "type": "string", + "example": "consul://consul.corp.example.com:8600/some/path" + }, + "ContainerdCommit": { + "$ref": "#/definitions/Commit" + }, + "Containers": { + "description": "Total number of containers on the host.", + "type": "integer", + "example": 14 + }, + "ContainersPaused": { + "description": "Number of containers with status `\"paused\"`.\n", + "type": "integer", + "example": 1 + }, + "ContainersRunning": { + "description": "Number of containers with status `\"running\"`.\n", + "type": "integer", + "example": 3 + }, + "ContainersStopped": { + "description": "Number of containers with status `\"stopped\"`.\n", + "type": "integer", + "example": 10 + }, + "CpuCfsPeriod": { + "description": "Indicates if CPU CFS(Completely Fair Scheduler) period is supported by the host.", + "type": "boolean", + "example": true + }, + "CpuCfsQuota": { + "description": "Indicates if CPU CFS(Completely Fair Scheduler) quota is supported by the host.", + "type": "boolean", + "example": true + }, + "Debug": { + "description": "Indicates if the daemon is running in debug-mode / with debug-level logging enabled.", + "type": "boolean", + "example": true + }, + "DefaultRuntime": { + "description": "Name of the default OCI runtime that is used when starting containers.\n\nThe default can be overridden per-container at create time.\n", + "type": "string", + "default": "runc", + "example": "runc" + }, + "DockerRootDir": { + "description": "Root directory of persistent Docker state.\n\nDefaults to `/var/lib/docker` on Linux, and `C:\\ProgramData\\docker`\non Windows.\n", + "type": "string", + "example": "/var/lib/docker" + }, + "Driver": { + "description": "Name of the storage driver in use.", + "type": "string", + "example": "overlay2" + }, + "DriverStatus": { + "description": "Information specific to the storage driver, provided as\n\"label\" / \"value\" pairs.\n\nThis information is provided by the storage driver, and formatted\nin a way consistent with the output of `docker info` on the command\nline.\n\n\u003cp\u003e\u003cbr /\u003e\u003c/p\u003e\n\n\u003e **Note**: The information returned in this field, including the\n\u003e formatting of values and labels, should not be considered stable,\n\u003e and may change without notice.\n", + "type": "array", + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "example": [ + [ + "Backing Filesystem", + "extfs" + ], + [ + "Supports d_type", + "true" + ], + [ + "Native Overlay Diff", + "true" + ] + ] + }, + "ExperimentalBuild": { + "description": "Indicates if experimental features are enabled on the daemon.\n", + "type": "boolean", + "example": true + }, + "GenericResources": { + "$ref": "#/definitions/GenericResources" + }, + "HttpProxy": { + "description": "HTTP-proxy configured for the daemon. This value is obtained from the\n[`HTTP_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html) environment variable.\n\nContainers do not automatically inherit this configuration.\n", + "type": "string", + "example": "http://user:pass@proxy.corp.example.com:8080" + }, + "HttpsProxy": { + "description": "HTTPS-proxy configured for the daemon. This value is obtained from the\n[`HTTPS_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html) environment variable.\n\nContainers do not automatically inherit this configuration.\n", + "type": "string", + "example": "https://user:pass@proxy.corp.example.com:4443" + }, + "ID": { + "description": "Unique identifier of the daemon.\n\n\u003cp\u003e\u003cbr /\u003e\u003c/p\u003e\n\n\u003e **Note**: The format of the ID itself is not part of the API, and\n\u003e should not be considered stable.\n", + "type": "string", + "example": "7TRN:IPZB:QYBB:VPBQ:UMPP:KARE:6ZNR:XE6T:7EWV:PKF4:ZOJD:TPYS" + }, + "IPv4Forwarding": { + "description": "Indicates IPv4 forwarding is enabled.", + "type": "boolean", + "example": true + }, + "Images": { + "description": "Total number of images on the host.\n\nBoth _tagged_ and _untagged_ (dangling) images are counted.\n", + "type": "integer", + "example": 508 + }, + "IndexServerAddress": { + "description": "Address / URL of the index server that is used for image search,\nand as a default for user authentication for Docker Hub and Docker Cloud.\n", + "type": "string", + "default": "https://index.docker.io/v1/", + "example": "https://index.docker.io/v1/" + }, + "InitBinary": { + "description": "Name and, optional, path of the `docker-init` binary.\n\nIf the path is omitted, the daemon searches the host's `$PATH` for the\nbinary and uses the first result.\n", + "type": "string", + "example": "docker-init" + }, + "InitCommit": { + "$ref": "#/definitions/Commit" + }, + "Isolation": { + "description": "Represents the isolation technology to use as a default for containers.\nThe supported values are platform-specific.\n\nIf no isolation value is specified on daemon start, on Windows client,\nthe default is `hyperv`, and on Windows server, the default is `process`.\n\nThis option is currently not used on other platforms.\n", + "type": "string", + "default": "default", + "enum": [ + "default", + "hyperv", + "process" + ] + }, + "KernelMemory": { + "description": "Indicates if the host has kernel memory limit support enabled.", + "type": "boolean", + "example": true + }, + "KernelVersion": { + "description": "Kernel version of the host.\n\nOn Linux, this information obtained from `uname`. On Windows this\ninformation is queried from the \u003ckbd\u003eHKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Microsoft\\\\Windows NT\\\\CurrentVersion\\\\\u003c/kbd\u003e\nregistry value, for example _\"10.0 14393 (14393.1198.amd64fre.rs1_release_sec.170427-1353)\"_.\n", + "type": "string", + "example": "4.9.38-moby" + }, + "Labels": { + "description": "User-defined labels (key/value metadata) as set on the daemon.\n\n\u003cp\u003e\u003cbr /\u003e\u003c/p\u003e\n\n\u003e **Note**: When part of a Swarm, nodes can both have _daemon_ labels,\n\u003e set through the daemon configuration, and _node_ labels, set from a\n\u003e manager node in the Swarm. Node labels are not included in this\n\u003e field. Node labels can be retrieved using the `/nodes/(id)` endpoint\n\u003e on a manager node in the Swarm.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "storage=ssd", + "production" + ] + }, + "LiveRestoreEnabled": { + "description": "Indicates if live restore is enabled.\n\nIf enabled, containers are kept running when the daemon is shutdown\nor upon daemon start if running containers are detected.\n", + "type": "boolean", + "default": false, + "example": false + }, + "LoggingDriver": { + "description": "The logging driver to use as a default for new containers.\n", + "type": "string" + }, + "MemTotal": { + "description": "Total amount of physical memory available on the host, in kilobytes (kB).\n", + "type": "integer", + "format": "int64", + "example": 2095882240 + }, + "MemoryLimit": { + "description": "Indicates if the host has memory limit support enabled.", + "type": "boolean", + "example": true + }, + "NCPU": { + "description": "The number of logical CPUs usable by the daemon.\n\nThe number of available CPUs is checked by querying the operating\nsystem when the daemon starts. Changes to operating system CPU\nallocation after the daemon is started are not reflected.\n", + "type": "integer", + "example": 4 + }, + "NEventsListener": { + "description": "Number of event listeners subscribed.", + "type": "integer", + "example": 30 + }, + "NFd": { + "description": "The total number of file Descriptors in use by the daemon process.\n\nThis information is only returned if debug-mode is enabled.\n", + "type": "integer", + "example": 64 + }, + "NGoroutines": { + "description": "The number of goroutines that currently exist.\n\nThis information is only returned if debug-mode is enabled.\n", + "type": "integer", + "example": 174 + }, + "Name": { + "description": "Hostname of the host.", + "type": "string", + "example": "node5.corp.example.com" + }, + "NoProxy": { + "description": "Comma-separated list of domain extensions for which no proxy should be\nused. This value is obtained from the [`NO_PROXY`](https://www.gnu.org/software/wget/manual/html_node/Proxies.html)\nenvironment variable.\n\nContainers do not automatically inherit this configuration.\n", + "type": "string", + "example": "*.local, 169.254/16" + }, + "OSType": { + "description": "Generic type of the operating system of the host, as returned by the\nGo runtime (`GOOS`).\n\nCurrently returned values are \"linux\" and \"windows\". A full list of\npossible values can be found in the [Go documentation](https://golang.org/doc/install/source#environment).\n", + "type": "string", + "example": "linux" + }, + "OomKillDisable": { + "description": "Indicates if OOM killer disable is supported on the host.", + "type": "boolean" + }, + "OperatingSystem": { + "description": "Name of the host's operating system, for example: \"Ubuntu 16.04.2 LTS\"\nor \"Windows Server 2016 Datacenter\"\n", + "type": "string", + "example": "Alpine Linux v3.5" + }, + "Plugins": { + "$ref": "#/definitions/PluginsInfo" + }, + "ProductLicense": { + "description": "Reports a summary of the product license on the daemon.\n\nIf a commercial license has been applied to the daemon, information\nsuch as number of nodes, and expiration are included.\n", + "type": "string", + "example": "Community Engine" + }, + "RegistryConfig": { + "$ref": "#/definitions/RegistryServiceConfig" + }, + "RuncCommit": { + "$ref": "#/definitions/Commit" + }, + "Runtimes": { + "description": "List of [OCI compliant](https://github.com/opencontainers/runtime-spec)\nruntimes configured on the daemon. Keys hold the \"name\" used to\nreference the runtime.\n\nThe Docker daemon relies on an OCI compliant runtime (invoked via the\n`containerd` daemon) as its interface to the Linux kernel namespaces,\ncgroups, and SELinux.\n\nThe default runtime is `runc`, and automatically configured. Additional\nruntimes can be configured by the user and will be listed here.\n", + "type": "object", + "default": { + "runc": { + "path": "docker-runc" + } + }, + "additionalProperties": { + "$ref": "#/definitions/Runtime" + }, + "example": { + "custom": { + "path": "/usr/local/bin/my-oci-runtime", + "runtimeArgs": [ + "--debug", + "--systemd-cgroup=false" + ] + }, + "runc": { + "path": "docker-runc" + }, + "runc-master": { + "path": "/go/bin/runc" + } + } + }, + "SecurityOptions": { + "description": "List of security features that are enabled on the daemon, such as\napparmor, seccomp, SELinux, and user-namespaces (userns).\n\nAdditional configuration options for each security feature may\nbe present, and are included as a comma-separated list of key/value\npairs.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "name=apparmor", + "name=seccomp,profile=default", + "name=selinux", + "name=userns" + ] + }, + "ServerVersion": { + "description": "Version string of the daemon.\n\n\u003e **Note**: the [standalone Swarm API](https://docs.docker.com/swarm/swarm-api/)\n\u003e returns the Swarm version instead of the daemon version, for example\n\u003e `swarm/1.2.8`.\n", + "type": "string", + "example": "17.06.0-ce" + }, + "SwapLimit": { + "description": "Indicates if the host has memory swap limit support enabled.", + "type": "boolean", + "example": true + }, + "Swarm": { + "$ref": "#/definitions/SwarmInfo" + }, + "SystemStatus": { + "description": "Status information about this node (standalone Swarm API).\n\n\u003cp\u003e\u003cbr /\u003e\u003c/p\u003e\n\n\u003e **Note**: The information returned in this field is only propagated\n\u003e by the Swarm standalone API, and is empty (`null`) when using\n\u003e built-in swarm mode.\n", + "type": "array", + "items": { + "type": "array", + "items": { + "type": "string" + } + }, + "example": [ + [ + "Role", + "primary" + ], + [ + "State", + "Healthy" + ], + [ + "Strategy", + "spread" + ], + [ + "Filters", + "health, port, containerslots, dependency, affinity, constraint, whitelist" + ], + [ + "Nodes", + "2" + ], + [ + " swarm-agent-00", + "192.168.99.102:2376" + ], + [ + " └ ID", + "5CT6:FBGO:RVGO:CZL4:PB2K:WCYN:2JSV:KSHH:GGFW:QOPG:6J5Q:IOZ2|192.168.99.102:2376" + ], + [ + " └ Status", + "Healthy" + ], + [ + " └ Containers", + "1 (1 Running, 0 Paused, 0 Stopped)" + ], + [ + " └ Reserved CPUs", + "0 / 1" + ], + [ + " └ Reserved Memory", + "0 B / 1.021 GiB" + ], + [ + " └ Labels", + "kernelversion=4.4.74-boot2docker, operatingsystem=Boot2Docker 17.06.0-ce (TCL 7.2); HEAD : 0672754 - Thu Jun 29 00:06:31 UTC 2017, ostype=linux, provider=virtualbox, storagedriver=aufs" + ], + [ + " └ UpdatedAt", + "2017-08-09T10:03:46Z" + ], + [ + " └ ServerVersion", + "17.06.0-ce" + ], + [ + " swarm-manager", + "192.168.99.101:2376" + ], + [ + " └ ID", + "TAMD:7LL3:SEF7:LW2W:4Q2X:WVFH:RTXX:JSYS:XY2P:JEHL:ZMJK:JGIW|192.168.99.101:2376" + ], + [ + " └ Status", + "Healthy" + ], + [ + " └ Containers", + "2 (2 Running, 0 Paused, 0 Stopped)" + ], + [ + " └ Reserved CPUs", + "0 / 1" + ], + [ + " └ Reserved Memory", + "0 B / 1.021 GiB" + ], + [ + " └ Labels", + "kernelversion=4.4.74-boot2docker, operatingsystem=Boot2Docker 17.06.0-ce (TCL 7.2); HEAD : 0672754 - Thu Jun 29 00:06:31 UTC 2017, ostype=linux, provider=virtualbox, storagedriver=aufs" + ], + [ + " └ UpdatedAt", + "2017-08-09T10:04:11Z" + ], + [ + " └ ServerVersion", + "17.06.0-ce" + ] + ] + }, + "SystemTime": { + "description": "Current system-time in [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt)\nformat with nano-seconds.\n", + "type": "string", + "example": "2017-08-08T20:28:29.06202363Z" + }, + "Warnings": { + "description": "List of warnings / informational messages about missing features, or\nissues related to the daemon configuration.\n\nThese messages can be printed by the client as information to the user.\n", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "WARNING: No memory limit support", + "WARNING: bridge-nf-call-iptables is disabled", + "WARNING: bridge-nf-call-ip6tables is disabled" + ] + } + } + }, + "TLSInfo": { + "description": "Information about the issuer of leaf TLS certificates and the trusted root CA certificate", + "type": "object", + "properties": { + "CertIssuerPublicKey": { + "description": "The base64-url-safe-encoded raw public key bytes of the issuer", + "type": "string" + }, + "CertIssuerSubject": { + "description": "The base64-url-safe-encoded raw subject bytes of the issuer", + "type": "string" + }, + "TrustRoot": { + "description": "The root CA certificate(s) that are used to validate leaf TLS certificates", + "type": "string" + } + }, + "example": { + "CertIssuerPublicKey": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEmT9XIw9h1qoNclv9VeHmf/Vi6/uI2vFXdBveXTpcPjqx6i9wNazchk1XWV/dKTKvSh9xyGKmiIeRcE4OiMnJ1A==", + "CertIssuerSubject": "MBMxETAPBgNVBAMTCHN3YXJtLWNh", + "TrustRoot": "-----BEGIN CERTIFICATE-----\nMIIBajCCARCgAwIBAgIUbYqrLSOSQHoxD8CwG6Bi2PJi9c8wCgYIKoZIzj0EAwIw\nEzERMA8GA1UEAxMIc3dhcm0tY2EwHhcNMTcwNDI0MjE0MzAwWhcNMzcwNDE5MjE0\nMzAwWjATMREwDwYDVQQDEwhzd2FybS1jYTBZMBMGByqGSM49AgEGCCqGSM49AwEH\nA0IABJk/VyMPYdaqDXJb/VXh5n/1Yuv7iNrxV3Qb3l06XD46seovcDWs3IZNV1lf\n3Skyr0ofcchipoiHkXBODojJydSjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMB\nAf8EBTADAQH/MB0GA1UdDgQWBBRUXxuRcnFjDfR/RIAUQab8ZV/n4jAKBggqhkjO\nPQQDAgNIADBFAiAy+JTe6Uc3KyLCMiqGl2GyWGQqQDEcO3/YG36x7om65AIhAJvz\npxv6zFeVEkAEEkqIYi0omA9+CjanB/6Bz4n1uw8H\n-----END CERTIFICATE-----\n" + } + }, + "Task": { + "type": "object", + "properties": { + "AssignedGenericResources": { + "$ref": "#/definitions/GenericResources" + }, + "CreatedAt": { + "type": "string", + "format": "dateTime" + }, + "DesiredState": { + "$ref": "#/definitions/TaskState" + }, + "ID": { + "description": "The ID of the task.", + "type": "string" + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "Name": { + "description": "Name of the task.", + "type": "string" + }, + "NodeID": { + "description": "The ID of the node that this task is on.", + "type": "string" + }, + "ServiceID": { + "description": "The ID of the service this task is part of.", + "type": "string" + }, + "Slot": { + "type": "integer" + }, + "Spec": { + "$ref": "#/definitions/TaskSpec" + }, + "Status": { + "type": "object", + "properties": { + "ContainerStatus": { + "type": "object", + "properties": { + "ContainerID": { + "type": "string" + }, + "ExitCode": { + "type": "integer" + }, + "PID": { + "type": "integer" + } + } + }, + "Err": { + "type": "string" + }, + "Message": { + "type": "string" + }, + "State": { + "$ref": "#/definitions/TaskState" + }, + "Timestamp": { + "type": "string", + "format": "dateTime" + } + } + }, + "UpdatedAt": { + "type": "string", + "format": "dateTime" + }, + "Version": { + "$ref": "#/definitions/ObjectVersion" + } + }, + "example": { + "AssignedGenericResources": [ + { + "DiscreteResourceSpec": { + "Kind": "SSD", + "Value": 3 + } + }, + { + "NamedResourceSpec": { + "Kind": "GPU", + "Value": "UUID1" + } + }, + { + "NamedResourceSpec": { + "Kind": "GPU", + "Value": "UUID2" + } + } + ], + "CreatedAt": "2016-06-07T21:07:31.171892745Z", + "DesiredState": "running", + "ID": "0kzzo1i0y4jz6027t0k7aezc7", + "NetworksAttachments": [ + { + "Addresses": [ + "10.255.0.10/16" + ], + "Network": { + "CreatedAt": "2016-06-07T20:31:11.912919752Z", + "DriverState": { + "Name": "overlay", + "Options": { + "com.docker.network.driver.overlay.vxlanid_list": "256" + } + }, + "ID": "4qvuz4ko70xaltuqbt8956gd1", + "IPAMOptions": { + "Configs": [ + { + "Gateway": "10.255.0.1", + "Subnet": "10.255.0.0/16" + } + ], + "Driver": { + "Name": "default" + } + }, + "Spec": { + "DriverConfiguration": {}, + "IPAMOptions": { + "Configs": [ + { + "Gateway": "10.255.0.1", + "Subnet": "10.255.0.0/16" + } + ], + "Driver": {} + }, + "Labels": { + "com.docker.swarm.internal": "true" + }, + "Name": "ingress" + }, + "UpdatedAt": "2016-06-07T21:07:29.955277358Z", + "Version": { + "Index": 18 + } + } + } + ], + "NodeID": "60gvrl6tm78dmak4yl7srz94v", + "ServiceID": "9mnpnzenvg8p8tdbtq4wvbkcz", + "Slot": 1, + "Spec": { + "ContainerSpec": { + "Image": "redis" + }, + "Placement": {}, + "Resources": { + "Limits": {}, + "Reservations": {} + }, + "RestartPolicy": { + "Condition": "any", + "MaxAttempts": 0 + } + }, + "Status": { + "ContainerStatus": { + "ContainerID": "e5d62702a1b48d01c3e02ca1e0212a250801fa8d67caca0b6f35919ebc12f035", + "PID": 677 + }, + "Message": "started", + "State": "running", + "Timestamp": "2016-06-07T21:07:31.290032978Z" + }, + "UpdatedAt": "2016-06-07T21:07:31.376370513Z", + "Version": { + "Index": 71 + } + } + }, + "TaskSpec": { + "description": "User modifiable task configuration.", + "type": "object", + "properties": { + "ContainerSpec": { + "description": "Container spec for the service.\n\n\u003cp\u003e\u003cbr /\u003e\u003c/p\u003e\n\n\u003e **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are\n\u003e mutually exclusive. PluginSpec is only used when the Runtime field\n\u003e is set to `plugin`. NetworkAttachmentSpec is used when the Runtime\n\u003e field is set to `attachment`.\n", + "type": "object", + "properties": { + "Args": { + "description": "Arguments to the command.", + "type": "array", + "items": { + "type": "string" + } + }, + "Command": { + "description": "The command to be run in the image.", + "type": "array", + "items": { + "type": "string" + } + }, + "Configs": { + "description": "Configs contains references to zero or more configs that will be exposed to the service.", + "type": "array", + "items": { + "type": "object", + "properties": { + "ConfigID": { + "description": "ConfigID represents the ID of the specific config that we're referencing.", + "type": "string" + }, + "ConfigName": { + "description": "ConfigName is the name of the config that this references, but this is just provided for\nlookup/display purposes. The config in the reference will be identified by its ID.\n", + "type": "string" + }, + "File": { + "description": "File represents a specific target that is backed by a file.", + "type": "object", + "properties": { + "GID": { + "description": "GID represents the file GID.", + "type": "string" + }, + "Mode": { + "description": "Mode represents the FileMode of the file.", + "type": "integer", + "format": "uint32" + }, + "Name": { + "description": "Name represents the final filename in the filesystem.", + "type": "string" + }, + "UID": { + "description": "UID represents the file UID.", + "type": "string" + } + } + } + } + } + }, + "DNSConfig": { + "description": "Specification for DNS related configurations in resolver configuration file (`resolv.conf`).", + "type": "object", + "properties": { + "Nameservers": { + "description": "The IP addresses of the name servers.", + "type": "array", + "items": { + "type": "string" + } + }, + "Options": { + "description": "A list of internal resolver variables to be modified (e.g., `debug`, `ndots:3`, etc.).", + "type": "array", + "items": { + "type": "string" + } + }, + "Search": { + "description": "A search list for host-name lookup.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "Dir": { + "description": "The working directory for commands to run in.", + "type": "string" + }, + "Env": { + "description": "A list of environment variables in the form `VAR=value`.", + "type": "array", + "items": { + "type": "string" + } + }, + "Groups": { + "description": "A list of additional groups that the container process will run as.", + "type": "array", + "items": { + "type": "string" + } + }, + "HealthCheck": { + "$ref": "#/definitions/HealthConfig" + }, + "Hostname": { + "description": "The hostname to use for the container, as a valid RFC 1123 hostname.", + "type": "string" + }, + "Hosts": { + "description": "A list of hostname/IP mappings to add to the container's `hosts`\nfile. The format of extra hosts is specified in the\n[hosts(5)](http://man7.org/linux/man-pages/man5/hosts.5.html)\nman page:\n\n IP_address canonical_hostname [aliases...]\n", + "type": "array", + "items": { + "type": "string" + } + }, + "Image": { + "description": "The image name to use for the container", + "type": "string" + }, + "Init": { + "description": "Run an init inside the container that forwards signals and reaps processes. This field is omitted if empty, and the default (as configured on the daemon) is used.", + "type": "boolean", + "x-nullable": true + }, + "Isolation": { + "description": "Isolation technology of the containers running the service. (Windows only)", + "type": "string", + "enum": [ + "default", + "process", + "hyperv" + ] + }, + "Labels": { + "description": "User-defined key/value data.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "Mounts": { + "description": "Specification for mounts to be added to containers created as part of the service.", + "type": "array", + "items": { + "$ref": "#/definitions/Mount" + } + }, + "OpenStdin": { + "description": "Open `stdin`", + "type": "boolean" + }, + "Privileges": { + "description": "Security options for the container", + "type": "object", + "properties": { + "CredentialSpec": { + "description": "CredentialSpec for managed service account (Windows only)", + "type": "object", + "properties": { + "File": { + "description": "Load credential spec from this file. The file is read by the daemon, and must be present in the\n`CredentialSpecs` subdirectory in the docker data directory, which defaults to\n`C:\\ProgramData\\Docker\\` on Windows.\n\nFor example, specifying `spec.json` loads `C:\\ProgramData\\Docker\\CredentialSpecs\\spec.json`.\n\n\u003cp\u003e\u003cbr /\u003e\u003c/p\u003e\n\n\u003e **Note**: `CredentialSpec.File` and `CredentialSpec.Registry` are mutually exclusive.\n", + "type": "string" + }, + "Registry": { + "description": "Load credential spec from this value in the Windows registry. The specified registry value must be\nlocated in:\n\n`HKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Virtualization\\Containers\\CredentialSpecs`\n\n\u003cp\u003e\u003cbr /\u003e\u003c/p\u003e\n\n\n\u003e **Note**: `CredentialSpec.File` and `CredentialSpec.Registry` are mutually exclusive.\n", + "type": "string" + } + } + }, + "SELinuxContext": { + "description": "SELinux labels of the container", + "type": "object", + "properties": { + "Disable": { + "description": "Disable SELinux", + "type": "boolean" + }, + "Level": { + "description": "SELinux level label", + "type": "string" + }, + "Role": { + "description": "SELinux role label", + "type": "string" + }, + "Type": { + "description": "SELinux type label", + "type": "string" + }, + "User": { + "description": "SELinux user label", + "type": "string" + } + } + } + } + }, + "ReadOnly": { + "description": "Mount the container's root filesystem as read only.", + "type": "boolean" + }, + "Secrets": { + "description": "Secrets contains references to zero or more secrets that will be exposed to the service.", + "type": "array", + "items": { + "type": "object", + "properties": { + "File": { + "description": "File represents a specific target that is backed by a file.", + "type": "object", + "properties": { + "GID": { + "description": "GID represents the file GID.", + "type": "string" + }, + "Mode": { + "description": "Mode represents the FileMode of the file.", + "type": "integer", + "format": "uint32" + }, + "Name": { + "description": "Name represents the final filename in the filesystem.", + "type": "string" + }, + "UID": { + "description": "UID represents the file UID.", + "type": "string" + } + } + }, + "SecretID": { + "description": "SecretID represents the ID of the specific secret that we're referencing.", + "type": "string" + }, + "SecretName": { + "description": "SecretName is the name of the secret that this references, but this is just provided for\nlookup/display purposes. The secret in the reference will be identified by its ID.\n", + "type": "string" + } + } + } + }, + "StopGracePeriod": { + "description": "Amount of time to wait for the container to terminate before forcefully killing it.", + "type": "integer", + "format": "int64" + }, + "StopSignal": { + "description": "Signal to stop the container.", + "type": "string" + }, + "TTY": { + "description": "Whether a pseudo-TTY should be allocated.", + "type": "boolean" + }, + "User": { + "description": "The user inside the container.", + "type": "string" + } + } + }, + "ForceUpdate": { + "description": "A counter that triggers an update even if no relevant parameters have been changed.", + "type": "integer" + }, + "LogDriver": { + "description": "Specifies the log driver to use for tasks created from this spec. If not present, the default one for the swarm will be used, finally falling back to the engine default if not specified.", + "type": "object", + "properties": { + "Name": { + "type": "string" + }, + "Options": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + } + }, + "NetworkAttachmentSpec": { + "description": "Read-only spec type for non-swarm containers attached to swarm overlay\nnetworks.\n\n\u003cp\u003e\u003cbr /\u003e\u003c/p\u003e\n\n\u003e **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are\n\u003e mutually exclusive. PluginSpec is only used when the Runtime field\n\u003e is set to `plugin`. NetworkAttachmentSpec is used when the Runtime\n\u003e field is set to `attachment`.\n", + "type": "object", + "properties": { + "ContainerID": { + "description": "ID of the container represented by this task", + "type": "string" + } + } + }, + "Networks": { + "type": "array", + "items": { + "type": "object", + "properties": { + "Aliases": { + "type": "array", + "items": { + "type": "string" + } + }, + "Target": { + "type": "string" + } + } + } + }, + "Placement": { + "type": "object", + "properties": { + "Constraints": { + "description": "An array of constraints.", + "type": "array", + "items": { + "type": "string" + }, + "example": [ + "node.hostname!=node3.corp.example.com", + "node.role!=manager", + "node.labels.type==production" + ] + }, + "Platforms": { + "description": "Platforms stores all the platforms that the service's image can\nrun on. This field is used in the platform filter for scheduling.\nIf empty, then the platform filter is off, meaning there are no\nscheduling restrictions.\n", + "type": "array", + "items": { + "$ref": "#/definitions/Platform" + } + }, + "Preferences": { + "description": "Preferences provide a way to make the scheduler aware of factors such as topology. They are provided in order from highest to lowest precedence.", + "type": "array", + "items": { + "type": "object", + "properties": { + "Spread": { + "type": "object", + "properties": { + "SpreadDescriptor": { + "description": "label descriptor, such as engine.labels.az", + "type": "string" + } + } + } + } + }, + "example": [ + { + "Spread": { + "SpreadDescriptor": "node.labels.datacenter" + } + }, + { + "Spread": { + "SpreadDescriptor": "node.labels.rack" + } + } + ] + } + } + }, + "PluginSpec": { + "description": "Plugin spec for the service. *(Experimental release only.)*\n\n\u003cp\u003e\u003cbr /\u003e\u003c/p\u003e\n\n\u003e **Note**: ContainerSpec, NetworkAttachmentSpec, and PluginSpec are\n\u003e mutually exclusive. PluginSpec is only used when the Runtime field\n\u003e is set to `plugin`. NetworkAttachmentSpec is used when the Runtime\n\u003e field is set to `attachment`.\n", + "type": "object", + "properties": { + "Disabled": { + "description": "Disable the plugin once scheduled.", + "type": "boolean" + }, + "Name": { + "description": "The name or 'alias' to use for the plugin.", + "type": "string" + }, + "PluginPrivilege": { + "type": "array", + "items": { + "description": "Describes a permission accepted by the user upon installing the plugin.", + "type": "object", + "properties": { + "Description": { + "type": "string" + }, + "Name": { + "type": "string" + }, + "Value": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "Remote": { + "description": "The plugin image reference to use.", + "type": "string" + } + } + }, + "Resources": { + "description": "Resource requirements which apply to each individual container created as part of the service.", + "type": "object", + "properties": { + "Limits": { + "description": "Define resources limits.", + "$ref": "#/definitions/ResourceObject" + }, + "Reservation": { + "description": "Define resources reservation.", + "$ref": "#/definitions/ResourceObject" + } + } + }, + "RestartPolicy": { + "description": "Specification for the restart policy which applies to containers created as part of this service.", + "type": "object", + "properties": { + "Condition": { + "description": "Condition for restart.", + "type": "string", + "enum": [ + "none", + "on-failure", + "any" + ] + }, + "Delay": { + "description": "Delay between restart attempts.", + "type": "integer", + "format": "int64" + }, + "MaxAttempts": { + "description": "Maximum attempts to restart a given container before giving up (default value is 0, which is ignored).", + "type": "integer", + "format": "int64", + "default": 0 + }, + "Window": { + "description": "Windows is the time window used to evaluate the restart policy (default value is 0, which is unbounded).", + "type": "integer", + "format": "int64", + "default": 0 + } + } + }, + "Runtime": { + "description": "Runtime is the type of runtime specified for the task executor.", + "type": "string" + } + } + }, + "TaskState": { + "type": "string", + "enum": [ + "new", + "allocated", + "pending", + "assigned", + "accepted", + "preparing", + "ready", + "starting", + "running", + "complete", + "shutdown", + "failed", + "rejected", + "remove", + "orphaned" + ] + }, + "ThrottleDevice": { + "type": "object", + "properties": { + "Path": { + "description": "Device path", + "type": "string" + }, + "Rate": { + "description": "Rate", + "type": "integer", + "format": "int64", + "minimum": 0 + } + } + }, + "Volume": { + "type": "object", + "required": [ + "Name", + "Driver", + "Mountpoint", + "Labels", + "Scope", + "Options" + ], + "properties": { + "CreatedAt": { + "description": "Date/Time the volume was created.", + "type": "string", + "format": "dateTime" + }, + "Driver": { + "description": "Name of the volume driver used by the volume.", + "type": "string", + "x-nullable": false + }, + "Labels": { + "description": "User-defined key/value metadata.", + "type": "object", + "additionalProperties": { + "type": "string" + }, + "x-nullable": false + }, + "Mountpoint": { + "description": "Mount path of the volume on the host.", + "type": "string", + "x-nullable": false + }, + "Name": { + "description": "Name of the volume.", + "type": "string", + "x-nullable": false + }, + "Options": { + "description": "The driver specific options used when creating the volume.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "Scope": { + "description": "The level at which the volume exists. Either `global` for cluster-wide, or `local` for machine level.", + "type": "string", + "default": "local", + "enum": [ + "local", + "global" + ], + "x-nullable": false + }, + "Status": { + "description": "Low-level details about the volume, provided by the volume driver.\nDetails are returned as a map with key/value pairs:\n`{\"key\":\"value\",\"key2\":\"value2\"}`.\n\nThe `Status` field is optional, and is omitted if the volume driver\ndoes not support this feature.\n", + "type": "object", + "additionalProperties": { + "type": "object" + } + }, + "UsageData": { + "description": "Usage details about the volume. This information is used by the\n`GET /system/df` endpoint, and omitted in other endpoints.\n", + "type": "object", + "required": [ + "Size", + "RefCount" + ], + "properties": { + "RefCount": { + "description": "The number of containers referencing this volume. This field\nis set to `-1` if the reference-count is not available.\n", + "type": "integer", + "default": -1, + "x-nullable": false + }, + "Size": { + "description": "Amount of disk space used by the volume (in bytes). This information\nis only available for volumes created with the `\"local\"` volume\ndriver. For volumes created with other volume drivers, this field\nis set to `-1` (\"not available\")\n", + "type": "integer", + "default": -1, + "x-nullable": false + } + }, + "x-nullable": true + } + }, + "example": { + "CreatedAt": "2016-06-07T20:31:11.853781916Z", + "Driver": "custom", + "Labels": { + "com.example.some-label": "some-value", + "com.example.some-other-label": "some-other-value" + }, + "Mountpoint": "/var/lib/docker/volumes/tardis", + "Name": "tardis", + "Scope": "local", + "Status": { + "hello": "world" + } + } + }, + "api.putConfigOrLicenseResponse": { + "id": "api.putConfigOrLicenseResponse", + "required": [ + "message" + ], + "properties": { + "message": { + "type": "string" + } + } + }, + "auth.Credentials": { + "id": "auth.Credentials", + "properties": { + "password": { + "type": "string" + }, + "token": { + "type": "string" + }, + "username": { + "type": "string" + } + } + }, + "auth.LoginResponse": { + "id": "auth.LoginResponse", + "properties": { + "auth_token": { + "type": "string" + } + } + }, + "authz.Collection": { + "id": "authz.Collection", + "required": [ + "name", + "path", + "id", + "parent_ids", + "label_constraints", + "legacylabelkey", + "legacylabelvalue", + "created_at", + "updated_at" + ], + "properties": { + "created_at": { + "description": "When the collection was created", + "type": "string", + "format": "date-time" + }, + "id": { + "description": "A unique ID for this collection", + "type": "string" + }, + "label_constraints": { + "description": "A set of label constraints to be applied to any service or container created in this collection", + "type": "array", + "items": { + "$ref": "#/definitions/authz.LabelConstraint" + } + }, + "legacylabelkey": { + "description": "The key of the legacy authorization label for this collection", + "type": "string" + }, + "legacylabelvalue": { + "description": "The value of the legacy authorization label for this collection", + "type": "string" + }, + "name": { + "description": "The name of the collection", + "type": "string" + }, + "parent_ids": { + "description": "A list of collection IDs of parent collections", + "type": "array", + "items": { + "type": "string" + } + }, + "path": { + "description": "The full path of the collection", + "type": "string" + }, + "updated_at": { + "description": "When the collection was updated", + "type": "string", + "format": "date-time" + } + } + }, + "authz.CollectionCreate": { + "id": "authz.CollectionCreate", + "required": [ + "name", + "parent_id", + "label_constraints", + "legacy_label_key", + "legacy_label_value" + ], + "properties": { + "label_constraints": { + "type": "array", + "items": { + "$ref": "#/definitions/authz.LabelConstraint" + } + }, + "legacy_label_key": { + "type": "string" + }, + "legacy_label_value": { + "type": "string" + }, + "name": { + "type": "string" + }, + "parent_id": { + "type": "string" + } + } + }, + "authz.CollectionCreateResponse": { + "id": "authz.CollectionCreateResponse", + "required": [ + "id" + ], + "properties": { + "id": { + "type": "string" + } + } + }, + "authz.CollectionID": { + "id": "authz.CollectionID", + "required": [ + "id" + ], + "properties": { + "id": { + "type": "string" + } + } + }, + "authz.CollectionUpdate": { + "id": "authz.CollectionUpdate", + "required": [ + "label_constraints" + ], + "properties": { + "label_constraints": { + "type": "array", + "items": { + "$ref": "#/definitions/authz.LabelConstraint" + } + } + } + }, + "authz.LabelConstraint": { + "id": "authz.LabelConstraint", + "required": [ + "type", + "label_key", + "label_value", + "equality" + ], + "properties": { + "equality": { + "type": "boolean" + }, + "label_key": { + "type": "string" + }, + "label_value": { + "type": "string" + }, + "type": { + "type": "string" + } + } + }, + "authz.RoleCreateResponse": { + "id": "authz.RoleCreateResponse", + "required": [ + "id" + ], + "properties": { + "id": { + "description": "The ID of the newly created role", + "type": "string" + } + } + }, + "config.AuditLogConfiguration": { + "id": "config.AuditLogConfiguration", + "required": [ + "level", + "support_dump_include_audit_logs" + ], + "properties": { + "level": { + "type": "string" + }, + "support_dump_include_audit_logs": { + "type": "boolean" + } + } + }, + "config.AuthConfiguration": { + "id": "config.AuthConfiguration", + "required": [ + "sessions", + "saml", + "backend" + ], + "properties": { + "backend": { + "description": "The name of the auth backend to use", + "type": "string", + "enum": [ + "managed", + "ldap" + ] + }, + "defaultNewUserRole": { + "type": "string" + }, + "saml": { + "$ref": "#/definitions/forms.SAMLSettings" + }, + "samlEnabled": { + "description": "Whether SAML SSO is enabled in the system", + "type": "boolean" + }, + "samlLoginText": { + "description": "Customized SAML Login Text", + "type": "string" + }, + "sessions": { + "$ref": "#/definitions/forms.SessionsConfig" + } + } + }, + "config.HTTPHeader": { + "id": "config.HTTPHeader", + "required": [ + "name", + "value" + ], + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": "string" + } + } + }, + "config.LicenseConfiguration": { + "id": "config.LicenseConfiguration", + "required": [ + "auto_refresh", + "license_server_url", + "license_server_public_key" + ], + "properties": { + "auto_refresh": { + "type": "boolean" + }, + "license_server_public_key": { + "type": "string" + }, + "license_server_url": { + "type": "string" + } + } + }, + "config.LogConfiguration": { + "id": "config.LogConfiguration", + "required": [ + "level" + ], + "properties": { + "level": { + "type": "string" + } + } + }, + "config.SchedulingConfiguration": { + "id": "config.SchedulingConfiguration", + "required": [ + "enable_admin_ucp_scheduling", + "default_node_orchestrator" + ], + "properties": { + "default_node_orchestrator": { + "type": "string" + }, + "enable_admin_ucp_scheduling": { + "type": "boolean" + } + } + }, + "config.TrackingConfiguration": { + "id": "config.TrackingConfiguration", + "required": [ + "disable_usageinfo", + "disable_tracking", + "anonymize_tracking", + "ClusterLabel" + ], + "properties": { + "ClusterLabel": { + "type": "string" + }, + "anonymize_tracking": { + "type": "boolean" + }, + "disable_tracking": { + "type": "boolean" + }, + "disable_usageinfo": { + "type": "boolean" + } + } + }, + "config.TrustConfiguration": { + "id": "config.TrustConfiguration", + "required": [ + "require_content_trust", + "require_signature_from" + ], + "properties": { + "require_content_trust": { + "type": "boolean" + }, + "require_signature_from": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "config.TrustedRegistryConfig": { + "id": "config.TrustedRegistryConfig", + "required": [ + "hostAddress", + "serviceID", + "caBundle", + "batchScanningDataEnabled" + ], + "properties": { + "batchScanningDataEnabled": { + "type": "boolean" + }, + "caBundle": { + "type": "string" + }, + "hostAddress": { + "type": "string" + }, + "serviceID": { + "type": "string" + } + } + }, + "config.UCPConfiguration": { + "id": "config.UCPConfiguration", + "required": [ + "auth", + "Registries", + "SchedulingConfiguration", + "TrackingConfiguration", + "TrustConfiguration", + "LogConfiguration", + "AuditLogConfiguration", + "LicenseConfiguration", + "customAPIServerHeaders", + "ClusterConfig" + ], + "properties": { + "AuditLogConfiguration": { + "$ref": "#/definitions/config.AuditLogConfiguration" + }, + "ClusterConfig": { + "$ref": "#/definitions/types.ClusterConfig" + }, + "LicenseConfiguration": { + "$ref": "#/definitions/config.LicenseConfiguration" + }, + "LogConfiguration": { + "$ref": "#/definitions/config.LogConfiguration" + }, + "Registries": { + "type": "array", + "items": { + "$ref": "#/definitions/config.TrustedRegistryConfig" + } + }, + "SchedulingConfiguration": { + "$ref": "#/definitions/config.SchedulingConfiguration" + }, + "TrackingConfiguration": { + "$ref": "#/definitions/config.TrackingConfiguration" + }, + "TrustConfiguration": { + "$ref": "#/definitions/config.TrustConfiguration" + }, + "auth": { + "$ref": "#/definitions/config.AuthConfiguration" + }, + "customAPIServerHeaders": { + "type": "array", + "items": { + "$ref": "#/definitions/config.HTTPHeader" + } + } + } + }, + "errors.APIError": { + "id": "errors.APIError", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "detail": { + "$ref": "#/definitions/errors.APIError.detail" + }, + "message": { + "type": "string" + } + } + }, + "errors.APIError.detail": { + "id": "errors.APIError.detail" + }, + "forms.BulkOperation": { + "id": "forms.BulkOperation", + "required": [ + "op" + ], + "properties": { + "op": { + "description": "The operation to perform", + "type": "string" + }, + "ref": { + "description": "An identifier referencing the object on which to perform the operation, if applicable", + "type": "string" + }, + "value": { + "description": "The form value to submit for the operation, if applicable", + "type": "string" + } + } + }, + "forms.BulkOperations": { + "id": "forms.BulkOperations", + "required": [ + "operations" + ], + "properties": { + "operations": { + "type": "array", + "items": { + "$ref": "#/definitions/forms.BulkOperation" + } + } + } + }, + "forms.Certificate": { + "id": "forms.Certificate", + "required": [ + "label", + "cert" + ], + "properties": { + "cert": { + "description": "Encoded PEM for the cert", + "type": "string" + }, + "label": { + "description": "Label for the certificate", + "type": "string" + } + } + }, + "forms.ChangePassword": { + "id": "forms.ChangePassword", + "required": [ + "oldPassword", + "newPassword" + ], + "properties": { + "newPassword": { + "description": "User's new password", + "type": "string" + }, + "oldPassword": { + "description": "User's current password. Required if the client is changing their own password. May be omitted if an admin is changing another user's password", + "type": "string" + } + } + }, + "forms.CreateAccount": { + "id": "forms.CreateAccount", + "required": [ + "name" + ], + "properties": { + "fullName": { + "description": "Full name of account", + "type": "string" + }, + "isActive": { + "description": "Whether the user is active and can login (users only)", + "type": "boolean" + }, + "isAdmin": { + "description": "Whether the user is an admin (users only)", + "type": "boolean" + }, + "isOrg": { + "description": "Whether the account is an organization", + "type": "boolean" + }, + "name": { + "description": "Name of account", + "type": "string" + }, + "password": { + "description": "Password for the user (users only)", + "type": "string" + }, + "searchLDAP": { + "description": "Whether the user should be found by searching against the currently configured LDAP servers. If true, the password field may be omitted and the discovered full name of the user will be used if one is not specified in this form (users only)", + "type": "boolean" + } + } + }, + "forms.CreateAccountPublicKey": { + "id": "forms.CreateAccountPublicKey", + "required": [ + "publicKey" + ], + "properties": { + "certificates": { + "description": "certificates for the public key", + "type": "array", + "items": { + "$ref": "#/definitions/forms.Certificate" + } + }, + "label": { + "description": "Label or description for the key", + "type": "string" + }, + "publicKey": { + "description": "Encoded PEM for the public key", + "type": "string" + } + } + }, + "forms.CreateTeam": { + "id": "forms.CreateTeam", + "required": [ + "name" + ], + "properties": { + "description": { + "description": "Description of the team", + "type": "string" + }, + "name": { + "description": "Name of the team", + "type": "string" + } + } + }, + "forms.GroupLinkOpts": { + "id": "forms.GroupLinkOpts", + "required": [ + "enableLink", + "groupName" + ], + "properties": { + "enableLink": { + "description": "Whether to enable SAML linking. If false, all other fields are ignored", + "type": "boolean" + }, + "groupName": { + "description": "The group name that is obtained from group attribute of the SAML assertion", + "type": "string" + } + } + }, + "forms.MemberSyncOpts": { + "id": "forms.MemberSyncOpts", + "required": [ + "enableSync", + "selectGroupMembers", + "groupDN", + "groupMemberAttr", + "searchBaseDN", + "searchScopeSubtree", + "searchFilter" + ], + "properties": { + "enableSync": { + "description": "Whether to enable LDAP syncing. If false, all other fields are ignored", + "type": "boolean" + }, + "groupDN": { + "description": "The distinguished name of the LDAP group. Required if selectGroupMembers is true, ignored otherwise", + "type": "string" + }, + "groupMemberAttr": { + "description": "The name of the LDAP group entry attribute which corresponds to distinguished names of members. Required if selectGroupMembers is true, ignored otherwise", + "type": "string" + }, + "searchBaseDN": { + "description": "The distinguished name of the element from which the LDAP server will search for users. Required if selectGroupMembers is false, ignored otherwise", + "type": "string" + }, + "searchFilter": { + "description": "The LDAP search filter used to select users if selectGroupMembers is false, may be left blank", + "type": "string" + }, + "searchScopeSubtree": { + "description": "Whether to search for users in the entire subtree of the base DN or to only search one level under the base DN (if false). Required if selectGroupMembers is false, ignored otherwise", + "type": "boolean" + }, + "selectGroupMembers": { + "description": "Whether to sync using a group DN and member attribute selection or to use a search filter (if false)", + "type": "boolean" + } + } + }, + "forms.SAMLSettings": { + "id": "forms.SAMLSettings", + "required": [ + "idpMetadataURL", + "spHost", + "rootCerts", + "tlsSkipVerify" + ], + "properties": { + "idpMetadataURL": { + "description": "The Identity Provider's Metadata URL'", + "type": "string" + }, + "rootCerts": { + "description": "Root Certs to access IdP Metadata", + "type": "string" + }, + "spHost": { + "description": "The Host address of the Service Provider", + "type": "string" + }, + "tlsSkipVerify": { + "description": "Option for TLSSkipVerify", + "type": "boolean" + } + } + }, + "forms.SessionsConfig": { + "id": "forms.SessionsConfig", + "required": [ + "lifetimeMinutes", + "renewalThresholdMinutes", + "perUserLimit" + ], + "properties": { + "lifetimeMinutes": { + "description": "Specifies the initial lifetime (in minutes) of a session from the moment it is generated, minimum is 10 minutes", + "type": "integer", + "format": "integer" + }, + "perUserLimit": { + "description": "Indicates the maximum number of sessions that any user can have active at any given time. If creating a new session would put a user over this limit then the least recently used session will be deleted. A value of zero disables limiting the number of sessions that users may have", + "type": "integer", + "format": "integer" + }, + "renewalThresholdMinutes": { + "description": "Indicates a period of time (in minutes) before the expiration of a session where, if used, a session will be extended by the current configured lifetime from then, a zero value disables session extension, maximum is 5 minutes less than initial session lifetime", + "type": "integer", + "format": "integer" + } + } + }, + "forms.SetMembership": { + "id": "forms.SetMembership", + "properties": { + "isAdmin": { + "description": "Whether the member should be an admin of the organization or team (default false), unchanged if nil or omitted", + "type": "boolean" + } + } + }, + "forms.UpdateAccount": { + "id": "forms.UpdateAccount", + "properties": { + "fullName": { + "description": "Full name of account, unchanged if null or omitted", + "type": "string" + }, + "isActive": { + "description": "Whether the user is active and can login (users only), unchanged if null or omitted", + "type": "boolean" + }, + "isAdmin": { + "description": "Whether the user is an admin (users only), unchanged if null or omitted", + "type": "boolean" + } + } + }, + "forms.UpdateAccountPublicKey": { + "id": "forms.UpdateAccountPublicKey", + "properties": { + "certificates": { + "description": "certificates for the public key", + "type": "array", + "items": { + "$ref": "#/definitions/forms.Certificate" + } + }, + "label": { + "description": "Label or description for the key", + "type": "string" + } + } + }, + "forms.UpdateTeam": { + "id": "forms.UpdateTeam", + "properties": { + "description": { + "description": "Description of the team, unchanged if nil or omitted", + "type": "string" + }, + "name": { + "description": "Name of the team, unchanged if nil or omitted", + "type": "string" + } + } + }, + "responses.Account": { + "id": "responses.Account", + "required": [ + "name", + "id", + "fullName", + "isOrg" + ], + "properties": { + "fullName": { + "description": "Full Name of the account", + "type": "string" + }, + "id": { + "description": "ID of the account", + "type": "string" + }, + "isActive": { + "description": "Whether the user is active and can login (users only)", + "type": "boolean" + }, + "isAdmin": { + "description": "Whether the user is a system admin (users only)", + "type": "boolean" + }, + "isImported": { + "description": "Whether the user was imported from an upstream identity provider", + "type": "boolean" + }, + "isOrg": { + "description": "Whether the account is an organization (or user)", + "type": "boolean" + }, + "membersCount": { + "description": "The number of members of the organization", + "type": "integer", + "format": "int32" + }, + "name": { + "description": "Name of the account", + "type": "string" + }, + "teamsCount": { + "description": "The number of teams in the organization", + "type": "integer", + "format": "int32" + } + } + }, + "responses.AccountPublicKey": { + "id": "responses.AccountPublicKey", + "required": [ + "id", + "accountID", + "publicKey", + "label" + ], + "properties": { + "accountID": { + "description": "the ID of the account", + "type": "string" + }, + "certificates": { + "description": "certificates for the public key", + "type": "array", + "items": { + "$ref": "#/definitions/responses.Certificate" + } + }, + "id": { + "description": "the hash of the public key's DER bytes", + "type": "string" + }, + "label": { + "description": "the label or description for the key", + "type": "string" + }, + "publicKey": { + "description": "the encoded PEM of the public key", + "type": "string" + } + } + }, + "responses.AccountPublicKeys": { + "id": "responses.AccountPublicKeys", + "required": [ + "accountPublicKeys", + "nextPageStart" + ], + "properties": { + "accountPublicKeys": { + "type": "array", + "items": { + "$ref": "#/definitions/responses.AccountPublicKey" + } + }, + "nextPageStart": { + "description": "The page start value which can be used to request the next batch of items (empty if there are no more items remaining)", + "type": "string" + } + } + }, + "responses.Accounts": { + "id": "responses.Accounts", + "required": [ + "accounts", + "usersCount", + "orgsCount", + "nextPageStart", + "resourceCount" + ], + "properties": { + "accounts": { + "type": "array", + "items": { + "$ref": "#/definitions/responses.Account" + } + }, + "nextPageStart": { + "description": "The page start value which can be used to request the next batch of items (empty if there are no more items remaining)", + "type": "string" + }, + "orgsCount": { + "description": "The total (unpaged) number of organizations (not considering any filters applied to this request)", + "type": "integer", + "format": "int32" + }, + "resourceCount": { + "description": "The total (unpaged) number of items (not considering any filters applied to the request)", + "type": "integer", + "format": "int32" + }, + "usersCount": { + "description": "The total (unpaged) number of users (not considering any filters applied to this request)", + "type": "integer", + "format": "int32" + } + } + }, + "responses.BulkResult": { + "id": "responses.BulkResult", + "required": [ + "op", + "success" + ], + "properties": { + "error": { + "description": "If not successful, the error encountered when performing the operation on this resource", + "$ref": "#/definitions/errors.APIError" + }, + "op": { + "description": "The operation which was perfomed", + "type": "string" + }, + "ref": { + "description": "The corresponding identifier in the bulk operation request", + "type": "string" + }, + "success": { + "description": "Whether the bulk operation was successful for this resource", + "type": "boolean" + } + } + }, + "responses.BulkResults": { + "id": "responses.BulkResults", + "required": [ + "results" + ], + "properties": { + "results": { + "description": "List of results for the bulk operation. The index of a bulk result corresponds to the index of the resource in the bulk request if result identifiers are omitted", + "type": "array", + "items": { + "$ref": "#/definitions/responses.BulkResult" + } + } + } + }, + "responses.Certificate": { + "id": "responses.Certificate", + "required": [ + "label", + "cert" + ], + "properties": { + "cert": { + "description": "Encoded PEM for the cert", + "type": "string" + }, + "label": { + "description": "Label for the certificate", + "type": "string" + } + } + }, + "responses.Grant": { + "id": "responses.Grant", + "required": [ + "subjectID", + "objectID", + "roleID" + ], + "properties": { + "objectID": { + "description": "ID of the object managed by the service", + "type": "string" + }, + "roleID": { + "description": "ID of the role managed by the service", + "type": "string" + }, + "subjectID": { + "description": "ID of the subject of this grant", + "type": "string" + } + } + }, + "responses.GrantSubject": { + "id": "responses.GrantSubject", + "required": [ + "id", + "subject_type" + ], + "properties": { + "account": { + "description": "The account associated with this subject, if any", + "$ref": "#/definitions/responses.Account" + }, + "id": { + "description": "ID of this subject", + "type": "string" + }, + "subject_type": { + "description": "The type of this subject (anonymous, authenticated, user, team, org)", + "type": "string" + }, + "team": { + "description": "The team associated with this subject, if any", + "$ref": "#/definitions/responses.Team" + } + } + }, + "responses.Grants": { + "id": "responses.Grants", + "required": [ + "grants", + "subjects", + "nextPageStart", + "resourceCount" + ], + "properties": { + "grants": { + "type": "array", + "items": { + "$ref": "#/definitions/responses.Grant" + } + }, + "nextPageStart": { + "description": "The page start value which can be used to request the next batch of items (empty if there are no more items remaining)", + "type": "string" + }, + "resourceCount": { + "description": "The total (unpaged) number of items (not considering any filters applied to the request)", + "type": "integer", + "format": "int32" + }, + "subjects": { + "type": "array", + "items": { + "$ref": "#/definitions/responses.GrantSubject" + } + } + } + }, + "responses.GroupLinkOpts": { + "id": "responses.GroupLinkOpts", + "required": [ + "enableLink", + "groupName" + ], + "properties": { + "enableLink": { + "description": "Whether to enable SAML linking. If false, all other fields are ignored", + "type": "boolean" + }, + "groupName": { + "description": "The group name that is obtained from group attribute of the SAML assertion", + "type": "string" + } + } + }, + "responses.Member": { + "id": "responses.Member", + "required": [ + "member", + "isAdmin" + ], + "properties": { + "isAdmin": { + "description": "Whether the member is an admin of the organization or team", + "type": "boolean" + }, + "member": { + "description": "The user which is a member of the organization or team", + "$ref": "#/definitions/responses.Account" + } + } + }, + "responses.MemberOrg": { + "id": "responses.MemberOrg", + "required": [ + "org", + "isAdmin" + ], + "properties": { + "isAdmin": { + "description": "Whether the user is an admin of the organization", + "type": "boolean" + }, + "org": { + "description": "The organization which the user is a member of", + "$ref": "#/definitions/responses.Account" + } + } + }, + "responses.MemberOrgs": { + "id": "responses.MemberOrgs", + "required": [ + "memberOrgs", + "nextPageStart" + ], + "properties": { + "memberOrgs": { + "type": "array", + "items": { + "$ref": "#/definitions/responses.MemberOrg" + } + }, + "nextPageStart": { + "description": "The page start value which can be used to request the next batch of items (empty if there are no more items remaining)", + "type": "string" + } + } + }, + "responses.MemberSyncOpts": { + "id": "responses.MemberSyncOpts", + "required": [ + "enableSync", + "selectGroupMembers", + "groupDN", + "groupMemberAttr", + "searchBaseDN", + "searchScopeSubtree", + "searchFilter" + ], + "properties": { + "enableSync": { + "description": "Whether to enable LDAP syncing. If false, all other fields are ignored", + "type": "boolean" + }, + "groupDN": { + "description": "The distinguished name of the LDAP group. Applicable only if selectGroupMembers is true, ignored otherwise", + "type": "string" + }, + "groupMemberAttr": { + "description": "The name of the LDAP group entry attribute which corresponds to distinguished names of members. Applicable only if selectGroupMembers is true, ignored otherwise", + "type": "string" + }, + "searchBaseDN": { + "description": "The distinguished name of the element from which the LDAP server will search for users. Applicable only if selectGroupMembers is false, ignored otherwise", + "type": "string" + }, + "searchFilter": { + "description": "The LDAP search filter used to select users if selectGroupMembers is false, may be left blank", + "type": "string" + }, + "searchScopeSubtree": { + "description": "Whether to search for users in the entire subtree of the base DN or to only search one level under the base DN (if false). Applicable only if selectGroupMembers is false, ignored otherwise", + "type": "boolean" + }, + "selectGroupMembers": { + "description": "Whether to sync using a group DN and member attribute selection or to use a search filter (if false)", + "type": "boolean" + } + } + }, + "responses.MemberTeam": { + "id": "responses.MemberTeam", + "required": [ + "team", + "isAdmin" + ], + "properties": { + "isAdmin": { + "description": "Whether the user is an admin of the team", + "type": "boolean" + }, + "team": { + "description": "The team which the user is a member of", + "$ref": "#/definitions/responses.Team" + } + } + }, + "responses.MemberTeams": { + "id": "responses.MemberTeams", + "required": [ + "memberTeams", + "nextPageStart" + ], + "properties": { + "memberTeams": { + "type": "array", + "items": { + "$ref": "#/definitions/responses.MemberTeam" + } + }, + "nextPageStart": { + "description": "The page start value which can be used to request the next batch of items (empty if there are no more items remaining)", + "type": "string" + } + } + }, + "responses.Members": { + "id": "responses.Members", + "required": [ + "members", + "nextPageStart", + "resourceCount" + ], + "properties": { + "members": { + "type": "array", + "items": { + "$ref": "#/definitions/responses.Member" + } + }, + "nextPageStart": { + "description": "The page start value which can be used to request the next batch of items (empty if there are no more items remaining)", + "type": "string" + }, + "resourceCount": { + "description": "The total (unpaged) number of items (not considering any filters applied to the request)", + "type": "integer", + "format": "int32" + } + } + }, + "responses.Team": { + "id": "responses.Team", + "required": [ + "orgID", + "name", + "id", + "description", + "membersCount" + ], + "properties": { + "description": { + "description": "Description of the team", + "type": "string" + }, + "id": { + "description": "ID of the team", + "type": "string" + }, + "membersCount": { + "description": "The number of members of the team", + "type": "integer", + "format": "int32" + }, + "name": { + "description": "Name of the team", + "type": "string" + }, + "orgID": { + "description": "ID of the organization to which this team belongs", + "type": "string" + } + } + }, + "responses.Teams": { + "id": "responses.Teams", + "required": [ + "teams", + "nextPageStart", + "resourceCount" + ], + "properties": { + "nextPageStart": { + "description": "The page start value which can be used to request the next batch of items (empty if there are no more items remaining)", + "type": "string" + }, + "resourceCount": { + "description": "The total (unpaged) number of items (not considering any filters applied to the request)", + "type": "integer", + "format": "int32" + }, + "teams": { + "type": "array", + "items": { + "$ref": "#/definitions/responses.Team" + } + } + } + }, + "role.Role": { + "id": "role.Role", + "required": [ + "id", + "name", + "system_role", + "operations" + ], + "properties": { + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "operations": { + "type": "object" + }, + "system_role": { + "type": "boolean" + } + } + }, + "types.ClusterConfig": { + "id": "types.ClusterConfig", + "required": [ + "ControllerPort", + "KubeAPIServerPort", + "ProxyKubeAPIServerPort", + "SwarmPort", + "SwarmStrategy", + "DNS", + "DNSOpt", + "DNSSearch", + "KVTimeout", + "KVSnapshotCount", + "ProfilingEnabled", + "ExternalServiceLB", + "MetricsRetentionTime", + "MetricsScrapeInterval", + "ProxyMetricsScrapeInterval", + "RethinkDBCacheSize", + "CloudProvider", + "CNIInstallerURL", + "PodCIDR", + "CalicoMTU", + "IPIPMTU", + "UnmanagedCNI", + "NodePortRange", + "AzureIPCount", + "CustomKubeAPIServerFlags", + "CustomKubeControllerManagerFlags", + "CustomKubeletFlags", + "CustomKubeSchedulerFlags", + "LocalVolumeCollectionMapping", + "AuthKeySecretID", + "managerKubeReservedResources", + "workerKubeReservedResources" + ], + "properties": { + "AuthKeySecretID": { + "type": "string" + }, + "AzureIPCount": { + "type": "string" + }, + "CNIInstallerURL": { + "type": "string" + }, + "CalicoMTU": { + "type": "string" + }, + "CloudProvider": { + "type": "string" + }, + "ControllerPort": { + "type": "integer", + "format": "int32" + }, + "CustomKubeAPIServerFlags": { + "type": "array", + "items": { + "type": "string" + } + }, + "CustomKubeControllerManagerFlags": { + "type": "array", + "items": { + "type": "string" + } + }, + "CustomKubeSchedulerFlags": { + "type": "array", + "items": { + "type": "string" + } + }, + "CustomKubeletFlags": { + "type": "array", + "items": { + "type": "string" + } + }, + "DNS": { + "type": "array", + "items": { + "type": "string" + } + }, + "DNSOpt": { + "type": "array", + "items": { + "type": "string" + } + }, + "DNSSearch": { + "type": "array", + "items": { + "type": "string" + } + }, + "ExternalServiceLB": { + "type": "string" + }, + "IPIPMTU": { + "type": "string" + }, + "KVSnapshotCount": { + "type": "integer", + "format": "int32" + }, + "KVTimeout": { + "type": "integer", + "format": "int32" + }, + "KubeAPIServerPort": { + "type": "integer", + "format": "int32" + }, + "LocalVolumeCollectionMapping": { + "type": "boolean" + }, + "MetricsRetentionTime": { + "type": "string" + }, + "MetricsScrapeInterval": { + "type": "string" + }, + "NodePortRange": { + "type": "string" + }, + "PodCIDR": { + "type": "string" + }, + "ProfilingEnabled": { + "type": "boolean" + }, + "ProxyKubeAPIServerPort": { + "type": "integer", + "format": "int32" + }, + "ProxyMetricsScrapeInterval": { + "type": "string" + }, + "RethinkDBCacheSize": { + "type": "string" + }, + "SwarmPort": { + "type": "integer", + "format": "int32" + }, + "SwarmStrategy": { + "type": "string" + }, + "UnmanagedCNI": { + "type": "boolean" + }, + "managerKubeReservedResources": { + "type": "string" + }, + "workerKubeReservedResources": { + "type": "string" + } + } + }, + "v1.FinalizerName": { + "id": "v1.FinalizerName" + }, + "v1.Initializer": { + "id": "v1.Initializer", + "description": "Initializer is information about an initializer that has not yet completed.", + "required": [ + "name" + ], + "properties": { + "name": { + "description": "name of the process that is responsible for initializing this object.", + "type": "string" + } + } + }, + "v1.Initializers": { + "id": "v1.Initializers", + "description": "Initializers tracks the progress of initialization.", + "required": [ + "pending" + ], + "properties": { + "pending": { + "description": "Pending is a list of initializers that must execute in order before this object is visible. When the last pending initializer is removed, and no failing result is set, the initializers struct will be set to nil and the object is considered as initialized and visible to all clients.", + "type": "array", + "items": { + "$ref": "#/definitions/v1.Initializer" + } + }, + "result": { + "description": "If result is set with the Failure field, the object will be persisted to storage and then deleted, ensuring that other clients can observe the deletion.", + "$ref": "#/definitions/v1.Status" + } + } + }, + "v1.ListMeta": { + "id": "v1.ListMeta", + "description": "ListMeta describes metadata that synthetic resources must have, including lists and various status objects. A resource may have only one of {ObjectMeta, ListMeta}.", + "properties": { + "continue": { + "description": "continue may be set if the user set a limit on the number of items returned, and indicates that the server has more data available. The value is opaque and may be used to issue another request to the endpoint that served this list to retrieve the next set of available objects. Continuing a list may not be possible if the server configuration has changed or more than a few minutes have passed. The resourceVersion field returned when using this continue value will be identical to the value in the first response.", + "type": "string" + }, + "resourceVersion": { + "description": "String that identifies the server's internal version of this object that can be used by clients to determine when objects have changed. Value must be treated as opaque by clients and passed unmodified back to the server. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency", + "type": "string" + }, + "selfLink": { + "description": "selfLink is a URL representing this object. Populated by the system. Read-only.", + "type": "string" + } + } + }, + "v1.Namespace": { + "id": "v1.Namespace", + "description": "Namespace provides a scope for Names. Use of multiple namespaces is optional.", + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", + "type": "string" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "metadata": { + "description": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", + "$ref": "#/definitions/v1.ObjectMeta" + }, + "spec": { + "description": "Spec defines the behavior of the Namespace. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", + "$ref": "#/definitions/v1.NamespaceSpec" + }, + "status": { + "description": "Status describes the current status of a Namespace. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", + "$ref": "#/definitions/v1.NamespaceStatus" + } + } + }, + "v1.NamespaceList": { + "id": "v1.NamespaceList", + "description": "NamespaceList is a list of Namespaces.", + "required": [ + "items" + ], + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", + "type": "string" + }, + "items": { + "description": "Items is the list of Namespace objects in the list. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/", + "type": "array", + "items": { + "$ref": "#/definitions/v1.Namespace" + } + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "metadata": { + "description": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "$ref": "#/definitions/v1.ListMeta" + } + } + }, + "v1.NamespaceSpec": { + "id": "v1.NamespaceSpec", + "description": "NamespaceSpec describes the attributes on a Namespace.", + "properties": { + "finalizers": { + "description": "Finalizers is an opaque list of values that must be empty to permanently remove object from storage. More info: https://kubernetes.io/docs/tasks/administer-cluster/namespaces/", + "type": "array", + "items": { + "$ref": "#/definitions/v1.FinalizerName" + } + } + } + }, + "v1.NamespaceStatus": { + "id": "v1.NamespaceStatus", + "description": "NamespaceStatus is information about the current status of a Namespace.", + "properties": { + "phase": { + "description": "Phase is the current lifecycle phase of the namespace. More info: https://kubernetes.io/docs/tasks/administer-cluster/namespaces/", + "type": "string" + } + } + }, + "v1.ObjectMeta": { + "id": "v1.ObjectMeta", + "description": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", + "properties": { + "annotations": { + "description": "Annotations is an unstructured key value map stored with a resource that may be set by external tools to store and retrieve arbitrary metadata. They are not queryable and should be preserved when modifying objects. More info: http://kubernetes.io/docs/user-guide/annotations", + "type": "object" + }, + "clusterName": { + "description": "The name of the cluster which the object belongs to. This is used to distinguish resources with same name and namespace in different clusters. This field is not set anywhere right now and apiserver is going to ignore it if set in create or update request.", + "type": "string" + }, + "creationTimestamp": { + "description": "CreationTimestamp is a timestamp representing the server time when this object was created. It is not guaranteed to be set in happens-before order across separate operations. Clients may not set this value. It is represented in RFC3339 form and is in UTC.\n\nPopulated by the system. Read-only. Null for lists. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", + "type": "string" + }, + "deletionGracePeriodSeconds": { + "description": "Number of seconds allowed for this object to gracefully terminate before it will be removed from the system. Only set when deletionTimestamp is also set. May only be shortened. Read-only.", + "type": "integer", + "format": "int64" + }, + "deletionTimestamp": { + "description": "DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This field is set by the server when a graceful deletion is requested by the user, and is not directly settable by a client. The resource is expected to be deleted (no longer visible from resource lists, and not reachable by name) after the time in this field, once the finalizers list is empty. As long as the finalizers list contains items, deletion is blocked. Once the deletionTimestamp is set, this value may not be unset or be set further into the future, although it may be shortened or the resource may be deleted prior to this time. For example, a user may request that a pod is deleted in 30 seconds. The Kubelet will react by sending a graceful termination signal to the containers in the pod. After that 30 seconds, the Kubelet will send a hard termination signal (SIGKILL) to the container and after cleanup, remove the pod from the API. In the presence of network partitions, this object may still exist after this timestamp, until an administrator or automated process can determine the resource is fully terminated. If not set, graceful deletion of the object has not been requested.\n\nPopulated by the system when a graceful deletion is requested. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", + "type": "string" + }, + "finalizers": { + "description": "Must be empty before the object is deleted from the registry. Each entry is an identifier for the responsible component that will remove the entry from the list. If the deletionTimestamp of the object is non-nil, entries in this list can only be removed.", + "type": "array", + "items": { + "type": "string" + } + }, + "generateName": { + "description": "GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n\nIf this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n\nApplied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#idempotency", + "type": "string" + }, + "generation": { + "description": "A sequence number representing a specific generation of the desired state. Populated by the system. Read-only.", + "type": "integer", + "format": "int64" + }, + "initializers": { + "description": "An initializer is a controller which enforces some system invariant at object creation time. This field is a list of initializers that have not yet acted on this object. If nil or empty, this object has been completely initialized. Otherwise, the object is considered uninitialized and is hidden (in list/watch and get calls) from clients that haven't explicitly asked to observe uninitialized objects.\n\nWhen an object is created, the system will populate this list with the current set of initializers. Only privileged users may set or modify this list. Once it is empty, it may not be modified further by any user.", + "$ref": "#/definitions/v1.Initializers" + }, + "labels": { + "description": "Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers and services. More info: http://kubernetes.io/docs/user-guide/labels", + "type": "object" + }, + "name": { + "description": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "namespace": { + "description": "Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n\nMust be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces", + "type": "string" + }, + "ownerReferences": { + "description": "List of objects depended by this object. If ALL objects in the list have been deleted, this object will be garbage collected. If this object is managed by a controller, then an entry in this list will point to this controller, with the controller field set to true. There cannot be more than one managing controller.", + "type": "array", + "items": { + "$ref": "#/definitions/v1.OwnerReference" + } + }, + "resourceVersion": { + "description": "An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.\n\nPopulated by the system. Read-only. Value must be treated as opaque by clients and . More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#concurrency-control-and-consistency", + "type": "string" + }, + "selfLink": { + "description": "SelfLink is a URL representing this object. Populated by the system. Read-only.", + "type": "string" + }, + "uid": { + "description": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "v1.OwnerReference": { + "id": "v1.OwnerReference", + "description": "OwnerReference contains enough information to let you identify an owning object. Currently, an owning object must be in the same namespace, so there is no namespace field.", + "required": [ + "apiVersion", + "kind", + "name", + "uid" + ], + "properties": { + "apiVersion": { + "description": "API version of the referent.", + "type": "string" + }, + "blockOwnerDeletion": { + "description": "If true, AND if the owner has the \"foregroundDeletion\" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs \"delete\" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.", + "type": "boolean" + }, + "controller": { + "description": "If true, this reference points to the managing controller.", + "type": "boolean" + }, + "kind": { + "description": "Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names", + "type": "string" + }, + "uid": { + "description": "UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "v1.Status": { + "id": "v1.Status", + "description": "Status is a return value for calls that don't return other objects.", + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", + "type": "string" + }, + "code": { + "description": "Suggested HTTP return code for this status, 0 if not set.", + "type": "integer", + "format": "int32" + }, + "details": { + "description": "Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.", + "$ref": "#/definitions/v1.StatusDetails" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "message": { + "description": "A human-readable description of the status of this operation.", + "type": "string" + }, + "metadata": { + "description": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "$ref": "#/definitions/v1.ListMeta" + }, + "reason": { + "description": "A machine-readable description of why this operation is in the \"Failure\" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.", + "type": "string" + }, + "status": { + "description": "Status of the operation. One of: \"Success\" or \"Failure\". More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", + "type": "string" + } + } + }, + "v1.StatusCause": { + "id": "v1.StatusCause", + "description": "StatusCause provides more information about an api.Status failure, including cases when multiple errors are encountered.", + "properties": { + "field": { + "description": "The field of the resource that has caused this error, as named by its JSON serialization. May include dot and postfix notation for nested attributes. Arrays are zero-indexed. Fields may appear more than once in an array of causes due to fields having multiple errors. Optional.\n\nExamples:\n \"name\" - the field \"name\" on the current resource\n \"items[0].name\" - the field \"name\" on the first array entry in \"items\"", + "type": "string" + }, + "message": { + "description": "A human-readable description of the cause of the error. This field may be presented as-is to a reader.", + "type": "string" + }, + "reason": { + "description": "A machine-readable description of the cause of the error. If this value is empty there is no information available.", + "type": "string" + } + } + }, + "v1.StatusDetails": { + "id": "v1.StatusDetails", + "description": "StatusDetails is a set of additional properties that MAY be set by the server to provide additional information about a response. The Reason field of a Status object defines what attributes will be set. Clients must ignore fields that do not match the defined type of each attribute, and should assume that any attribute may be empty, invalid, or under defined.", + "properties": { + "causes": { + "description": "The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.", + "type": "array", + "items": { + "$ref": "#/definitions/v1.StatusCause" + } + }, + "group": { + "description": "The group attribute of the resource associated with the status StatusReason.", + "type": "string" + }, + "kind": { + "description": "The kind attribute of the resource associated with the status StatusReason. On some operations may differ from the requested resource Kind. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "name": { + "description": "The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).", + "type": "string" + }, + "retryAfterSeconds": { + "description": "If specified, the time in seconds before the operation should be retried. Some errors may indicate the client must take an alternate action - for those errors this field may indicate how long to wait before taking the alternate action.", + "type": "integer", + "format": "int32" + }, + "uid": { + "description": "UID of the resource. (when there is a single resource which can be described). More info: http://kubernetes.io/docs/user-guide/identifiers#uids", + "type": "string" + } + } + }, + "||authz.Collection": { + "id": "||authz.Collection" + }, + "||authz.RoleCreateResponse": { + "id": "||authz.RoleCreateResponse" + }, + "||role.Role": { + "id": "||role.Role" + } + }, + "securityDefinitions": { + "BearerToken": { + "type": "apiKey", + "name": "Authorization", + "in": "header" + } + }, + "security": [ + { + "BearerToken": [] + } + ], + "tags": [ + { + "description": "Create and manage containers.\n", + "name": "Container", + "x-displayName": "Containers" + }, + { + "name": "Image", + "x-displayName": "Images" + }, + { + "description": "Networks are user-defined networks that containers can be attached to. See the [networking documentation](https://docs.docker.com/engine/userguide/networking/) for more information.\n", + "name": "Network", + "x-displayName": "Networks" + }, + { + "description": "Create and manage persistent storage that can be attached to containers.\n", + "name": "Volume", + "x-displayName": "Volumes" + }, + { + "description": "Run new commands inside running containers. See the [command-line reference](https://docs.docker.com/engine/reference/commandline/exec/) for more information.\n\nTo exec a command in a container, you first need to create an exec instance, then start it. These two API endpoints are wrapped up in a single command-line command, `docker exec`.\n", + "name": "Exec", + "x-displayName": "Exec" + }, + { + "description": "Engines can be clustered together in a swarm. See [the swarm mode documentation](https://docs.docker.com/engine/swarm/) for more information.\n", + "name": "Swarm", + "x-displayName": "Swarm" + }, + { + "description": "Nodes are instances of the Engine participating in a swarm. Swarm mode must be enabled for these endpoints to work.\n", + "name": "Node", + "x-displayName": "Nodes" + }, + { + "description": "Services are the definitions of tasks to run on a swarm. Swarm mode must be enabled for these endpoints to work.\n", + "name": "Service", + "x-displayName": "Services" + }, + { + "description": "A task is a container running on a swarm. It is the atomic scheduling unit of swarm. Swarm mode must be enabled for these endpoints to work.\n", + "name": "Task", + "x-displayName": "Tasks" + }, + { + "description": "Secrets are sensitive data that can be used by services. Swarm mode must be enabled for these endpoints to work.\n", + "name": "Secret", + "x-displayName": "Secrets" + }, + { + "description": "Configs are application configurations that can be used by services. Swarm mode must be enabled for these endpoints to work.\n", + "name": "Config", + "x-displayName": "Configs" + }, + { + "name": "Plugin", + "x-displayName": "Plugins" + }, + { + "name": "System", + "x-displayName": "System" + }, + { + "description": "API endpoints which are specific to UCP", + "name": "UCP" + } + ] + } diff --git a/reference/ucp/3.1/api/fonts/droid-sans-v6-latin-700.eot b/reference/ucp/3.1/api/fonts/droid-sans-v6-latin-700.eot new file mode 100644 index 00000000000..d8524983ad8 Binary files /dev/null and b/reference/ucp/3.1/api/fonts/droid-sans-v6-latin-700.eot differ diff --git a/reference/ucp/3.1/api/fonts/droid-sans-v6-latin-700.svg b/reference/ucp/3.1/api/fonts/droid-sans-v6-latin-700.svg new file mode 100644 index 00000000000..a54bbbbf258 --- /dev/null +++ b/reference/ucp/3.1/api/fonts/droid-sans-v6-latin-700.svg @@ -0,0 +1,411 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/reference/ucp/3.1/api/fonts/droid-sans-v6-latin-700.ttf b/reference/ucp/3.1/api/fonts/droid-sans-v6-latin-700.ttf new file mode 100644 index 00000000000..15896c441fd Binary files /dev/null and b/reference/ucp/3.1/api/fonts/droid-sans-v6-latin-700.ttf differ diff --git a/reference/ucp/3.1/api/fonts/droid-sans-v6-latin-700.woff b/reference/ucp/3.1/api/fonts/droid-sans-v6-latin-700.woff new file mode 100644 index 00000000000..67e3e25f836 Binary files /dev/null and b/reference/ucp/3.1/api/fonts/droid-sans-v6-latin-700.woff differ diff --git a/reference/ucp/3.1/api/fonts/droid-sans-v6-latin-700.woff2 b/reference/ucp/3.1/api/fonts/droid-sans-v6-latin-700.woff2 new file mode 100644 index 00000000000..1e726a7cfce Binary files /dev/null and b/reference/ucp/3.1/api/fonts/droid-sans-v6-latin-700.woff2 differ diff --git a/reference/ucp/3.1/api/fonts/droid-sans-v6-latin-regular.eot b/reference/ucp/3.1/api/fonts/droid-sans-v6-latin-regular.eot new file mode 100644 index 00000000000..ac2698e85ae Binary files /dev/null and b/reference/ucp/3.1/api/fonts/droid-sans-v6-latin-regular.eot differ diff --git a/reference/ucp/3.1/api/fonts/droid-sans-v6-latin-regular.svg b/reference/ucp/3.1/api/fonts/droid-sans-v6-latin-regular.svg new file mode 100644 index 00000000000..d9f2a214f96 --- /dev/null +++ b/reference/ucp/3.1/api/fonts/droid-sans-v6-latin-regular.svg @@ -0,0 +1,403 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/reference/ucp/3.1/api/fonts/droid-sans-v6-latin-regular.ttf b/reference/ucp/3.1/api/fonts/droid-sans-v6-latin-regular.ttf new file mode 100644 index 00000000000..fb8cea662b2 Binary files /dev/null and b/reference/ucp/3.1/api/fonts/droid-sans-v6-latin-regular.ttf differ diff --git a/reference/ucp/3.1/api/fonts/droid-sans-v6-latin-regular.woff b/reference/ucp/3.1/api/fonts/droid-sans-v6-latin-regular.woff new file mode 100644 index 00000000000..abf19899f75 Binary files /dev/null and b/reference/ucp/3.1/api/fonts/droid-sans-v6-latin-regular.woff differ diff --git a/reference/ucp/3.1/api/fonts/droid-sans-v6-latin-regular.woff2 b/reference/ucp/3.1/api/fonts/droid-sans-v6-latin-regular.woff2 new file mode 100644 index 00000000000..9f93f74c3be Binary files /dev/null and b/reference/ucp/3.1/api/fonts/droid-sans-v6-latin-regular.woff2 differ diff --git a/reference/ucp/3.1/api/images/explorer_icons.png b/reference/ucp/3.1/api/images/explorer_icons.png new file mode 100644 index 00000000000..ed9d2fffb64 Binary files /dev/null and b/reference/ucp/3.1/api/images/explorer_icons.png differ diff --git a/reference/ucp/3.1/api/images/favicon-16x16.png b/reference/ucp/3.1/api/images/favicon-16x16.png new file mode 100644 index 00000000000..66b1a5bfb9e Binary files /dev/null and b/reference/ucp/3.1/api/images/favicon-16x16.png differ diff --git a/reference/ucp/3.1/api/images/favicon-32x32.png b/reference/ucp/3.1/api/images/favicon-32x32.png new file mode 100644 index 00000000000..32f319f89bd Binary files /dev/null and b/reference/ucp/3.1/api/images/favicon-32x32.png differ diff --git a/reference/ucp/3.1/api/images/favicon.ico b/reference/ucp/3.1/api/images/favicon.ico new file mode 100644 index 00000000000..8b60bcf06a7 Binary files /dev/null and b/reference/ucp/3.1/api/images/favicon.ico differ diff --git a/reference/ucp/3.1/api/images/logo_small.png b/reference/ucp/3.1/api/images/logo_small.png new file mode 100644 index 00000000000..5496a65579a Binary files /dev/null and b/reference/ucp/3.1/api/images/logo_small.png differ diff --git a/reference/ucp/3.1/api/images/pet_store_api.png b/reference/ucp/3.1/api/images/pet_store_api.png new file mode 100644 index 00000000000..f9f9cd4aeb3 Binary files /dev/null and b/reference/ucp/3.1/api/images/pet_store_api.png differ diff --git a/reference/ucp/3.1/api/images/throbber.gif b/reference/ucp/3.1/api/images/throbber.gif new file mode 100644 index 00000000000..06393889242 Binary files /dev/null and b/reference/ucp/3.1/api/images/throbber.gif differ diff --git a/reference/ucp/3.1/api/images/wordnik_api.png b/reference/ucp/3.1/api/images/wordnik_api.png new file mode 100644 index 00000000000..dca4f1455ac Binary files /dev/null and b/reference/ucp/3.1/api/images/wordnik_api.png differ diff --git a/reference/ucp/3.1/api/index.html b/reference/ucp/3.1/api/index.html new file mode 100644 index 00000000000..dfbfb9fc202 --- /dev/null +++ b/reference/ucp/3.1/api/index.html @@ -0,0 +1,16 @@ + + + + + Docker Universal Control Plane API Documentation + + + + +
                + + + + + + diff --git a/reference/ucp/3.1/api/index.md b/reference/ucp/3.1/api/index.md new file mode 100644 index 00000000000..b90bd55b0f2 --- /dev/null +++ b/reference/ucp/3.1/api/index.md @@ -0,0 +1,29 @@ +--- +description: Learn how to use the Universal Control Plane REST API +keywords: ucp, api, reference +title: Universal Control Plane 3.1 API +--- + +
                +
                + + + + + + + + + + + + + + + + + + + + +
                diff --git a/reference/ucp/3.1/api/lang/en.js b/reference/ucp/3.1/api/lang/en.js new file mode 100644 index 00000000000..c7b8c7499ad --- /dev/null +++ b/reference/ucp/3.1/api/lang/en.js @@ -0,0 +1,53 @@ +'use strict'; + +/* jshint quotemark: double */ +window.SwaggerTranslator.learn({ + "Warning: Deprecated":"Warning: Deprecated", + "Implementation Notes":"Implementation Notes", + "Response Class":"Response Class", + "Status":"Status", + "Parameters":"Parameters", + "Parameter":"Parameter", + "Value":"Value", + "Description":"Description", + "Parameter Type":"Parameter Type", + "Data Type":"Data Type", + "Response Messages":"Response Messages", + "HTTP Status Code":"HTTP Status Code", + "Reason":"Reason", + "Response Model":"Response Model", + "Request URL":"Request URL", + "Response Body":"Response Body", + "Response Code":"Response Code", + "Response Headers":"Response Headers", + "Hide Response":"Hide Response", + "Headers":"Headers", + "Try it out!":"Try it out!", + "Show/Hide":"Show/Hide", + "List Operations":"List Operations", + "Expand Operations":"Expand Operations", + "Raw":"Raw", + "can't parse JSON. Raw result":"can't parse JSON. Raw result", + "Model Schema":"Model Schema", + "Model":"Model", + "apply":"apply", + "Username":"Username", + "Password":"Password", + "Terms of service":"Terms of service", + "Created by":"Created by", + "See more at":"See more at", + "Contact the developer":"Contact the developer", + "api version":"api version", + "Response Content Type":"Response Content Type", + "fetching resource":"fetching resource", + "fetching resource list":"fetching resource list", + "Explore":"Explore", + "Show Swagger Petstore Example Apis":"Show Swagger Petstore Example Apis", + "Can't read from server. It may not have the appropriate access-control-origin settings.":"Can't read from server. It may not have the appropriate access-control-origin settings.", + "Please specify the protocol for":"Please specify the protocol for", + "Can't read swagger JSON from":"Can't read swagger JSON from", + "Finished Loading Resource Information. Rendering Swagger UI":"Finished Loading Resource Information. Rendering Swagger UI", + "Unable to read api":"Unable to read api", + "from path":"from path", + "server returned":"server returned" +}); diff --git a/reference/ucp/3.1/api/lang/es.js b/reference/ucp/3.1/api/lang/es.js new file mode 100644 index 00000000000..01dff98d283 --- /dev/null +++ b/reference/ucp/3.1/api/lang/es.js @@ -0,0 +1,52 @@ +'use strict'; + +/* jshint quotemark: double */ +window.SwaggerTranslator.learn({ + "Warning: Deprecated":"Advertencia: Obsoleto", + "Implementation Notes":"Notas de implementación", + "Response Class":"Clase de la Respuesta", + "Status":"Status", + "Parameters":"Parámetros", + "Parameter":"Parámetro", + "Value":"Valor", + "Description":"Descripción", + "Parameter Type":"Tipo del Parámetro", + "Data Type":"Tipo del Dato", + "Response Messages":"Mensajes de la Respuesta", + "HTTP Status Code":"Código de Status HTTP", + "Reason":"Razón", + "Response Model":"Modelo de la Respuesta", + "Request URL":"URL de la Solicitud", + "Response Body":"Cuerpo de la Respuesta", + "Response Code":"Código de la Respuesta", + "Response Headers":"Encabezados de la Respuesta", + "Hide Response":"Ocultar Respuesta", + "Try it out!":"Pruébalo!", + "Show/Hide":"Mostrar/Ocultar", + "List Operations":"Listar Operaciones", + "Expand Operations":"Expandir Operaciones", + "Raw":"Crudo", + "can't parse JSON. Raw result":"no puede parsear el JSON. Resultado crudo", + "Model Schema":"Esquema del Modelo", + "Model":"Modelo", + "apply":"aplicar", + "Username":"Nombre de usuario", + "Password":"Contraseña", + "Terms of service":"Términos de Servicio", + "Created by":"Creado por", + "See more at":"Ver más en", + "Contact the developer":"Contactar al desarrollador", + "api version":"versión de la api", + "Response Content Type":"Tipo de Contenido (Content Type) de la Respuesta", + "fetching resource":"buscando recurso", + "fetching resource list":"buscando lista del recurso", + "Explore":"Explorar", + "Show Swagger Petstore Example Apis":"Mostrar Api Ejemplo de Swagger Petstore", + "Can't read from server. It may not have the appropriate access-control-origin settings.":"No se puede leer del servidor. Tal vez no tiene la configuración de control de acceso de origen (access-control-origin) apropiado.", + "Please specify the protocol for":"Por favor, especificar el protocola para", + "Can't read swagger JSON from":"No se puede leer el JSON de swagger desde", + "Finished Loading Resource Information. Rendering Swagger UI":"Finalizada la carga del recurso de Información. Mostrando Swagger UI", + "Unable to read api":"No se puede leer la api", + "from path":"desde ruta", + "server returned":"el servidor retornó" +}); diff --git a/reference/ucp/3.1/api/lang/pt.js b/reference/ucp/3.1/api/lang/pt.js new file mode 100644 index 00000000000..288c81a80e1 --- /dev/null +++ b/reference/ucp/3.1/api/lang/pt.js @@ -0,0 +1,53 @@ +'use strict'; + +/* jshint quotemark: double */ +window.SwaggerTranslator.learn({ + "Warning: Deprecated":"Aviso: Depreciado", + "Implementation Notes":"Notas de Implementação", + "Response Class":"Classe de resposta", + "Status":"Status", + "Parameters":"Parâmetros", + "Parameter":"Parâmetro", + "Value":"Valor", + "Description":"Descrição", + "Parameter Type":"Tipo de parâmetro", + "Data Type":"Tipo de dados", + "Response Messages":"Mensagens de resposta", + "HTTP Status Code":"Código de status HTTP", + "Reason":"Razão", + "Response Model":"Modelo resposta", + "Request URL":"URL requisição", + "Response Body":"Corpo da resposta", + "Response Code":"Código da resposta", + "Response Headers":"Cabeçalho da resposta", + "Headers":"Cabeçalhos", + "Hide Response":"Esconder resposta", + "Try it out!":"Tente agora!", + "Show/Hide":"Mostrar/Esconder", + "List Operations":"Listar operações", + "Expand Operations":"Expandir operações", + "Raw":"Cru", + "can't parse JSON. Raw result":"Falha ao analisar JSON. Resulto cru", + "Model Schema":"Modelo esquema", + "Model":"Modelo", + "apply":"Aplicar", + "Username":"Usuário", + "Password":"Senha", + "Terms of service":"Termos do serviço", + "Created by":"Criado por", + "See more at":"Veja mais em", + "Contact the developer":"Contate o desenvolvedor", + "api version":"Versão api", + "Response Content Type":"Tipo de conteúdo da resposta", + "fetching resource":"busca recurso", + "fetching resource list":"buscando lista de recursos", + "Explore":"Explorar", + "Show Swagger Petstore Example Apis":"Show Swagger Petstore Example Apis", + "Can't read from server. It may not have the appropriate access-control-origin settings.":"Não é possível ler do servidor. Pode não ter as apropriadas configurações access-control-origin", + "Please specify the protocol for":"Por favor especifique o protocolo", + "Can't read swagger JSON from":"Não é possível ler o JSON Swagger de", + "Finished Loading Resource Information. Rendering Swagger UI":"Carregar informação de recurso finalizada. Renderizando Swagger UI", + "Unable to read api":"Não foi possível ler api", + "from path":"do caminho", + "server returned":"servidor retornou" +}); diff --git a/reference/ucp/3.1/api/lang/ru.js b/reference/ucp/3.1/api/lang/ru.js new file mode 100644 index 00000000000..15248d54246 --- /dev/null +++ b/reference/ucp/3.1/api/lang/ru.js @@ -0,0 +1,52 @@ +'use strict'; + +/* jshint quotemark: double */ +window.SwaggerTranslator.learn({ + "Warning: Deprecated":"Ворнинг: Депрекейтед", + "Implementation Notes":"Заметки", + "Response Class":"Пример ответа", + "Status":"Статус", + "Parameters":"Параметры", + "Parameter":"Параметр", + "Value":"Значение", + "Description":"Описание", + "Parameter Type":"Тип параметра", + "Data Type":"Тип данных", + "HTTP Status Code":"HTTP код", + "Reason":"Причина", + "Response Model":"Структура ответа", + "Request URL":"URL запроса", + "Response Body":"Тело ответа", + "Response Code":"HTTP код ответа", + "Response Headers":"Заголовки ответа", + "Hide Response":"Спрятать ответ", + "Response Messages":"Что может прийти в ответ", + "Try it out!":"Попробовать!", + "Show/Hide":"Показать/Скрыть", + "List Operations":"Операции кратко", + "Expand Operations":"Операции подробно", + "Raw":"В сыром виде", + "can't parse JSON. Raw result":"Не удается распарсить ответ:", + "Model Schema":"Структура", + "Model":"Описание", + "apply":"применить", + "Username":"Имя пользователя", + "Password":"Пароль", + "Terms of service":"Условия использования", + "Created by":"Разработано", + "See more at":"Еще тут", + "Contact the developer":"Связаться с разработчиком", + "api version":"Версия API", + "Response Content Type":"Content Type ответа", + "fetching resource":"Получение ресурса", + "fetching resource list":"Получение ресурсов", + "Explore":"Поехали", + "Show Swagger Petstore Example Apis":"Показать примеры АПИ", + "Can't read from server. It may not have the appropriate access-control-origin settings.":"Не удается получить ответ от сервера. Возможно, какая-то лажа с настройками доступа", + "Please specify the protocol for":"Пожалуйста, укажите протогол для", + "Can't read swagger JSON from":"Не получается прочитать swagger json из", + "Finished Loading Resource Information. Rendering Swagger UI":"Загрузка информации о ресурсах завершена. Рендерим", + "Unable to read api":"Не удалось прочитать api", + "from path":"по адресу", + "server returned":"сервер сказал" +}); diff --git a/reference/ucp/3.1/api/lang/tr.js b/reference/ucp/3.1/api/lang/tr.js new file mode 100644 index 00000000000..b371b67f3fe --- /dev/null +++ b/reference/ucp/3.1/api/lang/tr.js @@ -0,0 +1,53 @@ +'use strict'; + +/* jshint quotemark: double */ +window.SwaggerTranslator.learn({ + "Warning: Deprecated":"Uyarı: Deprecated", + "Implementation Notes":"Gerçekleştirim Notları", + "Response Class":"Dönen Sınıf", + "Status":"Statü", + "Parameters":"Parametreler", + "Parameter":"Parametre", + "Value":"Değer", + "Description":"Açıklama", + "Parameter Type":"Parametre Tipi", + "Data Type":"Veri Tipi", + "Response Messages":"Dönüş Mesajı", + "HTTP Status Code":"HTTP Statü Kodu", + "Reason":"Gerekçe", + "Response Model":"Dönüş Modeli", + "Request URL":"İstek URL", + "Response Body":"Dönüş İçeriği", + "Response Code":"Dönüş Kodu", + "Response Headers":"Dönüş Üst Bilgileri", + "Hide Response":"Dönüşü Gizle", + "Headers":"Üst Bilgiler", + "Try it out!":"Dene!", + "Show/Hide":"Göster/Gizle", + "List Operations":"Operasyonları Listele", + "Expand Operations":"Operasyonları Aç", + "Raw":"Ham", + "can't parse JSON. Raw result":"JSON çözümlenemiyor. Ham sonuç", + "Model Schema":"Model Şema", + "Model":"Model", + "apply":"uygula", + "Username":"Kullanıcı Adı", + "Password":"Parola", + "Terms of service":"Servis şartları", + "Created by":"Oluşturan", + "See more at":"Daha fazlası için", + "Contact the developer":"Geliştirici ile İletişime Geçin", + "api version":"api versiyon", + "Response Content Type":"Dönüş İçerik Tipi", + "fetching resource":"kaynak getiriliyor", + "fetching resource list":"kaynak listesi getiriliyor", + "Explore":"Keşfet", + "Show Swagger Petstore Example Apis":"Swagger Petstore Örnek Api'yi Gör", + "Can't read from server. It may not have the appropriate access-control-origin settings.":"Sunucudan okuma yapılamıyor. Sunucu access-control-origin ayarlarınızı kontrol edin.", + "Please specify the protocol for":"Lütfen istenen adres için protokol belirtiniz", + "Can't read swagger JSON from":"Swagger JSON bu kaynaktan okunamıyor", + "Finished Loading Resource Information. Rendering Swagger UI":"Kaynak baglantısı tamamlandı. Swagger UI gösterime hazırlanıyor", + "Unable to read api":"api okunamadı", + "from path":"yoldan", + "server returned":"sunucuya dönüldü" +}); diff --git a/reference/ucp/3.1/api/lang/translator.js b/reference/ucp/3.1/api/lang/translator.js new file mode 100644 index 00000000000..ffb879f9a27 --- /dev/null +++ b/reference/ucp/3.1/api/lang/translator.js @@ -0,0 +1,39 @@ +'use strict'; + +/** + * Translator for documentation pages. + * + * To enable translation you should include one of language-files in your index.html + * after . + * For example - + * + * If you wish to translate some new texts you should do two things: + * 1. Add a new phrase pair ("New Phrase": "New Translation") into your language file (for example lang/ru.js). It will be great if you add it in other language files too. + * 2. Mark that text it templates this way New Phrase or . + * The main thing here is attribute data-sw-translate. Only inner html, title-attribute and value-attribute are going to translate. + * + */ +window.SwaggerTranslator = { + + _words:[], + + translate: function(sel) { + var $this = this; + sel = sel || '[data-sw-translate]'; + + $(sel).each(function() { + $(this).html($this._tryTranslate($(this).html())); + + $(this).val($this._tryTranslate($(this).val())); + $(this).attr('title', $this._tryTranslate($(this).attr('title'))); + }); + }, + + _tryTranslate: function(word) { + return this._words[$.trim(word)] !== undefined ? this._words[$.trim(word)] : word; + }, + + learn: function(wordsMap) { + this._words = wordsMap; + } +}; diff --git a/reference/ucp/3.1/api/lib/backbone-min.js b/reference/ucp/3.1/api/lib/backbone-min.js new file mode 100644 index 00000000000..a3f544be6d9 --- /dev/null +++ b/reference/ucp/3.1/api/lib/backbone-min.js @@ -0,0 +1,15 @@ +// Backbone.js 1.1.2 + +(function(t,e){if(typeof define==="function"&&define.amd){define(["underscore","jquery","exports"],function(i,r,s){t.Backbone=e(t,s,i,r)})}else if(typeof exports!=="undefined"){var i=require("underscore");e(t,exports,i)}else{t.Backbone=e(t,{},t._,t.jQuery||t.Zepto||t.ender||t.$)}})(this,function(t,e,i,r){var s=t.Backbone;var n=[];var a=n.push;var o=n.slice;var h=n.splice;e.VERSION="1.1.2";e.$=r;e.noConflict=function(){t.Backbone=s;return this};e.emulateHTTP=false;e.emulateJSON=false;var u=e.Events={on:function(t,e,i){if(!c(this,"on",t,[e,i])||!e)return this;this._events||(this._events={});var r=this._events[t]||(this._events[t]=[]);r.push({callback:e,context:i,ctx:i||this});return this},once:function(t,e,r){if(!c(this,"once",t,[e,r])||!e)return this;var s=this;var n=i.once(function(){s.off(t,n);e.apply(this,arguments)});n._callback=e;return this.on(t,n,r)},off:function(t,e,r){var s,n,a,o,h,u,l,f;if(!this._events||!c(this,"off",t,[e,r]))return this;if(!t&&!e&&!r){this._events=void 0;return this}o=t?[t]:i.keys(this._events);for(h=0,u=o.length;h").attr(t);this.setElement(r,false)}else{this.setElement(i.result(this,"el"),false)}}});e.sync=function(t,r,s){var n=T[t];i.defaults(s||(s={}),{emulateHTTP:e.emulateHTTP,emulateJSON:e.emulateJSON});var a={type:n,dataType:"json"};if(!s.url){a.url=i.result(r,"url")||M()}if(s.data==null&&r&&(t==="create"||t==="update"||t==="patch")){a.contentType="application/json";a.data=JSON.stringify(s.attrs||r.toJSON(s))}if(s.emulateJSON){a.contentType="application/x-www-form-urlencoded";a.data=a.data?{model:a.data}:{}}if(s.emulateHTTP&&(n==="PUT"||n==="DELETE"||n==="PATCH")){a.type="POST";if(s.emulateJSON)a.data._method=n;var o=s.beforeSend;s.beforeSend=function(t){t.setRequestHeader("X-HTTP-Method-Override",n);if(o)return o.apply(this,arguments)}}if(a.type!=="GET"&&!s.emulateJSON){a.processData=false}if(a.type==="PATCH"&&k){a.xhr=function(){return new ActiveXObject("Microsoft.XMLHTTP")}}var h=s.xhr=e.ajax(i.extend(a,s));r.trigger("request",r,h,s);return h};var k=typeof window!=="undefined"&&!!window.ActiveXObject&&!(window.XMLHttpRequest&&(new XMLHttpRequest).dispatchEvent);var T={create:"POST",update:"PUT",patch:"PATCH","delete":"DELETE",read:"GET"};e.ajax=function(){return e.$.ajax.apply(e.$,arguments)};var $=e.Router=function(t){t||(t={});if(t.routes)this.routes=t.routes;this._bindRoutes();this.initialize.apply(this,arguments)};var S=/\((.*?)\)/g;var H=/(\(\?)?:\w+/g;var A=/\*\w+/g;var I=/[\-{}\[\]+?.,\\\^$|#\s]/g;i.extend($.prototype,u,{initialize:function(){},route:function(t,r,s){if(!i.isRegExp(t))t=this._routeToRegExp(t);if(i.isFunction(r)){s=r;r=""}if(!s)s=this[r];var n=this;e.history.route(t,function(i){var a=n._extractParameters(t,i);n.execute(s,a);n.trigger.apply(n,["route:"+r].concat(a));n.trigger("route",r,a);e.history.trigger("route",n,r,a)});return this},execute:function(t,e){if(t)t.apply(this,e)},navigate:function(t,i){e.history.navigate(t,i);return this},_bindRoutes:function(){if(!this.routes)return;this.routes=i.result(this,"routes");var t,e=i.keys(this.routes);while((t=e.pop())!=null){this.route(t,this.routes[t])}},_routeToRegExp:function(t){t=t.replace(I,"\\$&").replace(S,"(?:$1)?").replace(H,function(t,e){return e?t:"([^/?]+)"}).replace(A,"([^?]*?)");return new RegExp("^"+t+"(?:\\?([\\s\\S]*))?$")},_extractParameters:function(t,e){var r=t.exec(e).slice(1);return i.map(r,function(t,e){if(e===r.length-1)return t||null;return t?decodeURIComponent(t):null})}});var N=e.History=function(){this.handlers=[];i.bindAll(this,"checkUrl");if(typeof window!=="undefined"){this.location=window.location;this.history=window.history}};var R=/^[#\/]|\s+$/g;var O=/^\/+|\/+$/g;var P=/msie [\w.]+/;var C=/\/$/;var j=/#.*$/;N.started=false;i.extend(N.prototype,u,{interval:50,atRoot:function(){return this.location.pathname.replace(/[^\/]$/,"$&/")===this.root},getHash:function(t){var e=(t||this).location.href.match(/#(.*)$/);return e?e[1]:""},getFragment:function(t,e){if(t==null){if(this._hasPushState||!this._wantsHashChange||e){t=decodeURI(this.location.pathname+this.location.search);var i=this.root.replace(C,"");if(!t.indexOf(i))t=t.slice(i.length)}else{t=this.getHash()}}return t.replace(R,"")},start:function(t){if(N.started)throw new Error("Backbone.history has already been started");N.started=true;this.options=i.extend({root:"/"},this.options,t);this.root=this.options.root;this._wantsHashChange=this.options.hashChange!==false;this._wantsPushState=!!this.options.pushState;this._hasPushState=!!(this.options.pushState&&this.history&&this.history.pushState);var r=this.getFragment();var s=document.documentMode;var n=P.exec(navigator.userAgent.toLowerCase())&&(!s||s<=7);this.root=("/"+this.root+"/").replace(O,"/");if(n&&this._wantsHashChange){var a=e.$('