From 6c796e15a5a44e6213b78cc8950af63b9be22641 Mon Sep 17 00:00:00 2001 From: Manuel Vogel Date: Fri, 21 May 2021 14:30:56 +0200 Subject: [PATCH] feat/doc generation (#193) * chore: add tfplugindocs tool * feat: add tfplugin doc dependency and make target * chore: apply documentation generation * docs(contributing): update for documentation generation * fix: adapt website-lint target to new do folder * docs(network): update ds descriptions * docs: add template for index.md * docs: add network resource generation * chore(ci): updates paths for website checks * docs: add plugin data source generation * docs: add import cmd for network resource * docs: add plugin resource generation * feat: outlines remaining resources with example and import cmd * feat: add descriptions to docs * chore: add DevSkim ignores and fix capitalized errors * docs: complete ds registry image * docs: add container resource generation * docs: add lables description to missing resources * docs: remove computed:true from network data so the list is rendered in the description * Revert "docs: remove computed:true from network data" This reverts commit dce9b7a5a23dd8b4156bf6e33947225b5f719df2. * docs: add docker image descriptions to generate the docs * docs: add docker registry image descriptions to generate the docs * docs: add docker service descriptions to generate the docs * docs: add docker volume descriptions to generate the docs * docs(index): clarifies description so more docker resources are mentioned * docs(network): fixes required and read-only attributes so the ds can only be read by-name * docs(plugin): clarifies the ds docs attributes * docs: fix typo registry image ds * docs(config): clarifies attributes and enhances examples Provide a long example and import command * fix(config): make data non-sensitive Because only secrets data is * docs(containter): clarifies attributes and enhances examples with import * docs(config): fix typo * docs(image): clarifies attributes and remove import * docs(network): clarifies attributes and adapts import * docs(plugin): clarifies attributes and import * docs(registry_image): clarifies attributes and removes import * chore(secret): remove typo * docs(service): clarifies attributes and import * docs(volume): clarifies attributes and import * fix: correct md linter rules after doc gen * docs(volume): regenerated * docs: add config custom template * docs: add templates for all resources * docs(config): templates all sections and examples for better redability and structure * docs(config): fix md linter * docs(container): templates all sections and examples * docs(image): templates all sections and examples * docs(image): fix import resource by renaming * docs(network): templates all sections and examples * docs(service): templates all sections and examples * docs(volume): templates all sections and examples * fix(lint): replace website with doc directory * fix(ci): link check file extension check * fix: markdown links * chore: remove old website folder * chore: fix website-lint terrafmr dir and pattern * fix: lint fix target website folder * fix: website links * docs(provider): update examples with templates on auth and certs * docs(provider): add tf-plugin-docs line * docs(contributing): split doc generation section * docs: final brush up for readability and structure * chore(ci): add website-generation job to see if files changed and it should run locally again * chore(ci): remove explicit docker setup from website lint because it's installed by default --- .github/workflows/website-link.yaml | 8 +- .github/workflows/website-lint.yaml | 46 +- .gitignore | 3 + .markdownlinkcheck.json | 8 - .markdownlint.yml | 10 +- CONTRIBUTING.md | 28 +- GNUmakefile | 18 +- docs/data-sources/network.md | 47 ++ docs/data-sources/plugin.md | 43 ++ docs/data-sources/registry_image.md | 41 + docs/index.md | 201 +++++ docs/resources/config.md | 138 ++++ docs/resources/container.md | 331 ++++++++ docs/resources/image.md | 102 +++ docs/resources/network.md | 98 +++ docs/resources/plugin.md | 72 ++ docs/resources/registry_image.md | 108 +++ docs/resources/secret.md | 89 +++ docs/resources/service.md | 722 ++++++++++++++++++ docs/resources/volume.md | 77 ++ examples/README.md | 9 + .../docker_network/data-source.tf | 3 + .../data-sources/docker_plugin/data-source.tf | 9 + .../docker_registry_image/data-source.tf | 8 + examples/provider/provider-cert.tf | 11 + examples/provider/provider-credentials.tf | 27 + examples/provider/provider-docker-config.json | 9 + examples/provider/provider-ssh.tf | 23 + examples/provider/provider-tf12.tf | 15 + examples/provider/provider-tf13.tf | 23 + .../docker_config/foo.config.json.tpl | 5 + .../resources/docker_config/import-create.sh | 4 + .../docker_config/import-resource.sh | 2 + .../docker_config/import-resource.tf | 4 + examples/resources/docker_config/import.sh | 2 + .../docker_config/resource-advanced.tf | 10 + .../resources/docker_config/resource-basic.tf | 4 + .../docker_config/resource-no-downtime.tf | 26 + .../docker_container/import-create.sh | 4 + .../docker_container/import-resource.sh | 2 + .../docker_container/import-resource.tf | 9 + examples/resources/docker_container/import.sh | 2 + .../resources/docker_container/resource.tf | 10 + .../resources/docker_image/resource-build.tf | 13 + .../docker_image/resource-dynamic.tf | 8 + examples/resources/docker_image/resource.tf | 3 + .../resources/docker_network/import-create.sh | 4 + .../docker_network/import-resource.sh | 2 + .../docker_network/import-resource.tf | 3 + examples/resources/docker_network/import.sh | 2 + examples/resources/docker_network/resource.tf | 3 + examples/resources/docker_plugin/import.sh | 2 + examples/resources/docker_plugin/resource.tf | 16 + .../docker_registry_image/resource.tf | 7 + .../docker_secret/foo.secret.json.tpl | 3 + examples/resources/docker_secret/import.sh | 3 + .../resources/docker_secret/resource-basic.tf | 4 + .../docker_secret/resource-no-downtime.tf | 26 + .../resources/docker_service/import-create.sh | 4 + .../docker_service/import-resource.sh | 2 + .../docker_service/import-resource.tf | 17 + examples/resources/docker_service/import.sh | 2 + .../docker_service/resource-advanced.tf | 210 +++++ .../docker_service/resource-basic-create.sh | 2 + .../docker_service/resource-basic.tf | 15 + .../resources/docker_volume/import-create.sh | 4 + .../docker_volume/import-resource.sh | 2 + .../docker_volume/import-resource.tf | 3 + examples/resources/docker_volume/import.sh | 2 + examples/resources/docker_volume/resource.tf | 3 + examples/ssh-protocol/main.tf | 4 +- go.mod | 1 + go.sum | 520 +++++++++++++ .../provider/data_source_docker_network.go | 62 +- .../provider/data_source_docker_plugin.go | 36 +- .../data_source_docker_registry_image.go | 13 +- internal/provider/provider.go | 4 +- internal/provider/resource_docker_config.go | 3 +- .../provider/resource_docker_container.go | 714 +++++++++-------- .../resource_docker_container_funcs.go | 2 +- .../resource_docker_container_migrators.go | 15 +- .../resource_docker_container_structures.go | 4 +- .../resource_docker_container_test.go | 2 + internal/provider/resource_docker_image.go | 44 +- .../provider/resource_docker_image_funcs.go | 15 +- internal/provider/resource_docker_network.go | 124 +-- internal/provider/resource_docker_plugin.go | 43 +- .../resource_docker_registry_image.go | 326 ++++---- .../resource_docker_registry_image_funcs.go | 9 +- ...source_docker_registry_image_funcs_test.go | 1 + internal/provider/resource_docker_secret.go | 20 +- internal/provider/resource_docker_service.go | 170 +++-- .../provider/resource_docker_service_funcs.go | 1 + internal/provider/resource_docker_volume.go | 41 +- main.go | 10 + templates/index.md.tmpl | 63 ++ templates/resources/config.md.tmpl | 63 ++ templates/resources/container.md.tmpl | 37 + templates/resources/image.md.tmpl | 36 + templates/resources/network.md.tmpl | 37 + templates/resources/plugin.md.tmpl | 23 + templates/resources/registry_image.md.tmpl | 17 + templates/resources/secret.md.tmpl | 34 + templates/resources/service.md.tmpl | 57 ++ templates/resources/volume.md.tmpl | 37 + tools/go.mod | 1 + tools/go.sum | 39 +- tools/main.go | 1 + website/docker.erb | 67 -- website/docs/d/docker_network.html.markdown | 42 - website/docs/d/plugin.html.markdown | 37 - website/docs/d/registry_image.html.markdown | 38 - website/docs/index.html.markdown | 171 ----- website/docs/r/config.html.markdown | 108 --- website/docs/r/container.html.markdown | 310 -------- website/docs/r/image.html.markdown | 100 --- website/docs/r/network.html.markdown | 88 --- website/docs/r/plugin.html.markdown | 102 --- website/docs/r/registry_image.html.markdown | 96 --- website/docs/r/secret.html.markdown | 81 -- website/docs/r/service.html.markdown | 590 -------------- website/docs/r/volume.html.markdown | 49 -- 122 files changed, 4639 insertions(+), 2645 deletions(-) create mode 100644 docs/data-sources/network.md create mode 100644 docs/data-sources/plugin.md create mode 100644 docs/data-sources/registry_image.md create mode 100644 docs/index.md create mode 100644 docs/resources/config.md create mode 100644 docs/resources/container.md create mode 100644 docs/resources/image.md create mode 100644 docs/resources/network.md create mode 100644 docs/resources/plugin.md create mode 100644 docs/resources/registry_image.md create mode 100644 docs/resources/secret.md create mode 100644 docs/resources/service.md create mode 100644 docs/resources/volume.md create mode 100644 examples/README.md create mode 100644 examples/data-sources/docker_network/data-source.tf create mode 100644 examples/data-sources/docker_plugin/data-source.tf create mode 100644 examples/data-sources/docker_registry_image/data-source.tf create mode 100644 examples/provider/provider-cert.tf create mode 100644 examples/provider/provider-credentials.tf create mode 100644 examples/provider/provider-docker-config.json create mode 100644 examples/provider/provider-ssh.tf create mode 100644 examples/provider/provider-tf12.tf create mode 100644 examples/provider/provider-tf13.tf create mode 100644 examples/resources/docker_config/foo.config.json.tpl create mode 100644 examples/resources/docker_config/import-create.sh create mode 100644 examples/resources/docker_config/import-resource.sh create mode 100644 examples/resources/docker_config/import-resource.tf create mode 100644 examples/resources/docker_config/import.sh create mode 100644 examples/resources/docker_config/resource-advanced.tf create mode 100644 examples/resources/docker_config/resource-basic.tf create mode 100644 examples/resources/docker_config/resource-no-downtime.tf create mode 100644 examples/resources/docker_container/import-create.sh create mode 100644 examples/resources/docker_container/import-resource.sh create mode 100644 examples/resources/docker_container/import-resource.tf create mode 100644 examples/resources/docker_container/import.sh create mode 100644 examples/resources/docker_container/resource.tf create mode 100644 examples/resources/docker_image/resource-build.tf create mode 100644 examples/resources/docker_image/resource-dynamic.tf create mode 100644 examples/resources/docker_image/resource.tf create mode 100644 examples/resources/docker_network/import-create.sh create mode 100644 examples/resources/docker_network/import-resource.sh create mode 100644 examples/resources/docker_network/import-resource.tf create mode 100644 examples/resources/docker_network/import.sh create mode 100644 examples/resources/docker_network/resource.tf create mode 100644 examples/resources/docker_plugin/import.sh create mode 100644 examples/resources/docker_plugin/resource.tf create mode 100644 examples/resources/docker_registry_image/resource.tf create mode 100644 examples/resources/docker_secret/foo.secret.json.tpl create mode 100644 examples/resources/docker_secret/import.sh create mode 100644 examples/resources/docker_secret/resource-basic.tf create mode 100644 examples/resources/docker_secret/resource-no-downtime.tf create mode 100644 examples/resources/docker_service/import-create.sh create mode 100644 examples/resources/docker_service/import-resource.sh create mode 100644 examples/resources/docker_service/import-resource.tf create mode 100644 examples/resources/docker_service/import.sh create mode 100644 examples/resources/docker_service/resource-advanced.tf create mode 100644 examples/resources/docker_service/resource-basic-create.sh create mode 100644 examples/resources/docker_service/resource-basic.tf create mode 100644 examples/resources/docker_volume/import-create.sh create mode 100644 examples/resources/docker_volume/import-resource.sh create mode 100644 examples/resources/docker_volume/import-resource.tf create mode 100644 examples/resources/docker_volume/import.sh create mode 100644 examples/resources/docker_volume/resource.tf create mode 100644 templates/index.md.tmpl create mode 100644 templates/resources/config.md.tmpl create mode 100644 templates/resources/container.md.tmpl create mode 100644 templates/resources/image.md.tmpl create mode 100644 templates/resources/network.md.tmpl create mode 100644 templates/resources/plugin.md.tmpl create mode 100644 templates/resources/registry_image.md.tmpl create mode 100644 templates/resources/secret.md.tmpl create mode 100644 templates/resources/service.md.tmpl create mode 100644 templates/resources/volume.md.tmpl delete mode 100644 website/docker.erb delete mode 100644 website/docs/d/docker_network.html.markdown delete mode 100644 website/docs/d/plugin.html.markdown delete mode 100644 website/docs/d/registry_image.html.markdown delete mode 100644 website/docs/index.html.markdown delete mode 100644 website/docs/r/config.html.markdown delete mode 100644 website/docs/r/container.html.markdown delete mode 100644 website/docs/r/image.html.markdown delete mode 100644 website/docs/r/network.html.markdown delete mode 100644 website/docs/r/plugin.html.markdown delete mode 100644 website/docs/r/registry_image.html.markdown delete mode 100644 website/docs/r/secret.html.markdown delete mode 100644 website/docs/r/service.html.markdown delete mode 100644 website/docs/r/volume.html.markdown diff --git a/.github/workflows/website-link.yaml b/.github/workflows/website-link.yaml index 6165b7644..37840f055 100644 --- a/.github/workflows/website-link.yaml +++ b/.github/workflows/website-link.yaml @@ -10,7 +10,7 @@ on: pull_request: paths: - .github/workflows/website-link.yaml - - website/docs/** + - docs/** - .markdownlint.yml jobs: @@ -19,10 +19,10 @@ jobs: steps: - uses: actions/checkout@v2 - uses: gaurav-nelson/github-action-markdown-link-check@v1 - name: markdown-link-check website/docs/**/*.markdown + name: markdown-link-check docs/**/*.md with: use-quiet-mode: 'yes' use-verbose-mode: 'yes' config-file: '.markdownlinkcheck.json' - folder-path: 'website/docs' - file-extension: '.markdown' \ No newline at end of file + folder-path: 'docs' + file-extension: '.md' \ No newline at end of file diff --git a/.github/workflows/website-lint.yaml b/.github/workflows/website-lint.yaml index bdc30f062..918044dec 100644 --- a/.github/workflows/website-lint.yaml +++ b/.github/workflows/website-lint.yaml @@ -8,7 +8,7 @@ on: types: ['opened', 'synchronize'] paths: - .github/workflows/website-lint.yaml - - website/docs/** + - docs/** env: GO_VERSION: "1.16" @@ -16,6 +16,32 @@ env: DOCKER_CE_VERSION: "5:20.10.5~3-0~ubuntu-focal" jobs: + website-generation: + runs-on: ubuntu-20.04 + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-go@v2 + with: + go-version: '1.16' + - name: Setup tools + run: make setup + - name: Generate the website + run: make website-generation + - name: Verify Changed files + uses: tj-actions/verify-changed-files@v6.1 + id: verify-changed-files + with: + files: | + docs/**/*.md + - name: Display changed files + if: steps.verify-changed-files.outputs.files_changed == 'true' + run: | + echo "Changed files: ${{ steps.verify_changed_files.outputs.changed_files }}" + - name: Fail if files have changed + if: steps.verify-changed-files.outputs.files_changed == 'true' + run: | + echo "Generated website was not up-to-date. Please run 'make website-generation' locally, commit, and push again"; + exit 1; website-lint-spellcheck-tffmt: runs-on: ubuntu-20.04 steps: @@ -23,25 +49,17 @@ jobs: - uses: actions/setup-go@v2 with: go-version: '1.16' - - run: cat /etc/issue - - run: bash scripts/gogetcookie.sh - # locally: docker run -it ubuntu-20.04 bash (https://ubuntu.pkgs.org/20.04/docker-ce-stable-amd64/) - - run: sudo apt-get update - - run: sudo apt-get -y install apt-transport-https ca-certificates curl gnupg-agent software-properties-common - - run: curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - - - run: sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" - - run: sudo apt-get update - # list available docker versions: apt-cache policy docker-ce - - run: sudo apt-get -y install docker-ce=${DOCKER_CE_VERSION} - run: docker version - - run: make setup - - run: make website-lint + - name: Setup tools + run: make setup + - name: Lint website + run: make website-lint markdown-lint: runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v2 - uses: avto-dev/markdown-lint@v1 with: - args: 'website/docs' + args: 'docs' config: '.markdownlint.yml' diff --git a/.gitignore b/.gitignore index f51104ff7..297a05c64 100644 --- a/.gitignore +++ b/.gitignore @@ -40,3 +40,6 @@ dist # testing testing testing-mirror/registry.terraform.io/kreuzwerker/docker + +# lint error outputs +markdown-link-check-*.txt diff --git a/.markdownlinkcheck.json b/.markdownlinkcheck.json index 2ed1b8fdb..426550a79 100644 --- a/.markdownlinkcheck.json +++ b/.markdownlinkcheck.json @@ -2,13 +2,5 @@ "ignorePatterns": [ ], "replacementPatterns": [ - { - "pattern": "^/docs/providers/docker/r/(.*).html", - "replacement": "/github/workspace/website/docs/r/$1.html.markdown" - }, - { - "pattern": "^/docs/providers/docker/d/(.*).html", - "replacement": "/github/workspace/website/docs/d/$1.html.markdown" - } ] } diff --git a/.markdownlint.yml b/.markdownlint.yml index 96ab10c81..73cc9ac86 100644 --- a/.markdownlint.yml +++ b/.markdownlint.yml @@ -6,17 +6,11 @@ default: true # Disabled Rules # https://github.com/DavidAnson/markdownlint/blob/master/doc/Rules.md -MD001: false -MD004: false -MD007: false -MD009: false -MD010: false MD012: false MD013: false -MD014: false MD022: false -MD031: false -MD032: false +MD023: false +MD024: false MD033: false MD034: false MD047: false diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index ec78e511b..c31963d40 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -68,16 +68,13 @@ TF_LOG=INFO TF_ACC=1 go test -v ./internal/provider -run ^TestAccDockerImage_dat make testacc_cleanup ``` -Furthermore, we recommened running the linters for the code and the documentation: +Furthermore, run the linters for the code: ```sh # install all the dependencies make setup +# lint the go code make golangci-lint -make website-link-check -make website-lint -# you can also use this command to fix most errors automatically -make website-lint-fix ``` In case you need to run the GitHub actions setup locally in a docker container and run the tests there, @@ -89,6 +86,27 @@ make testacc_setup TF_LOG=DEBUG TF_ACC=1 go test -v ./internal/provider -run ^TestAccDockerContainer_nostart$ ``` +### Update the documentation + +Furthermore, run the generation and linters for the documentation: + +```sh +# install all the dependencies +make setup +# generate or update the documentation +make website-generation +# lint the documentation +make website-link-check +make website-lint +# you can also use this command to fix most errors automatically +make website-lint-fix +``` + +The documentation is generated based on the tool [terraform-plugin-docs](https://github.com/hashicorp/terraform-plugin-docs): + +- The content of the `Description` attribute is parsed of each resource +- All the templates for the resources are located in `templates`. + ### Test against current terraform IaC descriptions In order to extend the provider and test it with `terraform`, build the provider as mentioned above with: diff --git a/GNUmakefile b/GNUmakefile index e273b21ee..7ddb7f601 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -12,6 +12,7 @@ setup: cd tools && GO111MODULE=on go install github.com/client9/misspell/cmd/misspell cd tools && GO111MODULE=on go install github.com/katbyte/terrafmt cd tools && GO111MODULE=on go install github.com/golangci/golangci-lint/cmd/golangci-lint + cd tools && GO111MODULE=on go install github.com/hashicorp/terraform-plugin-docs/cmd/tfplugindocs rm -f .git/hooks/commit-msg \ && curl --fail -o .git/hooks/commit-msg https://raw.githubusercontent.com/hazcod/semantic-commit-hook/master/commit-msg \ && chmod 500 .git/hooks/commit-msg @@ -63,30 +64,33 @@ test-compile: fi go test -c $(TEST) $(TESTARGS) +website-generation: + go generate + website-link-check: @scripts/markdown-link-check.sh website-lint: @echo "==> Checking website against linters..." - @misspell -error -source=text website/ || (echo; \ + @misspell -error -source=text docs/ || (echo; \ echo "Unexpected mispelling found in website files."; \ echo "To automatically fix the misspelling, run 'make website-lint-fix' and commit the changes."; \ exit 1) - @docker run -v $(PWD):/markdown 06kellyjac/markdownlint-cli website/docs/ || (echo; \ + @docker run -v $(PWD):/markdown 06kellyjac/markdownlint-cli docs/ || (echo; \ echo "Unexpected issues found in website Markdown files."; \ echo "To apply any automatic fixes, run 'make website-lint-fix' and commit the changes."; \ exit 1) - @terrafmt diff ./website --check --pattern '*.markdown' --quiet || (echo; \ + @terrafmt diff ./docs --check --pattern '*.md' --quiet || (echo; \ echo "Unexpected differences in website HCL formatting."; \ - echo "To see the full differences, run: terrafmt diff ./website --pattern '*.markdown'"; \ + echo "To see the full differences, run: terrafmt diff ./docs --pattern '*.md'"; \ echo "To automatically fix the formatting, run 'make website-lint-fix' and commit the changes."; \ exit 1) website-lint-fix: @echo "==> Applying automatic website linter fixes..." - @misspell -w -source=text website/ - @docker run -v $(PWD):/markdown 06kellyjac/markdownlint-cli --fix website/docs/ - @terrafmt fmt ./website --pattern '*.markdown' + @misspell -w -source=text docs/ + @docker run -v $(PWD):/markdown 06kellyjac/markdownlint-cli --fix docs/ + @terrafmt fmt ./docs --pattern '*.md' .PHONY: build test testacc vet fmt fmtcheck errcheck test-compile website-link-check website-lint website-lint-fix diff --git a/docs/data-sources/network.md b/docs/data-sources/network.md new file mode 100644 index 000000000..85c1e51fd --- /dev/null +++ b/docs/data-sources/network.md @@ -0,0 +1,47 @@ +--- +# generated by https://github.com/hashicorp/terraform-plugin-docs +page_title: "docker_network Data Source - terraform-provider-docker" +subcategory: "" +description: |- + docker_network provides details about a specific Docker Network. +--- + +# docker_network (Data Source) + +`docker_network` provides details about a specific Docker Network. + +## Example Usage + +```terraform +data "docker_network" "main" { + name = "main" +} +``` + + +## Schema + +### Required + +- **name** (String) The name of the Docker network. + +### Read-Only + +- **driver** (String) The driver of the Docker network. Possible values are `bridge`, `host`, `overlay`, `macvlan`. See [network docs](https://docs.docker.com/network/#network-drivers) for more details. +- **id** (String) The ID of this resource. +- **internal** (Boolean) If `true`, the network is internal. +- **ipam_config** (Set of Object) The IPAM configuration options (see [below for nested schema](#nestedatt--ipam_config)) +- **options** (Map of String) Only available with bridge networks. See [bridge options docs](https://docs.docker.com/engine/reference/commandline/network_create/#bridge-driver-options) for more details. +- **scope** (String) Scope of the network. One of `swarm`, `global`, or `local`. + + +### Nested Schema for `ipam_config` + +Read-Only: + +- **aux_address** (Map of String) +- **gateway** (String) +- **ip_range** (String) +- **subnet** (String) + + diff --git a/docs/data-sources/plugin.md b/docs/data-sources/plugin.md new file mode 100644 index 000000000..a09bd1d1c --- /dev/null +++ b/docs/data-sources/plugin.md @@ -0,0 +1,43 @@ +--- +# generated by https://github.com/hashicorp/terraform-plugin-docs +page_title: "docker_plugin Data Source - terraform-provider-docker" +subcategory: "" +description: |- + Reads the local Docker plugin. The plugin must be installed locally. +--- + +# docker_plugin (Data Source) + +Reads the local Docker plugin. The plugin must be installed locally. + +## Example Usage + +```terraform +### With alias +data "docker_plugin" "by_alias" { + alias = "sample-volume-plugin:latest" +} + +### With ID +data "docker_plugin" "by_id" { + id = "e9a9db917b3bfd6706b5d3a66d4bceb9f" +} +``` + + +## Schema + +### Optional + +- **alias** (String) The alias of the Docker plugin. If the tag is omitted, `:latest` is complemented to the attribute value. +- **id** (String) The ID of the plugin, which has precedence over the `alias` of both are given + +### Read-Only + +- **enabled** (Boolean) If `true` the plugin is enabled +- **env** (Set of String) The environment variables in the form of `KEY=VALUE`, e.g. `DEBUG=0` +- **grant_all_permissions** (Boolean) If true, grant all permissions necessary to run the plugin +- **name** (String) The plugin name. If the tag is omitted, `:latest` is complemented to the attribute value. +- **plugin_reference** (String) The Docker Plugin Reference + + diff --git a/docs/data-sources/registry_image.md b/docs/data-sources/registry_image.md new file mode 100644 index 000000000..977854888 --- /dev/null +++ b/docs/data-sources/registry_image.md @@ -0,0 +1,41 @@ +--- +# generated by https://github.com/hashicorp/terraform-plugin-docs +page_title: "docker_registry_image Data Source - terraform-provider-docker" +subcategory: "" +description: |- + Reads the image metadata from a Docker Registry. Used in conjunction with the docker_image ../resources/image.md resource to keep an image up to date on the latest available version of the tag. +--- + +# docker_registry_image (Data Source) + +Reads the image metadata from a Docker Registry. Used in conjunction with the [docker_image](../resources/image.md) resource to keep an image up to date on the latest available version of the tag. + +## Example Usage + +```terraform +data "docker_registry_image" "ubuntu" { + name = "ubuntu:precise" +} + +resource "docker_image" "ubuntu" { + name = data.docker_registry_image.ubuntu.name + pull_triggers = [data.docker_registry_image.ubuntu.sha256_digest] +} +``` + + +## Schema + +### Required + +- **name** (String) The name of the Docker image, including any tags. e.g. `alpine:latest` + +### Optional + +- **id** (String) The ID of this resource. + +### Read-Only + +- **sha256_digest** (String) The content digest of the image, as stored in the registry. + + diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 000000000..16546fec8 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,201 @@ +--- +# generated by https://github.com/hashicorp/terraform-plugin-docs +layout: "" +page_title: "Provider: Docker" +description: |- + The Docker provider is used to interact with Docker resources, like containers, images, service etc. +--- + +# Docker Provider + +The Docker provider is used to interact with Docker containers and images. +It uses the Docker API to manage the lifecycle of Docker containers. Because +the Docker provider uses the Docker API, it is immediately compatible not +only with single server Docker but Swarm and any additional Docker-compatible +API hosts. + +Use the navigation to the left to read about the available resources. + +## Example Usage + +Terraform 0.13 and later: + +```terraform +terraform { + required_providers { + docker = { + source = "kreuzwerker/docker" + version = "2.11.0" + } + } +} + +provider "docker" { + host = "unix:///var/run/docker.sock" +} + +# Pulls the image +resource "docker_image" "ubuntu" { + name = "ubuntu:latest" +} + +# Create a container +resource "docker_container" "foo" { + image = docker_image.ubuntu.latest + name = "foo" +} +``` + +Terraform 0.12 and earlier: + +```terraform +provider "docker" { + version = "~> 2.11.0" + host = "unix:///var/run/docker.sock" +} + +# Pulls the image +resource "docker_image" "ubuntu" { + name = "ubuntu:latest" +} + +# Create a container +resource "docker_container" "foo" { + image = docker_image.ubuntu.latest + name = "foo" +} +``` + +-> **Note** +You can also use the `ssh` protocol to connect to the docker host on a remote machine. +The configuration would look as follows: + +```terraform +terraform { + required_providers { + docker = { + source = "kreuzwerker/docker" + version = "2.11.0" + } + } +} + +provider "docker" { + host = "unix:///var/run/docker.sock" +} + +# Pulls the image +resource "docker_image" "ubuntu" { + name = "ubuntu:latest" +} + +# Create a container +resource "docker_container" "foo" { + image = docker_image.ubuntu.latest + name = "foo" +} +``` + +## Registry credentials + +Registry credentials can be provided on a per-registry basis with the `registry_auth` +field, passing either a config file or the username/password directly. + +-> **Note** +The location of the config file is on the machine terraform runs on, nevertheless if the specified docker host is on another machine. + +```terraform +provider "docker" { + host = "tcp://localhost:2376" + + registry_auth { + address = "registry.hub.docker.com" + config_file = pathexpand("~/.docker/config.json") + } + + registry_auth { + address = "registry.my.company.com" + config_file_content = var.plain_content_of_config_file + } + + registry_auth { + address = "quay.io:8181" + username = "someuser" + password = "somepass" + } +} + +data "docker_registry_image" "quay" { + name = "myorg/privateimage" +} + +data "docker_registry_image" "quay" { + name = "quay.io:8181/myorg/privateimage" +} +``` + +-> **Note** +When passing in a config file either the corresponding `auth` string of the repository is read or the os specific +[credential helpers](https://github.com/docker/docker-credential-helpers#available-programs) are +used to retrieve the authentication credentials. + +You can still use the environment variables `DOCKER_REGISTRY_USER` and `DOCKER_REGISTRY_PASS`. + +An example content of the file `~/.docker/config.json` on macOS may look like follows: + +```json +{ + "auths": { + "repo.mycompany:8181": { + "auth": "dXNlcjpwYXNz=" + }, + "otherrepo.other-company:8181": {} + }, + "credsStore": "osxkeychain" +} +``` + +## Certificate information + +Specify certificate information either with a directory or +directly with the content of the files for connecting to the Docker host via TLS. + +```terraform +provider "docker" { + host = "tcp://your-host-ip:2376/" + + # -> specify either + cert_path = pathexpand("~/.docker") + + # -> or the following + ca_material = file(pathexpand("~/.docker/ca.pem")) # this can be omitted + cert_material = file(pathexpand("~/.docker/cert.pem")) + key_material = file(pathexpand("~/.docker/key.pem")) +} +``` + + +## Schema + +### Optional + +- **ca_material** (String) PEM-encoded content of Docker host CA certificate +- **cert_material** (String) PEM-encoded content of Docker client certificate +- **cert_path** (String) Path to directory with Docker TLS config +- **host** (String) The Docker daemon address +- **key_material** (String) PEM-encoded content of Docker client private key +- **registry_auth** (Block List, Max: 1) (see [below for nested schema](#nestedblock--registry_auth)) + + +### Nested Schema for `registry_auth` + +Required: + +- **address** (String) Address of the registry + +Optional: + +- **config_file** (String) Path to docker json file for registry auth +- **config_file_content** (String) Plain content of the docker json file for registry auth +- **password** (String, Sensitive) Password for the registry +- **username** (String) Username for the registry \ No newline at end of file diff --git a/docs/resources/config.md b/docs/resources/config.md new file mode 100644 index 000000000..ce3dc9264 --- /dev/null +++ b/docs/resources/config.md @@ -0,0 +1,138 @@ +--- +# generated by https://github.com/hashicorp/terraform-plugin-docs +page_title: "docker_config Resource - terraform-provider-docker" +subcategory: "" +description: |- + Manages the configs of a Docker service in a swarm. +--- + +# docker_config (Resource) + +Manages the configs of a Docker service in a swarm. + +## Example Usage + +### Basic + +```terraform +resource "docker_config" "foo_config" { + name = "foo_config" + data = base64encode("{\"a\": \"b\"}") +} +``` + +### Advanced +#### Dynamically set config with a template +In this example you can use the `${var.foo_port}` variable to dynamically +set the `${port}` variable in the `foo.configs.json.tpl` template and create +the data of the `foo_config` with the help of the `base64encode` interpolation +function. + +The file `foo.config.json.tpl` has the following content: + +```gojson +{ + "server": { + "public_port": ${port} + } +} +``` + +and the resource uses it as follows: + +```terraform +resource "docker_config" "foo_config" { + name = "foo_config" + data = base64encode( + templatefile("${path.cwd}/foo.config.json.tpl", + { + port = 8080 + } + ) + ) +} +``` + +#### Update config with no downtime +To update a `config`, Terraform will destroy the existing resource and create a replacement. +To effectively use a `docker_config` resource with a `docker_service` resource, it's recommended + to specify `create_before_destroy` in a `lifecycle` block. Provide a unique `name` attribute, +for example with one of the interpolation functions `uuid` or `timestamp` as shown +in the example below. The reason is this [issue](https://github.com/moby/moby/issues/35803). + +```terraform +resource "docker_config" "service_config" { + name = "${var.service_name}-config-${replace(timestamp(), ":", ".")}" + data = base64encode( + templatefile("${path.cwd}/foo.config.json.tpl", + { + port = 8080 + } + ) + ) + + lifecycle { + ignore_changes = ["name"] + create_before_destroy = true + } +} + +resource "docker_service" "service" { + # ... other attributes omitted for brevity + configs = [ + { + config_id = docker_config.service_config.id + config_name = docker_config.service_config.name + file_name = "/root/configs/configs.json" + }, + ] +} +``` + + +## Schema + +### Required + +- **data** (String) Base64-url-safe-encoded config data +- **name** (String) User-defined name of the config + +### Optional + +- **id** (String) The ID of this resource. + +## Import + +Import is supported using the following syntax by providing the `id`: + +```shell +#!/bin/bash +terraform import docker_config.foo id +``` + +### Example + +Assuming you created a `config` as follows + +```shell +#!/bin/bash +printf '{"a":"b"}' | docker config create foo - +# prints the id +08c26c477474478d971139f750984775a7f019dbe8a2e7f09d66a187c009e66d +``` + +you provide the definition for the resource as follows + +```terraform +resource "docker_config" "foo" { + name = "foo" + data = base64encode("{\"a\": \"b\"}") +} +``` + +then the import command is as follows + +```shell +#!/bin/bash +terraform import docker_config.foo 08c26c477474478d971139f750984775a7f019dbe8a2e7f09d66a187c009e66d +``` \ No newline at end of file diff --git a/docs/resources/container.md b/docs/resources/container.md new file mode 100644 index 000000000..fa853ea19 --- /dev/null +++ b/docs/resources/container.md @@ -0,0 +1,331 @@ +--- +# generated by https://github.com/hashicorp/terraform-plugin-docs +page_title: "docker_container Resource - terraform-provider-docker" +subcategory: "" +description: |- + Manages the lifecycle of a Docker container. +--- + +# docker_container (Resource) + +Manages the lifecycle of a Docker container. + +## Example Usage + +```terraform +# Start a container +resource "docker_container" "ubuntu" { + name = "foo" + image = docker_image.ubuntu.latest +} + +# Find the latest Ubuntu precise image. +resource "docker_image" "ubuntu" { + name = "ubuntu:precise" +} +``` + + +## Schema + +### Required + +- **image** (String) The ID of the image to back this container. The easiest way to get this value is to use the `docker_image` resource as is shown in the example. +- **name** (String) The name of the container. + +### Optional + +- **attach** (Boolean) If `true` attach to the container after its creation and waits the end of its execution. Defaults to `false`. +- **capabilities** (Block Set, Max: 1) Add or drop certrain linux capabilities. (see [below for nested schema](#nestedblock--capabilities)) +- **command** (List of String) The command to use to start the container. For example, to run `/usr/bin/myprogram -f baz.conf` set the command to be `["/usr/bin/myprogram","-","baz.con"]`. +- **cpu_set** (String) A comma-separated list or hyphen-separated range of CPUs a container can use, e.g. `0-1`. +- **cpu_shares** (Number) CPU shares (relative weight) for the container. +- **destroy_grace_seconds** (Number) If defined will attempt to stop the container before destroying. Container will be destroyed after `n` seconds or on successful stop. +- **devices** (Block Set) Bind devices to the container. (see [below for nested schema](#nestedblock--devices)) +- **dns** (Set of String) DNS servers to use. +- **dns_opts** (Set of String) DNS options used by the DNS provider(s), see `resolv.conf` documentation for valid list of options. +- **dns_search** (Set of String) DNS search domains that are used when bare unqualified hostnames are used inside of the container. +- **domainname** (String) Domain name of the container. +- **entrypoint** (List of String) The command to use as the Entrypoint for the container. The Entrypoint allows you to configure a container to run as an executable. For example, to run `/usr/bin/myprogram` when starting a container, set the entrypoint to be `"/usr/bin/myprogra"]`. +- **env** (Set of String) Environment variables to set in the form of `KEY=VALUE`, e.g. `DEBUG=0` +- **group_add** (Set of String) Additional groups for the container user +- **healthcheck** (Block List, Max: 1) A test to perform to check that the container is healthy (see [below for nested schema](#nestedblock--healthcheck)) +- **host** (Block Set) Additional hosts to add to the container. (see [below for nested schema](#nestedblock--host)) +- **hostname** (String) Hostname of the container. +- **id** (String) The ID of this resource. +- **init** (Boolean) Configured whether an init process should be injected for this container. If unset this will default to the `dockerd` defaults. +- **ipc_mode** (String) IPC sharing mode for the container. Possible values are: `none`, `private`, `shareable`, `container:` or `host`. +- **labels** (Block Set) User-defined key/value metadata (see [below for nested schema](#nestedblock--labels)) +- **links** (Set of String, Deprecated) Set of links for link based connectivity between containers that are running on the same host. +- **log_driver** (String) The logging driver to use for the container. Defaults to `json-file`. +- **log_opts** (Map of String) Key/value pairs to use as options for the logging driver. +- **logs** (Boolean) Save the container logs (`attach` must be enabled). Defaults to `false`. +- **max_retry_count** (Number) The maximum amount of times to an attempt a restart when `restart` is set to 'on-failure'. +- **memory** (Number) The memory limit for the container in MBs. +- **memory_swap** (Number) The total memory limit (memory + swap) for the container in MBs. This setting may compute to `-1` after `terraform apply` if the target host doesn't support memory swap, when that is the case docker will use a soft limitation. +- **mounts** (Block Set) Specification for mounts to be added to containers created as part of the service. (see [below for nested schema](#nestedblock--mounts)) +- **must_run** (Boolean) If `true`, then the Docker container will be kept running. If `false`, then as long as the container exists, Terraform assumes it is successful. Defaults to `true`. +- **network_alias** (Set of String, Deprecated) Set an alias for the container in all specified networks +- **network_mode** (String) Network mode of the container. +- **networks** (Set of String, Deprecated) ID of the networks in which the container is. +- **networks_advanced** (Block Set) The networks the container is attached to (see [below for nested schema](#nestedblock--networks_advanced)) +- **pid_mode** (String) he PID (Process) Namespace mode for the container. Either `container:` or `host`. +- **ports** (Block List) Publish a container's port(s) to the host. (see [below for nested schema](#nestedblock--ports)) +- **privileged** (Boolean) If `true`, the container runs in privileged mode. +- **publish_all_ports** (Boolean) Publish all ports of the container. +- **read_only** (Boolean) If `true`, the container will be started as readonly. Defaults to `false`. +- **remove_volumes** (Boolean) If `true`, it will remove anonymous volumes associated with the container. Defaults to `true`. +- **restart** (String) The restart policy for the container. Must be one of 'no', 'on-failure', 'always', 'unless-stopped'. Defaults to `no`. +- **rm** (Boolean) If `true`, then the container will be automatically removed after his execution. Terraform won't check this container after creation. Defaults to `false`. +- **security_opts** (Set of String) List of string values to customize labels for MLS systems, such as SELinux. See https://docs.docker.com/engine/reference/run/#security-configuration. +- **shm_size** (Number) Size of `/dev/shm` in MBs. +- **start** (Boolean) If `true`, then the Docker container will be started after creation. If `false`, then the container is only created. Defaults to `true`. +- **stdin_open** (Boolean) If `true`, keep STDIN open even if not attached (`docker run -i`). Defaults to `false`. +- **sysctls** (Map of String) A map of kernel parameters (sysctls) to set in the container. +- **tmpfs** (Map of String) A map of container directories which should be replaced by `tmpfs mounts`, and their corresponding mount options. +- **tty** (Boolean) If `true`, allocate a pseudo-tty (`docker run -t`). Defaults to `false`. +- **ulimit** (Block Set) Ulimit options to add. (see [below for nested schema](#nestedblock--ulimit)) +- **upload** (Block Set) Specifies files to upload to the container before starting it. Only one of `content` or `content_base64` can be set and at least one of them has to be set. (see [below for nested schema](#nestedblock--upload)) +- **user** (String) User used for run the first process. Format is `user` or `user:group` which user and group can be passed literraly or by name. +- **userns_mode** (String) Sets the usernamespace mode for the container when usernamespace remapping option is enabled. +- **volumes** (Block Set) Spec for mounting volumes in the container. (see [below for nested schema](#nestedblock--volumes)) +- **working_dir** (String) The working directory for commands to run in. + +### Read-Only + +- **bridge** (String) The network bridge of the container as read from its NetworkSettings. +- **container_logs** (String) The logs of the container if its execution is done (`attach` must be disabled). +- **exit_code** (Number) The exit code of the container if its execution is done (`must_run` must be disabled). +- **gateway** (String, Deprecated) The network gateway of the container. +- **ip_address** (String, Deprecated) The IP address of the container. +- **ip_prefix_length** (Number, Deprecated) The IP prefix length of the container. +- **network_data** (List of Object) The data of the networks the container is connected to. (see [below for nested schema](#nestedatt--network_data)) + + +### Nested Schema for `capabilities` + +Optional: + +- **add** (Set of String) List of linux capabilities to add. +- **drop** (Set of String) List of linux capabilities to drop. + + + +### Nested Schema for `devices` + +Required: + +- **host_path** (String) The path on the host where the device is located. + +Optional: + +- **container_path** (String) The path in the container where the device will be bound. +- **permissions** (String) The cgroup permissions given to the container to access the device. Defaults to `rwm`. + + + +### Nested Schema for `healthcheck` + +Required: + +- **test** (List of String) Command to run to check health. For example, to run `curl -f localhost/health` set the command to be `["CMD", "curl", "-f", "localhost/health"]`. + +Optional: + +- **interval** (String) Time between running the check (ms|s|m|h). Defaults to `0s`. +- **retries** (Number) Consecutive failures needed to report unhealthy. Defaults to `0`. +- **start_period** (String) Start period for the container to initialize before counting retries towards unstable (ms|s|m|h). Defaults to `0s`. +- **timeout** (String) Maximum time to allow one check to run (ms|s|m|h). Defaults to `0s`. + + + +### Nested Schema for `host` + +Required: + +- **host** (String) Hostname to add +- **ip** (String) IP address this hostname should resolve to. + + + +### Nested Schema for `labels` + +Required: + +- **label** (String) Name of the label +- **value** (String) Value of the label + + + +### Nested Schema for `mounts` + +Required: + +- **target** (String) Container path +- **type** (String) The mount type + +Optional: + +- **bind_options** (Block List, Max: 1) Optional configuration for the bind type. (see [below for nested schema](#nestedblock--mounts--bind_options)) +- **read_only** (Boolean) Whether the mount should be read-only. +- **source** (String) Mount source (e.g. a volume name, a host path). +- **tmpfs_options** (Block List, Max: 1) Optional configuration for the tmpfs type. (see [below for nested schema](#nestedblock--mounts--tmpfs_options)) +- **volume_options** (Block List, Max: 1) Optional configuration for the volume type. (see [below for nested schema](#nestedblock--mounts--volume_options)) + + +### Nested Schema for `mounts.bind_options` + +Optional: + +- **propagation** (String) A propagation mode with the value. + + + +### Nested Schema for `mounts.tmpfs_options` + +Optional: + +- **mode** (Number) The permission mode for the tmpfs mount in an integer. +- **size_bytes** (Number) The size for the tmpfs mount in bytes. + + + +### Nested Schema for `mounts.volume_options` + +Optional: + +- **driver_name** (String) Name of the driver to use to create the volume. +- **driver_options** (Map of String) key/value map of driver specific options. +- **labels** (Block Set) User-defined key/value metadata. (see [below for nested schema](#nestedblock--mounts--volume_options--labels)) +- **no_copy** (Boolean) Populate volume with data from the target. + + +### Nested Schema for `mounts.volume_options.labels` + +Required: + +- **label** (String) Name of the label +- **value** (String) Value of the label + + + + + +### Nested Schema for `networks_advanced` + +Required: + +- **name** (String) The name of the network. + +Optional: + +- **aliases** (Set of String) The network aliases of the container in the specific network. +- **ipv4_address** (String) The IPV4 address of the container in the specific network. +- **ipv6_address** (String) The IPV6 address of the container in the specific network. + + + +### Nested Schema for `ports` + +Required: + +- **internal** (Number) Port within the container. + +Optional: + +- **external** (Number) Port exposed out of the container. If not given a free random port `>= 32768` will be used. +- **ip** (String) IP address/mask that can access this port. Defaults to `0.0.0.0`. +- **protocol** (String) Protocol that can be used over this port. Defaults to `tcp`. + + + +### Nested Schema for `ulimit` + +Required: + +- **hard** (Number) The hard limit +- **name** (String) The name of the ulimit +- **soft** (Number) The soft limit + + + +### Nested Schema for `upload` + +Required: + +- **file** (String) Path to the file in the container where is upload goes to + +Optional: + +- **content** (String) Literal string value to use as the object content, which will be uploaded as UTF-8-encoded text. Conflicts with `content_base64` & `source` +- **content_base64** (String) Base64-encoded data that will be decoded and uploaded as raw bytes for the object content. This allows safely uploading non-UTF8 binary data, but is recommended only for larger binary content such as the result of the `base64encode` interpolation function. See [here](https://github.com/terraform-providers/terraform-provider-docker/issues/48#issuecomment-374174588) for the reason. Conflicts with `content` & `source` +- **executable** (Boolean) If `true`, the file will be uploaded with user executable permission. Defaults to `false`. +- **source** (String) A filename that references a file which will be uploaded as the object content. This allows for large file uploads that do not get stored in state. Conflicts with `content` & `content_base64` +- **source_hash** (String) If using `source`, this will force an update if the file content has updated but the filename has not. + + + +### Nested Schema for `volumes` + +Optional: + +- **container_path** (String) The path in the container where the volume will be mounted. +- **from_container** (String) The container where the volume is coming from. +- **host_path** (String) The path on the host where the volume is coming from. +- **read_only** (Boolean) If `true`, this volume will be readonly. Defaults to `false`. +- **volume_name** (String) The name of the docker volume which should be mounted. + + + +### Nested Schema for `network_data` + +Read-Only: + +- **gateway** (String) +- **global_ipv6_address** (String) +- **global_ipv6_prefix_length** (Number) +- **ip_address** (String) +- **ip_prefix_length** (Number) +- **ipv6_gateway** (String) +- **network_name** (String) + +## Import + +Import is supported using the following syntax by providing the `id`: + +```shell +#!/bin/bash +terraform import docker_container.foo id +``` + +### Example + +Assuming you created a `container` as follows + +```shell +#!/bin/bash +docker run --name foo -p8080:80 -d nginx +# prints the container ID +9a550c0f0163d39d77222d3efd58701b625d47676c25c686c95b5b92d1cba6fd +``` + +you provide the definition for the resource as follows + +```terraform +resource "docker_container" "foo" { + name = "foo" + image = "nginx" + + ports { + internal = "80" + external = "8080" + } +} +``` + +then the import command is as follows + +```shell +#!/bin/bash +terraform import docker_container.foo 9a550c0f0163d39d77222d3efd58701b625d47676c25c686c95b5b92d1cba6fd +``` \ No newline at end of file diff --git a/docs/resources/image.md b/docs/resources/image.md new file mode 100644 index 000000000..63bab2de0 --- /dev/null +++ b/docs/resources/image.md @@ -0,0 +1,102 @@ +--- +# generated by https://github.com/hashicorp/terraform-plugin-docs +page_title: "docker_image Resource - terraform-provider-docker" +subcategory: "" +description: |- + Pulls a Docker image to a given Docker host from a Docker Registry. + This resource will not pull new layers of the image automatically unless used in conjunction with dockerregistryimage registry_image.md data source to update the pull_triggers field. +--- + +# docker_image (Resource) + +Pulls a Docker image to a given Docker host from a Docker Registry. + This resource will *not* pull new layers of the image automatically unless used in conjunction with [docker_registry_image](registry_image.md) data source to update the `pull_triggers` field. + +## Example Usage + +### Basic + +Finds and downloads the latest `ubuntu:precise` image but does not check +for further updates of the image + +```terraform +resource "docker_image" "ubuntu" { + name = "ubuntu:precise" +} +``` + +### Dynamic updates + +To be able to update an update dynamically when the `sha256` sum changes, +you need to use it in combination with `docker_registry_image` as follows: + +```terraform +data "docker_registry_image" "ubuntu" { + name = "ubuntu:precise" +} + +resource "docker_image" "ubuntu" { + name = data.docker_registry_image.ubuntu.name + pull_triggers = [data.docker_registry_image.ubuntu.sha256_digest] +} +``` + +### Build + +You can also use the resource to build and image. +In thid case the image "zoo" and "zoo:develop" are built. + +```terraform +resource "docker_image" "zoo" { + name = "zoo" + build { + path = "." + tag = ["zoo:develop"] + build_arg = { + foo : "zoo" + } + label = { + author : "zoo" + } + } +} +``` + + +## Schema + +### Required + +- **name** (String) The name of the Docker image, including any tags or SHA256 repo digests. + +### Optional + +- **build** (Block Set, Max: 1) Configuration to build an image. Please see [docker build command reference](https://docs.docker.com/engine/reference/commandline/build/#options) too. (see [below for nested schema](#nestedblock--build)) +- **force_remove** (Boolean) If true, then the image is removed forcibly when the resource is destroyed. +- **id** (String) The ID of this resource. +- **keep_locally** (Boolean) If true, then the Docker image won't be deleted on destroy operation. If this is false, it will delete the image from the docker local storage on destroy operation. +- **pull_trigger** (String, Deprecated) A value which cause an image pull when changed +- **pull_triggers** (Set of String) List of values which cause an image pull when changed. This is used to store the image digest from the registry when using the [docker_registry_image](../data-sources/registry_image.md). + +### Read-Only + +- **latest** (String) The ID of the image. +- **output** (String, Deprecated) + + +### Nested Schema for `build` + +Required: + +- **path** (String) Context path + +Optional: + +- **build_arg** (Map of String) Set build-time variables +- **dockerfile** (String) Name of the Dockerfile. Defaults to `Dockerfile`. +- **force_remove** (Boolean) Always remove intermediate containers +- **label** (Map of String) Set metadata for an image +- **no_cache** (Boolean) Do not use cache when building the image +- **remove** (Boolean) Remove intermediate containers after a successful build. Defaults to `true`. +- **tag** (List of String) Name and optionally a tag in the 'name:tag' format +- **target** (String) Set the target build stage to build \ No newline at end of file diff --git a/docs/resources/network.md b/docs/resources/network.md new file mode 100644 index 000000000..0e79d9a7a --- /dev/null +++ b/docs/resources/network.md @@ -0,0 +1,98 @@ +--- +# generated by https://github.com/hashicorp/terraform-plugin-docs +page_title: "docker_network Resource - terraform-provider-docker" +subcategory: "" +description: |- + docker_network provides details about a specific Docker Network. +--- + +# docker_network (Resource) + +`docker_network` provides details about a specific Docker Network. + +## Example Usage + +```terraform +resource "docker_network" "private_network" { + name = "my_network" +} +``` + + +## Schema + +### Required + +- **name** (String) The name of the Docker network. + +### Optional + +- **attachable** (Boolean) Enable manual container attachment to the network. +- **check_duplicate** (Boolean) Requests daemon to check for networks with same name. +- **driver** (String) The driver of the Docker network. Possible values are `bridge`, `host`, `overlay`, `macvlan`. See [network docs](https://docs.docker.com/network/#network-drivers) for more details. +- **id** (String) The ID of this resource. +- **ingress** (Boolean) Create swarm routing-mesh network. Defaults to `false`. +- **internal** (Boolean) Whether the network is internal. +- **ipam_config** (Block Set) The IPAM configuration options (see [below for nested schema](#nestedblock--ipam_config)) +- **ipam_driver** (String) Driver used by the custom IP scheme of the network. Defaults to `default` +- **ipv6** (Boolean) Enable IPv6 networking. Defaults to `false`. +- **labels** (Block Set) User-defined key/value metadata (see [below for nested schema](#nestedblock--labels)) +- **options** (Map of String) Only available with bridge networks. See [bridge options docs](https://docs.docker.com/engine/reference/commandline/network_create/#bridge-driver-options) for more details. + +### Read-Only + +- **scope** (String) Scope of the network. One of `swarm`, `global`, or `local`. + + +### Nested Schema for `ipam_config` + +Optional: + +- **aux_address** (Map of String) Auxiliary IPv4 or IPv6 addresses used by Network driver +- **gateway** (String) The IP address of the gateway +- **ip_range** (String) The ip range in CIDR form +- **subnet** (String) The subnet in CIDR form + + + +### Nested Schema for `labels` + +Required: + +- **label** (String) Name of the label +- **value** (String) Value of the label + +## Import + +Import is supported using the following syntax by providing the `id`: + +```shell +#!/bin/bash +terraform import docker_network.foo id +``` + +### Example + +Assuming you created a `network` as follows + +```shell +#!/bin/bash +docker network create foo +# prints the long ID +87b57a9b91ecab2db2a6dbf38df74c67d7c7108cbe479d6576574ec2cd8c2d73 +``` + +you provide the definition for the resource as follows + +```terraform +resource "docker_network" "foo" { + name = "foo" +} +``` + +then the import command is as follows + +```shell +#!/bin/bash +terraform import docker_network.foo 87b57a9b91ecab2db2a6dbf38df74c67d7c7108cbe479d6576574ec2cd8c2d73 +``` \ No newline at end of file diff --git a/docs/resources/plugin.md b/docs/resources/plugin.md new file mode 100644 index 000000000..ffa4657de --- /dev/null +++ b/docs/resources/plugin.md @@ -0,0 +1,72 @@ +--- +# generated by https://github.com/hashicorp/terraform-plugin-docs +page_title: "docker_plugin Resource - terraform-provider-docker" +subcategory: "" +description: |- + Manages the lifecycle of a Docker plugin. +--- + +# docker_plugin (Resource) + +Manages the lifecycle of a Docker plugin. + +## Example Usage + +```terraform +resource "docker_plugin" "sample-volume-plugin" { + name = "docker.io/tiborvass/sample-volume-plugin:latest" +} + +resource "docker_plugin" "sample-volume-plugin" { + name = "tiborvass/sample-volume-plugin" + alias = "sample-volume-plugin" + enabled = false + grant_all_permissions = true + force_destroy = true + enable_timeout = 60 + force_disable = true + env = [ + "DEBUG=1" + ] +} +``` + + +## Schema + +### Required + +- **name** (String) Docker Plugin name + +### Optional + +- **alias** (String) Docker Plugin alias +- **enable_timeout** (Number) HTTP client timeout to enable the plugin +- **enabled** (Boolean) If `true` the plugin is enabled. Defaults to `true` +- **env** (Set of String) The environment variables in the form of `KEY=VALUE`, e.g. `DEBUG=0` +- **force_destroy** (Boolean) If true, then the plugin is destroyed forcibly +- **force_disable** (Boolean) If true, then the plugin is disabled forcibly +- **grant_all_permissions** (Boolean) If true, grant all permissions necessary to run the plugin +- **grant_permissions** (Block Set) Grant specific permissions only (see [below for nested schema](#nestedblock--grant_permissions)) +- **id** (String) The ID of this resource. + +### Read-Only + +- **plugin_reference** (String) Docker Plugin Reference + + +### Nested Schema for `grant_permissions` + +Required: + +- **name** (String) The name of the permission +- **value** (Set of String) The value of the permission + +## Import + +Import is supported using the following syntax: + +```shell +#!/bin/bash +terraform import docker_plugin.sample-volume-plugin "$(docker plugin inspect -f {{.ID}} tiborvass/sample-volume-plugin:latest)" +``` \ No newline at end of file diff --git a/docs/resources/registry_image.md b/docs/resources/registry_image.md new file mode 100644 index 000000000..162b4d154 --- /dev/null +++ b/docs/resources/registry_image.md @@ -0,0 +1,108 @@ +--- +# generated by https://github.com/hashicorp/terraform-plugin-docs +page_title: "docker_registry_image Resource - terraform-provider-docker" +subcategory: "" +description: |- + Manages the lifecycle of docker image/tag in a registry. +--- + +# docker_registry_image (Resource) + +Manages the lifecycle of docker image/tag in a registry. + +## Example Usage + +```terraform +resource "docker_registry_image" "helloworld" { + name = "helloworld:1.0" + + build { + context = "pathToContextFolder" + } +} +``` + + +## Schema + +### Required + +- **name** (String) The name of the Docker image. + +### Optional + +- **build** (Block List, Max: 1) Definition for building the image (see [below for nested schema](#nestedblock--build)) +- **id** (String) The ID of this resource. +- **keep_remotely** (Boolean) If true, then the Docker image won't be deleted on destroy operation. If this is false, it will delete the image from the docker registry on destroy operation. Defaults to `false` + +### Read-Only + +- **sha256_digest** (String) The sha256 digest of the image. + + +### Nested Schema for `build` + +Required: + +- **context** (String) The path to the context folder + +Optional: + +- **auth_config** (Block List) The configuration for the autentication (see [below for nested schema](#nestedblock--build--auth_config)) +- **build_args** (Map of String) Pairs for build-time variables in the form TODO +- **build_id** (String) BuildID is an optional identifier that can be passed together with the build request. The +- **cache_from** (List of String) Images to consider as cache sources +- **cgroup_parent** (String) Optional parent cgroup for the container +- **cpu_period** (Number) The length of a CPU period in microseconds +- **cpu_quota** (Number) Microseconds of CPU time that the container can get in a CPU period +- **cpu_set_cpus** (String) CPUs in which to allow execution (e.g., `0-3`, `0`, `1`) +- **cpu_set_mems** (String) MEMs in which to allow execution (`0-3`, `0`, `1`) +- **cpu_shares** (Number) CPU shares (relative weight) +- **dockerfile** (String) Dockerfile file. Defaults to `Dockerfile` +- **extra_hosts** (List of String) A list of hostnames/IP mappings to add to the container’s /etc/hosts file. Specified in the form ["hostname:IP"] +- **force_remove** (Boolean) Always remove intermediate containers +- **isolation** (String) Isolation represents the isolation technology of a container. The supported values are +- **labels** (Map of String) User-defined key/value metadata +- **memory** (Number) Set memory limit for build +- **memory_swap** (Number) Total memory (memory + swap), -1 to enable unlimited swap +- **network_mode** (String) Set the networking mode for the RUN instructions during build +- **no_cache** (Boolean) Do not use the cache when building the image +- **platform** (String) Set platform if server is multi-platform capable +- **pull_parent** (Boolean) Attempt to pull the image even if an older image exists locally +- **remote_context** (String) A Git repository URI or HTTP/HTTPS context URI +- **remove** (Boolean) Remove intermediate containers after a successful build (default behavior) +- **security_opt** (List of String) The security options +- **session_id** (String) Set an ID for the build session +- **shm_size** (Number) Size of /dev/shm in bytes. The size must be greater than 0 +- **squash** (Boolean) If true the new layers are squashed into a new image with a single new layer +- **suppress_output** (Boolean) Suppress the build output and print image ID on success +- **target** (String) Set the target build stage to build +- **ulimit** (Block List) Configuration for ulimits (see [below for nested schema](#nestedblock--build--ulimit)) +- **version** (String) Version of the unerlying builder to use + + +### Nested Schema for `build.auth_config` + +Required: + +- **host_name** (String) hostname of the registry + +Optional: + +- **auth** (String) the auth token +- **email** (String) the user emal +- **identity_token** (String) the identity token +- **password** (String) the registry password +- **registry_token** (String) the registry token +- **server_address** (String) the server address +- **user_name** (String) the registry user name + + + +### Nested Schema for `build.ulimit` + +Required: + +- **hard** (Number) soft limit +- **name** (String) type of ulimit, e.g. `nofile` +- **soft** (Number) hard limit \ No newline at end of file diff --git a/docs/resources/secret.md b/docs/resources/secret.md new file mode 100644 index 000000000..ad20366c8 --- /dev/null +++ b/docs/resources/secret.md @@ -0,0 +1,89 @@ +--- +# generated by https://github.com/hashicorp/terraform-plugin-docs +page_title: "docker_secret Resource - terraform-provider-docker" +subcategory: "" +description: |- + Manages the secrets of a Docker service in a swarm. +--- + +# docker_secret (Resource) + +Manages the secrets of a Docker service in a swarm. + +## Example Usage + +### Basic + +```terraform +resource "docker_secret" "foo" { + name = "foo" + data = base64encode("{\"foo\": \"s3cr3t\"}") +} +``` + +### Update secret with no downtime +To update a `secret`, Terraform will destroy the existing resource and create a replacement. +To effectively use a `docker_secret` resource with a `docker_service` resource, +it's recommended to specify `create_before_destroy` in a `lifecycle` block. Provide a unique `name` attribute, for example +with one of the interpolation functions `uuid` or `timestamp` as shown +in the example below. The reason is [moby-35803](https://github.com/moby/moby/issues/35803). + +```terraform +resource "docker_secret" "service_secret" { + name = "${var.service_name}-secret-${replace(timestamp(), ":", ".")}" + data = base64encode( + templatefile("${path.cwd}/foo.secret.json.tpl", + { + secret = "s3cr3t" + } + ) + ) + + lifecycle { + ignore_changes = ["name"] + create_before_destroy = true + } +} + +resource "docker_service" "service" { + # ... + secrets = [ + { + secret_id = docker_secret.service_secret.id + secret_name = docker_secret.service_secret.name + file_name = "/root/configs/configs.json" + }, + ] +} +``` + + +## Schema + +### Required + +- **data** (String, Sensitive) Base64-url-safe-encoded secret data +- **name** (String) User-defined name of the secret + +### Optional + +- **id** (String) The ID of this resource. +- **labels** (Block Set) User-defined key/value metadata (see [below for nested schema](#nestedblock--labels)) + + +### Nested Schema for `labels` + +Required: + +- **label** (String) Name of the label +- **value** (String) Value of the label + +## Import + +Import is supported using the following syntax: + +```shell +#!/bin/bash + +# Docker secret cannot be imported as the secret data, once set, is never exposed again. +``` \ No newline at end of file diff --git a/docs/resources/service.md b/docs/resources/service.md new file mode 100644 index 000000000..3fa05f66e --- /dev/null +++ b/docs/resources/service.md @@ -0,0 +1,722 @@ +--- +# generated by https://github.com/hashicorp/terraform-plugin-docs +page_title: "docker_service Resource - terraform-provider-docker" +subcategory: "" +description: |- + This resource manages the lifecycle of a Docker service. By default, the creation, update and delete of services are detached. + With the Converge Config the behavior of the docker cli is imitated to guarantee tha for example, all tasks of a service are running or successfully updated or to inform terraform that a service could no be updated and was successfully rolled back. +--- + +# docker_service (Resource) + +This resource manages the lifecycle of a Docker service. By default, the creation, update and delete of services are detached. + With the [Converge Config](#convergeconfig) the behavior of the `docker cli` is imitated to guarantee tha for example, all tasks of a service are running or successfully updated or to inform `terraform` that a service could no be updated and was successfully rolled back. + +## Example Usage + +### Basic + +The following configuration starts a Docker Service with + +- the given image, +- 1 replica +- exposes the port `8080` in `vip` mode to the host machine +- moreover, uses the `container` runtime + +```terraform +resource "docker_service" "foo" { + name = "foo-service" + + task_spec { + container_spec { + image = "repo.mycompany.com:8080/foo-service:v1" + } + } + + endpoint_spec { + ports { + target_port = "8080" + } + } +} +``` + +The following command is the equivalent: + +```shell +#!/bin/bash +docker service create -d -p 8080 --name foo-service repo.mycompany.com:8080/foo-service:v1 +``` + +### Advanced + +The following configuration shows the full capabilities of a Docker Service, +with a `volume`, `config`, `secret` and `network` + +```terraform +resource "docker_volume" "test_volume" { + name = "tftest-volume" +} + +resource "docker_config" "service_config" { + name = "tftest-full-myconfig" + data = "ewogICJwcmVmaXgiOiAiMTIzIgp9" +} + +resource "docker_secret" "service_secret" { + name = "tftest-mysecret" + data = "ewogICJrZXkiOiAiUVdFUlRZIgp9" +} + +resource "docker_network" "test_network" { + name = "tftest-network" + driver = "overlay" +} + +resource "docker_service" "foo" { + name = "tftest-service-basic" + + task_spec { + container_spec { + image = "repo.mycompany.com:8080/foo-service:v1" + + labels { + label = "foo.bar" + value = "baz" + } + + command = ["ls"] + args = ["-las"] + hostname = "my-fancy-service" + + env = { + MYFOO = "BAR" + } + + dir = "/root" + user = "root" + groups = ["docker", "foogroup"] + + privileges { + se_linux_context { + disable = true + user = "user-label" + role = "role-label" + type = "type-label" + level = "level-label" + } + } + + read_only = true + + mounts { + target = "/mount/test" + source = docker_volume.test_volume.name + type = "volume" + read_only = true + + bind_options { + propagation = "private" + } + } + + mounts { + # another mount + } + + stop_signal = "SIGTERM" + stop_grace_period = "10s" + + healthcheck { + test = ["CMD", "curl", "-f", "http://localhost:8080/health"] + interval = "5s" + timeout = "2s" + retries = 4 + } + + hosts { + host = "testhost" + ip = "10.0.1.0" + } + + dns_config { + nameservers = ["8.8.8.8"] + search = ["example.org"] + options = ["timeout:3"] + } + + secrets { + secret_id = docker_secret.service_secret.id + secret_name = docker_secret.service_secret.name + file_name = "/secrets.json" + file_uid = "0" + file_gid = "0" + file_mode = 0777 + } + + secrets { + # another secret + } + + configs { + config_id = docker_config.service_config.id + config_name = docker_config.service_config.name + file_name = "/configs.json" + } + + configs { + # another config + } + } + + resources { + limits { + nano_cpus = 1000000 + memory_bytes = 536870912 + } + + reservation { + nano_cpus = 1000000 + memory_bytes = 536870912 + + generic_resources { + named_resources_spec = [ + "GPU=UUID1", + ] + + discrete_resources_spec = [ + "SSD=3", + ] + } + } + } + + restart_policy = { + condition = "on-failure" + delay = "3s" + max_attempts = 4 + window = "10s" + } + + placement { + constraints = [ + "node.role==manager", + ] + + prefs = [ + "spread=node.role.manager", + ] + + max_replicas = 1 + } + + force_update = 0 + runtime = "container" + networks = [docker_network.test_network.id] + + log_driver { + name = "json-file" + + options { + max-size = "10m" + max-file = "3" + } + } + } + + mode { + replicated { + replicas = 2 + } + } + + update_config { + parallelism = 2 + delay = "10s" + failure_action = "pause" + monitor = "5s" + max_failure_ratio = "0.1" + order = "start-first" + } + + rollback_config { + parallelism = 2 + delay = "5ms" + failure_action = "pause" + monitor = "10h" + max_failure_ratio = "0.9" + order = "stop-first" + } + + endpoint_spec { + mode = "vip" + + ports { + name = "random" + protocol = "tcp" + target_port = "8080" + published_port = "8080" + publish_mode = "ingress" + } + + ports { + # another port + } + } +} +``` + + +## Schema + +### Required + +- **name** (String) Name of the service +- **task_spec** (Block List, Min: 1, Max: 1) User modifiable task configuration (see [below for nested schema](#nestedblock--task_spec)) + +### Optional + +- **auth** (Block List, Max: 1) Configuration for the authentication for pulling the images of the service (see [below for nested schema](#nestedblock--auth)) +- **converge_config** (Block List, Max: 1) A configuration to ensure that a service converges aka reaches the desired that of all task up and running (see [below for nested schema](#nestedblock--converge_config)) +- **endpoint_spec** (Block List, Max: 1) Properties that can be configured to access and load balance a service (see [below for nested schema](#nestedblock--endpoint_spec)) +- **id** (String) The ID of this resource. +- **labels** (Block Set) User-defined key/value metadata (see [below for nested schema](#nestedblock--labels)) +- **mode** (Block List, Max: 1) Scheduling mode for the service (see [below for nested schema](#nestedblock--mode)) +- **rollback_config** (Block List, Max: 1) Specification for the rollback strategy of the service (see [below for nested schema](#nestedblock--rollback_config)) +- **update_config** (Block List, Max: 1) Specification for the update strategy of the service (see [below for nested schema](#nestedblock--update_config)) + + +### Nested Schema for `task_spec` + +Required: + +- **container_spec** (Block List, Min: 1, Max: 1) The spec for each container (see [below for nested schema](#nestedblock--task_spec--container_spec)) + +Optional: + +- **force_update** (Number) A counter that triggers an update even if no relevant parameters have been changed. See the [spec](https://github.com/docker/swarmkit/blob/master/api/specs.proto#L126). +- **log_driver** (Block List, Max: 1) 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 (see [below for nested schema](#nestedblock--task_spec--log_driver)) +- **networks** (Set of String) Ids of the networks in which the container will be put in +- **placement** (Block List, Max: 1) The placement preferences (see [below for nested schema](#nestedblock--task_spec--placement)) +- **resources** (Block List, Max: 1) Resource requirements which apply to each individual container created as part of the service (see [below for nested schema](#nestedblock--task_spec--resources)) +- **restart_policy** (Block List, Max: 1) Specification for the restart policy which applies to containers created as part of this service. (see [below for nested schema](#nestedblock--task_spec--restart_policy)) +- **runtime** (String) Runtime is the type of runtime specified for the task executor. See the [types](https://github.com/moby/moby/blob/master/api/types/swarm/runtime.go). + + +### Nested Schema for `task_spec.container_spec` + +Required: + +- **image** (String) The image name to use for the containers of the service + +Optional: + +- **args** (List of String) Arguments to the command +- **command** (List of String) The command to be run in the image +- **configs** (Block Set) References to zero or more configs that will be exposed to the service (see [below for nested schema](#nestedblock--task_spec--container_spec--configs)) +- **dir** (String) The working directory for commands to run in +- **dns_config** (Block List, Max: 1) Specification for DNS related configurations in resolver configuration file (resolv.conf) (see [below for nested schema](#nestedblock--task_spec--container_spec--dns_config)) +- **env** (Map of String) A list of environment variables in the form VAR="value" +- **groups** (List of String) A list of additional groups that the container process will run as +- **healthcheck** (Block List, Max: 1) A test to perform to check that the container is healthy (see [below for nested schema](#nestedblock--task_spec--container_spec--healthcheck)) +- **hostname** (String) The hostname to use for the container, as a valid RFC 1123 hostname +- **hosts** (Block Set) A list of hostname/IP mappings to add to the container's hosts file (see [below for nested schema](#nestedblock--task_spec--container_spec--hosts)) +- **isolation** (String) Isolation technology of the containers running the service. (Windows only). Defaults to `default`. +- **labels** (Block Set) User-defined key/value metadata (see [below for nested schema](#nestedblock--task_spec--container_spec--labels)) +- **mounts** (Block Set) Specification for mounts to be added to containers created as part of the service (see [below for nested schema](#nestedblock--task_spec--container_spec--mounts)) +- **privileges** (Block List, Max: 1) Security options for the container (see [below for nested schema](#nestedblock--task_spec--container_spec--privileges)) +- **read_only** (Boolean) Mount the container's root filesystem as read only +- **secrets** (Block Set) References to zero or more secrets that will be exposed to the service (see [below for nested schema](#nestedblock--task_spec--container_spec--secrets)) +- **stop_grace_period** (String) Amount of time to wait for the container to terminate before forcefully removing it (ms|s|m|h) +- **stop_signal** (String) Signal to stop the container +- **user** (String) The user inside the container + + +### Nested Schema for `task_spec.container_spec.configs` + +Required: + +- **config_id** (String) ID of the specific config that we're referencing +- **file_name** (String) Represents the final filename in the filesystem + +Optional: + +- **config_name** (String) Name of the config that this references, but this is just provided for lookup/display purposes. The config in the reference will be identified by its ID +- **file_gid** (String) Represents the file GID. Defaults to `0`. +- **file_mode** (Number) Represents represents the FileMode of the file. Defaults to `0o444`. +- **file_uid** (String) Represents the file UID. Defaults to `0`. + + + +### Nested Schema for `task_spec.container_spec.dns_config` + +Required: + +- **nameservers** (List of String) The IP addresses of the name servers + +Optional: + +- **options** (List of String) A list of internal resolver variables to be modified (e.g., debug, ndots:3, etc.) +- **search** (List of String) A search list for host-name lookup + + + +### Nested Schema for `task_spec.container_spec.healthcheck` + +Required: + +- **test** (List of String) The test to perform as list + +Optional: + +- **interval** (String) Time between running the check (ms|s|m|h). Defaults to `0s`. +- **retries** (Number) Consecutive failures needed to report unhealthy. Defaults to `0` +- **start_period** (String) Start period for the container to initialize before counting retries towards unstable (ms|s|m|h). Defaults to `0s`. +- **timeout** (String) Maximum time to allow one check to run (ms|s|m|h). Defaults to `0s`. + + + +### Nested Schema for `task_spec.container_spec.hosts` + +Required: + +- **host** (String) The name of the host +- **ip** (String) The ip of the host + + + +### Nested Schema for `task_spec.container_spec.labels` + +Required: + +- **label** (String) Name of the label +- **value** (String) Value of the label + + + +### Nested Schema for `task_spec.container_spec.mounts` + +Required: + +- **target** (String) Container path +- **type** (String) The mount type + +Optional: + +- **bind_options** (Block List, Max: 1) Optional configuration for the bind type (see [below for nested schema](#nestedblock--task_spec--container_spec--mounts--bind_options)) +- **read_only** (Boolean) Whether the mount should be read-only +- **source** (String) Mount source (e.g. a volume name, a host path) +- **tmpfs_options** (Block List, Max: 1) Optional configuration for the tmpfs type (see [below for nested schema](#nestedblock--task_spec--container_spec--mounts--tmpfs_options)) +- **volume_options** (Block List, Max: 1) Optional configuration for the volume type (see [below for nested schema](#nestedblock--task_spec--container_spec--mounts--volume_options)) + + +### Nested Schema for `task_spec.container_spec.mounts.volume_options` + +Optional: + +- **propagation** (String) A propagation mode with the value + + + +### Nested Schema for `task_spec.container_spec.mounts.volume_options` + +Optional: + +- **mode** (Number) The permission mode for the tmpfs mount in an integer +- **size_bytes** (Number) The size for the tmpfs mount in bytes + + + +### Nested Schema for `task_spec.container_spec.mounts.volume_options` + +Optional: + +- **driver_name** (String) Name of the driver to use to create the volume +- **driver_options** (Map of String) key/value map of driver specific options +- **labels** (Block Set) User-defined key/value metadata (see [below for nested schema](#nestedblock--task_spec--container_spec--mounts--volume_options--labels)) +- **no_copy** (Boolean) Populate volume with data from the target + + +### Nested Schema for `task_spec.container_spec.mounts.volume_options.labels` + +Required: + +- **label** (String) Name of the label +- **value** (String) Value of the label + + + + + +### Nested Schema for `task_spec.container_spec.privileges` + +Optional: + +- **credential_spec** (Block List, Max: 1) CredentialSpec for managed service account (Windows only) (see [below for nested schema](#nestedblock--task_spec--container_spec--privileges--credential_spec)) +- **se_linux_context** (Block List, Max: 1) SELinux labels of the container (see [below for nested schema](#nestedblock--task_spec--container_spec--privileges--se_linux_context)) + + +### Nested Schema for `task_spec.container_spec.privileges.se_linux_context` + +Optional: + +- **file** (String) Load credential spec from this file +- **registry** (String) Load credential spec from this value in the Windows registry + + + +### Nested Schema for `task_spec.container_spec.privileges.se_linux_context` + +Optional: + +- **disable** (Boolean) Disable SELinux +- **level** (String) SELinux level label +- **role** (String) SELinux role label +- **type** (String) SELinux type label +- **user** (String) SELinux user label + + + + +### Nested Schema for `task_spec.container_spec.secrets` + +Required: + +- **file_name** (String) Represents the final filename in the filesystem +- **secret_id** (String) ID of the specific secret that we're referencing + +Optional: + +- **file_gid** (String) Represents the file GID. Defaults to `0` +- **file_mode** (Number) Represents represents the FileMode of the file. Defaults to `0o444` +- **file_uid** (String) Represents the file UID. Defaults to `0` +- **secret_name** (String) Name of the secret that this references, but this is just provided for lookup/display purposes. The config in the reference will be identified by its ID + + + + +### Nested Schema for `task_spec.log_driver` + +Required: + +- **name** (String) The logging driver to use + +Optional: + +- **options** (Map of String) The options for the logging driver + + + +### Nested Schema for `task_spec.placement` + +Optional: + +- **constraints** (Set of String) An array of constraints. e.g.: `node.role==manager` +- **max_replicas** (Number) Maximum number of replicas for per node (default value is `0`, which is unlimited) +- **platforms** (Block Set) Platforms stores all the platforms that the service's image can run on (see [below for nested schema](#nestedblock--task_spec--placement--platforms)) +- **prefs** (Set of String) Preferences provide a way to make the scheduler aware of factors such as topology. They are provided in order from highest to lowest precedence, e.g.: spread=node.role.manager + + +### Nested Schema for `task_spec.placement.platforms` + +Required: + +- **architecture** (String) The architecture, e.g. `amd64` +- **os** (String) The operation system, e.g. `linux` + + + + +### Nested Schema for `task_spec.resources` + +Optional: + +- **limits** (Block List, Max: 1) Describes the resources which can be advertised by a node and requested by a task (see [below for nested schema](#nestedblock--task_spec--resources--limits)) +- **reservation** (Block List, Max: 1) An object describing the resources which can be advertised by a node and requested by a task (see [below for nested schema](#nestedblock--task_spec--resources--reservation)) + + +### Nested Schema for `task_spec.resources.limits` + +Optional: + +- **memory_bytes** (Number) The amounf of memory in bytes the container allocates +- **nano_cpus** (Number) CPU shares in units of `1/1e9` (or `10^-9`) of the CPU. Should be at least 1000000 + + + +### Nested Schema for `task_spec.resources.reservation` + +Optional: + +- **generic_resources** (Block List, Max: 1) User-defined resources can be either Integer resources (e.g, `SSD=3`) or String resources (e.g, GPU=UUID1) (see [below for nested schema](#nestedblock--task_spec--resources--reservation--generic_resources)) +- **memory_bytes** (Number) The amounf of memory in bytes the container allocates +- **nano_cpus** (Number) CPU shares in units of 1/1e9 (or 10^-9) of the CPU. Should be at least 1000000 + + +### Nested Schema for `task_spec.resources.reservation.nano_cpus` + +Optional: + +- **discrete_resources_spec** (Set of String) The Integer resources +- **named_resources_spec** (Set of String) The String resources + + + + + +### Nested Schema for `task_spec.restart_policy` + +Optional: + +- **condition** (String) Condition for restart +- **delay** (String) Delay between restart attempts (ms|s|m|h) +- **max_attempts** (Number) Maximum attempts to restart a given container before giving up (default value is `0`, which is ignored) +- **window** (String) The time window used to evaluate the restart policy (default value is `0`, which is unbounded) (ms|s|m|h) + + + + +### Nested Schema for `auth` + +Required: + +- **server_address** (String) The address of the server for the authentication + +Optional: + +- **password** (String, Sensitive) The password +- **username** (String) The username + + + +### Nested Schema for `converge_config` + +Optional: + +- **delay** (String) The interval to check if the desired state is reached (ms|s). Defaults to `7s`. +- **timeout** (String) The timeout of the service to reach the desired state (s|m). Defaults to `3m` + + + +### Nested Schema for `endpoint_spec` + +Optional: + +- **mode** (String) The mode of resolution to use for internal load balancing between tasks +- **ports** (Block List) List of exposed ports that this service is accessible on from the outside. Ports can only be provided if 'vip' resolution mode is used (see [below for nested schema](#nestedblock--endpoint_spec--ports)) + + +### Nested Schema for `endpoint_spec.ports` + +Required: + +- **target_port** (Number) The port inside the container + +Optional: + +- **name** (String) A random name for the port +- **protocol** (String) Rrepresents the protocol of a port: 'tcp', 'udp' or 'sctp'. Defaults to `tcp`. +- **publish_mode** (String) Represents the mode in which the port is to be published: 'ingress' or 'host'. Defaults to `ingress`. +- **published_port** (Number) The port on the swarm hosts + + + + +### Nested Schema for `labels` + +Required: + +- **label** (String) Name of the label +- **value** (String) Value of the label + + + +### Nested Schema for `mode` + +Optional: + +- **global** (Boolean) The global service mode. Defaults to `false` +- **replicated** (Block List, Max: 1) The replicated service mode (see [below for nested schema](#nestedblock--mode--replicated)) + + +### Nested Schema for `mode.replicated` + +Optional: + +- **replicas** (Number) The amount of replicas of the service. Defaults to `1` + + + + +### Nested Schema for `rollback_config` + +Optional: + +- **delay** (String) Delay between task rollbacks (ns|us|ms|s|m|h). Defaults to `0s`. +- **failure_action** (String) Action on rollback failure: pause | continue. Defaults to `pause`. +- **max_failure_ratio** (String) Failure rate to tolerate during a rollback. Defaults to `0.0`. +- **monitor** (String) Duration after each task rollback to monitor for failure (ns|us|ms|s|m|h). Defaults to `5s`. +- **order** (String) Rollback order: either 'stop-first' or 'start-first'. Defaults to `stop-first`. +- **parallelism** (Number) Maximum number of tasks to be rollbacked in one iteration. Defaults to `1` + + + +### Nested Schema for `update_config` + +Optional: + +- **delay** (String) Delay between task updates (ns|us|ms|s|m|h). Defaults to `0s`. +- **failure_action** (String) Action on update failure: pause | continue | rollback. Defaults to `pause`. +- **max_failure_ratio** (String) Failure rate to tolerate during an update. Defaults to `0.0`. +- **monitor** (String) Duration after each task update to monitor for failure (ns|us|ms|s|m|h). Defaults to `5s`. +- **order** (String) Update order: either 'stop-first' or 'start-first'. Defaults to `stop-first`. +- **parallelism** (Number) Maximum number of tasks to be updated in one iteration. Defaults to `1` + +## Import + +Import is supported using the following syntax by providing the `id`: + +```shell +#!/bin/bash +terraform import docker_service.foo id +``` + +### Example + +Assuming you created a `service` as follows + +```shell +#!/bin/bash +docker service create --name foo -p 8080:80 nginx +# prints th ID +4pcphbxkfn2rffhbhe6czytgi +``` + +you provide the definition for the resource as follows + +```terraform +resource "docker_service" "foo" { + name = "foo" + + task_spec { + container_spec { + image = "nginx" + } + } + + endpoint_spec { + ports { + target_port = "80" + published_port = "8080" + + } + } +} +``` + +then the import command is as follows + +```shell +#!/bin/bash +terraform import docker_service.foo 4pcphbxkfn2rffhbhe6czytgi +``` \ No newline at end of file diff --git a/docs/resources/volume.md b/docs/resources/volume.md new file mode 100644 index 000000000..651cf5aa9 --- /dev/null +++ b/docs/resources/volume.md @@ -0,0 +1,77 @@ +--- +# generated by https://github.com/hashicorp/terraform-plugin-docs +page_title: "docker_volume Resource - terraform-provider-docker" +subcategory: "" +description: |- + Creates and destroys a volume in Docker. This can be used alongside docker_container container.md to prepare volumes that can be shared across containers. +--- + +# docker_volume (Resource) + +Creates and destroys a volume in Docker. This can be used alongside [docker_container](container.md) to prepare volumes that can be shared across containers. + +## Example Usage + +```terraform +resource "docker_volume" "shared_volume" { + name = "shared_volume" +} +``` + + +## Schema + +### Optional + +- **driver** (String) Driver type for the volume. Defaults to `local`. +- **driver_opts** (Map of String) Options specific to the driver. +- **id** (String) The ID of this resource. +- **labels** (Block Set) User-defined key/value metadata (see [below for nested schema](#nestedblock--labels)) +- **name** (String) The name of the Docker volume (will be generated if not provided). + +### Read-Only + +- **mountpoint** (String) The mountpoint of the volume. + + +### Nested Schema for `labels` + +Required: + +- **label** (String) Name of the label +- **value** (String) Value of the label + +## Import + +Import is supported using the following syntax by providing the `id`: + +```shell +#!/bin/bash +terraform import docker_volume.foo id +``` + +### Example + +Assuming you created a `volume` as follows + +```shell +#!/bin/bash +docker volume create +# prints the long ID +524b0457aa2a87dd2b75c74c3e4e53f406974249e63ab3ed9bf21e5644f9dc7d +``` + +you provide the definition for the resource as follows + +```terraform +resource "docker_volume" "foo" { + name = "524b0457aa2a87dd2b75c74c3e4e53f406974249e63ab3ed9bf21e5644f9dc7d" +} +``` + +then the import command is as follows + +```shell +#!/bin/bash +terraform import docker_volume.foo 524b0457aa2a87dd2b75c74c3e4e53f406974249e63ab3ed9bf21e5644f9dc7d +``` \ No newline at end of file diff --git a/examples/README.md b/examples/README.md new file mode 100644 index 000000000..e77755a39 --- /dev/null +++ b/examples/README.md @@ -0,0 +1,9 @@ +# Examples + +This directory contains examples that are mostly used for documentation, but can also be run/tested manually via the Terraform CLI. + +The document generation tool looks for files in the following locations by default. All other *.tf files besides the ones mentioned below are ignored by the documentation tool. This is useful for creating examples that can run and/or ar testable even if some parts are not relevant for the documentation. + +* **provider/provider.tf** example file for the provider index page +* **data-sources//data-source.tf** example file for the named data source page +* **resources//resource.tf** example file for the named data source page \ No newline at end of file diff --git a/examples/data-sources/docker_network/data-source.tf b/examples/data-sources/docker_network/data-source.tf new file mode 100644 index 000000000..6c8aff867 --- /dev/null +++ b/examples/data-sources/docker_network/data-source.tf @@ -0,0 +1,3 @@ +data "docker_network" "main" { + name = "main" +} diff --git a/examples/data-sources/docker_plugin/data-source.tf b/examples/data-sources/docker_plugin/data-source.tf new file mode 100644 index 000000000..ae0196d7d --- /dev/null +++ b/examples/data-sources/docker_plugin/data-source.tf @@ -0,0 +1,9 @@ +### With alias +data "docker_plugin" "by_alias" { + alias = "sample-volume-plugin:latest" +} + +### With ID +data "docker_plugin" "by_id" { + id = "e9a9db917b3bfd6706b5d3a66d4bceb9f" +} \ No newline at end of file diff --git a/examples/data-sources/docker_registry_image/data-source.tf b/examples/data-sources/docker_registry_image/data-source.tf new file mode 100644 index 000000000..f226d2ea6 --- /dev/null +++ b/examples/data-sources/docker_registry_image/data-source.tf @@ -0,0 +1,8 @@ +data "docker_registry_image" "ubuntu" { + name = "ubuntu:precise" +} + +resource "docker_image" "ubuntu" { + name = data.docker_registry_image.ubuntu.name + pull_triggers = [data.docker_registry_image.ubuntu.sha256_digest] +} diff --git a/examples/provider/provider-cert.tf b/examples/provider/provider-cert.tf new file mode 100644 index 000000000..1bd0625d4 --- /dev/null +++ b/examples/provider/provider-cert.tf @@ -0,0 +1,11 @@ +provider "docker" { + host = "tcp://your-host-ip:2376/" + + # -> specify either + cert_path = pathexpand("~/.docker") + + # -> or the following + ca_material = file(pathexpand("~/.docker/ca.pem")) # this can be omitted + cert_material = file(pathexpand("~/.docker/cert.pem")) + key_material = file(pathexpand("~/.docker/key.pem")) +} diff --git a/examples/provider/provider-credentials.tf b/examples/provider/provider-credentials.tf new file mode 100644 index 000000000..f1ca5a80f --- /dev/null +++ b/examples/provider/provider-credentials.tf @@ -0,0 +1,27 @@ +provider "docker" { + host = "tcp://localhost:2376" + + registry_auth { + address = "registry.hub.docker.com" + config_file = pathexpand("~/.docker/config.json") + } + + registry_auth { + address = "registry.my.company.com" + config_file_content = var.plain_content_of_config_file + } + + registry_auth { + address = "quay.io:8181" + username = "someuser" + password = "somepass" + } +} + +data "docker_registry_image" "quay" { + name = "myorg/privateimage" +} + +data "docker_registry_image" "quay" { + name = "quay.io:8181/myorg/privateimage" +} diff --git a/examples/provider/provider-docker-config.json b/examples/provider/provider-docker-config.json new file mode 100644 index 000000000..4e82d5dbb --- /dev/null +++ b/examples/provider/provider-docker-config.json @@ -0,0 +1,9 @@ +{ + "auths": { + "repo.mycompany:8181": { + "auth": "dXNlcjpwYXNz=" + }, + "otherrepo.other-company:8181": {} + }, + "credsStore": "osxkeychain" +} \ No newline at end of file diff --git a/examples/provider/provider-ssh.tf b/examples/provider/provider-ssh.tf new file mode 100644 index 000000000..8b49c985f --- /dev/null +++ b/examples/provider/provider-ssh.tf @@ -0,0 +1,23 @@ +terraform { + required_providers { + docker = { + source = "kreuzwerker/docker" + version = "2.11.0" + } + } +} + +provider "docker" { + host = "unix:///var/run/docker.sock" +} + +# Pulls the image +resource "docker_image" "ubuntu" { + name = "ubuntu:latest" +} + +# Create a container +resource "docker_container" "foo" { + image = docker_image.ubuntu.latest + name = "foo" +} diff --git a/examples/provider/provider-tf12.tf b/examples/provider/provider-tf12.tf new file mode 100644 index 000000000..c3cd7849e --- /dev/null +++ b/examples/provider/provider-tf12.tf @@ -0,0 +1,15 @@ +provider "docker" { + version = "~> 2.11.0" + host = "unix:///var/run/docker.sock" +} + +# Pulls the image +resource "docker_image" "ubuntu" { + name = "ubuntu:latest" +} + +# Create a container +resource "docker_container" "foo" { + image = docker_image.ubuntu.latest + name = "foo" +} diff --git a/examples/provider/provider-tf13.tf b/examples/provider/provider-tf13.tf new file mode 100644 index 000000000..8b49c985f --- /dev/null +++ b/examples/provider/provider-tf13.tf @@ -0,0 +1,23 @@ +terraform { + required_providers { + docker = { + source = "kreuzwerker/docker" + version = "2.11.0" + } + } +} + +provider "docker" { + host = "unix:///var/run/docker.sock" +} + +# Pulls the image +resource "docker_image" "ubuntu" { + name = "ubuntu:latest" +} + +# Create a container +resource "docker_container" "foo" { + image = docker_image.ubuntu.latest + name = "foo" +} diff --git a/examples/resources/docker_config/foo.config.json.tpl b/examples/resources/docker_config/foo.config.json.tpl new file mode 100644 index 000000000..537716fb1 --- /dev/null +++ b/examples/resources/docker_config/foo.config.json.tpl @@ -0,0 +1,5 @@ +{ + "server": { + "public_port": ${port} + } +} \ No newline at end of file diff --git a/examples/resources/docker_config/import-create.sh b/examples/resources/docker_config/import-create.sh new file mode 100644 index 000000000..aec0beba3 --- /dev/null +++ b/examples/resources/docker_config/import-create.sh @@ -0,0 +1,4 @@ +#!/bin/bash +printf '{"a":"b"}' | docker config create foo - +# prints the id +08c26c477474478d971139f750984775a7f019dbe8a2e7f09d66a187c009e66d \ No newline at end of file diff --git a/examples/resources/docker_config/import-resource.sh b/examples/resources/docker_config/import-resource.sh new file mode 100644 index 000000000..df3f6fe22 --- /dev/null +++ b/examples/resources/docker_config/import-resource.sh @@ -0,0 +1,2 @@ +#!/bin/bash +terraform import docker_config.foo 08c26c477474478d971139f750984775a7f019dbe8a2e7f09d66a187c009e66d \ No newline at end of file diff --git a/examples/resources/docker_config/import-resource.tf b/examples/resources/docker_config/import-resource.tf new file mode 100644 index 000000000..ed2cf9533 --- /dev/null +++ b/examples/resources/docker_config/import-resource.tf @@ -0,0 +1,4 @@ +resource "docker_config" "foo" { + name = "foo" + data = base64encode("{\"a\": \"b\"}") +} diff --git a/examples/resources/docker_config/import.sh b/examples/resources/docker_config/import.sh new file mode 100644 index 000000000..52a173dc7 --- /dev/null +++ b/examples/resources/docker_config/import.sh @@ -0,0 +1,2 @@ +#!/bin/bash +terraform import docker_config.foo id \ No newline at end of file diff --git a/examples/resources/docker_config/resource-advanced.tf b/examples/resources/docker_config/resource-advanced.tf new file mode 100644 index 000000000..b4766978e --- /dev/null +++ b/examples/resources/docker_config/resource-advanced.tf @@ -0,0 +1,10 @@ +resource "docker_config" "foo_config" { + name = "foo_config" + data = base64encode( + templatefile("${path.cwd}/foo.config.json.tpl", + { + port = 8080 + } + ) + ) +} \ No newline at end of file diff --git a/examples/resources/docker_config/resource-basic.tf b/examples/resources/docker_config/resource-basic.tf new file mode 100644 index 000000000..8b8ca6d9b --- /dev/null +++ b/examples/resources/docker_config/resource-basic.tf @@ -0,0 +1,4 @@ +resource "docker_config" "foo_config" { + name = "foo_config" + data = base64encode("{\"a\": \"b\"}") +} \ No newline at end of file diff --git a/examples/resources/docker_config/resource-no-downtime.tf b/examples/resources/docker_config/resource-no-downtime.tf new file mode 100644 index 000000000..90cd2db19 --- /dev/null +++ b/examples/resources/docker_config/resource-no-downtime.tf @@ -0,0 +1,26 @@ +resource "docker_config" "service_config" { + name = "${var.service_name}-config-${replace(timestamp(), ":", ".")}" + data = base64encode( + templatefile("${path.cwd}/foo.config.json.tpl", + { + port = 8080 + } + ) + ) + + lifecycle { + ignore_changes = ["name"] + create_before_destroy = true + } +} + +resource "docker_service" "service" { + # ... other attributes omitted for brevity + configs = [ + { + config_id = docker_config.service_config.id + config_name = docker_config.service_config.name + file_name = "/root/configs/configs.json" + }, + ] +} diff --git a/examples/resources/docker_container/import-create.sh b/examples/resources/docker_container/import-create.sh new file mode 100644 index 000000000..b8917445a --- /dev/null +++ b/examples/resources/docker_container/import-create.sh @@ -0,0 +1,4 @@ +#!/bin/bash +docker run --name foo -p8080:80 -d nginx +# prints the container ID +9a550c0f0163d39d77222d3efd58701b625d47676c25c686c95b5b92d1cba6fd \ No newline at end of file diff --git a/examples/resources/docker_container/import-resource.sh b/examples/resources/docker_container/import-resource.sh new file mode 100644 index 000000000..7a9b4ea48 --- /dev/null +++ b/examples/resources/docker_container/import-resource.sh @@ -0,0 +1,2 @@ +#!/bin/bash +terraform import docker_container.foo 9a550c0f0163d39d77222d3efd58701b625d47676c25c686c95b5b92d1cba6fd \ No newline at end of file diff --git a/examples/resources/docker_container/import-resource.tf b/examples/resources/docker_container/import-resource.tf new file mode 100644 index 000000000..f1d26e980 --- /dev/null +++ b/examples/resources/docker_container/import-resource.tf @@ -0,0 +1,9 @@ +resource "docker_container" "foo" { + name = "foo" + image = "nginx" + + ports { + internal = "80" + external = "8080" + } +} diff --git a/examples/resources/docker_container/import.sh b/examples/resources/docker_container/import.sh new file mode 100644 index 000000000..d1e396f27 --- /dev/null +++ b/examples/resources/docker_container/import.sh @@ -0,0 +1,2 @@ +#!/bin/bash +terraform import docker_container.foo id \ No newline at end of file diff --git a/examples/resources/docker_container/resource.tf b/examples/resources/docker_container/resource.tf new file mode 100644 index 000000000..d7f2bd212 --- /dev/null +++ b/examples/resources/docker_container/resource.tf @@ -0,0 +1,10 @@ +# Start a container +resource "docker_container" "ubuntu" { + name = "foo" + image = docker_image.ubuntu.latest +} + +# Find the latest Ubuntu precise image. +resource "docker_image" "ubuntu" { + name = "ubuntu:precise" +} diff --git a/examples/resources/docker_image/resource-build.tf b/examples/resources/docker_image/resource-build.tf new file mode 100644 index 000000000..9400c3c7a --- /dev/null +++ b/examples/resources/docker_image/resource-build.tf @@ -0,0 +1,13 @@ +resource "docker_image" "zoo" { + name = "zoo" + build { + path = "." + tag = ["zoo:develop"] + build_arg = { + foo : "zoo" + } + label = { + author : "zoo" + } + } +} \ No newline at end of file diff --git a/examples/resources/docker_image/resource-dynamic.tf b/examples/resources/docker_image/resource-dynamic.tf new file mode 100644 index 000000000..00d363f68 --- /dev/null +++ b/examples/resources/docker_image/resource-dynamic.tf @@ -0,0 +1,8 @@ +data "docker_registry_image" "ubuntu" { + name = "ubuntu:precise" +} + +resource "docker_image" "ubuntu" { + name = data.docker_registry_image.ubuntu.name + pull_triggers = [data.docker_registry_image.ubuntu.sha256_digest] +} \ No newline at end of file diff --git a/examples/resources/docker_image/resource.tf b/examples/resources/docker_image/resource.tf new file mode 100644 index 000000000..6264ab5fe --- /dev/null +++ b/examples/resources/docker_image/resource.tf @@ -0,0 +1,3 @@ +resource "docker_image" "ubuntu" { + name = "ubuntu:precise" +} \ No newline at end of file diff --git a/examples/resources/docker_network/import-create.sh b/examples/resources/docker_network/import-create.sh new file mode 100644 index 000000000..0dbaee2d3 --- /dev/null +++ b/examples/resources/docker_network/import-create.sh @@ -0,0 +1,4 @@ +#!/bin/bash +docker network create foo +# prints the long ID +87b57a9b91ecab2db2a6dbf38df74c67d7c7108cbe479d6576574ec2cd8c2d73 \ No newline at end of file diff --git a/examples/resources/docker_network/import-resource.sh b/examples/resources/docker_network/import-resource.sh new file mode 100644 index 000000000..c4976cef1 --- /dev/null +++ b/examples/resources/docker_network/import-resource.sh @@ -0,0 +1,2 @@ +#!/bin/bash +terraform import docker_network.foo 87b57a9b91ecab2db2a6dbf38df74c67d7c7108cbe479d6576574ec2cd8c2d73 \ No newline at end of file diff --git a/examples/resources/docker_network/import-resource.tf b/examples/resources/docker_network/import-resource.tf new file mode 100644 index 000000000..aff4cdb74 --- /dev/null +++ b/examples/resources/docker_network/import-resource.tf @@ -0,0 +1,3 @@ +resource "docker_network" "foo" { + name = "foo" +} diff --git a/examples/resources/docker_network/import.sh b/examples/resources/docker_network/import.sh new file mode 100644 index 000000000..4c0668edb --- /dev/null +++ b/examples/resources/docker_network/import.sh @@ -0,0 +1,2 @@ +#!/bin/bash +terraform import docker_network.foo id \ No newline at end of file diff --git a/examples/resources/docker_network/resource.tf b/examples/resources/docker_network/resource.tf new file mode 100644 index 000000000..448b7493e --- /dev/null +++ b/examples/resources/docker_network/resource.tf @@ -0,0 +1,3 @@ +resource "docker_network" "private_network" { + name = "my_network" +} \ No newline at end of file diff --git a/examples/resources/docker_plugin/import.sh b/examples/resources/docker_plugin/import.sh new file mode 100644 index 000000000..c0db01c06 --- /dev/null +++ b/examples/resources/docker_plugin/import.sh @@ -0,0 +1,2 @@ +#!/bin/bash +terraform import docker_plugin.sample-volume-plugin "$(docker plugin inspect -f {{.ID}} tiborvass/sample-volume-plugin:latest)" \ No newline at end of file diff --git a/examples/resources/docker_plugin/resource.tf b/examples/resources/docker_plugin/resource.tf new file mode 100644 index 000000000..f0e6f461a --- /dev/null +++ b/examples/resources/docker_plugin/resource.tf @@ -0,0 +1,16 @@ +resource "docker_plugin" "sample-volume-plugin" { + name = "docker.io/tiborvass/sample-volume-plugin:latest" +} + +resource "docker_plugin" "sample-volume-plugin" { + name = "tiborvass/sample-volume-plugin" + alias = "sample-volume-plugin" + enabled = false + grant_all_permissions = true + force_destroy = true + enable_timeout = 60 + force_disable = true + env = [ + "DEBUG=1" + ] +} diff --git a/examples/resources/docker_registry_image/resource.tf b/examples/resources/docker_registry_image/resource.tf new file mode 100644 index 000000000..665cc25da --- /dev/null +++ b/examples/resources/docker_registry_image/resource.tf @@ -0,0 +1,7 @@ +resource "docker_registry_image" "helloworld" { + name = "helloworld:1.0" + + build { + context = "pathToContextFolder" + } +} \ No newline at end of file diff --git a/examples/resources/docker_secret/foo.secret.json.tpl b/examples/resources/docker_secret/foo.secret.json.tpl new file mode 100644 index 000000000..0e31c8501 --- /dev/null +++ b/examples/resources/docker_secret/foo.secret.json.tpl @@ -0,0 +1,3 @@ +{ + "foo": "${secret}" +} \ No newline at end of file diff --git a/examples/resources/docker_secret/import.sh b/examples/resources/docker_secret/import.sh new file mode 100644 index 000000000..00ca30105 --- /dev/null +++ b/examples/resources/docker_secret/import.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +# Docker secret cannot be imported as the secret data, once set, is never exposed again. \ No newline at end of file diff --git a/examples/resources/docker_secret/resource-basic.tf b/examples/resources/docker_secret/resource-basic.tf new file mode 100644 index 000000000..ae56fbb10 --- /dev/null +++ b/examples/resources/docker_secret/resource-basic.tf @@ -0,0 +1,4 @@ +resource "docker_secret" "foo" { + name = "foo" + data = base64encode("{\"foo\": \"s3cr3t\"}") +} diff --git a/examples/resources/docker_secret/resource-no-downtime.tf b/examples/resources/docker_secret/resource-no-downtime.tf new file mode 100644 index 000000000..e9f03690f --- /dev/null +++ b/examples/resources/docker_secret/resource-no-downtime.tf @@ -0,0 +1,26 @@ +resource "docker_secret" "service_secret" { + name = "${var.service_name}-secret-${replace(timestamp(), ":", ".")}" + data = base64encode( + templatefile("${path.cwd}/foo.secret.json.tpl", + { + secret = "s3cr3t" + } + ) + ) + + lifecycle { + ignore_changes = ["name"] + create_before_destroy = true + } +} + +resource "docker_service" "service" { + # ... + secrets = [ + { + secret_id = docker_secret.service_secret.id + secret_name = docker_secret.service_secret.name + file_name = "/root/configs/configs.json" + }, + ] +} diff --git a/examples/resources/docker_service/import-create.sh b/examples/resources/docker_service/import-create.sh new file mode 100644 index 000000000..549e7682f --- /dev/null +++ b/examples/resources/docker_service/import-create.sh @@ -0,0 +1,4 @@ +#!/bin/bash +docker service create --name foo -p 8080:80 nginx +# prints th ID +4pcphbxkfn2rffhbhe6czytgi \ No newline at end of file diff --git a/examples/resources/docker_service/import-resource.sh b/examples/resources/docker_service/import-resource.sh new file mode 100644 index 000000000..621948a2a --- /dev/null +++ b/examples/resources/docker_service/import-resource.sh @@ -0,0 +1,2 @@ +#!/bin/bash +terraform import docker_service.foo 4pcphbxkfn2rffhbhe6czytgi \ No newline at end of file diff --git a/examples/resources/docker_service/import-resource.tf b/examples/resources/docker_service/import-resource.tf new file mode 100644 index 000000000..ea25e828b --- /dev/null +++ b/examples/resources/docker_service/import-resource.tf @@ -0,0 +1,17 @@ +resource "docker_service" "foo" { + name = "foo" + + task_spec { + container_spec { + image = "nginx" + } + } + + endpoint_spec { + ports { + target_port = "80" + published_port = "8080" + + } + } +} diff --git a/examples/resources/docker_service/import.sh b/examples/resources/docker_service/import.sh new file mode 100644 index 000000000..08ecee7fa --- /dev/null +++ b/examples/resources/docker_service/import.sh @@ -0,0 +1,2 @@ +#!/bin/bash +terraform import docker_service.foo id \ No newline at end of file diff --git a/examples/resources/docker_service/resource-advanced.tf b/examples/resources/docker_service/resource-advanced.tf new file mode 100644 index 000000000..6cb673ccb --- /dev/null +++ b/examples/resources/docker_service/resource-advanced.tf @@ -0,0 +1,210 @@ +resource "docker_volume" "test_volume" { + name = "tftest-volume" +} + +resource "docker_config" "service_config" { + name = "tftest-full-myconfig" + data = "ewogICJwcmVmaXgiOiAiMTIzIgp9" +} + +resource "docker_secret" "service_secret" { + name = "tftest-mysecret" + data = "ewogICJrZXkiOiAiUVdFUlRZIgp9" +} + +resource "docker_network" "test_network" { + name = "tftest-network" + driver = "overlay" +} + +resource "docker_service" "foo" { + name = "tftest-service-basic" + + task_spec { + container_spec { + image = "repo.mycompany.com:8080/foo-service:v1" + + labels { + label = "foo.bar" + value = "baz" + } + + command = ["ls"] + args = ["-las"] + hostname = "my-fancy-service" + + env = { + MYFOO = "BAR" + } + + dir = "/root" + user = "root" + groups = ["docker", "foogroup"] + + privileges { + se_linux_context { + disable = true + user = "user-label" + role = "role-label" + type = "type-label" + level = "level-label" + } + } + + read_only = true + + mounts { + target = "/mount/test" + source = docker_volume.test_volume.name + type = "volume" + read_only = true + + bind_options { + propagation = "private" + } + } + + mounts { + # another mount + } + + stop_signal = "SIGTERM" + stop_grace_period = "10s" + + healthcheck { + test = ["CMD", "curl", "-f", "http://localhost:8080/health"] + interval = "5s" + timeout = "2s" + retries = 4 + } + + hosts { + host = "testhost" + ip = "10.0.1.0" + } + + dns_config { + nameservers = ["8.8.8.8"] + search = ["example.org"] + options = ["timeout:3"] + } + + secrets { + secret_id = docker_secret.service_secret.id + secret_name = docker_secret.service_secret.name + file_name = "/secrets.json" + file_uid = "0" + file_gid = "0" + file_mode = 0777 + } + + secrets { + # another secret + } + + configs { + config_id = docker_config.service_config.id + config_name = docker_config.service_config.name + file_name = "/configs.json" + } + + configs { + # another config + } + } + + resources { + limits { + nano_cpus = 1000000 + memory_bytes = 536870912 + } + + reservation { + nano_cpus = 1000000 + memory_bytes = 536870912 + + generic_resources { + named_resources_spec = [ + "GPU=UUID1", + ] + + discrete_resources_spec = [ + "SSD=3", + ] + } + } + } + + restart_policy = { + condition = "on-failure" + delay = "3s" + max_attempts = 4 + window = "10s" + } + + placement { + constraints = [ + "node.role==manager", + ] + + prefs = [ + "spread=node.role.manager", + ] + + max_replicas = 1 + } + + force_update = 0 + runtime = "container" + networks = [docker_network.test_network.id] + + log_driver { + name = "json-file" + + options { + max-size = "10m" + max-file = "3" + } + } + } + + mode { + replicated { + replicas = 2 + } + } + + update_config { + parallelism = 2 + delay = "10s" + failure_action = "pause" + monitor = "5s" + max_failure_ratio = "0.1" + order = "start-first" + } + + rollback_config { + parallelism = 2 + delay = "5ms" + failure_action = "pause" + monitor = "10h" + max_failure_ratio = "0.9" + order = "stop-first" + } + + endpoint_spec { + mode = "vip" + + ports { + name = "random" + protocol = "tcp" + target_port = "8080" + published_port = "8080" + publish_mode = "ingress" + } + + ports { + # another port + } + } +} diff --git a/examples/resources/docker_service/resource-basic-create.sh b/examples/resources/docker_service/resource-basic-create.sh new file mode 100644 index 000000000..947a85c5b --- /dev/null +++ b/examples/resources/docker_service/resource-basic-create.sh @@ -0,0 +1,2 @@ +#!/bin/bash +docker service create -d -p 8080 --name foo-service repo.mycompany.com:8080/foo-service:v1 \ No newline at end of file diff --git a/examples/resources/docker_service/resource-basic.tf b/examples/resources/docker_service/resource-basic.tf new file mode 100644 index 000000000..3feb0cca7 --- /dev/null +++ b/examples/resources/docker_service/resource-basic.tf @@ -0,0 +1,15 @@ +resource "docker_service" "foo" { + name = "foo-service" + + task_spec { + container_spec { + image = "repo.mycompany.com:8080/foo-service:v1" + } + } + + endpoint_spec { + ports { + target_port = "8080" + } + } +} \ No newline at end of file diff --git a/examples/resources/docker_volume/import-create.sh b/examples/resources/docker_volume/import-create.sh new file mode 100644 index 000000000..44a6d8bdc --- /dev/null +++ b/examples/resources/docker_volume/import-create.sh @@ -0,0 +1,4 @@ +#!/bin/bash +docker volume create +# prints the long ID +524b0457aa2a87dd2b75c74c3e4e53f406974249e63ab3ed9bf21e5644f9dc7d \ No newline at end of file diff --git a/examples/resources/docker_volume/import-resource.sh b/examples/resources/docker_volume/import-resource.sh new file mode 100644 index 000000000..03a07d04f --- /dev/null +++ b/examples/resources/docker_volume/import-resource.sh @@ -0,0 +1,2 @@ +#!/bin/bash +terraform import docker_volume.foo 524b0457aa2a87dd2b75c74c3e4e53f406974249e63ab3ed9bf21e5644f9dc7d \ No newline at end of file diff --git a/examples/resources/docker_volume/import-resource.tf b/examples/resources/docker_volume/import-resource.tf new file mode 100644 index 000000000..c02986ccf --- /dev/null +++ b/examples/resources/docker_volume/import-resource.tf @@ -0,0 +1,3 @@ +resource "docker_volume" "foo" { + name = "524b0457aa2a87dd2b75c74c3e4e53f406974249e63ab3ed9bf21e5644f9dc7d" +} diff --git a/examples/resources/docker_volume/import.sh b/examples/resources/docker_volume/import.sh new file mode 100644 index 000000000..34f53e115 --- /dev/null +++ b/examples/resources/docker_volume/import.sh @@ -0,0 +1,2 @@ +#!/bin/bash +terraform import docker_volume.foo id \ No newline at end of file diff --git a/examples/resources/docker_volume/resource.tf b/examples/resources/docker_volume/resource.tf new file mode 100644 index 000000000..de919609a --- /dev/null +++ b/examples/resources/docker_volume/resource.tf @@ -0,0 +1,3 @@ +resource "docker_volume" "shared_volume" { + name = "shared_volume" +} \ No newline at end of file diff --git a/examples/ssh-protocol/main.tf b/examples/ssh-protocol/main.tf index b56568762..f27036826 100644 --- a/examples/ssh-protocol/main.tf +++ b/examples/ssh-protocol/main.tf @@ -13,11 +13,11 @@ resource "docker_image" "test" { # scaffolding variable "pub_key" { - type = "string" + type = string } provider "docker" { - version = "~> 1.2.0" + version = "~> 1.2.0" } resource "docker_image" "dind" { diff --git a/go.mod b/go.mod index 09beab7c9..e01e90fa5 100644 --- a/go.mod +++ b/go.mod @@ -9,6 +9,7 @@ require ( github.com/docker/go-connections v0.4.0 github.com/docker/go-units v0.4.0 github.com/hashicorp/go-cty v1.4.1-0.20200414143053-d3edf31b6320 + github.com/hashicorp/terraform-plugin-docs v0.4.0 // indirect github.com/hashicorp/terraform-plugin-sdk/v2 v2.6.1 github.com/mitchellh/go-homedir v1.1.0 github.com/moby/buildkit v0.8.2 // indirect diff --git a/go.sum b/go.sum index 2872631a7..712dd68f0 100644 --- a/go.sum +++ b/go.sum @@ -1,4 +1,5 @@ bazil.org/fuse v0.0.0-20160811212531-371fbbdaa898/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8= +bazil.org/fuse v0.0.0-20180421153158-65cc252bf669 h1:FNCRpXiquG1aoyqcIWVFmpTSKVcx2bQD38uZZeGtdlw= bazil.org/fuse v0.0.0-20180421153158-65cc252bf669/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8= cloud.google.com/go v0.25.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= @@ -26,13 +27,17 @@ cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNF cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= +cloud.google.com/go/bigquery v1.8.0 h1:PQcPefKFdaIzjQFbiyOgAqyx8q5djaE7x9Sqe712DPA= cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= +cloud.google.com/go/datastore v1.1.0 h1:/May9ojXjRkPBNVrq+oWLqmWCkr4OU5uRY29bu0mRyQ= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/firestore v1.1.0 h1:9x7Bx0A9R5/M9jibeJeZWqjeVEIxYW9fZYqB9a70/bY= cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= +cloud.google.com/go/pubsub v1.3.1 h1:ukjixP1wl0LpnZ6LWtZJ0mX5tBmjp1f8Sqer8Z2OMUU= cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= @@ -40,18 +45,29 @@ cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohl cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0 h1:STgFzyU5/8miMl0//zKh2aQeTyeaUH3WN9bSUiJ09bA= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= +code.gitea.io/sdk/gitea v0.12.0 h1:hvDCz4wtFvo7rf5Ebj8tGd4aJ4wLPKX3BKFX9Dk1Pgs= code.gitea.io/sdk/gitea v0.12.0/go.mod h1:z3uwDV/b9Ls47NGukYM9XhnHtqPh/J+t40lsUrR6JDY= +contrib.go.opencensus.io/exporter/aws v0.0.0-20181029163544-2befc13012d0 h1:YsbWYxDZkC7x2OxlsDEYvvEXZ3cBI3qBgUK5BqkZvRw= contrib.go.opencensus.io/exporter/aws v0.0.0-20181029163544-2befc13012d0/go.mod h1:uu1P0UCM/6RbsMrgPa98ll8ZcHM858i/AD06a9aLRCA= +contrib.go.opencensus.io/exporter/ocagent v0.5.0 h1:TKXjQSRS0/cCDrP7KvkgU6SmILtF/yV2TOs/02K/WZQ= contrib.go.opencensus.io/exporter/ocagent v0.5.0/go.mod h1:ImxhfLRpxoYiSq891pBrLVhN+qmP8BTVvdH2YLs7Gl0= +contrib.go.opencensus.io/exporter/stackdriver v0.12.1 h1:Dll2uFfOVI3fa8UzsHyP6z0M6fEc9ZTAMo+Y3z282Xg= contrib.go.opencensus.io/exporter/stackdriver v0.12.1/go.mod h1:iwB6wGarfphGGe/e5CWqyUk/cLzKnWsOKPVW3no6OTw= +contrib.go.opencensus.io/integrations/ocsql v0.1.4 h1:kfg5Yyy1nYUrqzyfW5XX+dzMASky8IJXhtHe0KTYNS4= contrib.go.opencensus.io/integrations/ocsql v0.1.4/go.mod h1:8DsSdjz3F+APR+0z0WkU1aRorQCFfRxvqjUUPMbF3fE= +contrib.go.opencensus.io/resource v0.1.1 h1:4r2CANuYhKGmYWP02+5E94rLRcS/YeD+KlxSrOsMxk0= contrib.go.opencensus.io/resource v0.1.1/go.mod h1:F361eGI91LCmW1I/Saf+rX0+OFcigGlFvXwEGEnkRLA= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9 h1:VpgP7xuJadIUuKccphEpTJnWhS2jkQyMt6Y7pJCD7fY= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg= +git.apache.org/thrift.git v0.12.0 h1:CMxsZlAmxKs+VAZMlDDL0wXciMblJcutQbEe3A9CYUM= git.apache.org/thrift.git v0.12.0/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg= +github.com/AkihiroSuda/containerd-fuse-overlayfs v1.0.0 h1:LhS8BiMh7ULa6zkkF5XI6piLV5XVTR7mSm9j3hTUB/k= github.com/AkihiroSuda/containerd-fuse-overlayfs v1.0.0/go.mod h1:0mMDvQFeLbbn1Wy8P2j3hwFhqBq+FKn8OZPno8WLmp8= +github.com/Azure/azure-amqp-common-go/v2 v2.1.0 h1:+QbFgmWCnPzdaRMfsI0Yb6GrRdBj5jVL8N3EXuEUcBQ= github.com/Azure/azure-amqp-common-go/v2 v2.1.0/go.mod h1:R8rea+gJRuJR6QxTir/XuEd+YuKoUiazDC/N96FiDEU= github.com/Azure/azure-pipeline-go v0.2.1/go.mod h1:UGSo8XybXnIGZ3epmeBw7Jdz+HiUVpqIlpz/HKHylF4= +github.com/Azure/azure-pipeline-go v0.2.2 h1:6oiIS9yaG6XCCzhgAgKFfIWyo4LLCiDhZot6ltoThhY= github.com/Azure/azure-pipeline-go v0.2.2/go.mod h1:4rQ/NZncSvGqNkkOsNpOU1tgoNuIlp9AfUH5G1tvCHc= github.com/Azure/azure-sdk-for-go v16.2.1+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/azure-sdk-for-go v19.1.1+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= @@ -59,8 +75,11 @@ github.com/Azure/azure-sdk-for-go v29.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9mo github.com/Azure/azure-sdk-for-go v30.1.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/azure-sdk-for-go v35.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/azure-sdk-for-go v38.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= +github.com/Azure/azure-sdk-for-go v42.3.0+incompatible h1:PAHkmPqd/vQV4LJcqzEUM1elCyTMWjbrO8oFMl0dvBE= github.com/Azure/azure-sdk-for-go v42.3.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= +github.com/Azure/azure-service-bus-go v0.9.1 h1:G1qBLQvHCFDv9pcpgwgFkspzvnGknJRR0PYJ9ytY/JA= github.com/Azure/azure-service-bus-go v0.9.1/go.mod h1:yzBx6/BUGfjfeqbRZny9AQIbIe3AcV9WZbAdpkoXOa0= +github.com/Azure/azure-storage-blob-go v0.8.0 h1:53qhf0Oxa0nOjgbDeeYPUeyiNmafAFEY95rZLK0Tj6o= github.com/Azure/azure-storage-blob-go v0.8.0/go.mod h1:lPI3aLPpuLTeUwh1sViKXFxwl2B6teiRqI0deQUvsw0= github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78 h1:w+iIsaOQNcT7OZ575w+acHgRric5iCyQh+xv+KJ4HB8= github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= @@ -68,11 +87,13 @@ github.com/Azure/go-autorest v10.8.1+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSW github.com/Azure/go-autorest v10.15.5+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= github.com/Azure/go-autorest v12.0.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= github.com/Azure/go-autorest v14.1.1+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= +github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs= github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= github.com/Azure/go-autorest/autorest v0.9.3/go.mod h1:GsRuLYvwzLjjjRoWEIyMUaYq8GNUx2nRB378IPt/1p0= github.com/Azure/go-autorest/autorest v0.9.6/go.mod h1:/FALq9T/kS7b5J5qsQ+RSTUdAmGFqi0vUdVNNx8q630= github.com/Azure/go-autorest/autorest v0.10.2/go.mod h1:/FALq9T/kS7b5J5qsQ+RSTUdAmGFqi0vUdVNNx8q630= +github.com/Azure/go-autorest/autorest v0.11.1 h1:eVvIXUKiTgv++6YnWb42DUA1YL7qDugnKP0HljexdnQ= github.com/Azure/go-autorest/autorest v0.11.1/go.mod h1:JFgpikqFJ/MleTTxwepExTKnFUKKszPS8UavbQYUMuw= github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= github.com/Azure/go-autorest/autorest/adal v0.8.0/go.mod h1:Z6vX6WXXuyieHAXwMj0S6HY6e6wcHn37qQMBQlvY3lc= @@ -80,35 +101,53 @@ github.com/Azure/go-autorest/autorest/adal v0.8.1/go.mod h1:ZjhuQClTqx435SRJ2iMl github.com/Azure/go-autorest/autorest/adal v0.8.2/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q= github.com/Azure/go-autorest/autorest/adal v0.8.3/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q= github.com/Azure/go-autorest/autorest/adal v0.9.0/go.mod h1:/c022QCutn2P7uY+/oQWWNcK9YU+MH96NgK+jErpbcg= +github.com/Azure/go-autorest/autorest/adal v0.9.5 h1:Y3bBUV4rTuxenJJs41HU3qmqsb+auo+a3Lz+PlJPpL0= github.com/Azure/go-autorest/autorest/adal v0.9.5/go.mod h1:B7KF7jKIeC9Mct5spmyCB/A8CG/sEz1vwIRGv/bbw7A= +github.com/Azure/go-autorest/autorest/azure/auth v0.4.2 h1:iM6UAvjR97ZIeR93qTcwpKNMpV+/FTWjwEbuPD495Tk= github.com/Azure/go-autorest/autorest/azure/auth v0.4.2/go.mod h1:90gmfKdlmKgfjUpnCEpOJzsUEjrWDSLwHIG73tSXddM= +github.com/Azure/go-autorest/autorest/azure/cli v0.3.1 h1:LXl088ZQlP0SBppGFsRZonW6hSvwgL5gRByMbvUbx8U= github.com/Azure/go-autorest/autorest/azure/cli v0.3.1/go.mod h1:ZG5p860J94/0kI9mNJVoIoLgXcirM2gF5i2kWloofxw= github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA= github.com/Azure/go-autorest/autorest/date v0.2.0/go.mod h1:vcORJHLJEh643/Ioh9+vPmf1Ij9AEBM5FuBIXLmIy0g= +github.com/Azure/go-autorest/autorest/date v0.3.0 h1:7gUk1U5M/CQbp9WoqinNzJar+8KY+LPI6wiWrP/myHw= github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74= github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM= github.com/Azure/go-autorest/autorest/mocks v0.4.0/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= +github.com/Azure/go-autorest/autorest/mocks v0.4.1 h1:K0laFcLE6VLTOwNgSxaGbUcLPuGXlNkbVvq4cW4nIHk= github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= github.com/Azure/go-autorest/autorest/to v0.2.0/go.mod h1:GunWKJp1AEqgMaGLV+iocmRAJWqST1wQYhyyjXJ3SJc= +github.com/Azure/go-autorest/autorest/to v0.3.0 h1:zebkZaadz7+wIQYgC7GXaz3Wb28yKYfVkkBKwc38VF8= github.com/Azure/go-autorest/autorest/to v0.3.0/go.mod h1:MgwOyqaIuKdG4TL/2ywSsIWKAfJfgHDo8ObuUk3t5sA= github.com/Azure/go-autorest/autorest/validation v0.1.0/go.mod h1:Ha3z/SqBeaalWQvokg3NZAlQTalVMtOIAs1aGK7G6u8= +github.com/Azure/go-autorest/autorest/validation v0.2.0 h1:15vMO4y76dehZSq7pAaOLQxC6dZYsSrj2GQpflyM/L4= github.com/Azure/go-autorest/autorest/validation v0.2.0/go.mod h1:3EEqHnBxQGHXRYq3HT1WyXAvT7LLY3tl70hw6tQIbjI= github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= +github.com/Azure/go-autorest/logger v0.2.0 h1:e4RVHVZKC5p6UANLJHkM4OfR1UKZPj8Wt8Pcx+3oqrE= github.com/Azure/go-autorest/logger v0.2.0/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= +github.com/Azure/go-autorest/tracing v0.6.0 h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUMfuitfgcfuo= github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= +github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802 h1:1BDTz0u9nC3//pOCMdNH+CiXJVYJh5UQNCOBG7jbELc= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/Djarvur/go-err113 v0.0.0-20200410182137-af658d038157/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs= +github.com/Djarvur/go-err113 v0.1.0 h1:uCRZZOdMQ0TZPHYTdYpoC0bLYJKPEHPUJ8MeAa51lNU= github.com/Djarvur/go-err113 v0.1.0/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs= +github.com/GoogleCloudPlatform/cloudsql-proxy v0.0.0-20191009163259-e802c2cb94ae h1:sTOp2Ajiew5XIH92YSdwhYc+bgpUX5j5TKK/Ac8Saw8= github.com/GoogleCloudPlatform/cloudsql-proxy v0.0.0-20191009163259-e802c2cb94ae/go.mod h1:mjwGPas4yKduTyubHvD1Atl9r1rUq8DfVy+gkVvZ+oo= +github.com/GoogleCloudPlatform/k8s-cloud-provider v0.0.0-20190822182118-27a4ced34534 h1:N7lSsF+R7wSulUADi36SInSQA3RvfO/XclHQfedr0qk= github.com/GoogleCloudPlatform/k8s-cloud-provider v0.0.0-20190822182118-27a4ced34534/go.mod h1:iroGtC8B3tQiqtds1l+mgk/BBOrxbqjH+eUfFQYRc14= +github.com/Masterminds/goutils v1.1.0 h1:zukEsf/1JZwCMgHiK3GZftabmxiCw4apj3a28RPBiVg= github.com/Masterminds/goutils v1.1.0/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= +github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= github.com/Masterminds/semver/v3 v3.0.3/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= +github.com/Masterminds/semver/v3 v3.1.0 h1:Y2lUDsFKVRSYGojLJ1yLxSXdMmMYTYls0rCvoqmMUQk= github.com/Masterminds/semver/v3 v3.1.0/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= +github.com/Masterminds/sprig v2.22.0+incompatible h1:z4yfnGrZ7netVz+0EDJ0Wi+5VZCSYp4Z0m2dk6cEM60= github.com/Masterminds/sprig v2.22.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= github.com/Microsoft/go-winio v0.4.11/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA= github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= @@ -128,52 +167,83 @@ github.com/Microsoft/hcsshim v0.8.14/go.mod h1:NtVKoYxQuTLx6gEq0L96c9Ju4JbRJ4nY2 github.com/Microsoft/hcsshim v0.8.15 h1:Aof83YILRs2Vx3GhHqlvvfyx1asRJKMFIMeVlHsZKtI= github.com/Microsoft/hcsshim v0.8.15/go.mod h1:x38A4YbHbdxJtc0sF6oIz+RG0npwSCAvn69iY6URG00= github.com/Microsoft/hcsshim/test v0.0.0-20200826032352-301c83a30e7c/go.mod h1:30A5igQ91GEmhYJF8TaRP79pMBOYynRsyOByfVV0dU4= +github.com/Microsoft/hcsshim/test v0.0.0-20201218223536-d3e5debf77da h1:sqPBuX6WumurdHaSRbS8xyyyP8Rf7kUpLUlJaN7rztw= github.com/Microsoft/hcsshim/test v0.0.0-20201218223536-d3e5debf77da/go.mod h1:5hlzMzRKMLyo42nCZ9oml8AdTlq/0cvIaBv6tK1RehU= +github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46 h1:lsxEuwrXEAokXB9qhlbKWPpo3KMLZQ5WB5WLQRW1uq0= github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= +github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/OpenPeeDeeP/depguard v1.0.1 h1:VlW4R6jmBIv3/u1JNlawEvJMM4J+dPORPaZasQee8Us= github.com/OpenPeeDeeP/depguard v1.0.1/go.mod h1:xsIw86fROiiwelg+jB2uM9PiKihMMmUx/1V+TNhjQvM= github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI= github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= +github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= +github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d h1:UrqY+r/OJnIp5u0s1SbQ8dVfLCZJsnvazdBP5hS4iRs= github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ= +github.com/Shopify/sarama v1.19.0 h1:9oksLxC6uxVPHPVYUmq6xhr1BOF/hHobWH2UzO67z1s= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= +github.com/Shopify/toxiproxy v2.1.4+incompatible h1:TKdv8HiTLgE5wdJuEML90aBgNWsokNbMijUGhmcoBJc= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= +github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6 h1:fLjPD/aNc3UIOA6tDi6QXUemppXK3P9BI7mr2hd6gx8= github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= github.com/agext/levenshtein v1.2.1/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558= github.com/agext/levenshtein v1.2.2 h1:0S/Yg6LYmFJ5stwQeRp6EeOcCbj7xiqQSdNelsXvaqE= github.com/agext/levenshtein v1.2.2/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558= +github.com/agl/ed25519 v0.0.0-20170116200512-5312a6153412 h1:w1UutsfOrms1J05zt7ISrnJIXKzwaspym5BTKGx93EI= github.com/agl/ed25519 v0.0.0-20170116200512-5312a6153412/go.mod h1:WPjqKcmVOxf0XSf3YxCJs6N6AOSrOx3obionmG7T0y0= +github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7 h1:uSoVVbwJiQipAclBbw+8quDsfcvFjOpI5iCf4p/cqCs= github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs= +github.com/alecthomas/kingpin v2.2.6+incompatible h1:5svnBTFgJjZvGKyYBtMB0+m5wvrbUHiqye8wRJMlnYI= github.com/alecthomas/kingpin v2.2.6+incompatible/go.mod h1:59OFYbFVLKQKq+mqrL6Rw5bR0c3ACQaawgXx0QYndlE= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 h1:JYp7IbQjafoB+tBA3gMyHYHrpOtNuDiK/uB5uXxq5wM= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d h1:UQZhZ2O0vMHr2cI+DC1Mbh0TJxzA3RcLoMsFw+aXw7E= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= +github.com/alexflint/go-filemutex v0.0.0-20171022225611-72bdc8eae2ae h1:AMzIhMUqU3jMrZiTuW0zkYeKlKDAFD+DG20IoO421/Y= github.com/alexflint/go-filemutex v0.0.0-20171022225611-72bdc8eae2ae/go.mod h1:CgnQgUtFrFz9mxFNtED3jI5tLDjKlOM+oUF/sTk6ps0= +github.com/andybalholm/crlf v0.0.0-20171020200849-670099aa064f h1:NNJE6p4LchkmNfNskDUaSbrwxZzr7t2/lj2aS+q4oF0= github.com/andybalholm/crlf v0.0.0-20171020200849-670099aa064f/go.mod h1:k8feO4+kXDxro6ErPXBRTJ/ro2mf0SsFG8s7doP9kJE= +github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239 h1:kFOfPq6dUM1hTo4JG6LR5AXSUEsOjtdm0kw0FtQtMJA= github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= +github.com/apache/thrift v0.12.0 h1:pODnxUFNcjP9UTLZGTdeh+j16A8lJbRvD3rOtrk/7bs= github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/apex/log v1.1.4/go.mod h1:AlpoD9aScyQfJDVHmLMEcx4oU6LqzkWp4Mg9GdAcEvQ= +github.com/apex/log v1.3.0 h1:1fyfbPvUwD10nMoh3hY6MXzvZShJQn9/ck7ATgAt5pA= github.com/apex/log v1.3.0/go.mod h1:jd8Vpsr46WAe3EZSQ/IUMs2qQD/GOycT5rPWCO1yGcs= +github.com/apex/logs v0.0.4 h1:KmEBVwfDUOTFcBO8cfkJYwdQ5487UZSN+GteOGPmiro= github.com/apex/logs v0.0.4/go.mod h1:XzxuLZ5myVHDy9SAmYpamKKRNApGj54PfYLcFrXqDwo= +github.com/aphistic/golf v0.0.0-20180712155816-02c07f170c5a h1:2KLQMJ8msqoPHIPDufkxVcoTtcmE5+1sL9950m4R9Pk= github.com/aphistic/golf v0.0.0-20180712155816-02c07f170c5a/go.mod h1:3NqKYiepwy8kCu4PNA+aP7WUV72eXWJeP9/r3/K9aLE= +github.com/aphistic/sweet v0.2.0 h1:I4z+fAUqvKfvZV/CHi5dV0QuwbmIvYYFDjG0Ss5QpAs= github.com/aphistic/sweet v0.2.0/go.mod h1:fWDlIh/isSE9n6EPsRmC0det+whmX6dJid3stzu0Xys= +github.com/apparentlymart/go-cidr v1.0.1 h1:NmIwLZ/KdsjIUlhf+/Np40atNXm/+lZ5txfTJ/SpF+U= github.com/apparentlymart/go-cidr v1.0.1/go.mod h1:EBcsNrHc3zQeuaeCeCtQruQm+n9/YjEn/vI25Lg7Gwc= github.com/apparentlymart/go-dump v0.0.0-20180507223929-23540a00eaa3/go.mod h1:oL81AME2rN47vu18xqj1S1jPIPuN7afo62yKTNn3XMM= github.com/apparentlymart/go-dump v0.0.0-20190214190832-042adf3cf4a0 h1:MzVXffFUye+ZcSR6opIgz9Co7WcDx6ZcY+RjfFHoA0I= github.com/apparentlymart/go-dump v0.0.0-20190214190832-042adf3cf4a0/go.mod h1:oL81AME2rN47vu18xqj1S1jPIPuN7afo62yKTNn3XMM= github.com/apparentlymart/go-textseg v1.0.0 h1:rRmlIsPEEhUTIKQb7T++Nz/A5Q6C9IuX2wFoYVvnCs0= github.com/apparentlymart/go-textseg v1.0.0/go.mod h1:z96Txxhf3xSFMPmb5X/1W05FF/Nj9VFpLOpjS5yuumk= +github.com/apparentlymart/go-textseg/v12 v12.0.0 h1:bNEQyAGak9tojivJNkoqWErVCQbjdL7GzRt3F8NvfJ0= github.com/apparentlymart/go-textseg/v12 v12.0.0/go.mod h1:S/4uRK2UtaQttw1GenVJEynmyUenKwP++x/+DdGV/Ec= github.com/apparentlymart/go-textseg/v13 v13.0.0 h1:Y+KvPE1NYz0xl601PVImeQfFyEy6iT90AvPUL1NNfNw= github.com/apparentlymart/go-textseg/v13 v13.0.0/go.mod h1:ZK2fH7c4NqDTLtiYLvIkEghdlcqw7yxLeM89kiTRPUo= +github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e h1:QEF07wC0T1rKkctt1RINW/+RMTVmiwxETico2l3gxJA= github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= +github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6 h1:G1bPvciwNyF7IUmKXNt9Ak3m6u9DE1rF+RmtIkBpVdA= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= +github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da h1:8GUt8eRujhVEGZFFEjBj46YV4rDjvGrNxb0KMWYkL2I= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= +github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310 h1:BUAU3CGlLvorLI26FmByPp2eC2qla6E1Tw+scpcg/to= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= +github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a h1:idn718Q4B6AGu/h5Sxe66HYVdqdGu2l9Iebqhi/AEoA= github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= github.com/aws/aws-sdk-go v1.15.11/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0= github.com/aws/aws-sdk-go v1.15.27/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0= @@ -188,51 +258,85 @@ github.com/aws/aws-sdk-go v1.25.11/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpi github.com/aws/aws-sdk-go v1.27.1/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.31.6 h1:nKjQbpXhdImctBh1e0iLg9iQW/X297LPPuY/9f92R2k= github.com/aws/aws-sdk-go v1.31.6/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= +github.com/aybabtme/rgbterm v0.0.0-20170906152045-cc83f3b3ce59 h1:WWB576BN5zNSZc/M9d/10pqEx5VHNhaQ/yOVAkmj5Yo= github.com/aybabtme/rgbterm v0.0.0-20170906152045-cc83f3b3ce59/go.mod h1:q/89r3U2H7sSsE2t6Kca0lfwTK8JdoNGS/yzM/4iH5I= github.com/beorn7/perks v0.0.0-20160804104726-4c0e84591b9a/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= +github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d h1:xDfNPAt8lFiC1UJrqV3uuy861HCTo708pDMbjHHdCas= github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ00z/TKoufEY6K/a0k6AhaJrQKdFe6OfVXsa4= +github.com/bgentry/speakeasy v0.1.0 h1:ByYyxL9InA1OWqxJqqp2A5pYHUrCiAL6K3J+LKSsQkY= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= +github.com/bitly/go-simplejson v0.5.0 h1:6IH+V8/tVMab511d5bn4M7EwGXZf9Hj6i2xSwkNEM+Y= github.com/bitly/go-simplejson v0.5.0/go.mod h1:cXHtHw4XUPsvGaxgjIAn8PhEWG9NfngEKAMDJEczWVA= +github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c h1:+0HFd5KSZ/mm3JmhmrDukiId5iR6w4+BdFtfSy4yWIc= github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= +github.com/blakesmith/ar v0.0.0-20190502131153-809d4375e1fb h1:m935MPodAbYS46DG4pJSv7WO+VECIWUQ7OJYSoTrMh4= github.com/blakesmith/ar v0.0.0-20190502131153-809d4375e1fb/go.mod h1:PkYb9DJNAwrSvRx5DYA+gUcOIgTGVMNkfSCbZM8cWpI= github.com/blang/semver v3.1.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= github.com/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ= github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 h1:DDGfHa7BWjL4YnC6+E63dPcxHo2sUxDIu8g3QgEJdRY= github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4= github.com/bombsimon/wsl/v2 v2.0.0/go.mod h1:mf25kr/SqFEPhhcxW1+7pxzGlW+hIl/hYTKY95VwV8U= +github.com/bombsimon/wsl/v2 v2.2.0 h1:/DdSteYCq4lPX+LqDg7mdoxm14UxzZPoDT0taYc3DTU= github.com/bombsimon/wsl/v2 v2.2.0/go.mod h1:Azh8c3XGEJl9LyX0/sFC+CKMc7Ssgua0g+6abzXN4Pg= github.com/bombsimon/wsl/v3 v3.0.0/go.mod h1:st10JtZYLE4D5sC7b8xV4zTKZwAQjCH/Hy2Pm1FNZIc= +github.com/bombsimon/wsl/v3 v3.1.0 h1:E5SRssoBgtVFPcYWUOFJEcgaySgdtTNYzsSKDOY7ss8= github.com/bombsimon/wsl/v3 v3.1.0/go.mod h1:st10JtZYLE4D5sC7b8xV4zTKZwAQjCH/Hy2Pm1FNZIc= +github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625 h1:ckJgFhFWywOx+YLEMIJsTb+NV6NexWICk5+AMSuz3ss= github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625/go.mod h1:HYsPBTaaSFSlLx/70C2HPIMNZpVV8+vt/A+FMnYP11g= +github.com/bshuster-repo/logrus-logstash-hook v0.4.1 h1:pgAtgj+A31JBVtEHu2uHuEx0n+2ukqUJnS2vVe5pQNA= github.com/bshuster-repo/logrus-logstash-hook v0.4.1/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk= +github.com/buger/jsonparser v0.0.0-20180808090653-f4dd9f5a6b44 h1:y853v6rXx+zefEcjET3JuKAqvhj+FKflQijjeaSv2iA= github.com/buger/jsonparser v0.0.0-20180808090653-f4dd9f5a6b44/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= +github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd h1:rFt+Y/IK1aEZkEHchZRSq9OQbsSzIT/OrI8YFFmRIng= github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd/go.mod h1:2oa8nejYd4cQ/b0hMIopN0lCRxU0bueqREvZLWFrtK8= +github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b h1:otBG+dV+YK+Soembjv71DPz3uX/V/6MMlSyD9JBQ6kQ= github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b/go.mod h1:obH5gd0BsqsP2LwDJ9aOkm/6J86V6lyAXCoQWGw3K50= +github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0 h1:nvj0OLI3YqYXer/kZD8Ri1aaunCxIEsOst1BVJswV0o= github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0/go.mod h1:D/8v3kj0zr8ZAKg1AQ6crr+5VwKN5eIywRkfhyM/+dE= +github.com/caarlos0/ctrlc v1.0.0 h1:2DtF8GSIcajgffDFJzyG15vO+1PuBWOMUdFut7NnXhw= github.com/caarlos0/ctrlc v1.0.0/go.mod h1:CdXpj4rmq0q/1Eb44M9zi2nKB0QraNKuRGYGrrHhcQw= +github.com/campoy/unique v0.0.0-20180121183637-88950e537e7e h1:V9a67dfYqPLAvzk5hMQOXYJlZ4SLIXgyKIE+ZiHzgGQ= github.com/campoy/unique v0.0.0-20180121183637-88950e537e7e/go.mod h1:9IOqJGCPMSc6E5ydlp5NIonxObaeu/Iub/X03EKPVYo= +github.com/cavaliercoder/go-cpio v0.0.0-20180626203310-925f9528c45e h1:hHg27A0RSSp2Om9lubZpiMgVbvn39bsUmW9U5h0twqc= github.com/cavaliercoder/go-cpio v0.0.0-20180626203310-925f9528c45e/go.mod h1:oDpT4efm8tSYHXV5tHSdRvBet/b/QzxZ+XyyPehvm3A= github.com/census-instrumentation/opencensus-proto v0.2.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/census-instrumentation/opencensus-proto v0.2.1 h1:glEXhBS5PSLLv4IXzLA5yPRVX4bilULVyxxbrfOtDAk= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/checkpoint-restore/go-criu/v4 v4.1.0 h1:WW2B2uxx9KWF6bGlHqhm8Okiafwwx7Y2kcpn8lCpjgo= github.com/checkpoint-restore/go-criu/v4 v4.1.0/go.mod h1:xUQBLp4RLc5zJtWY++yjOoMoB5lihDt7fai+75m+rGw= +github.com/cheggaaa/pb v1.0.27 h1:wIkZHkNfC7R6GI5w7l/PdAdzXzlrbcI3p8OAlnkTsnc= github.com/cheggaaa/pb v1.0.27/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s= +github.com/chzyer/logex v1.1.10 h1:Swpa1K6QvQznwJRcfTfQJmTE72DqScAa40E+fbHEXEE= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e h1:fY5BOSpyZCqRo5OhCuC+XN+r/bBCmeuuJtjz+bCNIf8= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1 h1:q763qf9huN11kDQavWsoZXJNW3xEE4JJyHa5Q25/sd8= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/cilium/ebpf v0.0.0-20200110133405-4032b1d8aae3/go.mod h1:MA5e5Lr8slmEg9bt0VpxxWqJlO4iwu3FBdHUzV7wQVg= github.com/cilium/ebpf v0.0.0-20200702112145-1c8d4c9ef775/go.mod h1:7cR51M8ViRLIdUjrmSXlK9pkrsDlLHbO8jiB8X8JnOc= +github.com/cilium/ebpf v0.2.0 h1:Fv93L3KKckEcEHR3oApXVzyBTDA8WAm6VXhPE00N3f8= github.com/cilium/ebpf v0.2.0/go.mod h1:To2CFviqOWL/M0gIMsvSMlqe7em/l1ALkX1PyjrX2Qs= +github.com/client9/misspell v0.3.4 h1:ta993UF76GwbvJcIo3Y68y/M3WxlpEHPWIGDkJYwzJI= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f h1:WBZRG4aNOuI15bLRrCgN8fCq8E5Xuty6jGbmSNEvSsU= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa h1:OaNxuTZr7kxeODyLWsRMC+OD03aFUH+mW6r2d+MWa5Y= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= +github.com/codahale/hdrhistogram v0.0.0-20160425231609-f8ad88b59a58 h1:hHWif/4GirK3P5uvCyyj941XSVIQDzuJhbEguCICdPE= github.com/codahale/hdrhistogram v0.0.0-20160425231609-f8ad88b59a58/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= +github.com/containerd/aufs v0.0.0-20200908144142-dab0cbea06f4 h1:sSm1RGQzUTr23yR6SS7RIBBLV8V2bFIu07z4nyVOwmI= github.com/containerd/aufs v0.0.0-20200908144142-dab0cbea06f4/go.mod h1:nukgQABAEopAHvB6j7cnP5zJ+/3aVcE7hCYqvIwAHyE= +github.com/containerd/btrfs v0.0.0-20201111183144-404b9149801e h1:chFw/cg0TDyK43qm8DKbblny2WHc4ML+j1KOkdEp9pI= github.com/containerd/btrfs v0.0.0-20201111183144-404b9149801e/go.mod h1:jg2QkJcsabfHugurUvvPhS3E08Oxiuh5W/g1ybB4e0E= github.com/containerd/cgroups v0.0.0-20190717030353-c4b9ac5c7601/go.mod h1:X9rLEHIqSf/wfK8NsPqxJmeZgW4pcfzdXITDrUSJ6uI= github.com/containerd/cgroups v0.0.0-20190919134610-bf292b21730f/go.mod h1:OApqhQ4XNSNC13gXIwDjhOQxjWa/NxkwZXJ1EvqT0ko= @@ -244,6 +348,7 @@ github.com/containerd/console v0.0.0-20180822173158-c12b1e7919c1/go.mod h1:Tj/on github.com/containerd/console v0.0.0-20181022165439-0650fd9eeb50/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw= github.com/containerd/console v0.0.0-20191206165004-02ecf6a7291e/go.mod h1:8Pf4gM6VEbTNRIT26AyyU7hxdQU3MvAvxVI0sc00XBE= github.com/containerd/console v1.0.0/go.mod h1:8Pf4gM6VEbTNRIT26AyyU7hxdQU3MvAvxVI0sc00XBE= +github.com/containerd/console v1.0.1 h1:u7SFAJyRqWcG6ogaMAx3KjSTy1e3hT9QxqX7Jco7dRc= github.com/containerd/console v1.0.1/go.mod h1:XUsP6YE/mKtz6bxc+I8UiKKTP04qjQL4qcS3XoQ5xkw= github.com/containerd/containerd v1.2.10/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= github.com/containerd/containerd v1.3.0-beta.2.0.20190828155532-0293cbd26c69/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= @@ -265,67 +370,101 @@ github.com/containerd/continuity v0.0.0-20210208174643-50096c924a4e/go.mod h1:EX github.com/containerd/fifo v0.0.0-20180307165137-3d5202aec260/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI= github.com/containerd/fifo v0.0.0-20190226154929-a9fb20d87448/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI= github.com/containerd/fifo v0.0.0-20200410184934-f15a3290365b/go.mod h1:jPQ2IAeZRCYxpS/Cm1495vGFww6ecHmMk1YJH2Q5ln0= +github.com/containerd/fifo v0.0.0-20201026212402-0724c46b320c h1:1c6xmkNiu6Jnr6AKGM91GGNsfU+nPNFvw9BZFSo0E+c= github.com/containerd/fifo v0.0.0-20201026212402-0724c46b320c/go.mod h1:jPQ2IAeZRCYxpS/Cm1495vGFww6ecHmMk1YJH2Q5ln0= +github.com/containerd/go-cni v1.0.1 h1:VXr2EkOPD0v1gu7CKfof6XzEIDzsE/dI9yj/W7PSWLs= github.com/containerd/go-cni v1.0.1/go.mod h1:+vUpYxKvAF72G9i1WoDOiPGRtQpqsNW/ZHtSlv++smU= github.com/containerd/go-runc v0.0.0-20180907222934-5a6d9f37cfa3/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0= github.com/containerd/go-runc v0.0.0-20190911050354-e029b79d8cda/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0= github.com/containerd/go-runc v0.0.0-20200220073739-7016d3ce2328/go.mod h1:PpyHrqVs8FTi9vpyHwPwiNEGaACDxT/N/pLcvMSRA9g= +github.com/containerd/go-runc v0.0.0-20201020171139-16b287bc67d0 h1:e+50zk22gvHLJKe8+d+xSMyA88PPQk/XfWuUw1BdnPA= github.com/containerd/go-runc v0.0.0-20201020171139-16b287bc67d0/go.mod h1:cNU0ZbCgCQVZK4lgG3P+9tn9/PaJNmoDXPpoJhDR+Ok= +github.com/containerd/imgcrypt v1.0.1 h1:IyI3IIP4m6zrNFuNFT7HizGVcuD6BYJFpdM1JvPKCbQ= github.com/containerd/imgcrypt v1.0.1/go.mod h1:mdd8cEPW7TPgNG4FpuP3sGBiQ7Yi/zak9TYCG3juvb0= +github.com/containerd/nri v0.0.0-20201007170849-eb1350a75164 h1:KbgF4MRmTDGp+4XissYZPZsdo0wS9f1pfYmRNFE2R0I= github.com/containerd/nri v0.0.0-20201007170849-eb1350a75164/go.mod h1:+2wGSDGFYfE5+So4M5syatU0N0f0LbWpuqyMi4/BE8c= +github.com/containerd/stargz-snapshotter v0.0.0-20201027054423-3a04e4c2c116 h1:cj2qTm4k9TlXzzwCROQK0puJc2oauyjUiegQiqpNkuk= github.com/containerd/stargz-snapshotter v0.0.0-20201027054423-3a04e4c2c116/go.mod h1:o59b3PCKVAf9jjiKtCc/9hLAd+5p/rfhBfm6aBcTEr4= github.com/containerd/ttrpc v0.0.0-20190828154514-0e0f228740de/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o= github.com/containerd/ttrpc v0.0.0-20190828172938-92c8520ef9f8/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o= github.com/containerd/ttrpc v0.0.0-20191028202541-4f1b8fe65a5c/go.mod h1:LPm1u0xBw8r8NOKoOdNMeVHSawSsltak+Ihv+etqsE8= github.com/containerd/ttrpc v1.0.1/go.mod h1:UAxOpgT9ziI0gJrmKvgcZivgxOp8iFPSk8httJEt98Y= +github.com/containerd/ttrpc v1.0.2 h1:2/O3oTZN36q2xRolk0a2WWGgh7/Vf/liElg5hFYLX9U= github.com/containerd/ttrpc v1.0.2/go.mod h1:UAxOpgT9ziI0gJrmKvgcZivgxOp8iFPSk8httJEt98Y= github.com/containerd/typeurl v0.0.0-20180627222232-a93fcdb778cd/go.mod h1:Cm3kwCdlkCfMSHURc+r6fwoGH6/F1hH3S4sg0rLFWPc= github.com/containerd/typeurl v0.0.0-20190911142611-5eb25027c9fd/go.mod h1:GeKYzf2pQcqv7tJ0AoCuuhtnqhva5LNU3U+OyKxxJpk= +github.com/containerd/typeurl v1.0.1 h1:PvuK4E3D5S5q6IqsPDCy928FhP0LUIGcmZ/Yhgp5Djw= github.com/containerd/typeurl v1.0.1/go.mod h1:TB1hUtrpaiO88KEK56ijojHS1+NeF0izUACaJW2mdXg= +github.com/containerd/zfs v0.0.0-20200918131355-0a33824f23a2 h1:k14X1HVvImFGx96RHryyftNFd9OAW3YtCg6OeO262yo= github.com/containerd/zfs v0.0.0-20200918131355-0a33824f23a2/go.mod h1:8IgZOBdv8fAgXddBT4dBXJPtxyRsejFIpXoklgxgEjw= github.com/containernetworking/cni v0.7.1/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= +github.com/containernetworking/cni v0.8.0 h1:BT9lpgGoH4jw3lFC7Odz2prU5ruiYKcgAjMCbgybcKI= github.com/containernetworking/cni v0.8.0/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= +github.com/containernetworking/plugins v0.8.6 h1:npZTLiMa4CRn6m5P9+1Dz4O1j0UeFbm8VYN6dlsw568= github.com/containernetworking/plugins v0.8.6/go.mod h1:qnw5mN19D8fIwkqW7oHHYDHVlzhJpcY6TQxn/fUyDDM= +github.com/containers/ocicrypt v1.0.1 h1:EToign46OSLTFWnb2oNj9RG3XDnkOX8r28ZIXUuk5Pc= github.com/containers/ocicrypt v1.0.1/go.mod h1:MeJDzk1RJHv89LjsH0Sp5KTY3ZYkjXO/C+bKAeWFIrc= +github.com/coreos/bbolt v1.3.2 h1:wZwiHHUieZCquLkDL0B8UhzreNWsPHooDAG3q34zk0s= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/etcd v3.3.13+incompatible h1:8F3hqu9fGYLBifCmRCJsicFqDx/D68Rt3q1JMazcgBQ= github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/go-etcd v2.0.0+incompatible h1:bXhRBIXoTm9BYHS3gE0TtQuyNZyeEMux2sDi4oo5YOo= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= +github.com/coreos/go-iptables v0.4.5 h1:DpHb9vJrZQEFMcVLFKAAGMUVX0XoRC0ptCthinRYm38= github.com/coreos/go-iptables v0.4.5/go.mod h1:/mVI274lEDI2ns62jHCDnCyBF9Iwsmekav8Dbxlm1MU= +github.com/coreos/go-oidc v2.1.0+incompatible h1:sdJrfw8akMnCuUlaZU3tE/uYXFgfqom8DBE9so9EBsM= github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd v0.0.0-20161114122254-48702e0da86b/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20181012123002-c6f51f82210d/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e h1:Wf6HqHfScWJN9/ZjdUKyjop4mf3Qdd+1TvvltAvM3m8= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd/v22 v22.0.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= +github.com/coreos/go-systemd/v22 v22.1.0 h1:kq/SbG2BCKLkDKkjQf5OWwKWUKj1lgs3lFI4PxnR5lg= github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/coreos/pkg v0.0.0-20180108230652-97fdf19511ea/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f h1:lBNOc5arjvs8E5mO2tbpBpLoyyu8B6e44T7hJy6potg= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/cpuguy83/go-md2man v1.0.10 h1:BSKMNlYxDvnunlTymqtgONjNnaRV1sTpcovwwjF22jk= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/cpuguy83/go-md2man/v2 v2.0.0 h1:EoUDS0afbrsXAZ9YQ9jdu/mZ2sXgT1/2yyNng4PGlyM= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/creack/pty v1.1.11 h1:07n33Z8lZxZ2qwegKbObQohDhXDQxiMMz1NOUGYlesw= github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/cyphar/filepath-securejoin v0.2.2 h1:jCwT2GTP+PY5nBz3c/YL5PAIbusElVrPujOBSCj8xRg= github.com/cyphar/filepath-securejoin v0.2.2/go.mod h1:FpkQEhXnPnOthhzymB7CGsFk2G9VLXONKD9G7QGMM+4= +github.com/d2g/dhcp4 v0.0.0-20170904100407-a1d1b6c41b1c h1:Xo2rK1pzOm0jO6abTPIQwbAmqBIOj132otexc1mmzFc= github.com/d2g/dhcp4 v0.0.0-20170904100407-a1d1b6c41b1c/go.mod h1:Ct2BUK8SB0YC1SMSibvLzxjeJLnrYEVLULFNiHY9YfQ= +github.com/d2g/dhcp4client v1.0.0 h1:suYBsYZIkSlUMEz4TAYCczKf62IA2UWC+O8+KtdOhCo= github.com/d2g/dhcp4client v1.0.0/go.mod h1:j0hNfjhrt2SxUOw55nL0ATM/z4Yt3t2Kd1mW34z5W5s= +github.com/d2g/dhcp4server v0.0.0-20181031114812-7d4a0a7f59a5 h1:+CpLbZIeUn94m02LdEKPcgErLJ347NUwxPKs5u8ieiY= github.com/d2g/dhcp4server v0.0.0-20181031114812-7d4a0a7f59a5/go.mod h1:Eo87+Kg/IX2hfWJfwxMzLyuSZyxSoAug2nGa1G2QAi8= +github.com/d2g/hardwareaddr v0.0.0-20190221164911-e7d9fbe030e4 h1:itqmmf1PFpC4n5JW+j4BU7X4MTfVurhYRTjODoPb2Y8= github.com/d2g/hardwareaddr v0.0.0-20190221164911-e7d9fbe030e4/go.mod h1:bMl4RjIciD2oAxI7DmWRx6gbeqrkoLqv3MV0vzNad+I= github.com/davecgh/go-spew v0.0.0-20151105211317-5215b55f46b2/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/denverdino/aliyungo v0.0.0-20190125010748-a747050bb1ba h1:p6poVbjHDkKa+wtC8frBMwQtT3BmqGYBjzMwJ63tuR4= github.com/denverdino/aliyungo v0.0.0-20190125010748-a747050bb1ba/go.mod h1:dV8lFg6daOBZbT6/BDGIz6Y3WFGn8juu6G+CQ6LHtl0= +github.com/devigned/tab v0.1.1 h1:3mD6Kb1mUOYeLpJvTVSDwSg5ZsfSxfvxGRTxRsJsITA= github.com/devigned/tab v0.1.1/go.mod h1:XG9mPq0dFghrYvoBF3xdRrJzSTX1b7IQrvaL9mzjeJY= github.com/dgrijalva/jwt-go v0.0.0-20170104182250-a601269ab70c/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954 h1:RMLoZVzv4GliuWafOuPuQDKSm1SJph7uCRnnS61JAn4= github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/dimchansky/utfbom v1.1.0 h1:FcM3g+nofKgUteL8dm/UpdRXNC9KmADgTpLKsu0TRo4= github.com/dimchansky/utfbom v1.1.0/go.mod h1:rO41eb7gLfo8SF1jd9F8HplJm1Fewwi4mQvIirEdv+8= +github.com/dnaeon/go-vcr v1.0.1 h1:r8L/HqC0Hje5AXMu1ooW8oyQyOFv4GxqpL0nRP7SLLY= github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E= github.com/docker/cli v0.0.0-20190925022749-754388324470/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/cli v0.0.0-20191017083524-a8ff7f821017/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= @@ -350,111 +489,167 @@ github.com/docker/docker-credential-helpers v0.6.3/go.mod h1:WRaJzqw3CTB9bk10avu github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= github.com/docker/go-events v0.0.0-20170721190031-9461782956ad/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA= +github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c h1:+pKlWGMw7gf6bQ+oDZB4KHQFypsfjYlq/C4rfL7D3g8= github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA= github.com/docker/go-metrics v0.0.0-20180209012529-399ea8c73916/go.mod h1:/u0gXw0Gay3ceNrsHubL3BtdOL2fHf93USgMTe0W5dI= +github.com/docker/go-metrics v0.0.1 h1:AgB/0SvBxihN0X8OR4SjsblXkbMvalQ8cjmtKQ2rQV8= github.com/docker/go-metrics v0.0.1/go.mod h1:cG1hvH2utMXtqgqqYE9plW6lDxS3/5ayHzueweSI3Vw= github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw= github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/docker/libnetwork v0.8.0-dev.2.0.20200917202933-d0951081b35f h1:jC/ZXgYdzCUuKFkKGNiekhnIkGfUrdelEqvg4Miv440= github.com/docker/libnetwork v0.8.0-dev.2.0.20200917202933-d0951081b35f/go.mod h1:93m0aTqz6z+g32wla4l4WxTrdtvBRmVzYRkYvasA5Z8= +github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1 h1:ZClxb8laGDf5arXfYcAtECDFgAgHklGI8CxgjHnXKJ4= github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE= +github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96 h1:cenwrSVm+Z7QLSV/BsnenAOcDXdX4cMv4wP0B/5QbPg= github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= +github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815 h1:bWDMxwH3px2JBh6AyO7hdCn/PkvCZXii8TGj7sbtEbQ= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/eapache/go-resiliency v1.1.0 h1:1NtRmCAqadE2FN4ZcN6g90TP3uk8cg9rn9eNK2197aU= github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= +github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21 h1:YEetp8/yCZMuEPMUDHG0CW/brkkEp8mzqk2+ODEitlw= github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= +github.com/eapache/queue v1.1.0 h1:YOEu7KNc61ntiQlcEeUIoDTJ2o8mQznoNvUhiigpIqc= github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= github.com/elazarl/goproxy v0.0.0-20170405201442-c4fc26588b6e/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= +github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153 h1:yUdfgN0XgIJw7foRItutHYUIhlcKzcSf5vDpdhQAKTc= github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= +github.com/emicklei/go-restful v2.9.5+incompatible h1:spTtZBk5DYEvbxMVutUuTyh1Ao2r4iyvLdACqsl/Ljk= github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/emirpasic/gods v1.12.0 h1:QAUIPSaCu4G+POclxeqb3F+WPpdKqFGlw36+yOzGlrg= github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4 h1:rEvIZUSZ3fx39WIi3JkQqQBitGwpELBIYWeBVh6wn+E= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/protoc-gen-validate v0.1.0 h1:EQciDnbrYxy13PgWoY8AqoxGiPrpgBZ1R8UNe3ddc+A= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/evanphx/json-patch v4.9.0+incompatible h1:kLcOMZeuLAJvL2BPWLMIj5oaZQobrkAqrL+WFZwQses= github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.9.0 h1:8xPHl4/q1VyqGIPif1F+1V3Y3lSmrq01EabUW3CoW5s= github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= +github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568 h1:BHsljHzVlRcyQhjrss6TZTdY2VfCqZPbv5k3iBFa2ZQ= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= +github.com/form3tech-oss/jwt-go v3.2.2+incompatible h1:TcekIExNqud5crz4xD2pavyTgWiPvpYe4Xau31I0PRk= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/fortytw2/leaktest v1.2.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= +github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/fullsailor/pkcs7 v0.0.0-20190404230743-d7302db945fa h1:RDBNVkRviHZtvDvId8XSGPu3rmpmSe+wKRcEWNgsfWU= github.com/fullsailor/pkcs7 v0.0.0-20190404230743-d7302db945fa/go.mod h1:KnogPXtdwXqoenmZCw6S+25EAm2MkxbG0deNDu4cbSA= +github.com/garyburd/redigo v0.0.0-20150301180006-535138d7bcd7 h1:LofdAjjjqCSXMwLGgOgnE+rdPuvX9DxCqaHwKy7i/ko= github.com/garyburd/redigo v0.0.0-20150301180006-535138d7bcd7/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY= github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= +github.com/gliderlabs/ssh v0.2.2 h1:6zsha5zo/TWhRhwqCD3+EarCAgZ2yN28ipRnGPnwkI0= github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= github.com/go-critic/go-critic v0.4.1/go.mod h1:7/14rZGnZbY6E38VEGk2kVhoq6itzc1E68facVDK23g= +github.com/go-critic/go-critic v0.4.3 h1:sGEEdiuvLV0OC7/yC6MnK3K6LCPBplspK45B0XVdFAc= github.com/go-critic/go-critic v0.4.3/go.mod h1:j4O3D4RoIwRqlZw5jJpx0BNfXWWbpcJoKu5cYSe4YmQ= github.com/go-git/gcfg v1.5.0 h1:Q5ViNfGF8zFgyJWPqYwA7qGFoMTEiBmdlkcfRmpIMa4= github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E= github.com/go-git/go-billy/v5 v5.0.0/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= github.com/go-git/go-billy/v5 v5.1.0 h1:4pl5BV4o7ZG/lterP4S6WzJ6xr49Ba5ET9ygheTYahk= github.com/go-git/go-billy/v5 v5.1.0/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= +github.com/go-git/go-git-fixtures/v4 v4.0.1/go.mod h1:m+ICp2rF3jDhFgEZ/8yziagdT1C+ZpZcrJjappBCDSw= +github.com/go-git/go-git-fixtures/v4 v4.0.2-0.20200613231340-f56387b50c12 h1:PbKy9zOy4aAKrJ5pibIRpVO2BXnK1Tlcg+caKI7Ox5M= github.com/go-git/go-git-fixtures/v4 v4.0.2-0.20200613231340-f56387b50c12/go.mod h1:m+ICp2rF3jDhFgEZ/8yziagdT1C+ZpZcrJjappBCDSw= +github.com/go-git/go-git/v5 v5.1.0/go.mod h1:ZKfuPUoY1ZqIG4QG9BDBh3G4gLM5zvPuSJAozQrZuyM= github.com/go-git/go-git/v5 v5.3.0 h1:8WKMtJR2j8RntEXR/uvTKagfEt4GYlwQ7mntE4+0GWc= github.com/go-git/go-git/v5 v5.3.0/go.mod h1:xdX4bWJ48aOrdhnl2XqHYstHbbp6+LFS4r4X+lNVprw= +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1 h1:QbL/5oDUmRBzO9/Z7Seo6zf912W/a6Sr4Eu0G/3Jho0= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4 h1:WtGNWLvXpe6ZudgnXrq0barxBImvnnJoMEhXAzcbM0I= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-ini/ini v1.25.4 h1:Mujh4R/dH6YL8bxuISne3xX2+qcQ9p0IxKAP6ExWoUo= github.com/go-ini/ini v1.25.4/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/kit v0.9.0 h1:wDJmvq38kDhkVxi50ni9ykkdUr1PKgqKOoi01fa0Mdk= github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-lintpack/lintpack v0.5.2 h1:DI5mA3+eKdWeJ40nU4d6Wc26qmdG8RCi/btYq0TuRN0= github.com/go-lintpack/lintpack v0.5.2/go.mod h1:NwZuYi2nUHho8XEIZ6SIxihrnPoqBTDqfpXvXAN0sXM= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= +github.com/go-logfmt/logfmt v0.4.0 h1:MP4Eh7ZCb31lleYCFuwm0oe4/YGak+5l1vA2NOE80nA= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= +github.com/go-logr/logr v0.2.0 h1:QvGt2nLcHH0WK9orKa+ppBPAxREcH364nPUedEpK0TY= github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= +github.com/go-ole/go-ole v1.2.1 h1:2lOsA72HgjxAuMlKpFiCbHTvu44PIVkZ5hqm3RSdI/E= github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= +github.com/go-openapi/jsonpointer v0.19.3 h1:gihV7YNZK1iK6Tgwwsxo2rJbD1GTbdm72325Bq8FI3w= github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg= github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc= +github.com/go-openapi/jsonreference v0.19.3 h1:5cxNfTy0UVC3X8JL5ymxzyoUZmo8iZb+jeTWn7tUa8o= github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8= github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc= +github.com/go-openapi/spec v0.19.3 h1:0XRyw8kguri6Yw4SxhsQA/atC88yqrk0+G4YhI2wabc= github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo= github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= +github.com/go-openapi/swag v0.19.5 h1:lTz6Ys4CmqqCQmZPBlbQENR1/GucA2bzYTE12Pw4tFY= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= +github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs= github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= +github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-test/deep v1.0.3 h1:ZrJSEWsXzPOxaZnFteGEfooLba+ju3FYIbOrS+rQd68= github.com/go-test/deep v1.0.3/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= +github.com/go-toolsmith/astcast v1.0.0 h1:JojxlmI6STnFVG9yOImLeGREv8W2ocNUM+iOhR6jE7g= github.com/go-toolsmith/astcast v1.0.0/go.mod h1:mt2OdQTeAQcY4DQgPSArJjHCcOwlX+Wl/kwN+LbLGQ4= +github.com/go-toolsmith/astcopy v1.0.0 h1:OMgl1b1MEpjFQ1m5ztEO06rz5CUd3oBv9RF7+DyvdG8= github.com/go-toolsmith/astcopy v1.0.0/go.mod h1:vrgyG+5Bxrnz4MZWPF+pI4R8h3qKRjjyvV/DSez4WVQ= github.com/go-toolsmith/astequal v0.0.0-20180903214952-dcb477bfacd6/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= +github.com/go-toolsmith/astequal v1.0.0 h1:4zxD8j3JRFNyLN46lodQuqz3xdKSrur7U/sr0SDS/gQ= github.com/go-toolsmith/astequal v1.0.0/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= github.com/go-toolsmith/astfmt v0.0.0-20180903215011-8f8ee99c3086/go.mod h1:mP93XdblcopXwlyN4X4uodxXQhldPGZbcEJIimQHrkg= +github.com/go-toolsmith/astfmt v1.0.0 h1:A0vDDXt+vsvLEdbMFJAUBI/uTbRw1ffOPnxsILnFL6k= github.com/go-toolsmith/astfmt v1.0.0/go.mod h1:cnWmsOAuq4jJY6Ct5YWlVLmcmLMn1JUPuQIHCY7CJDw= +github.com/go-toolsmith/astinfo v0.0.0-20180906194353-9809ff7efb21 h1:wP6mXeB2V/d1P1K7bZ5vDUO3YqEzcvOREOxZPEu3gVI= github.com/go-toolsmith/astinfo v0.0.0-20180906194353-9809ff7efb21/go.mod h1:dDStQCHtmZpYOmjRP/8gHHnCCch3Zz3oEgCdZVdtweU= github.com/go-toolsmith/astp v0.0.0-20180903215135-0af7e3c24f30/go.mod h1:SV2ur98SGypH1UjcPpCatrV5hPazG6+IfNHbkDXBRrk= +github.com/go-toolsmith/astp v1.0.0 h1:alXE75TXgcmupDsMK1fRAy0YUzLzqPVvBKoyWV+KPXg= github.com/go-toolsmith/astp v1.0.0/go.mod h1:RSyrtpVlfTFGDYRbrjyWP1pYu//tSFcvdYrA8meBmLI= github.com/go-toolsmith/pkgload v0.0.0-20181119091011-e9e65178eee8/go.mod h1:WoMrjiy4zvdS+Bg6z9jZH82QXwkcgCBX6nOfnmdaHks= +github.com/go-toolsmith/pkgload v1.0.0 h1:4DFWWMXVfbcN5So1sBNW9+yeiMqLFGl1wFLTL5R0Tgg= github.com/go-toolsmith/pkgload v1.0.0/go.mod h1:5eFArkbO80v7Z0kdngIxsRXRMTaX4Ilcwuh3clNrQJc= +github.com/go-toolsmith/strparse v1.0.0 h1:Vcw78DnpCAKlM20kSbAyO4mPfJn/lyYA4BJUDxe2Jb4= github.com/go-toolsmith/strparse v1.0.0/go.mod h1:YI2nUKP9YGZnL/L1/DLFBfixrcjslWct4wyljWhSRy8= github.com/go-toolsmith/typep v1.0.0/go.mod h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2Ns5AIQkATU= +github.com/go-toolsmith/typep v1.0.2 h1:8xdsa1+FSIH/RhEkgnD1j2CJOy5mNllW1Q9tRiYwvlk= github.com/go-toolsmith/typep v1.0.2/go.mod h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2Ns5AIQkATU= +github.com/go-xmlfmt/xmlfmt v0.0.0-20191208150333-d5b6f63a941b h1:khEcpUM4yFcxg4/FHQWkvVRmgijNXRfzkIDHh23ggEo= github.com/go-xmlfmt/xmlfmt v0.0.0-20191208150333-d5b6f63a941b/go.mod h1:aUCEOzzezBEjDBbFBoSiya/gduyIiWYRP6CnSFIV8AM= +github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= github.com/godbus/dbus v0.0.0-20151105175453-c7fdd8b5cd55/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= github.com/godbus/dbus v0.0.0-20180201030542-885f9cc04c9c/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= +github.com/godbus/dbus v0.0.0-20190422162347-ade71ed3457e h1:BWhy2j3IXJhjCbC68FptL43tDKIq8FladmaTs3Xs7Z8= github.com/godbus/dbus v0.0.0-20190422162347-ade71ed3457e/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= +github.com/godbus/dbus/v5 v5.0.3 h1:ZqHaoEF7TBzh4jzPmqVhE/5A1z9of6orkAe5uHoAeME= github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gofrs/flock v0.0.0-20190320160742-5135e617513b/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= +github.com/gofrs/flock v0.7.3 h1:I0EKY9l8HZCXTMYC4F80vwT6KNypV9uYKP3Alm/hjmQ= github.com/gofrs/flock v0.7.3/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= github.com/gogo/googleapis v1.2.0/go.mod h1:Njal3psf3qN6dwBtQfUmBZh2ybovJ0tlu3o/AC7HYjU= github.com/gogo/googleapis v1.3.2/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= +github.com/gogo/googleapis v1.4.0 h1:zgVt4UpGxcqVOw97aRGxT4svlcmdK35fynLNctY32zI= github.com/gogo/googleapis v1.4.0/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= @@ -464,6 +659,7 @@ github.com/gogo/protobuf v1.3.0/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXP github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -471,12 +667,14 @@ github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4er github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e h1:1r7pUrabqp18hOBcwBwiTsbnFeTZHV9eER/QT5JVZxY= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/lint v0.0.0-20180702182130-06c8688daad7 h1:2hRPrmiwPrp3fQX967rNJIhQPtiGXdlQWAxKbKw3VHA= github.com/golang/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:tluoj9z5200jBnyusfRPU2LqT6J+DAorxEvtC7LHB+E= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.3 h1:GV+pQPG/EUUbkh47niozDcADz6go/dUwhVzdUQHIVRw= github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/protobuf v0.0.0-20161109072736-4bd1920723d7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -496,29 +694,47 @@ github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw github.com/golang/protobuf v1.4.3 h1:JjCZWpVbqXDqFVmTfYWEVTMIYrL/NPdPSCHPJ0T/raM= github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2 h1:23T5iq8rbUYlhpt5DB4XJkc6BU31uODLD1o1gKvZmD0= github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2/go.mod h1:k9Qvh+8juN+UKMCS/3jFtGICgW8O96FVaZsaxdzDkR4= +github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a h1:w8hkcTqaFpzKqonE9uMCefW1WDie15eSP/4MssdenaM= github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a/go.mod h1:ryS0uhF+x9jgbj/N71xsEqODy9BN81/GonCZiOzirOk= +github.com/golangci/errcheck v0.0.0-20181223084120-ef45e06d44b6 h1:YYWNAGTKWhKpcLLt7aSj/odlKrSrelQwlovBpDuf19w= github.com/golangci/errcheck v0.0.0-20181223084120-ef45e06d44b6/go.mod h1:DbHgvLiFKX1Sh2T1w8Q/h4NAI8MHIpzCdnBUDTXU3I0= +github.com/golangci/go-misc v0.0.0-20180628070357-927a3d87b613 h1:9kfjN3AdxcbsZBf8NjltjWihK2QfBBBZuv91cMFfDHw= github.com/golangci/go-misc v0.0.0-20180628070357-927a3d87b613/go.mod h1:SyvUF2NxV+sN8upjjeVYr5W7tyxaT1JVtvhKhOn2ii8= +github.com/golangci/goconst v0.0.0-20180610141641-041c5f2b40f3 h1:pe9JHs3cHHDQgOFXJJdYkK6fLz2PWyYtP4hthoCMvs8= github.com/golangci/goconst v0.0.0-20180610141641-041c5f2b40f3/go.mod h1:JXrF4TWy4tXYn62/9x8Wm/K/dm06p8tCKwFRDPZG/1o= github.com/golangci/gocyclo v0.0.0-20180528134321-2becd97e67ee/go.mod h1:ozx7R9SIwqmqf5pRP90DhR2Oay2UIjGuKheCBCNwAYU= +github.com/golangci/gocyclo v0.0.0-20180528144436-0a533e8fa43d h1:pXTK/gkVNs7Zyy7WKgLXmpQ5bHTrq5GDsp8R9Qs67g0= github.com/golangci/gocyclo v0.0.0-20180528144436-0a533e8fa43d/go.mod h1:ozx7R9SIwqmqf5pRP90DhR2Oay2UIjGuKheCBCNwAYU= +github.com/golangci/gofmt v0.0.0-20190930125516-244bba706f1a h1:iR3fYXUjHCR97qWS8ch1y9zPNsgXThGwjKPrYfqMPks= github.com/golangci/gofmt v0.0.0-20190930125516-244bba706f1a/go.mod h1:9qCChq59u/eW8im404Q2WWTrnBUQKjpNYKMbU4M7EFU= github.com/golangci/golangci-lint v1.23.7/go.mod h1:g/38bxfhp4rI7zeWSxcdIeHTQGS58TCak8FYcyCmavQ= +github.com/golangci/golangci-lint v1.27.0 h1:VYLx63qb+XJsHdZ27PMS2w5JZacN0XG8ffUwe7yQomo= github.com/golangci/golangci-lint v1.27.0/go.mod h1:+eZALfxIuthdrHPtfM7w/R3POJLjHDfJJw8XZl9xOng= +github.com/golangci/ineffassign v0.0.0-20190609212857-42439a7714cc h1:gLLhTLMk2/SutryVJ6D4VZCU3CUqr8YloG7FPIBWFpI= github.com/golangci/ineffassign v0.0.0-20190609212857-42439a7714cc/go.mod h1:e5tpTHCfVze+7EpLEozzMB3eafxo2KT5veNg1k6byQU= +github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0 h1:MfyDlzVjl1hoaPzPD4Gpb/QgoRfSBR0jdhwGyAWwMSA= github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0/go.mod h1:66R6K6P6VWk9I95jvqGxkqJxVWGFy9XlDwLwVz1RCFg= +github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca h1:kNY3/svz5T29MYHubXix4aDDuE3RWHkPvopM/EDv/MA= github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca/go.mod h1:tvlJhZqDe4LMs4ZHD0oMUlt9G2LWuDGoisJTBzLMV9o= github.com/golangci/misspell v0.0.0-20180809174111-950f5d19e770/go.mod h1:dEbvlSfYbMQDtrpRMQU675gSDLDNa8sCPPChZ7PhiVA= +github.com/golangci/misspell v0.3.5 h1:pLzmVdl3VxTOncgzHcvLOKirdvcx/TydsClUQXTehjo= github.com/golangci/misspell v0.3.5/go.mod h1:dEbvlSfYbMQDtrpRMQU675gSDLDNa8sCPPChZ7PhiVA= +github.com/golangci/prealloc v0.0.0-20180630174525-215b22d4de21 h1:leSNB7iYzLYSSx3J/s5sVf4Drkc68W2wm4Ixh/mr0us= github.com/golangci/prealloc v0.0.0-20180630174525-215b22d4de21/go.mod h1:tf5+bzsHdTM0bsB7+8mt0GUMvjCgwLpTapNZHU8AajI= github.com/golangci/revgrep v0.0.0-20180526074752-d9c87f5ffaf0/go.mod h1:qOQCunEYvmd/TLamH+7LlVccLvUH5kZNhbCgTHoBbp4= +github.com/golangci/revgrep v0.0.0-20180812185044-276a5c0a1039 h1:XQKc8IYQOeRwVs36tDrEmTgDgP88d5iEURwpmtiAlOM= github.com/golangci/revgrep v0.0.0-20180812185044-276a5c0a1039/go.mod h1:qOQCunEYvmd/TLamH+7LlVccLvUH5kZNhbCgTHoBbp4= +github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4 h1:zwtduBRr5SSWhqsYNgcuWO2kFlpdOZbP0+yRjmvPGys= github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4/go.mod h1:Izgrg8RkN3rCIMLGE9CyYmU9pY2Jer6DgANEnZ/L/cQ= github.com/google/btree v0.0.0-20180124185431-e89373fe6b4a/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.0 h1:0udJVsspx3VBr5FwtLhQQtuAsVc79tTq0ocGIPAU6qo= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/crfs v0.0.0-20191108021818-71d77da419c9 h1:eiW5yEpL5gwvM2XH3EV06vRs7AVCtgL1LOs71VeW7uQ= github.com/google/crfs v0.0.0-20191108021818-71d77da419c9/go.mod h1:etGhoOqfwPkooV6aqoX3eBGQOJblqdoc9XvWOeuxpPw= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -531,15 +747,22 @@ github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-containerregistry v0.0.0-20191010200024-a3d713f9b7f8/go.mod h1:KyKXa9ciM8+lgMXwOVsXi7UxGrsf9mM61Mzs+xKUrKE= +github.com/google/go-containerregistry v0.1.2 h1:YjFNKqxzWUVZND8d4ItF9wuYlE75WQfECE7yKX/Nu3o= github.com/google/go-containerregistry v0.1.2/go.mod h1:GPivBPgdAyd2SU+vf6EpsgOtWDuPqjW0hJZt4rNdTZ4= +github.com/google/go-github v17.0.0+incompatible h1:N0LgJ1j65A7kfXrZnUDaYCs/Sf4rEjNlfyDHW9dolSY= github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ= +github.com/google/go-github/v28 v28.1.1 h1:kORf5ekX5qwXO2mGzXXOjMe/g6ap8ahVe0sBEulhSxo= github.com/google/go-github/v28 v28.1.1/go.mod h1:bsqJWQX05omyWVmc00nEUql9mhQyv38lDZ8kPZcQVoM= +github.com/google/go-querystring v1.0.0 h1:Xkwi/a1rcvNg1PPYe5vI8GbeBY/jrVuDX5ASuANWTrk= github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= +github.com/google/go-replayers/grpcreplay v0.1.0 h1:eNb1y9rZFmY4ax45uEEECSa8fsxGRU+8Bil52ASAwic= github.com/google/go-replayers/grpcreplay v0.1.0/go.mod h1:8Ig2Idjpr6gifRd6pNVggX6TC1Zw6Jx74AKp7QNH2QE= +github.com/google/go-replayers/httpreplay v0.1.0 h1:AX7FUb4BjrrzNvblr/OlgwrmFiep6soj5K2QSDW7BGk= github.com/google/go-replayers/httpreplay v0.1.0/go.mod h1:YKZViNhiGgqdBlUbI2MwGpq4pXxNmhJLPHQ7cv2b5no= github.com/google/gofuzz v0.0.0-20161122191042-44d81051d367/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/gofuzz v1.1.0 h1:Hsa8mG0dQ46ij8Sl2AYJDUv1oA9/d6Vk+3LG99Oe02g= github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian v2.1.1-0.20190517191504-25dcb96d9e51+incompatible h1:xmapqc1AyLoB+ddYT6r04bD9lIjlOqGaREovi0SzFaE= @@ -552,15 +775,22 @@ github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hf github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99 h1:Ak8CrdlwwXwAZxzS66vgPt4U8yUZX7JwLvVR58FN5jM= github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/renameio v0.1.0 h1:GOZbcHa3HfsPKPlmyPyN2KEohoMXOhdMbHrvbpl2QaA= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/rpmpack v0.0.0-20191226140753-aa36bfddb3a0 h1:BW6OvS3kpT5UEPbCZ+KyX/OB4Ks9/MNMhWjqPPkZxsE= github.com/google/rpmpack v0.0.0-20191226140753-aa36bfddb3a0/go.mod h1:RaTPr0KUf2K7fnZYLNDrr8rxAamWs3iNywJLtQ2AzBg= +github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= +github.com/google/subcommands v1.0.1 h1:/eqq+otEXm5vhfBrbREPCSVQbvofip6kIz+mX5TUH7k= github.com/google/subcommands v1.0.1/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/wire v0.3.0/go.mod h1:i1DMg/Lu8Sz5yYl25iOdmc5CT5qusaa+zmRWs16741s= +github.com/google/wire v0.4.0 h1:kXcsA/rIGzJImVqPdhfnr6q0xsS9gU0515q1EPpJ9fE= github.com/google/wire v0.4.0/go.mod h1:ngWDr9Qvq3yZA10YrxfyGELY/AFWGVpy9c1LTRi1EoU= github.com/googleapis/gax-go v2.0.0+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= github.com/googleapis/gax-go v2.0.2+incompatible h1:silFMLAnr330+NRuag/VjIGF7TLp/LBrV2CJKFLWEww= @@ -570,14 +800,22 @@ github.com/googleapis/gax-go/v2 v2.0.5 h1:sjZBwGj9Jlw33ImPtvFviGYvseOtDM7hkSKB7+ github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= github.com/googleapis/gnostic v0.2.2/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= +github.com/googleapis/gnostic v0.4.1 h1:DLJCy1n/vrD4HPjOvYcT8aYQXpPIzoRZONaYwyycI+I= github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg= +github.com/gookit/color v1.2.4 h1:xOYBan3Fwlrqj1M1UN2TlHOCRiek3bGzWf/vPnJ1roE= github.com/gookit/color v1.2.4/go.mod h1:AhIE+pS6D4Ql0SQWbBeXPHw7gY0/sjHoA4s/n1KB7xg= +github.com/gophercloud/gophercloud v0.1.0 h1:P/nh25+rzXouhytV2pUHBb65fnds26Ghl8/391+sT5o= github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/goreleaser/goreleaser v0.136.0 h1:Z+7XPrfGK11s/Sp+a06sx2FzGuCjTBdxN2ubpGvQbjY= github.com/goreleaser/goreleaser v0.136.0/go.mod h1:wiKrPUeSNh6Wu8nUHxZydSOVQ/OZvOaO7DTtFqie904= github.com/goreleaser/nfpm v1.2.1/go.mod h1:TtWrABZozuLOttX2uDlYyECfQX7x5XYkVxhjYcR6G9w= +github.com/goreleaser/nfpm v1.3.0 h1:BPwIomC+e+yuDX9poJowzV7JFVcYA0+LwGSkbAPs2Hw= github.com/goreleaser/nfpm v1.3.0/go.mod h1:w0p7Kc9TAUgWMyrub63ex3M2Mgw88M4GZXoTq5UCb40= +github.com/gorilla/context v1.1.1 h1:AWwleXJkX/nhcU9bZSnZoi3h/qGYqQAGhq6zZe/aQW8= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= +github.com/gorilla/handlers v0.0.0-20150720190736-60c7bfde3e33 h1:893HsJqtxp9z1SF76gg6hY70hRY1wVlTSnC/h1yUDCo= github.com/gorilla/handlers v0.0.0-20150720190736-60c7bfde3e33/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/mux v1.7.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= @@ -586,25 +824,37 @@ github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gostaticanalysis/analysisutil v0.0.0-20190318220348-4088753ea4d3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= +github.com/gostaticanalysis/analysisutil v0.0.3 h1:iwp+5/UAyzQSFgQ4uR2sni99sJ8Eo9DEacKWM5pekIg= github.com/gostaticanalysis/analysisutil v0.0.3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= +github.com/gotestyourself/gotestyourself v2.2.0+incompatible h1:AQwinXlbQR2HvPjQZOmDhRqsv5mZf+Jb1RnSLxcqZcI= github.com/gotestyourself/gotestyourself v2.2.0+incompatible/go.mod h1:zZKM6oeNM8k+FRljX1mnzVYeS8wiGgQyvST1/GafPbY= +github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7 h1:pdN6V1QBWetyv/0+wjACpqVH+eVULgEjkurDLq3goeM= github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= +github.com/grpc-ecosystem/go-grpc-middleware v1.2.0 h1:0IKlLyQ3Hs9nDaiK5cSHAGmcQEIC8l2Ts1u6x5Dfrqg= github.com/grpc-ecosystem/go-grpc-middleware v1.2.0/go.mod h1:mJzapYve32yjrKlk9GbyCZHuPgZsrbyIbyKhSzOpg6s= +github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92BcuyuQ/YW4NSIpoGtfXNho= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway v1.5.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= github.com/grpc-ecosystem/grpc-gateway v1.6.2/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= github.com/grpc-ecosystem/grpc-gateway v1.8.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.2/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/grpc-ecosystem/grpc-gateway v1.9.5 h1:UImYN5qQ8tuGpGE16ZmjvcTtTw24zw1QAp/SlnNrZhI= github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 h1:MJG/KsmcqMwFAkh8mTnAwhyKoB+sTAnY4CACC110tbU= github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645/go.mod h1:6iZfnjpejD4L/4DwD7NryNaJyCQdzwWwH2MWhCA90Kw= +github.com/hanwen/go-fuse v1.0.0 h1:GxS9Zrn6c35/BnfiVsZVWmsG803xwE7eVRDvcf/BEVc= github.com/hanwen/go-fuse v1.0.0/go.mod h1:unqXarDXqzAk0rt98O2tVndEPIpUgLD9+rwFisZH3Ok= +github.com/hanwen/go-fuse/v2 v2.0.3 h1:kpV28BKeSyVgZREItBLnaVBvOEwv2PuhNdKetwnvNHo= github.com/hanwen/go-fuse/v2 v2.0.3/go.mod h1:0EQM6aH2ctVpvZ6a+onrQ/vaykxh2GH7hy3e13vzTUY= +github.com/hashicorp/consul/api v1.1.0 h1:BNQPM9ytxj6jbjjdRPioQ94T6YXriSopn0i8COv6SRA= github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= +github.com/hashicorp/consul/sdk v0.1.1 h1:LnuDWGNsoajlhGyHJvuWW6FVqRl8JOTPqS6CPTsYjhY= github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/errwrap v0.0.0-20141028054710-7554cd9344ce/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= @@ -617,6 +867,7 @@ github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9n github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= github.com/hashicorp/go-cty v1.4.1-0.20200414143053-d3edf31b6320 h1:1/D3zfFHttUKaCaGKZ/dR2roBXv0vKbSCnssIldfQdI= github.com/hashicorp/go-cty v1.4.1-0.20200414143053-d3edf31b6320/go.mod h1:EiZBMaudVLy8fmjf9Npq1dq9RalhveqZG5w/yz3mHWs= +github.com/hashicorp/go-getter v1.4.0/go.mod h1:7qxyCd8rBfcShwsvxgIguu4KbS3l8bUCwg2Umn7RjeY= github.com/hashicorp/go-getter v1.5.3 h1:NF5+zOlQegim+w/EUhSLh6QhXHmZMEeHLQzllkQ3ROU= github.com/hashicorp/go-getter v1.5.3/go.mod h1:BrrV/1clo8cCYu6mxvboYg+KutTiFnXjMEgDD8+i7ZI= github.com/hashicorp/go-hclog v0.0.0-20180709165350-ff2cf002a8dd/go.mod h1:9bjs9uLqI8l75knNv3lV1kA55veR+WUPSiKIWcQHudI= @@ -624,7 +875,9 @@ github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrj github.com/hashicorp/go-hclog v0.14.1/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-hclog v0.15.0 h1:qMuK0wxsoW4D0ddCCYwPSTm4KQv1X1ke3WmPWZ0Mvsk= github.com/hashicorp/go-hclog v0.15.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= +github.com/hashicorp/go-immutable-radix v1.0.0 h1:AKDB1HM5PWEA7i4nhcpwOrO2byshxBjXVn/J/3+z5/0= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-msgpack v0.5.3 h1:zKjpN5BK/P5lMYrLmBHdBULWbJ0XpYR+7NGzqkZzoD4= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v0.0.0-20161216184304-ed905158d874/go.mod h1:JMRHfdO9jKNzS/+BTlxCjKNQHg/jZAft8U7LloJvN7I= github.com/hashicorp/go-multierror v1.0.0 h1:iVjPR7a6H0tWELX5NxNe7bYopibicUzc7uPribsnS6o= @@ -633,22 +886,29 @@ github.com/hashicorp/go-plugin v1.3.0/go.mod h1:F9eH4LrE/ZsRdbwhfjs9k9HoDUwAHnYt github.com/hashicorp/go-plugin v1.4.0 h1:b0O7rs5uiJ99Iu9HugEzsM67afboErkHUWddUSpUO3A= github.com/hashicorp/go-plugin v1.4.0/go.mod h1:5fGEH17QVwTTcR0zV7yhDPLLmFX9YSZ38b18Udy6vYQ= github.com/hashicorp/go-retryablehttp v0.6.4/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= +github.com/hashicorp/go-retryablehttp v0.6.6 h1:HJunrbHTDDbBb/ay4kxa1n+dLmttUlnP3V9oNE4hmsM= github.com/hashicorp/go-retryablehttp v0.6.6/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= +github.com/hashicorp/go-rootcerts v1.0.0 h1:Rqb66Oo1X/eSV1x66xbDccZjhJigjg0+e82kpwzSwCI= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= github.com/hashicorp/go-safetemp v1.0.0 h1:2HR189eFNrjHQyENnQMMpCiBAsRxzbTMIgBhEyExpmo= github.com/hashicorp/go-safetemp v1.0.0/go.mod h1:oaerMy3BhqiTbVye6QuFhFtIceqFoDHxNAB65b+Rj1I= +github.com/hashicorp/go-sockaddr v1.0.0 h1:GeH6tui99pF4NJgfnhp+L6+FfobzVW3Ah46sLo0ICXs= github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= +github.com/hashicorp/go-syslog v1.0.0 h1:KaodqZuhUoZereWVIYmpUgZysurB1kBLX2j0MwMrUAE= github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-version v1.1.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go-version v1.2.1/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go-version v1.3.0 h1:McDWVJIU/y+u1BRV06dPaLfLCaT7fUTJLp5r04x7iNw= github.com/hashicorp/go-version v1.3.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go.net v0.0.1 h1:sNCoNyDEvN1xa+X0baata4RdcpKwcMS6DH+xwfqPgjw= github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.3 h1:YPkqC67at8FYaadspW/6uE0COsBxS2656RLEr8Bppgk= github.com/hashicorp/golang-lru v0.5.3/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= @@ -656,23 +916,34 @@ github.com/hashicorp/hcl/v2 v2.3.0 h1:iRly8YaMwTBAKhn1Ybk7VSdzbnopghktCD031P8ggU github.com/hashicorp/hcl/v2 v2.3.0/go.mod h1:d+FwDBbOLvpAM3Z6J7gPj/VoAGkNe/gm352ZhjJ/Zv8= github.com/hashicorp/logutils v1.0.0 h1:dLEQVugN8vlakKOUE3ihGLTZJRB4j+M2cdTm/ORI65Y= github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= +github.com/hashicorp/mdns v1.0.0 h1:WhIgCr5a7AaVH6jPUwjtRuuE7/RDufnUvzIr48smyxs= github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= +github.com/hashicorp/memberlist v0.1.3 h1:EmmoJme1matNzb+hMpDuR/0sbJSUisxyqBGG676r31M= github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= +github.com/hashicorp/serf v0.8.2 h1:YZ7UKsJv+hKjqGVUUbtE3HNj79Eln2oQ75tniF6iPt0= github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= +github.com/hashicorp/terraform-exec v0.12.0/go.mod h1:SGhto91bVRlgXQWcJ5znSz+29UZIa8kpBbkGwQ+g9E8= github.com/hashicorp/terraform-exec v0.13.3 h1:R6L2mNpDGSEqtLrSONN8Xth0xYwNrnEVzDz6LF/oJPk= github.com/hashicorp/terraform-exec v0.13.3/go.mod h1:SSg6lbUsVB3DmFyCPjBPklqf6EYGX0TlQ6QTxOlikDU= +github.com/hashicorp/terraform-json v0.8.0/go.mod h1:3defM4kkMfttwiE7VakJDwCd4R+umhSQnvJwORXbprE= github.com/hashicorp/terraform-json v0.10.0 h1:9syPD/Y5t+3uFjG8AiWVPu1bklJD8QB8iTCaJASc8oQ= github.com/hashicorp/terraform-json v0.10.0/go.mod h1:3defM4kkMfttwiE7VakJDwCd4R+umhSQnvJwORXbprE= +github.com/hashicorp/terraform-plugin-docs v0.4.0 h1:xJIXsMzBFwBvC1zcjoNz743GL2tNEfYFFU9+Hjp4Uek= +github.com/hashicorp/terraform-plugin-docs v0.4.0/go.mod h1:fKj/V3t45tiXpSlUms/0G4OrBayyWpbUJ4WtLjBkINU= github.com/hashicorp/terraform-plugin-go v0.3.0 h1:AJqYzP52JFYl9NABRI7smXI1pNjgR5Q/y2WyVJ/BOZA= github.com/hashicorp/terraform-plugin-go v0.3.0/go.mod h1:dFHsQMaTLpON2gWhVWT96fvtlc/MF1vSy3OdMhWBzdM= github.com/hashicorp/terraform-plugin-sdk/v2 v2.6.1 h1:OZ+Q7irJBDhb71XzMSPGJvTIW101sOmbDg5i5qV1odY= github.com/hashicorp/terraform-plugin-sdk/v2 v2.6.1/go.mod h1:72j8cKfs9IirGhPMXJJWLTvRUK4zATtrCOvs2avDlo8= +github.com/hashicorp/uuid v0.0.0-20160311170451-ebb0a03e909c h1:nQcv325vxv2fFHJsOt53eSRf1eINt6vOdYUFfXs4rgk= github.com/hashicorp/uuid v0.0.0-20160311170451-ebb0a03e909c/go.mod h1:fHzc09UnyJyqyW+bFuq864eh+wC7dj65aXmXLRe5to0= github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d h1:kJCB4vdITiW1eC1vq2e6IsrXKrZit1bv/TDYFGMp4BQ= github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= +github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/huandu/xstrings v1.3.2 h1:L18LIDzqlW6xN2rEkpdV8+oL/IXWJ1APd+vsdYy4Wdw= github.com/huandu/xstrings v1.3.2/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= +github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6 h1:UDMh68UUwekSh5iP2OMhRRZJiiBccgV7axzUG8vi56c= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= @@ -681,47 +952,69 @@ github.com/imdario/mergo v0.3.10/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU= github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= +github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/ishidawataru/sctp v0.0.0-20191218070446-00ab2ac2db07 h1:rw3IAne6CDuVFlZbPOkA7bhxlqawFh7RJJ+CejfMaxE= github.com/ishidawataru/sctp v0.0.0-20191218070446-00ab2ac2db07/go.mod h1:co9pwDoBCm1kGxawmb4sPq0cSIOOWNPT4KnHotMP1Zg= +github.com/j-keck/arping v0.0.0-20160618110441-2cf9dc699c56 h1:742eGXur0715JMq73aD95/FU0XpVKXqNuTnEfXsLOYQ= github.com/j-keck/arping v0.0.0-20160618110441-2cf9dc699c56/go.mod h1:ymszkNOg6tORTn+6F6j+Jc8TOr5osrynvN6ivFWZ2GA= +github.com/jaguilar/vt100 v0.0.0-20150826170717-2703a27b14ea h1:8jAXxWimXVprzB8T6UPtRc839vieK/m2LsvNU0aw5pA= github.com/jaguilar/vt100 v0.0.0-20150826170717-2703a27b14ea/go.mod h1:QMdK4dGB3YhEW2BmA1wgGpPYI3HZy/5gD705PXKUVSg= +github.com/jarcoal/httpmock v1.0.5 h1:cHtVEcTxRSX4J0je7mWPfc9BpDpqzXSJ5HbymZmyHck= github.com/jarcoal/httpmock v1.0.5/go.mod h1:ATjnClrvW/3tijVmpL/va5Z3aAyGvqU3gCT8nX0Txik= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= +github.com/jellevandenhooff/dkim v0.0.0-20150330215556-f50fe3d243e1 h1:ujPKutqRlJtcfWk6toYVYagwra7HQHbXOaS171b4Tg8= github.com/jellevandenhooff/dkim v0.0.0-20150330215556-f50fe3d243e1/go.mod h1:E0B/fFc00Y+Rasa88328GlI/XbtyysCtTHZS8h7IrBU= +github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +github.com/jessevdk/go-flags v1.5.0 h1:1jKYvbxEjfUl0fmqTCOfonvskHHXMjBySTLW4y9LFvc= github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4= github.com/jhump/protoreflect v1.6.0 h1:h5jfMVslIg6l29nsMs0D8Wj17RDVdNYti0vDN/PZZoE= github.com/jhump/protoreflect v1.6.0/go.mod h1:eaTn3RZAmMBcV0fifFvlm6VHNz3wSkYyXYWUh7ymB74= +github.com/jingyugao/rowserrcheck v0.0.0-20191204022205-72ab7603b68a h1:GmsqmapfzSJkm28dhRoHz2tLRbJmqhU86IPgBtN3mmk= github.com/jingyugao/rowserrcheck v0.0.0-20191204022205-72ab7603b68a/go.mod h1:xRskid8CManxVta/ALEhJha/pweKBaVG6fWgc0yH25s= github.com/jirfag/go-printf-func-name v0.0.0-20191110105641-45db9963cdd3/go.mod h1:HEWGJkRDzjJY2sqdDwxccsGicWEf9BQOZsq2tV+xzM0= +github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af h1:KA9BjwUk7KlCh6S9EAGWBt1oExIUv9WyNCiRz5amv48= github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af/go.mod h1:HEWGJkRDzjJY2sqdDwxccsGicWEf9BQOZsq2tV+xzM0= github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.0.0-20160803190731-bd40a432e4c7/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.3.0 h1:OS12ieG61fsCg5+qLJ+SsW9NicxNkg3b25OyT2yCeUc= github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik= +github.com/jmoiron/sqlx v1.2.1-0.20190826204134-d7d95172beb5 h1:lrdPtrORjGv1HbbEvKWDUAy97mPpFm4B8hp77tcCUJY= github.com/jmoiron/sqlx v1.2.1-0.20190826204134-d7d95172beb5/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks= +github.com/joefitzgerald/rainbow-reporter v0.1.0 h1:AuMG652zjdzI0YCCnXAqATtRBpGXMcAnrajcaTrSeuo= github.com/joefitzgerald/rainbow-reporter v0.1.0/go.mod h1:481CNgqmVHQZzdIbN52CupLJyoVwB10FQ/IQlF1pdL8= +github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc= github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= +github.com/jonboulle/clockwork v0.1.0 h1:VKV+ZcuP6l3yW9doeqz6ziZGgcynBVQO+obU0+0hcPo= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +github.com/jpillora/backoff v0.0.0-20180909062703-3050d21c67d7 h1:K//n/AqR5HjG3qxbrBCL4vJPW0MVFSs9CPK1OOJdRME= github.com/jpillora/backoff v0.0.0-20180909062703-3050d21c67d7/go.mod h1:2iMrUgbbvHEiQClaW2NsSzMyGHqN+rDFqY705q49KG0= github.com/json-iterator/go v0.0.0-20180612202835-f2b4162afba3/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v0.0.0-20180701071628-ab8a2e0c74be/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1 h1:6QPYqodiu3GuPL+7mfx+NwDdp2eTkp9IfEUpgAwUN0o= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= +github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +github.com/julienschmidt/httprouter v1.2.0 h1:TDTW5Yz1mjftljbcKqRcrYhd4XeOoI98t+9HbQbYf7g= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351 h1:DowS9hvgyYSX4TO5NpyC606/Z4SxnNYbT+WX27or6Ck= github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= +github.com/keybase/go-crypto v0.0.0-20161004153544-93f5b35093ba h1:NARVGAAgEXvoMeNPHhPFt1SBt1VMznA3Gnz9d0qj+co= github.com/keybase/go-crypto v0.0.0-20161004153544-93f5b35093ba/go.mod h1:ghbZscTyKdM07+Fw3KSi0hcJm+AlEUWj8QLlPtijN/M= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= +github.com/kisielk/errcheck v1.5.0 h1:e8esj/e4R+SAOwFwN+n3zr0nYeCyeweozKfO23MvHzY= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/gotool v1.0.0 h1:AV2c/EiW3KqPNT9ZKl07ehoAGi4C5/01Cfbblndcapg= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.4.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= @@ -729,10 +1022,13 @@ github.com/klauspost/compress v1.11.2/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYs github.com/klauspost/compress v1.11.3 h1:dB4Bn0tN3wdCzQxnS8r06kV74qN/TAfaIS0bVE8h3jc= github.com/klauspost/compress v1.11.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/cpuid v0.0.0-20180405133222-e7e905edc00e/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= +github.com/klauspost/cpuid v1.2.0 h1:NMpwD2G9JSFOE1/TJjGSo5zG7Yb2bTe7eq1jH+irmeE= github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.3 h1:CE8S1cTafDpPvMhIxNJKvHsGVBgn1xWYf1NbHQhywc8= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515 h1:T+h1c/A9Gawja4Y9mFVWj2vyii2bbUNDw3kt9VxK2EY= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= @@ -741,6 +1037,7 @@ github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfn github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.3/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= +github.com/kr/pty v1.1.8 h1:AkaSdXYQOWeaO3neb8EM634ahkXXe3jYbVh/F9lq+GI= github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= @@ -750,18 +1047,25 @@ github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0 github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lib/pq v1.2.0 h1:LXpIM/LZ5xGFhOpXAQUIMM1HdyqzVYM13zNdjCEEcA0= github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/logrusorgru/aurora v0.0.0-20181002194514-a7b3b318ed4e h1:9MlwzLdW7QSDrhDjFlsEYmxpFyIoXmYRon3dt0io31k= github.com/logrusorgru/aurora v0.0.0-20181002194514-a7b3b318ed4e/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= github.com/magefile/mage v1.10.0 h1:3HiXzCUY12kh9bIuyXShaVe529fJfyqoVM42o/uom2g= github.com/magefile/mage v1.10.0/go.mod h1:z5UZb/iS3GoOSn0JgWuiw7dxlurVYTu+/jHXqQg881A= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.7.0 h1:aizVhC/NAAcKWb+5QsU1iNOZb4Yws5UO2I+aIprQITM= github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= +github.com/maratori/testpackage v1.0.1 h1:QtJ5ZjqapShm0w5DosRjg0PRlSdAdlx+W6cCKoALdbQ= github.com/maratori/testpackage v1.0.1/go.mod h1:ddKdw+XG0Phzhx8BFDTKgpWP4i7MpApTE5fXSKAqwDU= +github.com/marstr/guid v1.1.0 h1:/M4H/1G4avsieL6BbUwCOBzulmoeKVP5ux/3mQNnbyI= github.com/marstr/guid v1.1.0/go.mod h1:74gB1z2wpxxInTG6yaqA7KrtM0NZ+RbrcqDvYHefzho= +github.com/matoous/godox v0.0.0-20190911065817-5d6d842e92eb h1:RHba4YImhrUVQDHUCe2BNSOz4tVy2yGyXhvYDvxGgeE= github.com/matoous/godox v0.0.0-20190911065817-5d6d842e92eb/go.mod h1:1BELzlh859Sh1c6+90blK8lbYy0kwQf1bYlBhBysy1s= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= @@ -769,8 +1073,11 @@ github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVc github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.6 h1:6Su7aK7lXmJ/U79bYtBjLNaha4Fs1Rg9plHpcH+vvnE= github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.8 h1:c1ghPdyEDarC70ftn0y+A/Ee++9zz8ljHG1b13eJ0s8= +github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-ieproxy v0.0.0-20190610004146-91bb50d98149/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= github.com/mattn/go-ieproxy v0.0.0-20190702010315-6dee0af9227d/go.mod h1:31jz6HNzdxOmlERGGEc4v/dMssOfmp2p5bT/okiKFFc= +github.com/mattn/go-ieproxy v0.0.1 h1:qiyop7gCflfhwCzGyeT0gro3sF9AIg9HU98JORTkqfI= github.com/mattn/go-ieproxy v0.0.1/go.mod h1:pYabZ6IHcRpFh7vIaLfK7rdcWgFEb3SFJ6/gNWuh88E= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= @@ -781,25 +1088,38 @@ github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOA github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-runewidth v0.0.4 h1:2BvfKmzob6Bmd4YsL0zygOqfdFnK7GR4QL06Do4/p7Y= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-shellwords v1.0.3/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vqg+NOMyg4B2o= +github.com/mattn/go-shellwords v1.0.10 h1:Y7Xqm8piKOO3v10Thp7Z36h4FYFjt5xB//6XvOrs2Gw= github.com/mattn/go-shellwords v1.0.10/go.mod h1:EZzvwXDESEeg03EKmM+RmDnNOPKG4lLtQsUlTZDWQ8Y= +github.com/mattn/go-sqlite3 v1.9.0 h1:pDRiWfl+++eC2FEFRy6jXmQlvp4Yh3z1MJKg4UeYM/4= github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= +github.com/mattn/go-zglob v0.0.1 h1:xsEx/XUoVlI6yXjqBK062zYhRTZltCNmYPx6v+8DNaY= github.com/mattn/go-zglob v0.0.1/go.mod h1:9fxibJccNxU2cnpIKLRRFA7zX7qhkJIQWBb449FYHOo= +github.com/mattn/goveralls v0.0.2 h1:7eJB6EqsPhRVxvwEXGnqdO2sJI0PTsrWoTMXEk9/OQc= github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/maxbrunsfeld/counterfeiter/v6 v6.2.2 h1:g+4J5sZg6osfvEfkRZxJ1em0VT95/UOZgi/l7zi1/oE= github.com/maxbrunsfeld/counterfeiter/v6 v6.2.2/go.mod h1:eD9eIE7cdwcMi9rYluz88Jz2VyhSmden33/aXg4oVIY= +github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b h1:j7+1HpAFS1zy5+Q4qx1fWh90gTKwiN4QCGoY9TWyyO4= github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= +github.com/miekg/dns v1.0.14 h1:9jZdLNd/P4+SfEJ0TNyxYpsK8N4GtfylBLqtbYN1sbA= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible h1:aKW/4cBs+yK6gpqU3K/oIwk9Q/XICqd3zOX/UFuvqmk= github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible/go.mod h1:8AuVvqP/mXw1px98n46wfvcGfQ4ci2FwoAjKYxuo3Z4= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= +github.com/mitchellh/cli v1.1.1/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= +github.com/mitchellh/cli v1.1.2 h1:PvH+lL2B7IQ101xQL63Of8yFS2y+aDlsFcsqNc+u/Kw= github.com/mitchellh/cli v1.1.2/go.mod h1:6iaV0fGdElS6dPBx0EApTxHrcWvmJphyh2n8YBLPPZ4= github.com/mitchellh/copystructure v1.0.0 h1:Laisrj+bAB6b/yJwB5Bt3ITZhGJdqmxquMKeZ+mmkFQ= github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-ps v0.0.0-20190716172923-621e5597135b h1:9+ke9YJ9KGWw5ANXK6ozjoK47uI3uNbXv4YVINBnGm8= github.com/mitchellh/go-ps v0.0.0-20190716172923-621e5597135b/go.mod h1:r1VsdOzOPt1ZSrGZWFoNhsAedKnEd6r9Np1+5blZCWk= github.com/mitchellh/go-testing-interface v0.0.0-20171004221916-a61a99592b77/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= @@ -808,19 +1128,24 @@ github.com/mitchellh/go-testing-interface v1.0.4/go.mod h1:kRemZodwjscx+RGhAo8eI github.com/mitchellh/go-wordwrap v0.0.0-20150314170334-ad45545899c7/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= github.com/mitchellh/go-wordwrap v1.0.0 h1:6GlHJ/LTGMrIJbwgdqdl2eEH8o+Exx/0m8ir9Gns0u4= github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= +github.com/mitchellh/gox v0.4.0 h1:lfGJxY7ToLJQjHHwi0EX6uYBdK78egf954SQl13PQJc= github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= +github.com/mitchellh/hashstructure v1.0.0 h1:ZkRJX1CyOoTkar7p/mLS5TZU4nJ1Rn/F8u9dGS02Q3Y= github.com/mitchellh/hashstructure v1.0.0/go.mod h1:QjSHrPWS+BGUVBYkbTZWEnOh3G1DutKwClXU/ABz6AQ= +github.com/mitchellh/iochan v1.0.0 h1:C+X3KsSTLFVBr/tK1eYN/vs4rJcvsiLU338UhYPJWeY= github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.3.1 h1:cCBH2gTD2K0OtLlv/Y5H01VQCqmlDxz30kS5Y5bqfLA= github.com/mitchellh/mapstructure v1.3.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f h1:2+myh5ml7lgEU/51gbeLHfKGNfgEQQIWrlbdaOsidbQ= github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f/go.mod h1:OkQIRizQZAeMln+1tSwduZz7+Af5oFlKirV/MSYes2A= github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/mitchellh/reflectwalk v1.0.1 h1:FVzMWA5RllMAKIdUSC8mdWo3XtwoecrH79BY70sEEpE= github.com/mitchellh/reflectwalk v1.0.1/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/moby/buildkit v0.8.2 h1:kvb0cLWss4mOhCxcXSTENzzA+t1JR1eIyXFhDrI+73g= github.com/moby/buildkit v0.8.2/go.mod h1:5PZi7ALzuxG604ggYSeN+rzC+CyJscuXS7WetulJr1Y= +github.com/moby/locker v1.0.1 h1:fOXqR41zeveg4fFODix+1Ch4mj/gT0NE1XJbp/epuBg= github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc= github.com/moby/sys/mount v0.1.0/go.mod h1:FVQFLDRWwyBjDTBNQXDlWnSFREqOo3OKX9aqhmeoo74= github.com/moby/sys/mount v0.1.1/go.mod h1:FVQFLDRWwyBjDTBNQXDlWnSFREqOo3OKX9aqhmeoo74= @@ -837,29 +1162,42 @@ github.com/moby/term v0.0.0-20200915141129-7f0af18e79f2/go.mod h1:TjQg8pa4iejrUr github.com/moby/term v0.0.0-20201216013528-df9cb8a40635 h1:rzf0wL0CHVc8CEsgyygG0Mn9CNCCPZqOPaz8RiiHYQk= github.com/moby/term v0.0.0-20201216013528-df9cb8a40635/go.mod h1:FBS0z0QWA44HXygs7VXDUOGoN/1TV3RuWkLO04am3wc= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v0.0.0-20180320133207-05fbef0ca5da/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= github.com/mozilla/tls-observatory v0.0.0-20190404164649-a3c1b6cfecfd/go.mod h1:SrKMQvPiws7F7iqYp8/TX+IhxCYhzr6N/1yb8cwHsGk= +github.com/mozilla/tls-observatory v0.0.0-20200317151703-4fa42e1c2dee h1:1xJ+Xi9lYWLaaP4yB67ah0+548CD3110mCPWhVVjFkI= github.com/mozilla/tls-observatory v0.0.0-20200317151703-4fa42e1c2dee/go.mod h1:SrKMQvPiws7F7iqYp8/TX+IhxCYhzr6N/1yb8cwHsGk= github.com/mrunalp/fileutils v0.0.0-20200520151820-abd8a0e76976/go.mod h1:x8F1gnqOkIEiO4rqoeEEEqQbo7HjGMTvyoq3gej4iT0= +github.com/mrunalp/fileutils v0.5.0 h1:NKzVxiH7eSk+OQ4M+ZYW1K6h27RUV3MI6NUTsHhU6Z4= github.com/mrunalp/fileutils v0.5.0/go.mod h1:M1WthSahJixYnrXQl/DFQuteStB1weuxD2QJNHXfbSQ= github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223 h1:F9x/1yl3T2AeKLr2AMdilSD8+f9bvMnNN8VS5iDtovc= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f h1:y5//uYreIhSUg3J1GEMiLbxo1LJaP8RfCpH6pymGZus= github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= +github.com/nakabonne/nestif v0.3.0 h1:+yOViDGhg8ygGrmII72nV9B/zGxY188TYpfolntsaPw= github.com/nakabonne/nestif v0.3.0/go.mod h1:dI314BppzXjJ4HsCnbo7XzrJHPszZsjnk5wEBSYHI2c= +github.com/nbutton23/zxcvbn-go v0.0.0-20180912185939-ae427f1e4c1d h1:AREM5mwr4u1ORQBMvzfzBgpsctsbQikCVpvC+tX285E= github.com/nbutton23/zxcvbn-go v0.0.0-20180912185939-ae427f1e4c1d/go.mod h1:o96djdrsSGy3AWPyBgZMAGfxZNfgntdJG+11KU4QvbU= +github.com/ncw/swift v1.0.47 h1:4DQRPj35Y41WogBxyhOXlrI37nzGlyEcsforeudyYPQ= github.com/ncw/swift v1.0.47/go.mod h1:23YIA4yWVnGwv2dQlN4bB7egfYX6YLn0Yo/S6zZO/ZM= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nsf/jsondiff v0.0.0-20200515183724-f29ed568f4ce h1:RPclfga2SEJmgMmz2k+Mg7cowZ8yv4Trqw9UsJby758= github.com/nsf/jsondiff v0.0.0-20200515183724-f29ed568f4ce/go.mod h1:uFMI8w+ref4v2r9jz+c9i1IfIttS/OkmLfrk1jne5hs= github.com/oklog/run v1.0.0 h1:Ru7dDtJNOyC66gQ5dQmaCa0qIsAUFY3sFpK1Xk8igrw= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= +github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= +github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5 h1:58+kh9C6jJVXYjt8IE48G2eWl6BjwU5Gj0gqY84fy78= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/onsi/ginkgo v0.0.0-20151202141238-7f8ab55aaf3b/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= @@ -869,6 +1207,7 @@ github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+W github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.12.0 h1:Iw5WCbBcaAAd0fpRb1c9r5YCylv4XDoCSigm1zLevwU= github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg= github.com/onsi/gomega v0.0.0-20151007035656-2152b45fa28a/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= @@ -877,7 +1216,9 @@ github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1Cpa github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.8.1/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= +github.com/onsi/gomega v1.9.0 h1:R1uwffexN6Pr340GtYRIdZmAiN4J+iw6WG4wog1DUXg= github.com/onsi/gomega v1.9.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= +github.com/op/go-logging v0.0.0-20160315200505-970db520ece7 h1:lDH9UUVJtmYCjyT0CI4q8xvlXPxeZ0gYCVvWbmPlp88= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= github.com/opencontainers/go-digest v0.0.0-20170106003457-a6d0ee40d420/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= github.com/opencontainers/go-digest v0.0.0-20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= @@ -901,33 +1242,48 @@ github.com/opencontainers/runtime-spec v1.0.1/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/ github.com/opencontainers/runtime-spec v1.0.2-0.20190207185410-29686dbc5559/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/opencontainers/runtime-spec v1.0.3-0.20200728170252-4d89ac9fbff6/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/runtime-spec v1.0.3-0.20200929063507-e6143ca7d51d h1:pNa8metDkwZjb9g4T8s+krQ+HRgZAkqnXml+wNir/+s= github.com/opencontainers/runtime-spec v1.0.3-0.20200929063507-e6143ca7d51d/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/runtime-tools v0.0.0-20181011054405-1d69bd0f9c39 h1:H7DMc6FAjgwZZi8BRqjrAAHWoqEr5e5L6pS4V0ezet4= github.com/opencontainers/runtime-tools v0.0.0-20181011054405-1d69bd0f9c39/go.mod h1:r3f7wjNzSs2extwzU3Y+6pKfobzPh+kKFJ3ofN+3nfs= github.com/opencontainers/selinux v1.6.0/go.mod h1:VVGKuOLlE7v4PJyT6h7mNWvq1rzqiriPsEqVhc+svHE= +github.com/opencontainers/selinux v1.8.0 h1:+77ba4ar4jsCbL1GLbFL8fFM57w6suPfSS9PDLDY7KM= github.com/opencontainers/selinux v1.8.0/go.mod h1:RScLhm78qiWa2gbVCcGkC7tCGdgk3ogry1nUQF8Evvo= +github.com/opentracing-contrib/go-stdlib v1.0.0 h1:TBS7YuVotp8myLon4Pv7BtCBzOTo1DeZCld0Z63mW2w= github.com/opentracing-contrib/go-stdlib v1.0.0/go.mod h1:qtI1ogk+2JhVPIXVc6q+NHziSmy2W5GbdQZFUHADCBU= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= github.com/openzipkin/zipkin-go v0.1.1/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8= github.com/openzipkin/zipkin-go v0.1.3/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8= +github.com/openzipkin/zipkin-go v0.1.6 h1:yXiysv1CSK7Q5yjGy1710zZGnsbMUIjluWBxtLXHPBo= github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= +github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c h1:Lgl0gzECD8GnQ5QCWA8o6BtfL6mDH5rQgM4/fX3avOs= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/pborman/uuid v1.2.0 h1:J7Q5mO4ysT1dv8hyrUGHb9+ooztCXu1D8MY8DZYsu3g= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +github.com/pelletier/go-toml v1.8.0 h1:Keo9qb7iRJs2voHvunFtuuYFsbWeOBh8/P9v/kVMFtw= github.com/pelletier/go-toml v1.8.0/go.mod h1:D6yutnOGMveHEPV7VQOuvI/gXY61bv+9bAOTRnLElKs= +github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= +github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d h1:CdDQnGF8Nq9ocOS/xlSptM1N3BbrA6/kmaep5ggwaIA= github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d/go.mod h1:3OzsM7FXDQlpCiw2j81fOmAwQLnZnLGXVKUzeKQXIAw= +github.com/pierrec/lz4 v2.0.5+incompatible h1:2xWsjqPFWcplujydGg4WmhC/6fZqK42wMM8aXeqhl0I= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1-0.20171018195549-f15c970de5b7/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/profile v1.5.0 h1:042Buzk+NhDI+DeSAA62RwJL8VAuZUMQZUjCsRz1Mug= github.com/pkg/profile v1.5.0/go.mod h1:qBsxPvzyUincmltOk6iyRVxHYg4adc0OFOv72ZdLa18= github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/posener/complete v1.1.1 h1:ccV59UEOTzVDnDUEFdT95ZzHVZ+5+158q8+SJb2QV5w= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= +github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021 h1:0XM1XL/OFFJjXsYXlG30spTkV/E9+gmd5GD1w2HE8xM= github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= github.com/prometheus/client_golang v0.0.0-20180209125602-c332b6f63c06/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.8.0/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= @@ -936,12 +1292,14 @@ github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g= +github.com/prometheus/client_golang v1.7.1 h1:NTGy1Ja9pByO+xAeH/qiWnLrKtr3hJPNjaVUwnjpdpA= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= github.com/prometheus/client_model v0.0.0-20171117100541-99fa1f4be8e5/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/common v0.0.0-20180110214958-89604d197083/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.0.0-20180801064454-c7de2306084e/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= @@ -950,6 +1308,7 @@ github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y8 github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= +github.com/prometheus/common v0.10.0 h1:RyRA7RzGXQZiW+tGMr7sxa85G1z0yOpM1qq5c8lNawc= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/procfs v0.0.0-20180125133057-cb4147076ac7/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20180725123919-05ee40e3a273/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= @@ -962,41 +1321,71 @@ github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDa github.com/prometheus/procfs v0.0.5/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/procfs v0.2.0 h1:wH4vA7pcjKuZzjF7lM8awk4fnuJO6idemZXoKnULUx4= github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/tsdb v0.7.1 h1:YZcsG11NqnK4czYLrWd9mpEuAJIHVQLwdrleYfszMAA= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= +github.com/quasilyte/go-consistent v0.0.0-20190521200055-c6f3937de18c h1:JoUA0uz9U0FVFq5p4LjEq4C0VgQ0El320s3Ms0V4eww= github.com/quasilyte/go-consistent v0.0.0-20190521200055-c6f3937de18c/go.mod h1:5STLWrekHfjyYwxBRVRXNOSewLJ3PWfDJd1VyTS21fI= +github.com/quasilyte/go-ruleguard v0.1.2-0.20200318202121-b00d7a75d3d8 h1:DvnesvLtRPQOvaUbfXfh0tpMHg29by0H7F2U+QIkSu8= github.com/quasilyte/go-ruleguard v0.1.2-0.20200318202121-b00d7a75d3d8/go.mod h1:CGFX09Ci3pq9QZdj86B+VGIdNj4VyCo2iPOGS9esB/k= +github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a h1:9ZKAASQSHhDYGoxY8uLVpewe1GDZ2vu2Tr/vTdVAkFQ= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= +github.com/remyoudompheng/bigfft v0.0.0-20170806203942-52369c62f446 h1:/NRJ5vAYoqz+7sG51ubIDHXeWO8DlTSrToPu6q11ziA= github.com/remyoudompheng/bigfft v0.0.0-20170806203942-52369c62f446/go.mod h1:uYEyJGbgTkfkS4+E/PavXkNJcbFIpEtjt2B0KDQ5+9M= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= +github.com/rogpeppe/fastuuid v1.1.0 h1:INyGLmTCMGFr6OVIb977ghJvABML2CMVjPoRfNDdYDo= github.com/rogpeppe/fastuuid v1.1.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.5.2 h1:qLvObTrvO/XRCqmkKxUlOBc48bI3efyDuAZe25QiF0w= github.com/rogpeppe/go-internal v1.5.2/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= +github.com/rs/xid v1.2.1 h1:mhH9Nq+C1fY2l1XIpgxIiUOfNpRBYH1kKcr+qfKgjRc= github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= +github.com/rubiojr/go-vhd v0.0.0-20160810183302-0bfd3b39853c h1:ht7N4d/B7Ezf58nvMNVF3OlvDlz9pp+WHVcRNS0nink= github.com/rubiojr/go-vhd v0.0.0-20160810183302-0bfd3b39853c/go.mod h1:DM5xW0nvfNNm2uytzsvhI3OnX8uzaRAg8UX/CnDqbto= +github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= +github.com/russross/blackfriday v1.6.0 h1:KqfZb0pUVN2lYqZUYRddxF4OR8ZMURnJIG5Y3VRLtww= +github.com/russross/blackfriday v1.6.0/go.mod h1:ti0ldHuxg49ri4ksnFxlkCfN+hvslNlmVHqNRXXJNAY= +github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryancurrah/gomodguard v1.0.4/go.mod h1:9T/Cfuxs5StfsocWr4WzDL36HqnX0fVb9d5fSEaLhoE= +github.com/ryancurrah/gomodguard v1.1.0 h1:DWbye9KyMgytn8uYpuHkwf0RHqAYO6Ay/D0TbCpPtVU= github.com/ryancurrah/gomodguard v1.1.0/go.mod h1:4O8tr7hBODaGE6VIhfJDHcwzh5GUccKSJBU0UMXJFVM= +github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f h1:UFr9zpz4xgTnIE5yIMtWAMngCdZ9p/+q6lTbgelo80M= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/safchain/ethtool v0.0.0-20190326074333-42ed695e3de8 h1:2c1EFnZHIPCW8qKWgHMH/fX2PkSabFc5mrVzfUNdg5U= github.com/safchain/ethtool v0.0.0-20190326074333-42ed695e3de8/go.mod h1:Z0q5wiBQGYcxhMZ6gUqHn6pYNLypFAvaL3UvgZLR0U4= +github.com/sassoftware/go-rpmutils v0.0.0-20190420191620-a8f1baeba37b h1:+gCnWOZV8Z/8jehJ2CdqB47Z3S+SREmQcuXkRFLNsiI= github.com/sassoftware/go-rpmutils v0.0.0-20190420191620-a8f1baeba37b/go.mod h1:am+Fp8Bt506lA3Rk3QCmSqmYmLMnPDhdDUcosQCAx+I= +github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= +github.com/sclevine/spec v1.2.0 h1:1Jwdf9jSfDl9NVmt8ndHqbTZ7XCCPbh1jI3hkDBHVYA= github.com/sclevine/spec v1.2.0/go.mod h1:W4J29eT/Kzv7/b9IWLB055Z+qvVC9vt0Arko24q7p+U= +github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= +github.com/seccomp/libseccomp-golang v0.9.1 h1:NJjM5DNFOs0s3kYE1WUOr6G8V97sdt46rlXTMfXGWBo= github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo= github.com/securego/gosec v0.0.0-20200103095621-79fbf3af8d83/go.mod h1:vvbZ2Ae7AzSq3/kywjUDxSNq2SJ27RxCz2un0H3ePqE= +github.com/securego/gosec v0.0.0-20200401082031-e946c8c39989 h1:rq2/kILQnPtq5oL4+IAjgVOjh5e2yj2aaCYi7squEvI= github.com/securego/gosec v0.0.0-20200401082031-e946c8c39989/go.mod h1:i9l/TNj+yDFh9SZXUTvspXTjbFXgZGP/UvhU1S65A4A= +github.com/securego/gosec/v2 v2.3.0 h1:y/9mCF2WPDbSDpL3QDWZD3HHGrSYw0QSHnCqTfs4JPE= github.com/securego/gosec/v2 v2.3.0/go.mod h1:UzeVyUXbxukhLeHKV3VVqo7HdoQR9MrRfFmZYotn8ME= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ= github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= +github.com/serialx/hashring v0.0.0-20190422032157-8b2912629002 h1:ka9QPuQg2u4LGipiZGsgkg3rJCo4iIUCy75FddM0GRQ= github.com/serialx/hashring v0.0.0-20190422032157-8b2912629002/go.mod h1:/yeG0My1xr/u+HZrFQ1tOQQQQrOawfyMUH13ai5brBc= +github.com/shirou/gopsutil v0.0.0-20190901111213-e4ec7b275ada h1:WokF3GuxBeL+n4Lk4Fa8v9mbdjlrl7bHuneF4N1bk2I= github.com/shirou/gopsutil v0.0.0-20190901111213-e4ec7b275ada/go.mod h1:WWnYX4lzhCH5h/3YBfyVA3VbLYjlMZZAQcW9ojMexNc= +github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4 h1:udFKJ0aHUL60LboW/A+DfgoHVedieIzIXE8uylPue0U= github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc= +github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e h1:MZM7FHLqUHYI0Y/mQAt3d2aYa0SiNms/hFqC9qJYolM= github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= +github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041 h1:llrF3Fs4018ePo4+G/HV/uQUqEI1HMDjCeOf2V6puPc= github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= +github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.0.4-0.20170822132746-89742aefa4b2/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= github.com/sirupsen/logrus v1.0.6/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= @@ -1008,38 +1397,52 @@ github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic github.com/sirupsen/logrus v1.8.0 h1:nfhvjKcUMhBMVqbKHJlk5RPrrfYr/NMo3692g0dwfWU= github.com/sirupsen/logrus v1.8.0/go.mod h1:4GuYW9TZmE769R5STWrRakJc4UqQ3+QQ95fyz7ENv1A= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= +github.com/smartystreets/assertions v1.0.0 h1:UVQPSSmc3qtTi+zPPkCXvZX9VvW/xT/NsRvKfwY81a8= github.com/smartystreets/assertions v1.0.0/go.mod h1:kHHU4qYBaI3q23Pp3VPrmWhuIUrLW/7eUrw0BU5VaoM= +github.com/smartystreets/go-aws-auth v0.0.0-20180515143844-0c1422d1fdb9 h1:hp2CYQUINdZMHdvTdXtPOY2ainKl4IoMcpAXEf2xj3Q= github.com/smartystreets/go-aws-auth v0.0.0-20180515143844-0c1422d1fdb9/go.mod h1:SnhjPscd9TpLiy1LpzGSKh3bXCfxxXuqd9xmQJy3slM= github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= +github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= +github.com/smartystreets/gunit v1.0.0 h1:RyPDUFcJbvtXlhJPk7v+wnxZRY2EUokhEYl2EJOPToI= github.com/smartystreets/gunit v1.0.0/go.mod h1:qwPWnhz6pn0NnRBP++URONOVyNkPyr4SauJk4cUOwJs= +github.com/soheilhy/cmux v0.1.4 h1:0HKaf1o97UwFjHH9o5XsHUOF+tqmdA7KEzXLpiyaw0E= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= github.com/sourcegraph/go-diff v0.5.1/go.mod h1:j2dHj3m8aZgQO8lMTcTnBcXkRRRqi34cd2MNlA9u1mE= +github.com/sourcegraph/go-diff v0.5.3 h1:lhIKJ2nXLZZ+AfbHpYxTn0pXpNTTui0DX7DO3xeb1Zs= github.com/sourcegraph/go-diff v0.5.3/go.mod h1:v9JDtjCE4HHHCZGId75rg8gkKKa98RVjBcBGsVmMmak= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72 h1:qLC7fQah7D6K1B0ujays3HV9gkFtllcxhzImRR7ArPQ= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/spf13/afero v1.2.2 h1:5jhuqJyZCZf2JRofRvN/nIFgIWNzPa3/Vz8mYylgbWc= github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cast v1.3.1 h1:nFm6S0SMdyzrzcmThSipiEubIDy8WEXKNZ0UOgiRpng= github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cobra v0.0.2-0.20171109065643-2da4a54c5cee/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= +github.com/spf13/cobra v1.0.0 h1:6m/oheQuQ13N9ks4hubMG6BnvwOeaJrqSPLahSnczz8= github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.1-0.20171106142849-4c012f6dcd95/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.2/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= github.com/spf13/viper v1.6.1/go.mod h1:t3iDnF5Jlj76alVNuyFBk5oUMCvsrkbvZK0WQdfDi5k= +github.com/spf13/viper v1.7.0 h1:xVKxvI7ouOI5I+U9s2eeiUfMaWBVoXA3AWskkrqK0VM= github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= github.com/stretchr/objx v0.0.0-20180129172003-8a3f7159479f/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/testify v0.0.0-20151208002404-e3a8ff8ce365/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v0.0.0-20180303142811-b89eecf5ca5d/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= @@ -1050,86 +1453,137 @@ github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5 github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/syndtr/gocapability v0.0.0-20170704070218-db04d3cc01c8/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= +github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635 h1:kdXcSzyDtseVEc4yCz2qF8ZrQvIDBJLl4S1c3GCXmoI= github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= +github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07 h1:UyzmZLoiDWMRywV4DUYb9Fbt8uiOSooupjTq10vpvnU= github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= +github.com/tchap/go-patricia v2.2.6+incompatible h1:JvoDL7JSoIP2HDE8AbDH3zC8QBPxmzYe32HHy5yQ+Ck= github.com/tchap/go-patricia v2.2.6+incompatible/go.mod h1:bmLyhP68RS6kStMGxByiQ23RP/odRBOTVjwp2cDyi6I= github.com/tdakkota/asciicheck v0.0.0-20200416190851-d7f85be797a2/go.mod h1:yHp0ai0Z9gUljN3o0xMhYJnH/IcvkdTBOX2fmJ93JEM= +github.com/tdakkota/asciicheck v0.0.0-20200416200610-e657995f937b h1:HxLVTlqcHhFAz3nWUcuvpH7WuOMv8LQoCWmruLfFH2U= github.com/tdakkota/asciicheck v0.0.0-20200416200610-e657995f937b/go.mod h1:yHp0ai0Z9gUljN3o0xMhYJnH/IcvkdTBOX2fmJ93JEM= github.com/tetafro/godot v0.3.7/go.mod h1:/7NLHhv08H1+8DNj0MElpAACw1ajsCuf3TKNQxA5S+0= +github.com/tetafro/godot v0.4.2 h1:Dib7un+rYJFUi8vN0Bk6EHheKy6fv6ZzFURHw75g6m8= github.com/tetafro/godot v0.4.2/go.mod h1:/7NLHhv08H1+8DNj0MElpAACw1ajsCuf3TKNQxA5S+0= github.com/timakin/bodyclose v0.0.0-20190930140734-f7f2e9bca95e/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk= +github.com/timakin/bodyclose v0.0.0-20200424151742-cb6215831a94 h1:ig99OeTyDwQWhPe2iw9lwfQVF1KB3Q4fpP3X7/2VBG8= github.com/timakin/bodyclose v0.0.0-20200424151742-cb6215831a94/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk= +github.com/tj/assert v0.0.0-20171129193455-018094318fb0 h1:Rw8kxzWo1mr6FSaYXjQELRe88y2KdfynXdnK72rdjtA= github.com/tj/assert v0.0.0-20171129193455-018094318fb0/go.mod h1:mZ9/Rh9oLWpLLDRpvE+3b7gP/C2YyLFYxNmcLnPTMe0= +github.com/tj/go-elastic v0.0.0-20171221160941-36157cbbebc2 h1:eGaGNxrtoZf/mBURsnNQKDR7u50Klgcf2eFDQEnc8Bc= github.com/tj/go-elastic v0.0.0-20171221160941-36157cbbebc2/go.mod h1:WjeM0Oo1eNAjXGDx2yma7uG2XoyRZTq1uv3M/o7imD0= +github.com/tj/go-kinesis v0.0.0-20171128231115-08b17f58cb1b h1:m74UWYy+HBs+jMFR9mdZU6shPewugMyH5+GV6LNgW8w= github.com/tj/go-kinesis v0.0.0-20171128231115-08b17f58cb1b/go.mod h1:/yhzCV0xPfx6jb1bBgRFjl5lytqVqZXEaeqWP8lTEao= +github.com/tj/go-spin v1.1.0 h1:lhdWZsvImxvZ3q1C5OIB7d72DuOwP4O2NdBg9PyzNds= github.com/tj/go-spin v1.1.0/go.mod h1:Mg1mzmePZm4dva8Qz60H2lHwmJ2loum4VIrLgVnKwh4= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5 h1:LnC5Kc/wtumK+WB441p7ynQJzVuNRJiqddSIE3IlSEQ= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tommy-muehle/go-mnd v1.1.1/go.mod h1:dSUh0FtTP8VhvkL1S+gUR1OKd9ZnSaozuI6r3m6wOig= +github.com/tommy-muehle/go-mnd v1.3.1-0.20200224220436-e6f9a994e8fa h1:RC4maTWLKKwb7p1cnoygsbKIgNlJqSYBeAFON3Ar8As= github.com/tommy-muehle/go-mnd v1.3.1-0.20200224220436-e6f9a994e8fa/go.mod h1:dSUh0FtTP8VhvkL1S+gUR1OKd9ZnSaozuI6r3m6wOig= +github.com/tonistiigi/fsutil v0.0.0-20201103201449-0834f99b7b85 h1:014iQD8i8EabPWK2XgUuOTxg5s2nhfDmq6GupskfUO8= github.com/tonistiigi/fsutil v0.0.0-20201103201449-0834f99b7b85/go.mod h1:a7cilN64dG941IOXfhJhlH0qB92hxJ9A1ewrdUmJ6xo= +github.com/tonistiigi/units v0.0.0-20180711220420-6950e57a87ea h1:SXhTLE6pb6eld/v/cCndK0AMpt1wiVFb/YYmqB3/QG0= github.com/tonistiigi/units v0.0.0-20180711220420-6950e57a87ea/go.mod h1:WPnis/6cRcDZSUvVmezrxJPkiO87ThFYsoUiMwWNDJk= +github.com/uber/jaeger-client-go v2.25.0+incompatible h1:IxcNZ7WRY1Y3G4poYlx24szfsn/3LvK9QHCq9oQw8+U= github.com/uber/jaeger-client-go v2.25.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= +github.com/uber/jaeger-lib v2.2.0+incompatible h1:MxZXOiR2JuoANZ3J6DE/U0kSFv/eJ/GfSYVCjK7dyaw= github.com/uber/jaeger-lib v2.2.0+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= +github.com/ugorji/go v1.1.4 h1:j4s+tAvLfL3bZyefP2SEWmhBzmuIlH/eqNuPdFPgngw= github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= +github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8 h1:3SVOIvH7Ae1KRYyQWRjXWJEA9sS/c/pjvH++55Gr648= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= +github.com/ulikunitz/xz v0.5.5/go.mod h1:2bypXElzHzzJZwzH67Y6wb67pO62Rzfn7BSiF4ABRW8= github.com/ulikunitz/xz v0.5.6/go.mod h1:2bypXElzHzzJZwzH67Y6wb67pO62Rzfn7BSiF4ABRW8= github.com/ulikunitz/xz v0.5.7/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/ulikunitz/xz v0.5.8 h1:ERv8V6GKqVi23rgu5cj9pVfVzJbOqAY2Ntl88O6c2nQ= github.com/ulikunitz/xz v0.5.8/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= +github.com/ultraware/funlen v0.0.2 h1:Av96YVBwwNSe4MLR7iI/BIa3VyI7/djnto/pK3Uxbdo= github.com/ultraware/funlen v0.0.2/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lPbfaF6xhA= +github.com/ultraware/whitespace v0.0.4 h1:If7Va4cM03mpgrNH9k49/VOicWpGoG70XPBFFODYDsg= github.com/ultraware/whitespace v0.0.4/go.mod h1:aVMh/gQve5Maj9hQ/hg+F75lr/X5A89uZnzAmWSineA= github.com/urfave/cli v0.0.0-20171014202726-7bc6a0acffa5/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/urfave/cli v1.22.2 h1:gsqYFH8bb9ekPA12kRo0hfjngWQjkJPlN9R0N78BoUo= github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/uudashr/gocognit v1.0.1 h1:MoG2fZ0b/Eo7NXoIwCVFLG5JED3qgQz5/NEE+rOsjPs= github.com/uudashr/gocognit v1.0.1/go.mod h1:j44Ayx2KW4+oB6SWMv8KsmHzZrOInQav7D3cQMJ5JUM= +github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +github.com/valyala/fasthttp v1.2.0 h1:dzZJf2IuMiclVjdw0kkT+f9u4YdrapbNyGAN47E/qnk= github.com/valyala/fasthttp v1.2.0/go.mod h1:4vX61m6KN+xDduDNwXrhIAVZaZaZiQ1luJk8LWSxF3s= +github.com/valyala/quicktemplate v1.2.0 h1:BaO1nHTkspYzmAjPXj0QiDJxai96tlcZyKcI9dyEGvM= github.com/valyala/quicktemplate v1.2.0/go.mod h1:EH+4AkTd43SvgIbQHYu59/cJyxDoOVRUAfrukLPuGJ4= +github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a h1:0R4NLDRDZX6JcmhJgXi5E4b8Wg84ihbmUKp/GvSPEzc= github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio= +github.com/vdemeester/k8s-pkg-credentialprovider v1.17.4 h1:czKEIG2Q3YRTgs6x/8xhjVMJD5byPo6cZuostkbTM74= github.com/vdemeester/k8s-pkg-credentialprovider v1.17.4/go.mod h1:inCTmtUdr5KJbreVojo06krnTgaeAz/Z7lynpPk/Q2c= github.com/vishvananda/netlink v0.0.0-20181108222139-023a6dafdcdf/go.mod h1:+SR5DhBJrl6ZM7CoCKvpw5BKroDKQ+PJqOg65H/2ktk= +github.com/vishvananda/netlink v1.1.0 h1:1iyaYNBLmP6L0220aDnYQpo1QEV4t4hJ+xEEhhJH8j0= github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE= github.com/vishvananda/netns v0.0.0-20180720170159-13995c7128cc/go.mod h1:ZjcWmFBXmLKZu9Nxj3WKYEafiSqer2rnvPr0en9UNpI= +github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df h1:OviZH7qLw/7ZovXvuNyL3XQl8UFofeikI1NW1Gypu7k= github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU= github.com/vmihailenco/msgpack v3.3.3+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk= github.com/vmihailenco/msgpack v4.0.4+incompatible h1:dSLoQfGFAo3F6OoNhwUmLwVgaUXK79GlxNBwueZn0xI= github.com/vmihailenco/msgpack v4.0.4+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk= +github.com/vmihailenco/msgpack/v4 v4.3.12 h1:07s4sz9IReOgdikxLTKNbBdqDMLsjPKXwvCazn8G65U= github.com/vmihailenco/msgpack/v4 v4.3.12/go.mod h1:gborTTJjAo/GWTqqRjrLCn9pgNN+NXzzngzBKDPIqw4= +github.com/vmihailenco/tagparser v0.1.1 h1:quXMXlA39OCbd2wAdTsGDlK9RkOk6Wuw+x37wVyIuWY= github.com/vmihailenco/tagparser v0.1.1/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI= +github.com/vmware/govmomi v0.20.3 h1:gpw/0Ku+6RgF3jsi7fnCLmlcikBHfKBCUcu1qgc16OU= github.com/vmware/govmomi v0.20.3/go.mod h1:URlwyTFZX72RmxtxuaFL2Uj3fD1JTvZdx59bHWk6aFU= github.com/willf/bitset v1.1.11-0.20200630133818-d5bec3311243/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= +github.com/willf/bitset v1.1.11 h1:N7Z7E9UvjW+sGsEl7k/SJrvY2reP1A07MrGuCjIOjRE= github.com/willf/bitset v1.1.11/go.mod h1:83CECat5yLh5zVOf4P1ErAgKA5UDvKtgyUABdr3+MjI= github.com/xanzy/go-gitlab v0.31.0/go.mod h1:sPLojNBn68fMUWSxIJtdVVIP8uSBYqesTfDUseX11Ug= +github.com/xanzy/go-gitlab v0.32.0 h1:tBm+OXv1t+KBsqlXkSDFz+YUjRM0GFsjpOWYOod3Ebs= github.com/xanzy/go-gitlab v0.32.0/go.mod h1:sPLojNBn68fMUWSxIJtdVVIP8uSBYqesTfDUseX11Ug= +github.com/xanzy/ssh-agent v0.2.1/go.mod h1:mLlQY/MoOhWBj+gOGMQkOeiEvkx+8pJSI+0Bx9h2kr4= github.com/xanzy/ssh-agent v0.3.0 h1:wUMzuKtKilRgBAD1sUb8gOwwRr2FGoBVumcjoOACClI= github.com/xanzy/ssh-agent v0.3.0/go.mod h1:3s9xbODqPuuhK9JV1R321M/FlMZSBvE5aY6eAcqrDh0= +github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f h1:J9EGpcZtP0E/raorCMxlFGSTBrsSlaDGf3jU/qvAE2c= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= +github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0= github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= +github.com/xeipuuv/gojsonschema v0.0.0-20180618132009-1d523034197f h1:mvXjJIHRZyhNuGassLTcXTwjiWq7NmjdavZsUnmFybQ= github.com/xeipuuv/gojsonschema v0.0.0-20180618132009-1d523034197f/go.mod h1:5yf86TLmAcydyeJq5YvxkGPE2fm/u4myDekKRoLuqhs= +github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 h1:nIPpBwaJSVYIxUFsDv3M8ofmx9yWTog9BfvIu0q41lo= github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8/go.mod h1:HUYIGzjTL3rfEspMxjDjgmT5uz5wzYJKVo23qUhYTos= +github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 h1:eY9dn8+vbi4tKz5Qo6v2eYzo7kUS51QINcR5jNpbZS8= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77 h1:ESFSdwYZvkeru3RtdrYueztKhOBCSAAzS4Gf+k0tEow= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1 h1:ruQGxdhGHe7FWOJPT0mKs5+pD2Xs1Bm/kdGlHO04FmM= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43 h1:+lm10QQTNSBd8DVTNGHx7o/IKu9HYDvLMffDhbyLccI= github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43/go.mod h1:aX5oPXxHm3bOH+xeAttToC8pqch2ScQN/JoXYupl6xs= +github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50 h1:hlE8//ciYMztlGpl/VA+Zm1AcTPHYkHJPbHqE6WJUXE= github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50/go.mod h1:NUSPSUX/bi6SeDMUh6brw0nXpxHnc96TguQh0+r/ssA= +github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f h1:ERexzlUfuTvpE74urLSbIQW0Z/6hF9t8U4NsJLaioAY= github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f/go.mod h1:GlGEuHIJweS1mbCqG+7vt2nvWLzLLnRHbXz5JKd/Qbg= github.com/zclconf/go-cty v1.2.0/go.mod h1:hOPWgoHbaTUnI5k4D2ld+GRpFJSCe6bCM7m1q/N4PQ8= github.com/zclconf/go-cty v1.2.1/go.mod h1:hOPWgoHbaTUnI5k4D2ld+GRpFJSCe6bCM7m1q/N4PQ8= +github.com/zclconf/go-cty v1.7.1/go.mod h1:VDR4+I79ubFBGm1uJac1226K5yANQFHeauxPBoP54+o= github.com/zclconf/go-cty v1.8.2 h1:u+xZfBKgpycDnTNjPhGiTEYZS5qS/Sb5MqSfm7vzcjg= github.com/zclconf/go-cty v1.8.2/go.mod h1:vVKLxnk3puL4qRAv72AO+W99LUD4da90g3uUAzyuvAk= +github.com/zclconf/go-cty-debug v0.0.0-20191215020915-b22d67c1ba0b h1:FosyBZYxY34Wul7O/MSKey3txpPYyCqVO5ZyceuQJEI= github.com/zclconf/go-cty-debug v0.0.0-20191215020915-b22d67c1ba0b/go.mod h1:ZRKQfBXbGkpdV6QMzT3rU1kSTAnfu1dO8dPKjYprgj8= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.etcd.io/bbolt v1.3.5 h1:XAzx9gjCb0Rxj7EoqcClPD1d5ZBxZJk0jbuoPHenBt0= go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= +go.etcd.io/etcd v0.5.0-alpha.5.0.20200910180754-dd1b699fc489 h1:1JFLBqwIgdyHN1ZtgjTBwO+blA6gVOmZurpiMEsETKo= go.etcd.io/etcd v0.5.0-alpha.5.0.20200910180754-dd1b699fc489/go.mod h1:yVHk9ub3CSBatqGNg7GRmsnfLWtoW60w4eDYfh7vHDg= go.opencensus.io v0.15.0/go.mod h1:UffZAU+4sDEINUGP/B7UfBBkq4fqLu9zXAX7ke6CHW0= go.opencensus.io v0.18.0/go.mod h1:vKdFvxhtzZ9onBp9VKHK8z/sRpBMnKAsufL7wlDrCOA= @@ -1142,11 +1596,17 @@ go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4 h1:LYy1Hy3MJdrCdMwwzxA/dRok4ejH+RwNGbuoD9fCjto= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/atomic v1.4.0 h1:cxzIVoETapQEqDhQu3QfnvXAV4AlzcvUCxkVUFw3+EU= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/multierr v1.1.0 h1:HoEmRHQPVSqub6w2z2d2EOVs2fjyFRGyofhKuyDq0QI= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= +go.uber.org/zap v1.10.0 h1:ORx85nbTijNz8ljznvCMR1ZBIPKFn3jQrag10X2AsuM= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +go4.org v0.0.0-20180809161055-417644f6feb5 h1:+hE86LblG4AyDgwMCLTE6FOlM9+qjHSYS+rKqxUVdsM= go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE= +gocloud.dev v0.19.0 h1:EDRyaRAnMGSq/QBto486gWFxMLczAfIYUmusV7XLNBM= gocloud.dev v0.19.0/go.mod h1:SmKwiR8YwIMMJvQBKLsC3fHNyMwXLw3PMDO+VVteJMI= +golang.org/x/build v0.0.0-20190314133821-5284462c4bec h1:9vRy8wdKITrvvXLEOnNC9FHAGhmzy3OwvKfscMgJ4vo= golang.org/x/build v0.0.0-20190314133821-5284462c4bec/go.mod h1:atTaCNAy0f16Ah5aV1gMSwgiKVHwu/JncqDpuRr7lS4= golang.org/x/crypto v0.0.0-20171113213409-9f005a07e0d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -1166,6 +1626,7 @@ golang.org/x/crypto v0.0.0-20191002192127-34f69633bfdc/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= @@ -1183,8 +1644,10 @@ golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= +golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6 h1:QE6XYQK6naiK1EPAe1g/ILLxN5RBoH5xkJk3CqlMI/Y= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b h1:+qEpEAPhDZ1o0x3tHzZTQDArnOixOzGD9HUJfcg0mb4= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -1200,6 +1663,7 @@ golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPI golang.org/x/lint v0.0.0-20200302205851-738671d3881b h1:Wh+f8QHJXR411sJR8/vRBTZ7YapZaRvUcLFFJhusH0k= golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028 h1:4+4C/Iv2U4fMZBiMCc98MG1In4gJY5YRhtpDNeDeHWs= golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= @@ -1272,6 +1736,7 @@ golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4Iltr golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/perf v0.0.0-20180704124530-6e6d33e29852 h1:xYq6+9AtI+xP3M4r0N1hCkHrInHDBohhquRgx9Kk6gI= golang.org/x/perf v0.0.0-20180704124530-6e6d33e29852/go.mod h1:JLpeXjPJfIyPr5TlbXLkXWLhP8nz10XfvxElABhCtcw= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1281,6 +1746,7 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9 h1:SQFwaSi55rU7vdNs9Yr0Z324VNlrF+0wMqRXT4St8ck= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1296,6 +1762,7 @@ golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20181218192612-074acd46bca6/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190209173611-3b5209105503/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190221075227-b4e8571b14e0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1364,6 +1831,7 @@ golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210324051608-47abb6519492 h1:Paq34FxTluEPvVyayQqMPgHm+vTOrIifmcYxFBx9TLg= golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1 h1:v+OssWQX+hTHEmOBgwxdZxK4zHq3yOs8F9J7mk0PY8E= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1460,8 +1928,10 @@ golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485 h1:OB/uP/Puiu5vS5QMRPrXCDWUPb+kt8f1KW8oQzFejQw= gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485/go.mod h1:2ltnJ7xHfj0zHS40VVPYEAAMTa3ZGguvHGBSJeRWqE0= gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= +gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e h1:jRyg0XfpwWlhEV8mDfdNGBeSJM2fuyh9Yjrnd8kF2Ts= gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e/go.mod h1:kS+toOQn6AQKjmKJ7gzohV1XkqsFehRA2FbsbkopSuQ= google.golang.org/api v0.0.0-20160322025152-9bf6e6e569ff/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= google.golang.org/api v0.0.0-20180910000450-7ca32eb868bf/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= @@ -1498,6 +1968,7 @@ google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.6 h1:lMO5rYAqUxkmaj76jAkRUvt5JZgFymx/+Q5Mzfivuhc= google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/cloud v0.0.0-20151119220103-975617b05ea8 h1:Cpp2P6TPjujNoC5M2KHY6g7wfyLYfIWRZaSdIKfDasA= google.golang.org/cloud v0.0.0-20151119220103-975617b05ea8/go.mod h1:0H1ncTHf11KCFhTc/+EFRbzSCOZx+VUbRMk55Yv5MYk= google.golang.org/genproto v0.0.0-20170818010345-ee236bd376b0/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= @@ -1570,7 +2041,9 @@ google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpAD google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +gopkg.in/airbrake/gobrake.v2 v2.0.9 h1:7z2uVWwn7oVeeugY1DtlPAy5H+KYgB1KeKTnqjNatLo= gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U= +gopkg.in/alecthomas/kingpin.v2 v2.2.6 h1:jMFz6MfLP0/4fUyZle81rXUoxOBFi19VUFKVDOQfozc= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20141024133853-64131543e789/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -1580,18 +2053,29 @@ gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= +gopkg.in/cheggaaa/pb.v1 v1.0.27 h1:kJdccidYzt3CaHD1crCFTS1hxyhSi059NhOFUf03YFo= gopkg.in/cheggaaa/pb.v1 v1.0.27/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= +gopkg.in/errgo.v2 v2.1.0 h1:0vLT13EuvQ0hNvakwLuFZ/jYrLp5F3kcWHXdRggjCE8= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/gcfg.v1 v1.2.0 h1:0HIbH907iBTAntm+88IJV2qmJALDAh8sPekI9Vc1fm0= gopkg.in/gcfg.v1 v1.2.0/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= +gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2 h1:OAj3g0cR6Dx/R07QgQe8wkA9RNjB2u4i700xBkIT4e0= gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo= +gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/ini.v1 v1.56.0 h1:DPMeDvGTM54DXbPkVIZsp19fp/I2K7zwA/itHYHKo8Y= gopkg.in/ini.v1 v1.56.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8= gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= +gopkg.in/resty.v1 v1.12.0 h1:CuXP0Pjfw9rOuY6EP+UvtNvt5DSqHpIxILZKT/quCZI= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= +gopkg.in/square/go-jose.v2 v2.3.1 h1:SK5KegNXmKmqE342YYN2qPHEnUYeoMiXXl1poUlI+o4= gopkg.in/square/go-jose.v2 v2.3.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/warnings.v0 v0.1.1/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= @@ -1603,6 +2087,7 @@ gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= @@ -1611,6 +2096,7 @@ gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81 gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= gotest.tools/v3 v3.0.3 h1:4AuOwCGf4lLR9u3YOe2awrHygurzhO/HeQ6laiA6Sx0= gotest.tools/v3 v3.0.3/go.mod h1:Z7Lb0S5l+klDB31fvDQX8ss/FlKDxtlFlw3Oa8Ymbl8= +grpc.go4.org v0.0.0-20170609214715-11d0a25b4919 h1:tmXTu+dfa+d9Evp8NpJdgOy6+rt8/x4yG7qPBrtNfLY= grpc.go4.org v0.0.0-20170609214715-11d0a25b4919/go.mod h1:77eQGdRu53HpSqPFJFmuJdjuHRquDANNeA4x7B8WQ9o= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20180920025451-e3ad64cb4ed3/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -1621,66 +2107,100 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.0.1-2020.1.5 h1:nI5egYTGJakVyOryqLs1cQO5dO0ksin5XXs2pspk75k= honnef.co/go/tools v0.0.1-2020.1.5/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= k8s.io/api v0.0.0-20180904230853-4e7be11eab3f/go.mod h1:iuAfoD4hCxJ8Onx9kaTIt30j7jUFS00AXQi6QMi99vA= k8s.io/api v0.17.4/go.mod h1:5qxx6vjmwUVG2nHQTKGlLts8Tbok8PzHl4vHtVFuZCA= k8s.io/api v0.19.0/go.mod h1:I1K45XlvTrDjmj5LoM5LuP/KYrhWbjUKT/SoPG0qTjw= +k8s.io/api v0.20.1 h1:ud1c3W3YNzGd6ABJlbFfKXBKXO+1KdGfcgGGNgFR03E= k8s.io/api v0.20.1/go.mod h1:KqwcCVogGxQY3nBlRpwt+wpAMF/KjaCc7RpywacvqUo= k8s.io/apimachinery v0.0.0-20180904193909-def12e63c512/go.mod h1:ccL7Eh7zubPUSh9A3USN90/OzHNSVN6zxzde07TDCL0= k8s.io/apimachinery v0.17.4/go.mod h1:gxLnyZcGNdZTCLnq3fgzyg2A5BVCHTNDFrw8AmuJ+0g= k8s.io/apimachinery v0.19.0/go.mod h1:DnPGDnARWFvYa3pMHgSxtbZb7gpzzAZ1pTfaUNDVlmA= +k8s.io/apimachinery v0.20.1 h1:LAhz8pKbgR8tUwn7boK+b2HZdt7MiTu2mkYtFMUjTRQ= k8s.io/apimachinery v0.20.1/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU= k8s.io/apiserver v0.17.4/go.mod h1:5ZDQ6Xr5MNBxyi3iUZXS84QOhZl+W7Oq2us/29c0j9I= +k8s.io/apiserver v0.20.1 h1:yEqdkxlnQbxi/3e74cp0X16h140fpvPrNnNRAJBDuBk= k8s.io/apiserver v0.20.1/go.mod h1:ro5QHeQkgMS7ZGpvf4tSMx6bBOgPfE+f52KwvXfScaU= k8s.io/client-go v0.0.0-20180910083459-2cefa64ff137/go.mod h1:7vJpHMYJwNQCWgzmNV+VYUl1zCObLyodBc8nIyt8L5s= k8s.io/client-go v0.17.4/go.mod h1:ouF6o5pz3is8qU0/qYL2RnoxOPqgfuidYLowytyLJmc= k8s.io/client-go v0.19.0/go.mod h1:H9E/VT95blcFQnlyShFgnFT9ZnJOAceiUHM3MlRC+mU= +k8s.io/client-go v0.20.1 h1:Qquik0xNFbK9aUG92pxHYsyfea5/RPO9o9bSywNor+M= k8s.io/client-go v0.20.1/go.mod h1:/zcHdt1TeWSd5HoUe6elJmHSQ6uLLgp4bIJHVEuy+/Y= +k8s.io/cloud-provider v0.17.4 h1:ELMIQwweSNu8gfVEnLDypxd9034S1sZJg6QcdWJOvMI= k8s.io/cloud-provider v0.17.4/go.mod h1:XEjKDzfD+b9MTLXQFlDGkk6Ho8SGMpaU8Uugx/KNK9U= +k8s.io/code-generator v0.17.2 h1:pTwl3rLB1fUyxmvEzmVPMM0tBSdUehd7z+bDzpj4lPE= k8s.io/code-generator v0.17.2/go.mod h1:DVmfPQgxQENqDIzVR2ddLXMH34qeszkKSdH/N+s+38s= k8s.io/component-base v0.17.4/go.mod h1:5BRqHMbbQPm2kKu35v3G+CpVq4K0RJKC7TRioF0I9lE= +k8s.io/component-base v0.20.1 h1:6OQaHr205NSl24t5wOF2IhdrlxZTWEZwuGlLvBgaeIg= k8s.io/component-base v0.20.1/go.mod h1:guxkoJnNoh8LNrbtiQOlyp2Y2XFCZQmrcg2n/DeYNLk= k8s.io/cri-api v0.17.3/go.mod h1:X1sbHmuXhwaHs9xxYffLqJogVsnI+f6cPRcgPel7ywM= +k8s.io/cri-api v0.20.1 h1:b4l7SZ9+VPfIrrJnMXzm0HR9wAsHwHh9+QcmK31nQMI= k8s.io/cri-api v0.20.1/go.mod h1:2JRbKt+BFLTjtrILYVqQK5jqhI+XNdF6UiGMgczeBCI= +k8s.io/csi-translation-lib v0.17.4 h1:bP9yGfCJDknP7tklCwizZtwgJNRePMVcEaFIfeA11ho= k8s.io/csi-translation-lib v0.17.4/go.mod h1:CsxmjwxEI0tTNMzffIAcgR9lX4wOh6AKHdxQrT7L0oo= k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20190822140433-26a664648505/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= +k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac h1:sAvhNk5RRuc6FNYGqe7Ygz3PSo/2wGWbulskmzRX8Vs= k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= +k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8= k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= +k8s.io/klog/v2 v2.4.0 h1:7+X0fUguPyrKEC4WjH8iGDg3laWgMo5tMnRTIGTTxGQ= k8s.io/klog/v2 v2.4.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= k8s.io/kube-openapi v0.0.0-20180731170545-e3762e86a74c/go.mod h1:BXM9ceUBTj2QnfH2MK1odQs778ajze1RxcmP6S8RVVc= k8s.io/kube-openapi v0.0.0-20191107075043-30be4d16710a/go.mod h1:1TqjTSzOxsLGIKfj0lK8EeCP7K1iUG65v09OM0/WG5E= k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6/go.mod h1:UuqjUnNftUyPE5H64/qeyjQoUZhGpeFDVdxjTeEVN2o= +k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd h1:sOHNzJIkytDF6qadMNKhhDRpc6ODik8lVC6nOur7B2c= k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd/go.mod h1:WOJ3KddDSol4tAGcJo0Tvi+dK12EcqSLqcWsryKMpfM= k8s.io/kubernetes v1.11.10/go.mod h1:ocZa8+6APFNC2tX1DZASIbocyYT5jHzqFVsY5aoB7Jk= +k8s.io/kubernetes v1.13.0 h1:qTfB+u5M92k2fCCCVP2iuhgwwSOv1EkAkvQY1tQODD8= k8s.io/kubernetes v1.13.0/go.mod h1:ocZa8+6APFNC2tX1DZASIbocyYT5jHzqFVsY5aoB7Jk= +k8s.io/legacy-cloud-providers v0.17.4 h1:VvFqJGiYAr2gIdoNuqbeZLEdxIFeN4Yt6OLJS9l2oIE= k8s.io/legacy-cloud-providers v0.17.4/go.mod h1:FikRNoD64ECjkxO36gkDgJeiQWwyZTuBkhu+yxOc1Js= k8s.io/utils v0.0.0-20191114184206-e782cd3c129f/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= k8s.io/utils v0.0.0-20200729134348-d5654de09c73/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +k8s.io/utils v0.0.0-20201110183641-67b214c5f920 h1:CbnUZsM497iRC5QMVkHwyl8s2tB3g7yaSHkYPkpgelw= k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +modernc.org/cc v1.0.0 h1:nPibNuDEx6tvYrUAtvDTTw98rx5juGsa5zuDnKwEEQQ= modernc.org/cc v1.0.0/go.mod h1:1Sk4//wdnYJiUIxnW8ddKpaOJCF37yAdqYnkxUpaYxw= +modernc.org/golex v1.0.0 h1:wWpDlbK8ejRfSyi0frMyhilD3JBvtcx2AdGDnU+JtsE= modernc.org/golex v1.0.0/go.mod h1:b/QX9oBD/LhixY6NDh+IdGv17hgB+51fET1i2kPSmvk= +modernc.org/mathutil v1.0.0 h1:93vKjrJopTPrtTNpZ8XIovER7iCIH1QU7wNbOQXC60I= modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03k= +modernc.org/strutil v1.0.0 h1:XVFtQwFVwc02Wk+0L/Z/zDDXO81r5Lhe6iMKmGX3KhE= modernc.org/strutil v1.0.0/go.mod h1:lstksw84oURvj9y3tn8lGvRxyRC1S2+g5uuIzNfIOBs= +modernc.org/xc v1.0.0 h1:7ccXrupWZIS3twbUGrtKmHS2DXY6xegFua+6O3xgAFU= modernc.org/xc v1.0.0/go.mod h1:mRNCo0bvLjGhHO9WsyuKVU4q0ceiDDDoEeWDJHrNx8I= +mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed h1:WX1yoOaKQfddO/mLzdV4wptyWgoH/6hwLs7QHTixo0I= mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed/go.mod h1:Xkxe497xwlCKkIaQYRfC7CSLworTXY9RMqwhhCm+8Nc= +mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b h1:DxJ5nJdkhDlLok9K6qO+5290kphDJbHOQO1DFFFTeBo= mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod h1:2odslEg/xrtNQqCYg2/jCoyKnw3vv5biOc3JnIcYfL4= mvdan.cc/unparam v0.0.0-20190720180237-d51796306d8f/go.mod h1:4G1h5nDURzA3bwVMZIVpwbkw+04kSxk3rAtzlimaUJw= +mvdan.cc/unparam v0.0.0-20200501210554-b37ab49443f7 h1:kAREL6MPwpsk1/PQPFD3Eg7WAQR5mPTWZJaBiG5LDbY= mvdan.cc/unparam v0.0.0-20200501210554-b37ab49443f7/go.mod h1:HGC5lll35J70Y5v7vCGb9oLhHoScFwkHDJm/05RdSTc= +pack.ag/amqp v0.11.2 h1:cuNDWLUTbKRtEZwhB0WQBXf9pGbm87pUBXQhvcFxBWg= pack.ag/amqp v0.11.2/go.mod h1:4/cbmt4EJXSKlG6LCfWHoqmN0uFdy5i/+YFz+fTfhV4= +rsc.io/binaryregexp v0.2.0 h1:HfqmD5MEmC0zvwBuF187nq9mdnXjXsSivRiXN7SmRkE= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/quote/v3 v3.1.0 h1:9JKUTTIUgS6kzR9mK1YuGKv6Nl+DijDNIc0ghT58FaY= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= +rsc.io/sampler v1.3.0 h1:7uVkIFmeBqHfdjD+gZwtXXI+RODJ2Wc4O7MPEh/QiW4= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= +sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.14 h1:TihvEz9MPj2u0KWds6E2OBUXfwaL4qRJ33c7HGiJpqk= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.14/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI= +sigs.k8s.io/structured-merge-diff v1.0.1-0.20191108220359-b1b620dd3f06 h1:zD2IemQ4LmOcAumeiyDWXKUI2SO0NYDe3H6QGvPOVgU= sigs.k8s.io/structured-merge-diff v1.0.1-0.20191108220359-b1b620dd3f06/go.mod h1:/ULNhyfzRopfcjskuui0cTITekDduZ7ycKN3oUT9R18= sigs.k8s.io/structured-merge-diff/v4 v4.0.1/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= +sigs.k8s.io/structured-merge-diff/v4 v4.0.2 h1:YHQV7Dajm86OuqnIR6zAelnDWBRjo+YhYV9PmGrh1s8= sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= +sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q= sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4/go.mod h1:ketZ/q3QxT9HOBeFhu6RdvsftgpsbFHBF5Cas6cDKZ0= +sourcegraph.com/sqs/pbtypes v1.0.0 h1:f7lAwqviDEGvON4kRv0o5V7FT/IQK+tbkF664XMbP3o= sourcegraph.com/sqs/pbtypes v1.0.0/go.mod h1:3AciMUv4qUuRHRHhOG4TZOB+72GdPVz5k+c648qsFS4= diff --git a/internal/provider/data_source_docker_network.go b/internal/provider/data_source_docker_network.go index 44267d9fe..6142905ad 100644 --- a/internal/provider/data_source_docker_network.go +++ b/internal/provider/data_source_docker_network.go @@ -12,69 +12,81 @@ import ( func dataSourceDockerNetwork() *schema.Resource { return &schema.Resource{ + Description: "`docker_network` provides details about a specific Docker Network.", + ReadContext: dataSourceDockerNetworkRead, Schema: map[string]*schema.Schema{ "name": { - Type: schema.TypeString, - Optional: true, + Type: schema.TypeString, + Description: "The name of the Docker network.", + Required: true, }, "id": { Type: schema.TypeString, - Optional: true, + Computed: true, }, "driver": { - Type: schema.TypeString, - Computed: true, + Type: schema.TypeString, + Description: "The driver of the Docker network. Possible values are `bridge`, `host`, `overlay`, `macvlan`. See [network docs](https://docs.docker.com/network/#network-drivers) for more details.", + Computed: true, }, "options": { - Type: schema.TypeMap, - Computed: true, + Type: schema.TypeMap, + Description: "Only available with bridge networks. See [bridge options docs](https://docs.docker.com/engine/reference/commandline/network_create/#bridge-driver-options) for more details.", + Computed: true, }, "internal": { - Type: schema.TypeBool, - Computed: true, + Type: schema.TypeBool, + Description: "If `true`, the network is internal.", + Computed: true, }, "ipam_config": { - Type: schema.TypeSet, - Computed: true, + Type: schema.TypeSet, + Description: "The IPAM configuration options", + Computed: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "subnet": { - Type: schema.TypeString, - Optional: true, - ForceNew: true, + Type: schema.TypeString, + Description: "The subnet in CIDR form", + Optional: true, + ForceNew: true, }, "ip_range": { - Type: schema.TypeString, - Optional: true, - ForceNew: true, + Type: schema.TypeString, + Description: "The ip range in CIDR form", + Optional: true, + ForceNew: true, }, "gateway": { - Type: schema.TypeString, - Optional: true, - ForceNew: true, + Type: schema.TypeString, + Description: "The IP address of the gateway", + Optional: true, + ForceNew: true, }, "aux_address": { - Type: schema.TypeMap, - Optional: true, - ForceNew: true, + Type: schema.TypeMap, + Description: "Auxiliary IPv4 or IPv6 addresses used by Network driver", + Optional: true, + ForceNew: true, }, }, }, }, "scope": { - Type: schema.TypeString, - Computed: true, + Type: schema.TypeString, + Description: "Scope of the network. One of `swarm`, `global`, or `local`.", + Computed: true, }, }, } diff --git a/internal/provider/data_source_docker_plugin.go b/internal/provider/data_source_docker_plugin.go index f74dd474d..673e3bc23 100644 --- a/internal/provider/data_source_docker_plugin.go +++ b/internal/provider/data_source_docker_plugin.go @@ -10,46 +10,52 @@ import ( func dataSourceDockerPlugin() *schema.Resource { return &schema.Resource{ + Description: "Reads the local Docker plugin. The plugin must be installed locally.", + Read: dataSourceDockerPluginRead, Schema: map[string]*schema.Schema{ "id": { - Type: schema.TypeString, - Optional: true, - }, - "name": { - Type: schema.TypeString, - Optional: true, + Type: schema.TypeString, + Description: "The ID of the plugin, which has precedence over the `alias` of both are given", + Optional: true, }, "alias": { Type: schema.TypeString, + Description: "The alias of the Docker plugin. If the tag is omitted, `:latest` is complemented to the attribute value.", Optional: true, - Description: "Docker Plugin alias", + }, + "name": { + Type: schema.TypeString, + Description: "The plugin name. If the tag is omitted, `:latest` is complemented to the attribute value.", + Computed: true, }, "plugin_reference": { Type: schema.TypeString, - Description: "Docker Plugin Reference", + Description: "The Docker Plugin Reference", Computed: true, }, "enabled": { - Type: schema.TypeBool, - Computed: true, + Type: schema.TypeBool, + Description: "If `true` the plugin is enabled", + Computed: true, }, "grant_all_permissions": { Type: schema.TypeBool, - Computed: true, Description: "If true, grant all permissions necessary to run the plugin", + Computed: true, }, "env": { - Type: schema.TypeSet, - Computed: true, - Elem: &schema.Schema{Type: schema.TypeString}, + Type: schema.TypeSet, + Description: "The environment variables in the form of `KEY=VALUE`, e.g. `DEBUG=0`", + Computed: true, + Elem: &schema.Schema{Type: schema.TypeString}, }, }, } } -var errDataSourceKeyIsMissing = errors.New("One of id or alias must be assigned") +var errDataSourceKeyIsMissing = errors.New("one of id or alias must be assigned") func getDataSourcePluginKey(d *schema.ResourceData) (string, error) { id, idOK := d.GetOk("id") diff --git a/internal/provider/data_source_docker_registry_image.go b/internal/provider/data_source_docker_registry_image.go index 1a971d297..ffc950385 100644 --- a/internal/provider/data_source_docker_registry_image.go +++ b/internal/provider/data_source_docker_registry_image.go @@ -19,17 +19,21 @@ import ( func dataSourceDockerRegistryImage() *schema.Resource { return &schema.Resource{ + Description: "Reads the image metadata from a Docker Registry. Used in conjunction with the [docker_image](../resources/image.md) resource to keep an image up to date on the latest available version of the tag.", + ReadContext: dataSourceDockerRegistryImageRead, Schema: map[string]*schema.Schema{ "name": { - Type: schema.TypeString, - Optional: true, + Type: schema.TypeString, + Description: "The name of the Docker image, including any tags. e.g. `alpine:latest`", + Required: true, }, "sha256_digest": { - Type: schema.TypeString, - Computed: true, + Type: schema.TypeString, + Description: "The content digest of the image, as stored in the registry.", + Computed: true, }, }, } @@ -87,6 +91,7 @@ func getImageDigest(registry, image, tag, username, password string, fallback bo // cuz we don't have a valid certs for this case if env, okEnv := os.LookupEnv("TF_ACC"); okEnv { if i, errConv := strconv.Atoi(env); errConv == nil && i >= 1 { + // DevSkim: ignore DS440000 cfg := &tls.Config{ InsecureSkipVerify: true, } diff --git a/internal/provider/provider.go b/internal/provider/provider.go index 74d671c1d..88e614f92 100644 --- a/internal/provider/provider.go +++ b/internal/provider/provider.go @@ -220,7 +220,7 @@ func providerSetToRegistryAuth(authList []interface{}) (*AuthConfigs, error) { } authFileConfig, err := c.GetAuthConfig(registryHostname) if err != nil { - return nil, fmt.Errorf("Couldn't find registry config for '%s' in file content", registryHostname) + return nil, fmt.Errorf("couldn't find registry config for '%s' in file content", registryHostname) } authConfig.Username = authFileConfig.Username authConfig.Password = authFileConfig.Password @@ -278,7 +278,9 @@ func loadConfigFile(configData io.Reader) (*configfile.ConfigFile, error) { // Copied from github.com/docker/docker/registry.ConvertToHostname to reduce dependencies. func convertToHostname(url string) string { stripped := url + // DevSkim: ignore DS137138 if strings.HasPrefix(url, "http://") { + // DevSkim: ignore DS137138 stripped = strings.TrimPrefix(url, "http://") } else if strings.HasPrefix(url, "https://") { stripped = strings.TrimPrefix(url, "https://") diff --git a/internal/provider/resource_docker_config.go b/internal/provider/resource_docker_config.go index ba6ad6b15..dd1348432 100644 --- a/internal/provider/resource_docker_config.go +++ b/internal/provider/resource_docker_config.go @@ -12,6 +12,8 @@ import ( func resourceDockerConfig() *schema.Resource { return &schema.Resource{ + Description: "Manages the configs of a Docker service in a swarm.", + CreateContext: resourceDockerConfigCreate, ReadContext: resourceDockerConfigRead, DeleteContext: resourceDockerConfigDelete, @@ -31,7 +33,6 @@ func resourceDockerConfig() *schema.Resource { Type: schema.TypeString, Description: "Base64-url-safe-encoded config data", Required: true, - Sensitive: true, ForceNew: true, ValidateDiagFunc: validateStringIsBase64Encoded(), }, diff --git a/internal/provider/resource_docker_container.go b/internal/provider/resource_docker_container.go index 8f0ed7744..e14537cd9 100644 --- a/internal/provider/resource_docker_container.go +++ b/internal/provider/resource_docker_container.go @@ -9,6 +9,8 @@ import ( func resourceDockerContainer() *schema.Resource { return &schema.Resource{ + Description: "Manages the lifecycle of a Docker container.", + CreateContext: resourceDockerContainerCreate, ReadContext: resourceDockerContainerRead, UpdateContext: resourceDockerContainerUpdate, @@ -34,40 +36,46 @@ func resourceDockerContainer() *schema.Resource { Schema: map[string]*schema.Schema{ "name": { - Type: schema.TypeString, - Required: true, - ForceNew: true, + Type: schema.TypeString, + Description: "The name of the container.", + Required: true, + ForceNew: true, }, "rm": { - Type: schema.TypeBool, - Default: false, - Optional: true, + Type: schema.TypeBool, + Description: "If `true`, then the container will be automatically removed after his execution. Terraform won't check this container after creation. Defaults to `false`.", + Default: false, + Optional: true, }, "read_only": { - Type: schema.TypeBool, - Default: false, - Optional: true, - ForceNew: true, + Type: schema.TypeBool, + Description: "If `true`, the container will be started as readonly. Defaults to `false`.", + Default: false, + Optional: true, + ForceNew: true, }, "start": { - Type: schema.TypeBool, - Default: true, - Optional: true, + Type: schema.TypeBool, + Description: "If `true`, then the Docker container will be started after creation. If `false`, then the container is only created. Defaults to `true`.", + Default: true, + Optional: true, }, "attach": { - Type: schema.TypeBool, - Default: false, - Optional: true, + Type: schema.TypeBool, + Description: "If `true` attach to the container after its creation and waits the end of its execution. Defaults to `false`.", + Default: false, + Optional: true, }, "logs": { - Type: schema.TypeBool, - Default: false, - Optional: true, + Type: schema.TypeBool, + Description: "Save the container logs (`attach` must be enabled). Defaults to `false`.", + Default: false, + Optional: true, }, // Indicates whether the container must be running. @@ -86,65 +94,74 @@ func resourceDockerContainer() *schema.Resource { // following the principle that the containers // should be pristine when started. "must_run": { - Type: schema.TypeBool, - Default: true, - Optional: true, + Type: schema.TypeBool, + Description: "If `true`, then the Docker container will be kept running. If `false`, then as long as the container exists, Terraform assumes it is successful. Defaults to `true`.", + Default: true, + Optional: true, }, "exit_code": { - Type: schema.TypeInt, - Computed: true, + Type: schema.TypeInt, + Description: "The exit code of the container if its execution is done (`must_run` must be disabled).", + Computed: true, }, "container_logs": { - Type: schema.TypeString, - Computed: true, + Type: schema.TypeString, + Description: "The logs of the container if its execution is done (`attach` must be disabled).", + Computed: true, }, // ForceNew is not true for image because we need to // sane this against Docker image IDs, as each image // can have multiple names/tags attached do it. "image": { - Type: schema.TypeString, - Required: true, - ForceNew: true, + Type: schema.TypeString, + Description: "The ID of the image to back this container. The easiest way to get this value is to use the `docker_image` resource as is shown in the example.", + Required: true, + ForceNew: true, // DiffSuppressFunc: suppressIfSHAwasAdded(), // TODO mvogel }, "hostname": { - Type: schema.TypeString, - Optional: true, - ForceNew: true, - Computed: true, + Type: schema.TypeString, + Description: "Hostname of the container.", + Optional: true, + ForceNew: true, + Computed: true, }, "domainname": { - Type: schema.TypeString, - Optional: true, - ForceNew: true, + Type: schema.TypeString, + Description: "Domain name of the container.", + Optional: true, + ForceNew: true, }, "command": { - Type: schema.TypeList, - Optional: true, - ForceNew: true, - Computed: true, - Elem: &schema.Schema{Type: schema.TypeString}, + Type: schema.TypeList, + Description: "The command to use to start the container. For example, to run `/usr/bin/myprogram -f baz.conf` set the command to be `[\"/usr/bin/myprogram\",\"-\",\"baz.con\"]`.", + Optional: true, + ForceNew: true, + Computed: true, + Elem: &schema.Schema{Type: schema.TypeString}, }, "entrypoint": { - Type: schema.TypeList, - Optional: true, - ForceNew: true, - Computed: true, - Elem: &schema.Schema{Type: schema.TypeString}, + Type: schema.TypeList, + Description: "The command to use as the Entrypoint for the container. The Entrypoint allows you to configure a container to run as an executable. For example, to run `/usr/bin/myprogram` when starting a container, set the entrypoint to be `\"/usr/bin/myprogra\"]`.", + Optional: true, + ForceNew: true, + Computed: true, + Elem: &schema.Schema{Type: schema.TypeString}, }, "user": { - Type: schema.TypeString, - Optional: true, - ForceNew: true, - Elem: &schema.Schema{Type: schema.TypeString}, + Type: schema.TypeString, + Description: "User used for run the first process. Format is `user` or `user:group` which user and group can be passed literraly or by name.", + Optional: true, + ForceNew: true, + Elem: &schema.Schema{Type: schema.TypeString}, DiffSuppressFunc: func(k, oldV, newV string, d *schema.ResourceData) bool { // treat "" as a no-op, which is Docker's default value if newV == "" { @@ -155,50 +172,57 @@ func resourceDockerContainer() *schema.Resource { }, "dns": { - Type: schema.TypeSet, - Optional: true, - ForceNew: true, - Elem: &schema.Schema{Type: schema.TypeString}, - Set: schema.HashString, + Type: schema.TypeSet, + Description: "DNS servers to use.", + Optional: true, + ForceNew: true, + Elem: &schema.Schema{Type: schema.TypeString}, + Set: schema.HashString, }, "dns_opts": { - Type: schema.TypeSet, - Optional: true, - ForceNew: true, - Elem: &schema.Schema{Type: schema.TypeString}, - Set: schema.HashString, + Type: schema.TypeSet, + Description: "DNS options used by the DNS provider(s), see `resolv.conf` documentation for valid list of options.", + Optional: true, + ForceNew: true, + Elem: &schema.Schema{Type: schema.TypeString}, + Set: schema.HashString, }, "dns_search": { - Type: schema.TypeSet, - Optional: true, - ForceNew: true, - Elem: &schema.Schema{Type: schema.TypeString}, - Set: schema.HashString, + Type: schema.TypeSet, + Description: "DNS search domains that are used when bare unqualified hostnames are used inside of the container.", + Optional: true, + ForceNew: true, + Elem: &schema.Schema{Type: schema.TypeString}, + Set: schema.HashString, }, "publish_all_ports": { - Type: schema.TypeBool, - Optional: true, - ForceNew: true, + Type: schema.TypeBool, + Description: "Publish all ports of the container.", + Optional: true, + ForceNew: true, }, "restart": { Type: schema.TypeString, - Optional: true, + Description: "The restart policy for the container. Must be one of 'no', 'on-failure', 'always', 'unless-stopped'. Defaults to `no`.", Default: "no", + Optional: true, ValidateDiagFunc: validateStringMatchesPattern(`^(no|on-failure|always|unless-stopped)$`), }, "max_retry_count": { - Type: schema.TypeInt, - Optional: true, + Type: schema.TypeInt, + Description: "The maximum amount of times to an attempt a restart when `restart` is set to 'on-failure'.", + Optional: true, }, "working_dir": { - Type: schema.TypeString, - Optional: true, - ForceNew: true, + Type: schema.TypeString, + Description: "The working directory for commands to run in.", + Optional: true, + ForceNew: true, DiffSuppressFunc: func(k, oldV, newV string, d *schema.ResourceData) bool { // treat "" as a no-op, which is Docker's default behavior if newV == "" { @@ -208,48 +232,52 @@ func resourceDockerContainer() *schema.Resource { }, }, "remove_volumes": { - Type: schema.TypeBool, - Optional: true, - Default: true, + Type: schema.TypeBool, + Description: "If `true`, it will remove anonymous volumes associated with the container. Defaults to `true`.", + Default: true, + Optional: true, }, "capabilities": { - Type: schema.TypeSet, - Optional: true, - ForceNew: true, - MaxItems: 1, + Type: schema.TypeSet, + Description: "Add or drop certrain linux capabilities.", + Optional: true, + ForceNew: true, + MaxItems: 1, // TODO implement DiffSuppressFunc Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "add": { - Type: schema.TypeSet, - Optional: true, - ForceNew: true, - Elem: &schema.Schema{Type: schema.TypeString}, - Set: schema.HashString, + Type: schema.TypeSet, + Description: "List of linux capabilities to add.", + Optional: true, + ForceNew: true, + Elem: &schema.Schema{Type: schema.TypeString}, + Set: schema.HashString, }, "drop": { - Type: schema.TypeSet, - Optional: true, - ForceNew: true, - Elem: &schema.Schema{Type: schema.TypeString}, - Set: schema.HashString, + Type: schema.TypeSet, + Description: "List of linux capabilities to drop.", + Optional: true, + ForceNew: true, + Elem: &schema.Schema{Type: schema.TypeString}, + Set: schema.HashString, }, }, }, }, "security_opts": { Type: schema.TypeSet, + Description: "List of string values to customize labels for MLS systems, such as SELinux. See https://docs.docker.com/engine/reference/run/#security-configuration.", Optional: true, ForceNew: true, Computed: true, Elem: &schema.Schema{Type: schema.TypeString}, - Description: "List of string values to customize labels for MLS systems, such as SELinux. See https://docs.docker.com/engine/reference/run/#security-configuration", Set: schema.HashString, }, "mounts": { Type: schema.TypeSet, - Description: "Specification for mounts to be added to containers created as part of the service", + Description: "Specification for mounts to be added to containers created as part of the service.", Optional: true, ForceNew: true, Elem: &schema.Resource{ @@ -261,7 +289,7 @@ func resourceDockerContainer() *schema.Resource { }, "source": { Type: schema.TypeString, - Description: "Mount source (e.g. a volume name, a host path)", + Description: "Mount source (e.g. a volume name, a host path).", Optional: true, }, "type": { @@ -272,19 +300,19 @@ func resourceDockerContainer() *schema.Resource { }, "read_only": { Type: schema.TypeBool, - Description: "Whether the mount should be read-only", + Description: "Whether the mount should be read-only.", Optional: true, }, "bind_options": { Type: schema.TypeList, - Description: "Optional configuration for the bind type", + Description: "Optional configuration for the bind type.", Optional: true, MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "propagation": { Type: schema.TypeString, - Description: "A propagation mode with the value", + Description: "A propagation mode with the value.", Optional: true, ValidateDiagFunc: validateStringMatchesPattern(`^(private|rprivate|shared|rshared|slave|rslave)$`), }, @@ -293,30 +321,30 @@ func resourceDockerContainer() *schema.Resource { }, "volume_options": { Type: schema.TypeList, - Description: "Optional configuration for the volume type", + Description: "Optional configuration for the volume type.", Optional: true, MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "no_copy": { Type: schema.TypeBool, - Description: "Populate volume with data from the target", + Description: "Populate volume with data from the target.", Optional: true, }, "labels": { Type: schema.TypeSet, - Description: "User-defined key/value metadata", + Description: "User-defined key/value metadata.", Optional: true, Elem: labelSchema, }, "driver_name": { Type: schema.TypeString, - Description: "Name of the driver to use to create the volume", + Description: "Name of the driver to use to create the volume.", Optional: true, }, "driver_options": { Type: schema.TypeMap, - Description: "key/value map of driver specific options", + Description: "key/value map of driver specific options.", Optional: true, Elem: &schema.Schema{Type: schema.TypeString}, }, @@ -325,7 +353,7 @@ func resourceDockerContainer() *schema.Resource { }, "tmpfs_options": { Type: schema.TypeList, - Description: "Optional configuration for the tmpfs type", + Description: "Optional configuration for the tmpfs type.", Optional: true, ForceNew: true, MaxItems: 1, @@ -333,12 +361,12 @@ func resourceDockerContainer() *schema.Resource { Schema: map[string]*schema.Schema{ "size_bytes": { Type: schema.TypeInt, - Description: "The size for the tmpfs mount in bytes", + Description: "The size for the tmpfs mount in bytes.", Optional: true, }, "mode": { Type: schema.TypeInt, - Description: "The permission mode for the tmpfs mount in an integer", + Description: "The permission mode for the tmpfs mount in an integer.", Optional: true, }, }, @@ -348,72 +376,79 @@ func resourceDockerContainer() *schema.Resource { }, }, "volumes": { - Type: schema.TypeSet, - Optional: true, - ForceNew: true, + Type: schema.TypeSet, + Description: "Spec for mounting volumes in the container.", + Optional: true, + ForceNew: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "from_container": { - Type: schema.TypeString, - Optional: true, - ForceNew: true, + Type: schema.TypeString, + Description: "The container where the volume is coming from.", + Optional: true, + ForceNew: true, }, - "container_path": { - Type: schema.TypeString, - Optional: true, - ForceNew: true, + Type: schema.TypeString, + Description: "The path in the container where the volume will be mounted.", + Optional: true, + ForceNew: true, }, - "host_path": { Type: schema.TypeString, + Description: "The path on the host where the volume is coming from.", Optional: true, ForceNew: true, ValidateDiagFunc: validateDockerContainerPath(), }, - "volume_name": { - Type: schema.TypeString, - Optional: true, - ForceNew: true, + Type: schema.TypeString, + Description: "The name of the docker volume which should be mounted.", + Optional: true, + ForceNew: true, }, - "read_only": { - Type: schema.TypeBool, - Optional: true, - ForceNew: true, + Type: schema.TypeBool, + Description: "If `true`, this volume will be readonly. Defaults to `false`.", + Optional: true, + ForceNew: true, }, }, }, }, "tmpfs": { - Type: schema.TypeMap, - Optional: true, + Type: schema.TypeMap, + Description: "A map of container directories which should be replaced by `tmpfs mounts`, and their corresponding mount options.", + Optional: true, }, "ports": { - Type: schema.TypeList, - Optional: true, - ForceNew: true, + Type: schema.TypeList, + Description: "Publish a container's port(s) to the host.", + Optional: true, + ForceNew: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "internal": { - Type: schema.TypeInt, - Required: true, - ForceNew: true, + Type: schema.TypeInt, + Description: "Port within the container.", + Required: true, + ForceNew: true, }, "external": { - Type: schema.TypeInt, - Optional: true, - Computed: true, - ForceNew: true, + Type: schema.TypeInt, + Description: "Port exposed out of the container. If not given a free random port `>= 32768` will be used.", + Optional: true, + Computed: true, + ForceNew: true, }, "ip": { - Type: schema.TypeString, - Default: "0.0.0.0", - Optional: true, - ForceNew: true, + Type: schema.TypeString, + Description: "IP address/mask that can access this port. Defaults to `0.0.0.0`.", + Default: "0.0.0.0", + Optional: true, + ForceNew: true, StateFunc: func(val interface{}) string { // Empty IP assignments default to 0.0.0.0 if val.(string) == "" { @@ -425,10 +460,11 @@ func resourceDockerContainer() *schema.Resource { }, "protocol": { - Type: schema.TypeString, - Default: "tcp", - Optional: true, - ForceNew: true, + Type: schema.TypeString, + Description: "Protocol that can be used over this port. Defaults to `tcp`.", + Default: "tcp", + Optional: true, + ForceNew: true, }, }, }, @@ -436,189 +472,221 @@ func resourceDockerContainer() *schema.Resource { }, "host": { - Type: schema.TypeSet, - Optional: true, - ForceNew: true, + Type: schema.TypeSet, + Description: "Additional hosts to add to the container.", + Optional: true, + ForceNew: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "ip": { - Type: schema.TypeString, - Required: true, - ForceNew: true, + Type: schema.TypeString, + Description: "IP address this hostname should resolve to.", + Required: true, + ForceNew: true, }, "host": { - Type: schema.TypeString, - Required: true, - ForceNew: true, + Type: schema.TypeString, + Description: "Hostname to add", + Required: true, + ForceNew: true, }, }, }, }, "ulimit": { - Type: schema.TypeSet, - Optional: true, - ForceNew: true, + Type: schema.TypeSet, + Description: "Ulimit options to add.", + Optional: true, + ForceNew: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "name": { - Type: schema.TypeString, - Required: true, - ForceNew: true, + Type: schema.TypeString, + Description: "The name of the ulimit", + Required: true, + ForceNew: true, }, "soft": { - Type: schema.TypeInt, - Required: true, - ForceNew: true, + Type: schema.TypeInt, + Description: "The soft limit", + Required: true, + ForceNew: true, }, "hard": { - Type: schema.TypeInt, - Required: true, - ForceNew: true, + Type: schema.TypeInt, + Description: "The hard limit", + Required: true, + ForceNew: true, }, }, }, }, "env": { - Type: schema.TypeSet, - Optional: true, - ForceNew: true, - Computed: true, - Elem: &schema.Schema{Type: schema.TypeString}, - Set: schema.HashString, + Type: schema.TypeSet, + Description: "Environment variables to set in the form of `KEY=VALUE`, e.g. `DEBUG=0`", + Optional: true, + ForceNew: true, + Computed: true, + Elem: &schema.Schema{Type: schema.TypeString}, + Set: schema.HashString, }, "links": { - Type: schema.TypeSet, - Optional: true, - ForceNew: true, - Elem: &schema.Schema{Type: schema.TypeString}, - Set: schema.HashString, - Deprecated: "The --link flag is a legacy feature of Docker. It may eventually be removed.", + Type: schema.TypeSet, + Description: "Set of links for link based connectivity between containers that are running on the same host.", + Optional: true, + ForceNew: true, + Elem: &schema.Schema{Type: schema.TypeString}, + Set: schema.HashString, + Deprecated: "The --link flag is a legacy feature of Docker. It may eventually be removed.", }, "ip_address": { - Type: schema.TypeString, - Computed: true, - Deprecated: "Use ip_adresses_data instead. This field exposes the data of the container's first network.", + Type: schema.TypeString, + Description: "The IP address of the container.", + Computed: true, + Deprecated: "Use `network_data` instead. The IP address of the container's first network it.", }, "ip_prefix_length": { - Type: schema.TypeInt, - Computed: true, - Deprecated: "Use ip_prefix_length from ip_adresses_data instead. This field exposes the data of the container's first network.", + Type: schema.TypeInt, + Description: "The IP prefix length of the container.", + Computed: true, + Deprecated: "Use `network_data` instead. The IP prefix length of the container as read from its NetworkSettings.", }, "gateway": { - Type: schema.TypeString, - Computed: true, - Deprecated: "Use gateway from ip_adresses_data instead. This field exposes the data of the container's first network.", + Type: schema.TypeString, + Description: "The network gateway of the container.", + Computed: true, + Deprecated: "Use `network_data` instead. The network gateway of the container as read from its NetworkSettings.", }, "bridge": { - Type: schema.TypeString, - Computed: true, + Type: schema.TypeString, + Description: "The network bridge of the container as read from its NetworkSettings.", + Computed: true, }, "network_data": { - Type: schema.TypeList, - Computed: true, + Type: schema.TypeList, + Description: "The data of the networks the container is connected to.", + Computed: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "network_name": { - Type: schema.TypeString, - Computed: true, + Type: schema.TypeString, + Description: "The name of the network", + Computed: true, }, "ip_address": { - Type: schema.TypeString, - Computed: true, + Type: schema.TypeString, + Description: "The IP address of the container.", + Computed: true, + Deprecated: "Use `network_data` instead. The IP address of the container's first network it.", }, "ip_prefix_length": { - Type: schema.TypeInt, - Computed: true, + Type: schema.TypeInt, + Description: "The IP prefix length of the container.", + Computed: true, + Deprecated: "Use `network_data` instead. The IP prefix length of the container as read from its NetworkSettings.", }, "gateway": { - Type: schema.TypeString, - Computed: true, + Type: schema.TypeString, + Description: "The network gateway of the container.", + Computed: true, + Deprecated: "Use `network_data` instead. The network gateway of the container as read from its NetworkSettings.", }, "global_ipv6_address": { - Type: schema.TypeString, - Computed: true, + Type: schema.TypeString, + Description: "The IPV6 address of the container.", + Computed: true, }, "global_ipv6_prefix_length": { - Type: schema.TypeInt, - Computed: true, + Type: schema.TypeInt, + Description: "The IPV6 prefix length address of the container.", + Computed: true, }, "ipv6_gateway": { - Type: schema.TypeString, - Computed: true, + Type: schema.TypeString, + Description: "The IPV6 gateway of the container.", + Computed: true, }, }, }, }, "privileged": { - Type: schema.TypeBool, - Optional: true, - ForceNew: true, + Type: schema.TypeBool, + Description: "If `true`, the container runs in privileged mode.", + Optional: true, + ForceNew: true, }, "devices": { - Type: schema.TypeSet, - Optional: true, - ForceNew: true, + Type: schema.TypeSet, + Description: "Bind devices to the container.", + Optional: true, + ForceNew: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "host_path": { - Type: schema.TypeString, - Required: true, - ForceNew: true, + Type: schema.TypeString, + Description: "The path on the host where the device is located.", + Required: true, + ForceNew: true, }, - "container_path": { - Type: schema.TypeString, - Optional: true, - ForceNew: true, + Type: schema.TypeString, + Description: "The path in the container where the device will be bound.", + Optional: true, + ForceNew: true, }, - "permissions": { - Type: schema.TypeString, - Optional: true, - ForceNew: true, + Type: schema.TypeString, + Description: "The cgroup permissions given to the container to access the device. Defaults to `rwm`.", + Optional: true, + ForceNew: true, }, }, }, }, "destroy_grace_seconds": { - Type: schema.TypeInt, - Optional: true, + Type: schema.TypeInt, + Description: "If defined will attempt to stop the container before destroying. Container will be destroyed after `n` seconds or on successful stop.", + Optional: true, }, "labels": { - Type: schema.TypeSet, - Optional: true, - ForceNew: true, - Computed: true, - Elem: labelSchema, + Type: schema.TypeSet, + Description: "User-defined key/value metadata", + Optional: true, + ForceNew: true, + Computed: true, + Elem: labelSchema, }, "memory": { Type: schema.TypeInt, + Description: "The memory limit for the container in MBs.", Optional: true, ValidateDiagFunc: validateIntegerGeqThan(0), }, "memory_swap": { Type: schema.TypeInt, + Description: "The total memory limit (memory + swap) for the container in MBs. This setting may compute to `-1` after `terraform apply` if the target host doesn't support memory swap, when that is the case docker will use a soft limitation.", Optional: true, ValidateDiagFunc: validateIntegerGeqThan(-1), }, "shm_size": { Type: schema.TypeInt, + Description: "Size of `/dev/shm` in MBs.", Optional: true, ForceNew: true, Computed: true, @@ -627,43 +695,48 @@ func resourceDockerContainer() *schema.Resource { "cpu_shares": { Type: schema.TypeInt, + Description: "CPU shares (relative weight) for the container.", Optional: true, ValidateDiagFunc: validateIntegerGeqThan(0), }, "cpu_set": { Type: schema.TypeString, + Description: "A comma-separated list or hyphen-separated range of CPUs a container can use, e.g. `0-1`.", Optional: true, ValidateDiagFunc: validateStringMatchesPattern(`^\d+([,-]\d+)*$`), }, "log_driver": { - Type: schema.TypeString, - Optional: true, - ForceNew: true, - Default: "json-file", + Type: schema.TypeString, + Description: "The logging driver to use for the container. Defaults to `json-file`.", + Default: "json-file", + Optional: true, + ForceNew: true, }, "log_opts": { - Type: schema.TypeMap, - Optional: true, - ForceNew: true, + Type: schema.TypeMap, + Description: "Key/value pairs to use as options for the logging driver.", + Optional: true, + ForceNew: true, }, "network_alias": { Type: schema.TypeSet, + Description: "Set an alias for the container in all specified networks", Optional: true, ForceNew: true, Elem: &schema.Schema{Type: schema.TypeString}, Set: schema.HashString, - Description: "Set an alias for the container in all specified networks", - Deprecated: "Use networks_advanced instead. Will be removed in v2.0.0", + Deprecated: "Use networks_advanced instead. Will be removed in v3.0.0", }, "network_mode": { - Type: schema.TypeString, - Optional: true, - ForceNew: true, + Type: schema.TypeString, + Description: "Network mode of the container.", + Optional: true, + ForceNew: true, DiffSuppressFunc: func(k, oldV, newV string, d *schema.ResourceData) bool { // treat "" as "default", which is Docker's default value if oldV == "" { @@ -677,96 +750,111 @@ func resourceDockerContainer() *schema.Resource { }, "networks": { - Type: schema.TypeSet, - Optional: true, - ForceNew: true, - Elem: &schema.Schema{Type: schema.TypeString}, - Set: schema.HashString, - Deprecated: "Use networks_advanced instead. Will be removed in v2.0.0", + Type: schema.TypeSet, + Description: "ID of the networks in which the container is.", + Optional: true, + ForceNew: true, + Elem: &schema.Schema{Type: schema.TypeString}, + Set: schema.HashString, + Deprecated: "Use networks_advanced instead. Will be removed in v3.0.0", }, "networks_advanced": { - Type: schema.TypeSet, - Optional: true, - ForceNew: true, + Type: schema.TypeSet, + Description: "The networks the container is attached to", + Optional: true, + ForceNew: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "name": { - Type: schema.TypeString, - Required: true, - ForceNew: true, + Type: schema.TypeString, + Description: "The name of the network.", + Required: true, + ForceNew: true, }, "aliases": { - Type: schema.TypeSet, - Optional: true, - ForceNew: true, - Elem: &schema.Schema{Type: schema.TypeString}, - Set: schema.HashString, + Type: schema.TypeSet, + Description: "The network aliases of the container in the specific network.", + Optional: true, + ForceNew: true, + Elem: &schema.Schema{Type: schema.TypeString}, + Set: schema.HashString, }, "ipv4_address": { - Type: schema.TypeString, - Optional: true, - ForceNew: true, + Type: schema.TypeString, + Description: "The IPV4 address of the container in the specific network.", + Optional: true, + ForceNew: true, }, "ipv6_address": { - Type: schema.TypeString, - Optional: true, - ForceNew: true, + Type: schema.TypeString, + Description: "The IPV6 address of the container in the specific network.", + Optional: true, + ForceNew: true, }, }, }, }, "pid_mode": { - Type: schema.TypeString, - Optional: true, - ForceNew: true, + Type: schema.TypeString, + Description: "he PID (Process) Namespace mode for the container. Either `container:` or `host`.", + Optional: true, + ForceNew: true, }, "userns_mode": { - Type: schema.TypeString, - Optional: true, - ForceNew: true, + Type: schema.TypeString, + Description: "Sets the usernamespace mode for the container when usernamespace remapping option is enabled.", + Optional: true, + ForceNew: true, }, "upload": { - Type: schema.TypeSet, - Optional: true, - ForceNew: true, + Type: schema.TypeSet, + Description: "Specifies files to upload to the container before starting it. Only one of `content` or `content_base64` can be set and at least one of them has to be set.", + Optional: true, + ForceNew: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "content": { - Type: schema.TypeString, - Optional: true, + Type: schema.TypeString, + Description: "Literal string value to use as the object content, which will be uploaded as UTF-8-encoded text. Conflicts with `content_base64` & `source`", + Optional: true, // This is intentional. The container is mutated once, and never updated later. // New configuration forces a new deployment, even with the same binaries. ForceNew: true, }, "content_base64": { Type: schema.TypeString, + Description: "Base64-encoded data that will be decoded and uploaded as raw bytes for the object content. This allows safely uploading non-UTF8 binary data, but is recommended only for larger binary content such as the result of the `base64encode` interpolation function. See [here](https://github.com/terraform-providers/terraform-provider-docker/issues/48#issuecomment-374174588) for the reason. Conflicts with `content` & `source`", Optional: true, ForceNew: true, ValidateDiagFunc: validateStringIsBase64Encoded(), }, "file": { - Type: schema.TypeString, - Required: true, - ForceNew: true, + Type: schema.TypeString, + Description: "Path to the file in the container where is upload goes to", + Required: true, + ForceNew: true, }, "executable": { - Type: schema.TypeBool, - Optional: true, - ForceNew: true, - Default: false, + Type: schema.TypeBool, + Description: "If `true`, the file will be uploaded with user executable permission. Defaults to `false`.", + Default: false, + Optional: true, + ForceNew: true, }, "source": { - Type: schema.TypeString, - Optional: true, - ForceNew: true, + Type: schema.TypeString, + Description: "A filename that references a file which will be uploaded as the object content. This allows for large file uploads that do not get stored in state. Conflicts with `content` & `content_base64`", + Optional: true, + ForceNew: true, }, "source_hash": { - Type: schema.TypeString, - Optional: true, - ForceNew: true, + Type: schema.TypeString, + Description: "If using `source`, this will force an update if the file content has updated but the filename has not. ", + Optional: true, + ForceNew: true, }, }, }, @@ -782,36 +870,36 @@ func resourceDockerContainer() *schema.Resource { Schema: map[string]*schema.Schema{ "test": { Type: schema.TypeList, - Description: "The test to perform as list", + Description: "Command to run to check health. For example, to run `curl -f localhost/health` set the command to be `[\"CMD\", \"curl\", \"-f\", \"localhost/health\"]`.", Required: true, Elem: &schema.Schema{Type: schema.TypeString}, }, "interval": { Type: schema.TypeString, - Description: "Time between running the check (ms|s|m|h)", - Optional: true, + Description: "Time between running the check (ms|s|m|h). Defaults to `0s`.", Default: "0s", + Optional: true, ValidateDiagFunc: validateDurationGeq0(), }, "timeout": { Type: schema.TypeString, - Description: "Maximum time to allow one check to run (ms|s|m|h)", - Optional: true, + Description: "Maximum time to allow one check to run (ms|s|m|h). Defaults to `0s`.", Default: "0s", + Optional: true, ValidateDiagFunc: validateDurationGeq0(), }, "start_period": { Type: schema.TypeString, - Description: "Start period for the container to initialize before counting retries towards unstable (ms|s|m|h)", - Optional: true, + Description: "Start period for the container to initialize before counting retries towards unstable (ms|s|m|h). Defaults to `0s`.", Default: "0s", + Optional: true, ValidateDiagFunc: validateDurationGeq0(), }, "retries": { Type: schema.TypeInt, - Description: "Consecutive failures needed to report unhealthy", - Optional: true, + Description: "Consecutive failures needed to report unhealthy. Defaults to `0`.", Default: 0, + Optional: true, ValidateDiagFunc: validateIntegerGeqThan(0), }, }, @@ -819,13 +907,14 @@ func resourceDockerContainer() *schema.Resource { }, "sysctls": { - Type: schema.TypeMap, - Optional: true, - ForceNew: true, + Type: schema.TypeMap, + Description: "A map of kernel parameters (sysctls) to set in the container.", + Optional: true, + ForceNew: true, }, "ipc_mode": { Type: schema.TypeString, - Description: "IPC sharing mode for the container", + Description: "IPC sharing mode for the container. Possible values are: `none`, `private`, `shareable`, `container:` or `host`.", Optional: true, ForceNew: true, Computed: true, @@ -839,21 +928,24 @@ func resourceDockerContainer() *schema.Resource { Set: schema.HashString, }, "init": { - Type: schema.TypeBool, - Optional: true, - Computed: true, + Type: schema.TypeBool, + Description: "Configured whether an init process should be injected for this container. If unset this will default to the `dockerd` defaults.", + Optional: true, + Computed: true, }, "tty": { - Type: schema.TypeBool, - Optional: true, - ForceNew: true, - Default: false, + Type: schema.TypeBool, + Description: "If `true`, allocate a pseudo-tty (`docker run -t`). Defaults to `false`.", + Default: false, + Optional: true, + ForceNew: true, }, "stdin_open": { - Type: schema.TypeBool, - Optional: true, - ForceNew: true, - Default: false, + Type: schema.TypeBool, + Description: "If `true`, keep STDIN open even if not attached (`docker run -i`). Defaults to `false`.", + Default: false, + Optional: true, + ForceNew: true, }, }, } diff --git a/internal/provider/resource_docker_container_funcs.go b/internal/provider/resource_docker_container_funcs.go index b34051cf5..532f3195a 100644 --- a/internal/provider/resource_docker_container_funcs.go +++ b/internal/provider/resource_docker_container_funcs.go @@ -849,7 +849,7 @@ func resourceDockerContainerDelete(ctx context.Context, d *schema.ResourceData, func fetchDockerContainer(ctx context.Context, ID string, client *client.Client) (*types.Container, error) { apiContainers, err := client.ContainerList(ctx, types.ContainerListOptions{All: true}) if err != nil { - return nil, fmt.Errorf("Error fetching container information from Docker: %s\n", err) + return nil, fmt.Errorf("error fetching container information from Docker: %s\n", err) } for _, apiContainer := range apiContainers { diff --git a/internal/provider/resource_docker_container_migrators.go b/internal/provider/resource_docker_container_migrators.go index db447f858..4cfc68a0d 100644 --- a/internal/provider/resource_docker_container_migrators.go +++ b/internal/provider/resource_docker_container_migrators.go @@ -452,12 +452,13 @@ func resourceDockerContainerV1() *schema.Resource { }, "env": { - Type: schema.TypeSet, - Optional: true, - ForceNew: true, - Computed: true, - Elem: &schema.Schema{Type: schema.TypeString}, - Set: schema.HashString, + Type: schema.TypeSet, + Description: "The environment variables to in the form of `KEY=VALUE`, e.g. `DEBUG=0`", + Optional: true, + ForceNew: true, + Computed: true, + Elem: &schema.Schema{Type: schema.TypeString}, + Set: schema.HashString, }, "links": { @@ -807,7 +808,7 @@ func resourceDockerContainerMigrateState( log.Println("[INFO] Found Docker Container State v0; migrating to v1") return migrateDockerContainerMigrateStateV0toV1(is, meta) default: - return is, fmt.Errorf("Unexpected schema version: %d", v) + return is, fmt.Errorf("unexpected schema version: %d", v) } } diff --git a/internal/provider/resource_docker_container_structures.go b/internal/provider/resource_docker_container_structures.go index 0b901190a..32529bd05 100644 --- a/internal/provider/resource_docker_container_structures.go +++ b/internal/provider/resource_docker_container_structures.go @@ -199,9 +199,9 @@ func volumeSetToDockerVolumes(volumes *schema.Set) (map[string]struct{}, []strin switch { case len(fromContainer) == 0 && len(containerPath) == 0: - return retVolumeMap, retHostConfigBinds, retVolumeFromContainers, errors.New("Volume entry without container path or source container") + return retVolumeMap, retHostConfigBinds, retVolumeFromContainers, errors.New("volume entry without container path or source container") case len(fromContainer) != 0 && len(containerPath) != 0: - return retVolumeMap, retHostConfigBinds, retVolumeFromContainers, errors.New("Both a container and a path specified in a volume entry") + return retVolumeMap, retHostConfigBinds, retVolumeFromContainers, errors.New("both a container and a path specified in a volume entry") case len(fromContainer) != 0: retVolumeFromContainers = append(retVolumeFromContainers, fromContainer) case len(volumeName) != 0: diff --git a/internal/provider/resource_docker_container_test.go b/internal/provider/resource_docker_container_test.go index 496f09e19..ba936d46e 100644 --- a/internal/provider/resource_docker_container_test.go +++ b/internal/provider/resource_docker_container_test.go @@ -891,6 +891,7 @@ func TestAccDockerContainer_uploadAsBase64(t *testing.T) { Config: testAccDockerContainerUploadBase64Config, Check: resource.ComposeTestCheckFunc( testAccContainerRunning("docker_container.foo", &c), + // DevSkim: ignore DS173237 testCheck("/terraform/test1.txt", "894fc3f56edf2d3a4c5fb5cb71df910f958a2ed8", "744"), testCheck("/terraform/test2.txt", "foobar", "100644"), resource.TestCheckResourceAttr("docker_container.foo", "name", "tf-test"), @@ -912,6 +913,7 @@ func TestAccDockerContainer_uploadAsBase64(t *testing.T) { Config: testAccDockerContainerUploadBase64Config, Check: resource.ComposeTestCheckFunc( testAccContainerRunning("docker_container.foo", &c), + // DevSkim: ignore DS173237 testCheck("/terraform/test1.txt", "894fc3f56edf2d3a4c5fb5cb71df910f958a2ed8", "744"), testCheck("/terraform/test2.txt", "foobar", "100644"), resource.TestCheckResourceAttr("docker_container.foo", "name", "tf-test"), diff --git a/internal/provider/resource_docker_image.go b/internal/provider/resource_docker_image.go index 6e977384c..f3cee2383 100644 --- a/internal/provider/resource_docker_image.go +++ b/internal/provider/resource_docker_image.go @@ -6,6 +6,8 @@ import ( func resourceDockerImage() *schema.Resource { return &schema.Resource{ + Description: "Pulls a Docker image to a given Docker host from a Docker Registry.\n This resource will *not* pull new layers of the image automatically unless used in conjunction with [docker_registry_image](registry_image.md) data source to update the `pull_triggers` field.", + CreateContext: resourceDockerImageCreate, ReadContext: resourceDockerImageRead, UpdateContext: resourceDockerImageUpdate, @@ -13,22 +15,26 @@ func resourceDockerImage() *schema.Resource { Schema: map[string]*schema.Schema{ "name": { - Type: schema.TypeString, - Required: true, + Type: schema.TypeString, + Description: "The name of the Docker image, including any tags or SHA256 repo digests.", + Required: true, }, "latest": { - Type: schema.TypeString, - Computed: true, + Type: schema.TypeString, + Description: "The ID of the image.", + Computed: true, }, "keep_locally": { - Type: schema.TypeBool, - Optional: true, + Type: schema.TypeBool, + Description: "If true, then the Docker image won't be deleted on destroy operation. If this is false, it will delete the image from the docker local storage on destroy operation.", + Optional: true, }, "pull_trigger": { Type: schema.TypeString, + Description: "A value which cause an image pull when changed", Optional: true, ForceNew: true, ConflictsWith: []string{"pull_triggers"}, @@ -36,29 +42,33 @@ func resourceDockerImage() *schema.Resource { }, "pull_triggers": { - Type: schema.TypeSet, - Optional: true, - ForceNew: true, - Elem: &schema.Schema{Type: schema.TypeString}, - Set: schema.HashString, + Type: schema.TypeSet, + Description: "List of values which cause an image pull when changed. This is used to store the image digest from the registry when using the [docker_registry_image](../data-sources/registry_image.md).", + Optional: true, + ForceNew: true, + Elem: &schema.Schema{Type: schema.TypeString}, + Set: schema.HashString, }, "output": { - Type: schema.TypeString, - Computed: true, + Type: schema.TypeString, + Deprecated: "Is unused and will be removed.", + Computed: true, Elem: &schema.Schema{ - Type: schema.TypeString, + Type: schema.TypeString, + Deprecated: "Is unused and will be removed.", }, }, "force_remove": { Type: schema.TypeBool, - Description: "Force remove the image when the resource is destroyed", + Description: "If true, then the image is removed forcibly when the resource is destroyed.", Optional: true, }, "build": { Type: schema.TypeSet, + Description: "Configuration to build an image. Please see [docker build command reference](https://docs.docker.com/engine/reference/commandline/build/#options) too.", Optional: true, MaxItems: 1, ConflictsWith: []string{"pull_triggers", "pull_trigger"}, @@ -72,7 +82,7 @@ func resourceDockerImage() *schema.Resource { }, "dockerfile": { Type: schema.TypeString, - Description: "Name of the Dockerfile (Default is 'PATH/Dockerfile')", + Description: "Name of the Dockerfile. Defaults to `Dockerfile`.", Optional: true, Default: "Dockerfile", ForceNew: true, @@ -92,7 +102,7 @@ func resourceDockerImage() *schema.Resource { }, "remove": { Type: schema.TypeBool, - Description: "Remove intermediate containers after a successful build (default true)", + Description: "Remove intermediate containers after a successful build. Defaults to `true`.", Default: true, Optional: true, }, diff --git a/internal/provider/resource_docker_image_funcs.go b/internal/provider/resource_docker_image_funcs.go index 96deccbd9..9ba043ea3 100644 --- a/internal/provider/resource_docker_image_funcs.go +++ b/internal/provider/resource_docker_image_funcs.go @@ -58,6 +58,7 @@ func resourceDockerImageRead(ctx context.Context, d *schema.ResourceData, meta i foundImage := searchLocalImages(ctx, client, data, imageName) if foundImage == nil { + log.Printf("[DEBUG] did not find image with name: %v", imageName) d.SetId("") return nil } @@ -119,7 +120,7 @@ func removeImage(ctx context.Context, d *schema.ResourceData, client *client.Cli imageName := d.Get("name").(string) if imageName == "" { - return fmt.Errorf("Empty image name is not allowed") + return fmt.Errorf("empty image name is not allowed") } foundImage := searchLocalImages(ctx, client, data, imageName) @@ -140,7 +141,7 @@ func removeImage(ctx context.Context, d *schema.ResourceData, client *client.Cli func fetchLocalImages(ctx context.Context, data *Data, client *client.Client) error { images, err := client.ImageList(ctx, types.ImageListOptions{All: false}) if err != nil { - return fmt.Errorf("Unable to list Docker images: %s", err) + return fmt.Errorf("unable to list Docker images: %s", err) } if data.DockerImages == nil { @@ -246,7 +247,7 @@ func parseImageOptions(image string) internalPullImageOptions { func findImage(ctx context.Context, imageName string, client *client.Client, authConfig *AuthConfigs) (*types.ImageSummary, error) { if imageName == "" { - return nil, fmt.Errorf("Empty image name is not allowed") + return nil, fmt.Errorf("empty image name is not allowed") } var data Data @@ -261,7 +262,7 @@ func findImage(ctx context.Context, imageName string, client *client.Client, aut } if err := pullImage(ctx, &data, client, authConfig, imageName); err != nil { - return nil, fmt.Errorf("Unable to pull image %s: %s", imageName, err) + return nil, fmt.Errorf("unable to pull image %s: %s", imageName, err) } // update the data structure of the images @@ -274,7 +275,7 @@ func findImage(ctx context.Context, imageName string, client *client.Client, aut return foundImage, nil } - return nil, fmt.Errorf("Unable to find or pull image %s", imageName) + return nil, fmt.Errorf("unable to find or pull image %s", imageName) } func buildDockerImage(ctx context.Context, rawBuild map[string]interface{}, imageName string, client *client.Client) error { @@ -352,7 +353,7 @@ func decodeBuildMessages(response types.ImageBuildResponse) (string, error) { var m jsonmessage.JSONMessage err := dec.Decode(&m) if err != nil { - return buf.String(), fmt.Errorf("Problem decoding message from docker daemon: %s", err) + return buf.String(), fmt.Errorf("problem decoding message from docker daemon: %s", err) } if err := m.Display(buf, false); err != nil { @@ -360,7 +361,7 @@ func decodeBuildMessages(response types.ImageBuildResponse) (string, error) { } if m.Error != nil { - buildErr = fmt.Errorf("Unable to build image") + buildErr = fmt.Errorf("unable to build image") } } log.Printf("[DEBUG] %s", buf.String()) diff --git a/internal/provider/resource_docker_network.go b/internal/provider/resource_docker_network.go index 71aae7634..a9da472b9 100644 --- a/internal/provider/resource_docker_network.go +++ b/internal/provider/resource_docker_network.go @@ -12,6 +12,8 @@ import ( func resourceDockerNetwork() *schema.Resource { return &schema.Resource{ + Description: "`docker_network` provides details about a specific Docker Network.", + CreateContext: resourceDockerNetworkCreate, ReadContext: resourceDockerNetworkRead, DeleteContext: resourceDockerNetworkDelete, @@ -21,108 +23,124 @@ func resourceDockerNetwork() *schema.Resource { Schema: map[string]*schema.Schema{ "name": { - Type: schema.TypeString, - Required: true, - ForceNew: true, + Type: schema.TypeString, + Description: "The name of the Docker network.", + Required: true, + ForceNew: true, }, "labels": { - Type: schema.TypeSet, - Optional: true, - ForceNew: true, - Elem: labelSchema, + Type: schema.TypeSet, + Description: "User-defined key/value metadata", + Optional: true, + ForceNew: true, + Elem: labelSchema, }, "check_duplicate": { - Type: schema.TypeBool, - Optional: true, - ForceNew: true, + Type: schema.TypeBool, + Description: "Requests daemon to check for networks with same name.", + Optional: true, + ForceNew: true, }, "driver": { - Type: schema.TypeString, - Optional: true, - ForceNew: true, - Computed: true, + Type: schema.TypeString, + Description: "The driver of the Docker network. Possible values are `bridge`, `host`, `overlay`, `macvlan`. See [network docs](https://docs.docker.com/network/#network-drivers) for more details.", + Optional: true, + ForceNew: true, + Computed: true, }, "options": { - Type: schema.TypeMap, - Optional: true, - ForceNew: true, - Computed: true, + Type: schema.TypeMap, + Description: "Only available with bridge networks. See [bridge options docs](https://docs.docker.com/engine/reference/commandline/network_create/#bridge-driver-options) for more details.", + Optional: true, + ForceNew: true, + Computed: true, }, "internal": { - Type: schema.TypeBool, - Optional: true, - Computed: true, - ForceNew: true, + Type: schema.TypeBool, + Description: "Whether the network is internal.", + Optional: true, + Computed: true, + ForceNew: true, }, "attachable": { - Type: schema.TypeBool, - Optional: true, - ForceNew: true, + Type: schema.TypeBool, + Description: "Enable manual container attachment to the network.", + Optional: true, + ForceNew: true, }, "ingress": { - Type: schema.TypeBool, - Optional: true, - ForceNew: true, + Type: schema.TypeBool, + Description: "Create swarm routing-mesh network. Defaults to `false`.", + Optional: true, + ForceNew: true, }, "ipv6": { - Type: schema.TypeBool, - Optional: true, - ForceNew: true, + Type: schema.TypeBool, + Description: "Enable IPv6 networking. Defaults to `false`.", + Optional: true, + ForceNew: true, }, "ipam_driver": { - Type: schema.TypeString, - Optional: true, - ForceNew: true, - Default: "default", + Type: schema.TypeString, + Description: "Driver used by the custom IP scheme of the network. Defaults to `default`", + Default: "default", + Optional: true, + ForceNew: true, }, "ipam_config": { - Type: schema.TypeSet, - Optional: true, - Computed: true, - ForceNew: true, + Type: schema.TypeSet, + Description: "The IPAM configuration options", + Optional: true, + Computed: true, + ForceNew: true, // DiffSuppressFunc: suppressIfIPAMConfigWithIpv6Changes(), Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "subnet": { - Type: schema.TypeString, - Optional: true, - ForceNew: true, + Type: schema.TypeString, + Description: "The subnet in CIDR form", + Optional: true, + ForceNew: true, }, "ip_range": { - Type: schema.TypeString, - Optional: true, - ForceNew: true, + Type: schema.TypeString, + Description: "The ip range in CIDR form", + Optional: true, + ForceNew: true, }, "gateway": { - Type: schema.TypeString, - Optional: true, - ForceNew: true, + Type: schema.TypeString, + Description: "The IP address of the gateway", + Optional: true, + ForceNew: true, }, "aux_address": { - Type: schema.TypeMap, - Optional: true, - ForceNew: true, + Type: schema.TypeMap, + Description: "Auxiliary IPv4 or IPv6 addresses used by Network driver", + Optional: true, + ForceNew: true, }, }, }, }, "scope": { - Type: schema.TypeString, - Computed: true, + Type: schema.TypeString, + Description: "Scope of the network. One of `swarm`, `global`, or `local`.", + Computed: true, }, }, SchemaVersion: 1, diff --git a/internal/provider/resource_docker_plugin.go b/internal/provider/resource_docker_plugin.go index 09fbbde2c..b6223a64a 100644 --- a/internal/provider/resource_docker_plugin.go +++ b/internal/provider/resource_docker_plugin.go @@ -6,6 +6,8 @@ import ( func resourceDockerPlugin() *schema.Resource { return &schema.Resource{ + Description: "Manages the lifecycle of a Docker plugin.", + Create: resourceDockerPluginCreate, Read: resourceDockerPluginRead, Update: resourceDockerPluginUpdate, @@ -13,29 +15,31 @@ func resourceDockerPlugin() *schema.Resource { Importer: &schema.ResourceImporter{ StateContext: schema.ImportStatePassthroughContext, }, + Schema: map[string]*schema.Schema{ "name": { Type: schema.TypeString, + Description: "Docker Plugin name", Required: true, ForceNew: true, - Description: "Docker Plugin name", DiffSuppressFunc: diffSuppressFuncPluginName, ValidateFunc: validateFuncPluginName, }, "alias": { Type: schema.TypeString, + Description: "Docker Plugin alias", Computed: true, Optional: true, ForceNew: true, - Description: "Docker Plugin alias", DiffSuppressFunc: func(k, oldV, newV string, d *schema.ResourceData) bool { return complementTag(oldV) == complementTag(newV) }, }, "enabled": { - Type: schema.TypeBool, - Optional: true, - Default: true, + Type: schema.TypeBool, + Description: "If `true` the plugin is enabled. Defaults to `true`", + Default: true, + Optional: true, }, "grant_all_permissions": { Type: schema.TypeBool, @@ -45,18 +49,21 @@ func resourceDockerPlugin() *schema.Resource { }, "grant_permissions": { Type: schema.TypeSet, + Description: "Grant specific permissions only", Optional: true, ConflictsWith: []string{"grant_all_permissions"}, Set: dockerPluginGrantPermissionsSetFunc, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "name": { - Type: schema.TypeString, - Required: true, + Type: schema.TypeString, + Description: "The name of the permission", + Required: true, }, "value": { - Type: schema.TypeSet, - Required: true, + Type: schema.TypeSet, + Description: "The value of the permission", + Required: true, Elem: &schema.Schema{ Type: schema.TypeString, }, @@ -65,10 +72,11 @@ func resourceDockerPlugin() *schema.Resource { }, }, "env": { - Type: schema.TypeSet, - Optional: true, - Computed: true, - Elem: &schema.Schema{Type: schema.TypeString}, + Type: schema.TypeSet, + Description: "The environment variables in the form of `KEY=VALUE`, e.g. `DEBUG=0`", + Optional: true, + Computed: true, + Elem: &schema.Schema{Type: schema.TypeString}, }, "plugin_reference": { Type: schema.TypeString, @@ -77,18 +85,19 @@ func resourceDockerPlugin() *schema.Resource { }, "force_destroy": { - Type: schema.TypeBool, - Optional: true, + Type: schema.TypeBool, + Description: "If true, then the plugin is destroyed forcibly", + Optional: true, }, "enable_timeout": { Type: schema.TypeInt, - Optional: true, Description: "HTTP client timeout to enable the plugin", + Optional: true, }, "force_disable": { Type: schema.TypeBool, + Description: "If true, then the plugin is disabled forcibly", Optional: true, - Description: "If true, then the plugin is disabled forcibly when the plugin is disabled", }, }, } diff --git a/internal/provider/resource_docker_registry_image.go b/internal/provider/resource_docker_registry_image.go index ee3f69ab9..fbea350fe 100644 --- a/internal/provider/resource_docker_registry_image.go +++ b/internal/provider/resource_docker_registry_image.go @@ -8,6 +8,8 @@ import ( func resourceDockerRegistryImage() *schema.Resource { return &schema.Resource{ + Description: "Manages the lifecycle of docker image/tag in a registry.", + CreateContext: resourceDockerRegistryImageCreate, ReadContext: resourceDockerRegistryImageRead, DeleteContext: resourceDockerRegistryImageDelete, @@ -15,189 +17,226 @@ func resourceDockerRegistryImage() *schema.Resource { Schema: map[string]*schema.Schema{ "name": { - Type: schema.TypeString, - Required: true, - ForceNew: true, + Type: schema.TypeString, + Description: "The name of the Docker image.", + Required: true, + ForceNew: true, }, "keep_remotely": { - Type: schema.TypeBool, - Optional: true, - Default: false, + Type: schema.TypeBool, + Description: "If true, then the Docker image won't be deleted on destroy operation. If this is false, it will delete the image from the docker registry on destroy operation. Defaults to `false`", + Default: false, + Optional: true, }, "build": { - Type: schema.TypeList, - Optional: true, - MaxItems: 1, + Type: schema.TypeList, + Description: "Definition for building the image", + Optional: true, + MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "suppress_output": { - Type: schema.TypeBool, - Optional: true, - ForceNew: true, + Type: schema.TypeBool, + Description: "Suppress the build output and print image ID on success", + Optional: true, + ForceNew: true, }, "remote_context": { - Type: schema.TypeString, - Optional: true, - ForceNew: true, + Type: schema.TypeString, + Description: "A Git repository URI or HTTP/HTTPS context URI", + Optional: true, + ForceNew: true, }, "no_cache": { - Type: schema.TypeBool, - Optional: true, - ForceNew: true, + Type: schema.TypeBool, + Description: "Do not use the cache when building the image", + Optional: true, + ForceNew: true, }, "remove": { - Type: schema.TypeBool, - Optional: true, - ForceNew: true, + Type: schema.TypeBool, + Description: "Remove intermediate containers after a successful build (default behavior)", + Optional: true, + ForceNew: true, }, "force_remove": { - Type: schema.TypeBool, - Optional: true, - ForceNew: true, + Type: schema.TypeBool, + Description: "Always remove intermediate containers", + Optional: true, + ForceNew: true, }, "pull_parent": { - Type: schema.TypeBool, - Optional: true, - ForceNew: true, + Type: schema.TypeBool, + Description: "Attempt to pull the image even if an older image exists locally", + Optional: true, + ForceNew: true, }, "isolation": { - Type: schema.TypeString, - Optional: true, - ForceNew: true, + Type: schema.TypeString, + Description: "Isolation represents the isolation technology of a container. The supported values are ", + Optional: true, + ForceNew: true, }, "cpu_set_cpus": { - Type: schema.TypeString, - Optional: true, - ForceNew: true, + Type: schema.TypeString, + Description: "CPUs in which to allow execution (e.g., `0-3`, `0`, `1`)", + Optional: true, + ForceNew: true, }, "cpu_set_mems": { - Type: schema.TypeString, - Optional: true, - ForceNew: true, + Type: schema.TypeString, + Description: "MEMs in which to allow execution (`0-3`, `0`, `1`)", + Optional: true, + ForceNew: true, }, "cpu_shares": { - Type: schema.TypeInt, - Optional: true, - ForceNew: true, + Type: schema.TypeInt, + Description: "CPU shares (relative weight)", + Optional: true, + ForceNew: true, }, "cpu_quota": { - Type: schema.TypeInt, - Optional: true, - ForceNew: true, + Type: schema.TypeInt, + Description: "Microseconds of CPU time that the container can get in a CPU period", + Optional: true, + ForceNew: true, }, "cpu_period": { - Type: schema.TypeInt, - Optional: true, - ForceNew: true, + Type: schema.TypeInt, + Description: "The length of a CPU period in microseconds", + Optional: true, + ForceNew: true, }, "memory": { - Type: schema.TypeInt, - Optional: true, - ForceNew: true, + Type: schema.TypeInt, + Description: "Set memory limit for build", + Optional: true, + ForceNew: true, }, "memory_swap": { - Type: schema.TypeInt, - Optional: true, - ForceNew: true, + Type: schema.TypeInt, + Description: "Total memory (memory + swap), -1 to enable unlimited swap", + Optional: true, + ForceNew: true, }, "cgroup_parent": { - Type: schema.TypeString, - Optional: true, - ForceNew: true, + Type: schema.TypeString, + Description: "Optional parent cgroup for the container", + Optional: true, + ForceNew: true, }, "network_mode": { - Type: schema.TypeString, - Optional: true, - ForceNew: true, + Type: schema.TypeString, + Description: "Set the networking mode for the RUN instructions during build", + Optional: true, + ForceNew: true, }, "shm_size": { - Type: schema.TypeInt, - Optional: true, - ForceNew: true, + Type: schema.TypeInt, + Description: "Size of /dev/shm in bytes. The size must be greater than 0", + Optional: true, + ForceNew: true, }, "dockerfile": { - Type: schema.TypeString, - Optional: true, - Default: "Dockerfile", - ForceNew: true, + Type: schema.TypeString, + Description: "Dockerfile file. Defaults to `Dockerfile`", + Default: "Dockerfile", + Optional: true, + ForceNew: true, }, "ulimit": { - Type: schema.TypeList, - Optional: true, + Type: schema.TypeList, + Description: "Configuration for ulimits", + Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "name": { - Type: schema.TypeString, - Required: true, - ForceNew: true, + Type: schema.TypeString, + Description: "type of ulimit, e.g. `nofile`", + Required: true, + ForceNew: true, }, "hard": { - Type: schema.TypeInt, - Required: true, - ForceNew: true, + Type: schema.TypeInt, + Description: "soft limit", + Required: true, + ForceNew: true, }, "soft": { - Type: schema.TypeInt, - Required: true, - ForceNew: true, + Type: schema.TypeInt, + Description: "hard limit", + Required: true, + ForceNew: true, }, }, }, }, "build_args": { - Type: schema.TypeMap, - Optional: true, - ForceNew: true, + Type: schema.TypeMap, + Description: "Pairs for build-time variables in the form TODO", + Optional: true, + ForceNew: true, Elem: &schema.Schema{ - Type: schema.TypeString, + Type: schema.TypeString, + Description: "The argument", }, }, "auth_config": { - Type: schema.TypeList, - Optional: true, + Type: schema.TypeList, + Description: "The configuration for the autentication", + Optional: true, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "host_name": { - Type: schema.TypeString, - Required: true, + Type: schema.TypeString, + Description: "hostname of the registry", + Required: true, }, "user_name": { - Type: schema.TypeString, - Optional: true, + Type: schema.TypeString, + Description: "the registry user name", + Optional: true, }, "password": { - Type: schema.TypeString, - Optional: true, + Type: schema.TypeString, + Description: "the registry password", + Optional: true, }, "auth": { - Type: schema.TypeString, - Optional: true, + Type: schema.TypeString, + Description: "the auth token", + Optional: true, }, "email": { - Type: schema.TypeString, - Optional: true, + Type: schema.TypeString, + Description: "the user emal", + Optional: true, }, "server_address": { - Type: schema.TypeString, - Optional: true, + Type: schema.TypeString, + Description: "the server address", + Optional: true, }, "identity_token": { - Type: schema.TypeString, - Optional: true, + Type: schema.TypeString, + Description: "the identity token", + Optional: true, }, "registry_token": { - Type: schema.TypeString, - Optional: true, + Type: schema.TypeString, + Description: "the registry token", + Optional: true, }, }, }, }, "context": { - Type: schema.TypeString, - Required: true, - ForceNew: true, + Type: schema.TypeString, + Description: "The path to the context folder", + Required: true, + ForceNew: true, StateFunc: func(val interface{}) string { // the context hash is stored to identify changes in the context files dockerContextTarPath, _ := buildDockerImageContextTar(val.(string)) @@ -207,74 +246,89 @@ func resourceDockerRegistryImage() *schema.Resource { }, }, "labels": { - Type: schema.TypeMap, - Optional: true, - ForceNew: true, + Type: schema.TypeMap, + Description: "User-defined key/value metadata", + Optional: true, + ForceNew: true, Elem: &schema.Schema{ - Type: schema.TypeString, + Type: schema.TypeString, + Description: "The key/value pair", }, }, "squash": { - Type: schema.TypeBool, - Optional: true, - ForceNew: true, + Type: schema.TypeBool, + Description: "If true the new layers are squashed into a new image with a single new layer", + Optional: true, + ForceNew: true, }, "cache_from": { - Type: schema.TypeList, - Optional: true, - ForceNew: true, + Type: schema.TypeList, + Description: "Images to consider as cache sources", + Optional: true, + ForceNew: true, Elem: &schema.Schema{ - Type: schema.TypeString, + Type: schema.TypeString, + Description: "The image", }, }, "security_opt": { - Type: schema.TypeList, - Optional: true, - ForceNew: true, + Type: schema.TypeList, + Description: "The security options", + Optional: true, + ForceNew: true, Elem: &schema.Schema{ - Type: schema.TypeString, + Type: schema.TypeString, + Description: "The option", }, }, "extra_hosts": { - Type: schema.TypeList, - Optional: true, - ForceNew: true, + Type: schema.TypeList, + Description: "A list of hostnames/IP mappings to add to the container’s /etc/hosts file. Specified in the form [\"hostname:IP\"]", + Optional: true, + ForceNew: true, Elem: &schema.Schema{ - Type: schema.TypeString, + Type: schema.TypeString, + Description: "", }, }, "target": { - Type: schema.TypeString, - Optional: true, - ForceNew: true, + Type: schema.TypeString, + Description: "Set the target build stage to build", + Optional: true, + ForceNew: true, }, "session_id": { - Type: schema.TypeString, - Optional: true, - ForceNew: true, + Type: schema.TypeString, + Description: "Set an ID for the build session", + Optional: true, + ForceNew: true, }, "platform": { - Type: schema.TypeString, - Optional: true, - ForceNew: true, + Type: schema.TypeString, + Description: "Set platform if server is multi-platform capable", + Optional: true, + ForceNew: true, }, "version": { - Type: schema.TypeString, - Optional: true, - ForceNew: true, + Type: schema.TypeString, + Description: "Version of the unerlying builder to use", + Optional: true, + ForceNew: true, }, "build_id": { - Type: schema.TypeString, - Optional: true, - ForceNew: true, + Type: schema.TypeString, + Description: "BuildID is an optional identifier that can be passed together with the build request. The ", + Optional: true, + ForceNew: true, }, }, }, }, "sha256_digest": { - Type: schema.TypeString, - Computed: true, + Type: schema.TypeString, + Description: "The sha256 digest of the image.", + Computed: true, }, }, } diff --git a/internal/provider/resource_docker_registry_image_funcs.go b/internal/provider/resource_docker_registry_image_funcs.go index a1af3edc5..9e16ecf0a 100644 --- a/internal/provider/resource_docker_registry_image_funcs.go +++ b/internal/provider/resource_docker_registry_image_funcs.go @@ -244,7 +244,7 @@ func buildDockerRegistryImage(ctx context.Context, client *client.Client, buildO } dockerContextTarPath, err := buildDockerImageContextTar(buildContext) if err != nil { - return fmt.Errorf("Unable to build context %v", err) + return fmt.Errorf("unable to build context %v", err) } defer os.Remove(dockerContextTarPath) dockerBuildContext, err := os.Open(dockerContextTarPath) @@ -271,12 +271,12 @@ func buildDockerImageContextTar(buildContext string) (string, error) { // Create our Temp File: This will create a filename like /tmp/terraform-provider-docker-123456.tar tmpFile, err := ioutil.TempFile(os.TempDir(), "terraform-provider-docker-*.tar") if err != nil { - return "", fmt.Errorf("Cannot create temporary file - %v", err.Error()) + return "", fmt.Errorf("cannot create temporary file - %v", err.Error()) } defer tmpFile.Close() if _, err = os.Stat(buildContext); err != nil { - return "", fmt.Errorf("Unable to read build context - %v", err.Error()) + return "", fmt.Errorf("unable to read build context - %v", err.Error()) } tw := tar.NewWriter(tmpFile) @@ -402,6 +402,7 @@ func deleteDockerRegistryImage(pushOpts internalPushImageOptions, sha256Digest, // cuz we don't have a valid certs for this case if env, okEnv := os.LookupEnv("TF_ACC"); okEnv { if i, errConv := strconv.Atoi(env); errConv == nil && i >= 1 { + // DevSkim: ignore DS440000 cfg := &tls.Config{ InsecureSkipVerify: true, } @@ -504,7 +505,7 @@ func getImageDigestWithFallback(opts internalPushImageOptions, username, passwor if err != nil { digest, err = getImageDigest(opts.Registry, opts.Repository, opts.Tag, username, password, true) if err != nil { - return "", fmt.Errorf("Unable to get digest: %s", err) + return "", fmt.Errorf("unable to get digest: %s", err) } } return digest, nil diff --git a/internal/provider/resource_docker_registry_image_funcs_test.go b/internal/provider/resource_docker_registry_image_funcs_test.go index bd1299697..cc29cacbf 100644 --- a/internal/provider/resource_docker_registry_image_funcs_test.go +++ b/internal/provider/resource_docker_registry_image_funcs_test.go @@ -57,6 +57,7 @@ func TestAccDockerRegistryImageResource_mapping(t *testing.T) { Soft: int64(2), }), "Ulimits") assert(len(options.BuildArgs) == 1, "BuildArgs") + // DevSkim: ignore DS137138 assert(*options.BuildArgs["HTTP_PROXY"] == "http://10.20.30.2:1234", "BuildArgs") assert(len(options.AuthConfigs) == 1, "AuthConfigs") assert(reflect.DeepEqual(options.AuthConfigs["foo.host"], types.AuthConfig{ diff --git a/internal/provider/resource_docker_secret.go b/internal/provider/resource_docker_secret.go index 3bf353c32..be5c53dd8 100644 --- a/internal/provider/resource_docker_secret.go +++ b/internal/provider/resource_docker_secret.go @@ -12,6 +12,8 @@ import ( func resourceDockerSecret() *schema.Resource { return &schema.Resource{ + Description: "Manages the secrets of a Docker service in a swarm.", + CreateContext: resourceDockerSecretCreate, ReadContext: resourceDockerSecretRead, DeleteContext: resourceDockerSecretDelete, @@ -34,10 +36,11 @@ func resourceDockerSecret() *schema.Resource { }, "labels": { - Type: schema.TypeSet, - Optional: true, - ForceNew: true, - Elem: labelSchema, + Type: schema.TypeSet, + Description: "User-defined key/value metadata", + Optional: true, + ForceNew: true, + Elem: labelSchema, }, }, SchemaVersion: 1, @@ -75,9 +78,10 @@ func resourceDockerSecretV0() *schema.Resource { }, "labels": { - Type: schema.TypeMap, - Optional: true, - ForceNew: true, + Type: schema.TypeMap, + Description: "User-defined key/value metadata", + Optional: true, + ForceNew: true, }, }, } @@ -119,7 +123,7 @@ func resourceDockerSecretRead(ctx context.Context, d *schema.ResourceData, meta d.SetId(secret.ID) d.Set("name", secret.Spec.Name) // Note mavogel: secret data is not exposed via the API - // TODO next major if we do not explicitly do not store it in the state we could import it, but BC + // TODO next major if we do not explicitly store it in the state we could import it, but BC // d.Set("data", base64.StdEncoding.EncodeToString(secret.Spec.Data)) return nil } diff --git a/internal/provider/resource_docker_service.go b/internal/provider/resource_docker_service.go index 88105d0a7..7c1aecff3 100644 --- a/internal/provider/resource_docker_service.go +++ b/internal/provider/resource_docker_service.go @@ -12,6 +12,8 @@ import ( // https://docs.docker.com/engine/api/v1.32/#operation/ServiceCreate func resourceDockerService() *schema.Resource { return &schema.Resource{ + Description: "This resource manages the lifecycle of a Docker service. By default, the creation, update and delete of services are detached.\n With the [Converge Config](#convergeconfig) the behavior of the `docker cli` is imitated to guarantee tha for example, all tasks of a service are running or successfully updated or to inform `terraform` that a service could no be updated and was successfully rolled back.", + CreateContext: resourceDockerServiceCreate, ReadContext: resourceDockerServiceRead, UpdateContext: resourceDockerServiceUpdate, @@ -22,25 +24,29 @@ func resourceDockerService() *schema.Resource { Schema: map[string]*schema.Schema{ "auth": { - Type: schema.TypeList, - Optional: true, - ForceNew: true, - MaxItems: 1, + Type: schema.TypeList, + Description: "Configuration for the authentication for pulling the images of the service", + Optional: true, + ForceNew: true, + MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "server_address": { - Type: schema.TypeString, - Required: true, - ForceNew: true, + Type: schema.TypeString, + Description: "The address of the server for the authentication", + Required: true, + ForceNew: true, }, "username": { Type: schema.TypeString, + Description: "The username", Optional: true, ForceNew: true, DefaultFunc: schema.EnvDefaultFunc("DOCKER_REGISTRY_USER", ""), }, "password": { Type: schema.TypeString, + Description: "The password", Optional: true, ForceNew: true, DefaultFunc: schema.EnvDefaultFunc("DOCKER_REGISTRY_PASS", ""), @@ -323,30 +329,30 @@ func resourceDockerService() *schema.Resource { }, "interval": { Type: schema.TypeString, - Description: "Time between running the check (ms|s|m|h)", - Optional: true, + Description: "Time between running the check (ms|s|m|h). Defaults to `0s`.", Default: "0s", + Optional: true, ValidateDiagFunc: validateDurationGeq0(), }, "timeout": { Type: schema.TypeString, - Description: "Maximum time to allow one check to run (ms|s|m|h)", - Optional: true, + Description: "Maximum time to allow one check to run (ms|s|m|h). Defaults to `0s`.", Default: "0s", + Optional: true, ValidateDiagFunc: validateDurationGeq0(), }, "start_period": { Type: schema.TypeString, - Description: "Start period for the container to initialize before counting retries towards unstable (ms|s|m|h)", - Optional: true, + Description: "Start period for the container to initialize before counting retries towards unstable (ms|s|m|h). Defaults to `0s`.", Default: "0s", + Optional: true, ValidateDiagFunc: validateDurationGeq0(), }, "retries": { Type: schema.TypeInt, - Description: "Consecutive failures needed to report unhealthy", - Optional: true, + Description: "Consecutive failures needed to report unhealthy. Defaults to `0`", Default: 0, + Optional: true, ValidateDiagFunc: validateIntegerGeqThan(0), }, }, @@ -360,15 +366,17 @@ func resourceDockerService() *schema.Resource { Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ "ip": { - Type: schema.TypeString, - Required: true, - ForceNew: true, + Type: schema.TypeString, + Description: "The ip of the host", + Required: true, + ForceNew: true, }, "host": { - Type: schema.TypeString, - Required: true, - ForceNew: true, + Type: schema.TypeString, + Description: "The name of the host", + Required: true, + ForceNew: true, }, }, }, @@ -425,21 +433,21 @@ func resourceDockerService() *schema.Resource { }, "file_uid": { Type: schema.TypeString, - Description: "Represents the file UID", - Optional: true, + Description: "Represents the file UID. Defaults to `0`", Default: "0", + Optional: true, }, "file_gid": { Type: schema.TypeString, - Description: "Represents the file GID", - Optional: true, + Description: "Represents the file GID. Defaults to `0`", Default: "0", + Optional: true, }, "file_mode": { Type: schema.TypeInt, - Description: "Represents represents the FileMode of the file", - Optional: true, + Description: "Represents represents the FileMode of the file. Defaults to `0o444`", Default: 0o444, + Optional: true, ValidateDiagFunc: validateIntegerGeqThan(0), }, }, @@ -468,21 +476,21 @@ func resourceDockerService() *schema.Resource { }, "file_uid": { Type: schema.TypeString, - Description: "Represents the file UID", - Optional: true, + Description: "Represents the file UID. Defaults to `0`.", Default: "0", + Optional: true, }, "file_gid": { Type: schema.TypeString, - Description: "Represents the file GID", - Optional: true, + Description: "Represents the file GID. Defaults to `0`.", Default: "0", + Optional: true, }, "file_mode": { Type: schema.TypeInt, - Description: "Represents represents the FileMode of the file", - Optional: true, + Description: "Represents represents the FileMode of the file. Defaults to `0o444`.", Default: 0o444, + Optional: true, ValidateDiagFunc: validateIntegerGeqThan(0), }, }, @@ -490,9 +498,9 @@ func resourceDockerService() *schema.Resource { }, "isolation": { Type: schema.TypeString, - Description: "Isolation technology of the containers running the service. (Windows only)", - Optional: true, + Description: "Isolation technology of the containers running the service. (Windows only). Defaults to `default`.", Default: "default", + Optional: true, ValidateDiagFunc: validateStringMatchesPattern(`^(default|process|hyperv)$`), }, }, @@ -515,7 +523,7 @@ func resourceDockerService() *schema.Resource { Schema: map[string]*schema.Schema{ "nano_cpus": { Type: schema.TypeInt, - Description: "CPU shares in units of 1/1e9 (or 10^-9) of the CPU. Should be at least 1000000", + Description: "CPU shares in units of `1/1e9` (or `10^-9`) of the CPU. Should be at least 1000000", Optional: true, }, "memory_bytes": { @@ -545,7 +553,7 @@ func resourceDockerService() *schema.Resource { }, "generic_resources": { Type: schema.TypeList, - Description: "User-defined resources can be either Integer resources (e.g, SSD=3) or String resources (e.g, GPU=UUID1)", + Description: "User-defined resources can be either Integer resources (e.g, `SSD=3`) or String resources (e.g, GPU=UUID1)", MaxItems: 1, Optional: true, Elem: &schema.Resource{ @@ -593,13 +601,13 @@ func resourceDockerService() *schema.Resource { }, "max_attempts": { Type: schema.TypeInt, - Description: "Maximum attempts to restart a given container before giving up (default value is 0, which is ignored)", + Description: "Maximum attempts to restart a given container before giving up (default value is `0`, which is ignored)", Optional: true, ValidateDiagFunc: validateIntegerGeqThan(0), }, "window": { Type: schema.TypeString, - Description: "The time window used to evaluate the restart policy (default value is 0, which is unbounded) (ms|s|m|h)", + Description: "The time window used to evaluate the restart policy (default value is `0`, which is unbounded) (ms|s|m|h)", Optional: true, ValidateDiagFunc: validateDurationGeq0(), }, @@ -616,7 +624,7 @@ func resourceDockerService() *schema.Resource { Schema: map[string]*schema.Schema{ "constraints": { Type: schema.TypeSet, - Description: "An array of constraints. e.g.: node.role==manager", + Description: "An array of constraints. e.g.: `node.role==manager`", Optional: true, Elem: &schema.Schema{Type: schema.TypeString}, Set: schema.HashString, @@ -630,7 +638,7 @@ func resourceDockerService() *schema.Resource { }, "max_replicas": { Type: schema.TypeInt, - Description: "Maximum number of replicas for per node (default value is 0, which is unlimited)", + Description: "Maximum number of replicas for per node (default value is `0`, which is unlimited)", Optional: true, ValidateDiagFunc: validateIntegerGeqThan(0), }, @@ -642,12 +650,12 @@ func resourceDockerService() *schema.Resource { Schema: map[string]*schema.Schema{ "architecture": { Type: schema.TypeString, - Description: "The architecture, e.g. amd64", + Description: "The architecture, e.g. `amd64`", Required: true, }, "os": { Type: schema.TypeString, - Description: "The operation system, e.g. linux", + Description: "The operation system, e.g. `linux`", Required: true, }, }, @@ -658,14 +666,14 @@ func resourceDockerService() *schema.Resource { }, "force_update": { Type: schema.TypeInt, - Description: "A counter that triggers an update even if no relevant parameters have been changed. See https://github.com/docker/swarmkit/blob/master/api/specs.proto#L126", + Description: "A counter that triggers an update even if no relevant parameters have been changed. See the [spec](https://github.com/docker/swarmkit/blob/master/api/specs.proto#L126).", Optional: true, Computed: true, ValidateDiagFunc: validateIntegerGeqThan(0), }, "runtime": { Type: schema.TypeString, - Description: "Runtime is the type of runtime specified for the task executor. See https://github.com/moby/moby/blob/master/api/types/swarm/runtime.go", + Description: "Runtime is the type of runtime specified for the task executor. See the [types](https://github.com/moby/moby/blob/master/api/types/swarm/runtime.go).", Optional: true, Computed: true, ValidateDiagFunc: validateStringMatchesPattern("^(container|plugin)$"), @@ -721,9 +729,9 @@ func resourceDockerService() *schema.Resource { Schema: map[string]*schema.Schema{ "replicas": { Type: schema.TypeInt, - Description: "The amount of replicas of the service", - Optional: true, + Description: "The amount of replicas of the service. Defaults to `1`", Default: 1, + Optional: true, ValidateDiagFunc: validateIntegerGeqThan(0), }, }, @@ -731,9 +739,9 @@ func resourceDockerService() *schema.Resource { }, "global": { Type: schema.TypeBool, - Description: "The global service mode", - Optional: true, + Description: "The global service mode. Defaults to `false`", Default: false, + Optional: true, ConflictsWith: []string{"mode.0.replicated", "converge_config"}, }, }, @@ -748,44 +756,44 @@ func resourceDockerService() *schema.Resource { Schema: map[string]*schema.Schema{ "parallelism": { Type: schema.TypeInt, - Description: "Maximum number of tasks to be updated in one iteration", - Optional: true, + Description: "Maximum number of tasks to be updated in one iteration. Defaults to `1`", Default: 1, + Optional: true, ValidateDiagFunc: validateIntegerGeqThan(0), }, "delay": { Type: schema.TypeString, - Description: "Delay between task updates (ns|us|ms|s|m|h)", - Optional: true, + Description: "Delay between task updates (ns|us|ms|s|m|h). Defaults to `0s`.", Default: "0s", + Optional: true, ValidateDiagFunc: validateDurationGeq0(), }, "failure_action": { Type: schema.TypeString, - Description: "Action on update failure: pause | continue | rollback", - Optional: true, + Description: "Action on update failure: pause | continue | rollback. Defaults to `pause`.", Default: "pause", + Optional: true, ValidateDiagFunc: validateStringMatchesPattern("^(pause|continue|rollback)$"), }, "monitor": { Type: schema.TypeString, - Description: "Duration after each task update to monitor for failure (ns|us|ms|s|m|h)", - Optional: true, + Description: "Duration after each task update to monitor for failure (ns|us|ms|s|m|h). Defaults to `5s`.", Default: "5s", + Optional: true, ValidateDiagFunc: validateDurationGeq0(), }, "max_failure_ratio": { Type: schema.TypeString, - Description: "Failure rate to tolerate during an update", - Optional: true, + Description: "Failure rate to tolerate during an update. Defaults to `0.0`.", Default: "0.0", + Optional: true, ValidateDiagFunc: validateStringIsFloatRatio(), }, "order": { Type: schema.TypeString, - Description: "Update order: either 'stop-first' or 'start-first'", - Optional: true, + Description: "Update order: either 'stop-first' or 'start-first'. Defaults to `stop-first`.", Default: "stop-first", + Optional: true, ValidateDiagFunc: validateStringMatchesPattern("^(stop-first|start-first)$"), }, }, @@ -800,44 +808,44 @@ func resourceDockerService() *schema.Resource { Schema: map[string]*schema.Schema{ "parallelism": { Type: schema.TypeInt, - Description: "Maximum number of tasks to be rollbacked in one iteration", - Optional: true, + Description: "Maximum number of tasks to be rollbacked in one iteration. Defaults to `1`", Default: 1, + Optional: true, ValidateDiagFunc: validateIntegerGeqThan(0), }, "delay": { Type: schema.TypeString, - Description: "Delay between task rollbacks (ns|us|ms|s|m|h)", - Optional: true, + Description: "Delay between task rollbacks (ns|us|ms|s|m|h). Defaults to `0s`.", Default: "0s", + Optional: true, ValidateDiagFunc: validateDurationGeq0(), }, "failure_action": { Type: schema.TypeString, - Description: "Action on rollback failure: pause | continue", - Optional: true, + Description: "Action on rollback failure: pause | continue. Defaults to `pause`.", Default: "pause", + Optional: true, ValidateDiagFunc: validateStringMatchesPattern("(pause|continue)"), }, "monitor": { Type: schema.TypeString, - Description: "Duration after each task rollback to monitor for failure (ns|us|ms|s|m|h)", - Optional: true, + Description: "Duration after each task rollback to monitor for failure (ns|us|ms|s|m|h). Defaults to `5s`.", Default: "5s", + Optional: true, ValidateDiagFunc: validateDurationGeq0(), }, "max_failure_ratio": { Type: schema.TypeString, - Description: "Failure rate to tolerate during a rollback", - Optional: true, + Description: "Failure rate to tolerate during a rollback. Defaults to `0.0`.", Default: "0.0", + Optional: true, ValidateDiagFunc: validateStringIsFloatRatio(), }, "order": { Type: schema.TypeString, - Description: "Rollback order: either 'stop-first' or 'start-first'", - Optional: true, + Description: "Rollback order: either 'stop-first' or 'start-first'. Defaults to `stop-first`.", Default: "stop-first", + Optional: true, ValidateDiagFunc: validateStringMatchesPattern("(stop-first|start-first)"), }, }, @@ -871,9 +879,9 @@ func resourceDockerService() *schema.Resource { }, "protocol": { Type: schema.TypeString, - Description: "Rrepresents the protocol of a port: 'tcp', 'udp' or 'sctp'", - Optional: true, + Description: "Rrepresents the protocol of a port: 'tcp', 'udp' or 'sctp'. Defaults to `tcp`.", Default: "tcp", + Optional: true, ValidateDiagFunc: validateStringMatchesPattern(`^(tcp|udp|sctp)$`), }, "target_port": { @@ -889,9 +897,9 @@ func resourceDockerService() *schema.Resource { }, "publish_mode": { Type: schema.TypeString, - Description: "Represents the mode in which the port is to be published: 'ingress' or 'host'", - Optional: true, + Description: "Represents the mode in which the port is to be published: 'ingress' or 'host'. Defaults to `ingress`.", Default: "ingress", + Optional: true, ValidateDiagFunc: validateStringMatchesPattern(`^(host|ingress)$`), }, }, @@ -910,16 +918,16 @@ func resourceDockerService() *schema.Resource { Schema: map[string]*schema.Schema{ "delay": { Type: schema.TypeString, - Description: "The interval to check if the desired state is reached (ms|s). Default: 7s", - Optional: true, + Description: "The interval to check if the desired state is reached (ms|s). Defaults to `7s`.", Default: "7s", + Optional: true, ValidateDiagFunc: validateDurationGeq0(), }, "timeout": { Type: schema.TypeString, - Description: "The timeout of the service to reach the desired state (s|m). Default: 3m", - Optional: true, + Description: "The timeout of the service to reach the desired state (s|m). Defaults to `3m`", Default: "3m", + Optional: true, ValidateDiagFunc: validateDurationGeq0(), }, }, diff --git a/internal/provider/resource_docker_service_funcs.go b/internal/provider/resource_docker_service_funcs.go index ae04be092..46dc62842 100644 --- a/internal/provider/resource_docker_service_funcs.go +++ b/internal/provider/resource_docker_service_funcs.go @@ -594,6 +594,7 @@ func authToServiceAuth(auths []interface{}) types.AuthConfig { // fromRegistryAuth extract the desired AuthConfiguration for the given image func fromRegistryAuth(image string, authConfigs map[string]types.AuthConfig) types.AuthConfig { // Remove normalized prefixes to simplify substring + // DevSkim: ignore DS137138 image = strings.Replace(strings.Replace(image, "http://", "", 1), "https://", "", 1) // Get the registry with optional port lastBin := strings.Index(image, "/") diff --git a/internal/provider/resource_docker_volume.go b/internal/provider/resource_docker_volume.go index 331e1e1a5..318613e9c 100644 --- a/internal/provider/resource_docker_volume.go +++ b/internal/provider/resource_docker_volume.go @@ -21,6 +21,8 @@ const ( func resourceDockerVolume() *schema.Resource { return &schema.Resource{ + Description: "Creates and destroys a volume in Docker. This can be used alongside [docker_container](container.md) to prepare volumes that can be shared across containers.", + CreateContext: resourceDockerVolumeCreate, ReadContext: resourceDockerVolumeRead, DeleteContext: resourceDockerVolumeDelete, @@ -30,31 +32,36 @@ func resourceDockerVolume() *schema.Resource { Schema: map[string]*schema.Schema{ "name": { - Type: schema.TypeString, - Optional: true, - Computed: true, - ForceNew: true, + Type: schema.TypeString, + Description: "The name of the Docker volume (will be generated if not provided).", + Optional: true, + Computed: true, + ForceNew: true, }, "labels": { - Type: schema.TypeSet, - Optional: true, - ForceNew: true, - Elem: labelSchema, + Type: schema.TypeSet, + Description: "User-defined key/value metadata", + Optional: true, + ForceNew: true, + Elem: labelSchema, }, "driver": { - Type: schema.TypeString, - Optional: true, - Computed: true, - ForceNew: true, + Type: schema.TypeString, + Description: "Driver type for the volume. Defaults to `local`.", + Optional: true, + Computed: true, + ForceNew: true, }, "driver_opts": { - Type: schema.TypeMap, - Optional: true, - ForceNew: true, + Type: schema.TypeMap, + Description: "Options specific to the driver.", + Optional: true, + ForceNew: true, }, "mountpoint": { - Type: schema.TypeString, - Computed: true, + Type: schema.TypeString, + Description: "The mountpoint of the volume.", + Computed: true, }, }, SchemaVersion: 1, diff --git a/main.go b/main.go index b59c52cef..468d42ffd 100644 --- a/main.go +++ b/main.go @@ -9,6 +9,16 @@ import ( "github.com/terraform-providers/terraform-provider-docker/internal/provider" ) +// Run "go generate" to format example terraform files and generate the docs for the registry/website + +// If you do not have terraform installed, you can remove the formatting command, but its suggested to +// ensure the documentation is formatted properly. +//go:generate terraform fmt -recursive ./examples/ + +// Run the docs generation tool, check its repository for more information on how it works and how docs +// can be customized. +//go:generate go run github.com/hashicorp/terraform-plugin-docs/cmd/tfplugindocs + var ( // these will be set by the goreleaser configuration // to appropriate values for the compiled binary diff --git a/templates/index.md.tmpl b/templates/index.md.tmpl new file mode 100644 index 000000000..c2ee4f1c4 --- /dev/null +++ b/templates/index.md.tmpl @@ -0,0 +1,63 @@ +--- +# generated by https://github.com/hashicorp/terraform-plugin-docs +layout: "" +page_title: "Provider: Docker" +description: |- + The Docker provider is used to interact with Docker resources, like containers, images, service etc. +--- + +# Docker Provider + +The Docker provider is used to interact with Docker containers and images. +It uses the Docker API to manage the lifecycle of Docker containers. Because +the Docker provider uses the Docker API, it is immediately compatible not +only with single server Docker but Swarm and any additional Docker-compatible +API hosts. + +Use the navigation to the left to read about the available resources. + +## Example Usage + +Terraform 0.13 and later: + +{{tffile "examples/provider/provider-tf13.tf"}} + +Terraform 0.12 and earlier: + +{{tffile "examples/provider/provider-tf12.tf"}} + +-> **Note** +You can also use the `ssh` protocol to connect to the docker host on a remote machine. +The configuration would look as follows: + +{{tffile "examples/provider/provider-ssh.tf"}} + +## Registry credentials + +Registry credentials can be provided on a per-registry basis with the `registry_auth` +field, passing either a config file or the username/password directly. + +-> **Note** +The location of the config file is on the machine terraform runs on, nevertheless if the specified docker host is on another machine. + +{{tffile "examples/provider/provider-credentials.tf"}} + +-> **Note** +When passing in a config file either the corresponding `auth` string of the repository is read or the os specific +[credential helpers](https://github.com/docker/docker-credential-helpers#available-programs) are +used to retrieve the authentication credentials. + +You can still use the environment variables `DOCKER_REGISTRY_USER` and `DOCKER_REGISTRY_PASS`. + +An example content of the file `~/.docker/config.json` on macOS may look like follows: + +{{codefile "json" "examples/provider/provider-docker-config.json"}} + +## Certificate information + +Specify certificate information either with a directory or +directly with the content of the files for connecting to the Docker host via TLS. + +{{tffile "examples/provider/provider-cert.tf"}} + +{{ .SchemaMarkdown | trimspace }} \ No newline at end of file diff --git a/templates/resources/config.md.tmpl b/templates/resources/config.md.tmpl new file mode 100644 index 000000000..74a68bd75 --- /dev/null +++ b/templates/resources/config.md.tmpl @@ -0,0 +1,63 @@ +--- +# generated by https://github.com/hashicorp/terraform-plugin-docs +page_title: "{{.Type}} {{.Name}} - {{.ProviderName}}" +subcategory: "" +description: |- +{{ .Description | plainmarkdown | trimspace | prefixlines " " }} +--- + +# {{.Type}} ({{.Name}}) + +{{ .Description | trimspace }} + +## Example Usage + +### Basic + +{{tffile "examples/resources/docker_config/resource-basic.tf"}} + +### Advanced +#### Dynamically set config with a template +In this example you can use the `${var.foo_port}` variable to dynamically +set the `${port}` variable in the `foo.configs.json.tpl` template and create +the data of the `foo_config` with the help of the `base64encode` interpolation +function. + +The file `foo.config.json.tpl` has the following content: + +{{codefile "gojson" "examples/resources/docker_config/foo.config.json.tpl" }} + +and the resource uses it as follows: + +{{tffile "examples/resources/docker_config/resource-advanced.tf"}} + +#### Update config with no downtime +To update a `config`, Terraform will destroy the existing resource and create a replacement. +To effectively use a `docker_config` resource with a `docker_service` resource, it's recommended + to specify `create_before_destroy` in a `lifecycle` block. Provide a unique `name` attribute, +for example with one of the interpolation functions `uuid` or `timestamp` as shown +in the example below. The reason is this [issue](https://github.com/moby/moby/issues/35803). + +{{tffile "examples/resources/docker_config/resource-no-downtime.tf"}} + +{{ .SchemaMarkdown | trimspace }} + +## Import + +Import is supported using the following syntax by providing the `id`: + +{{codefile "shell" "examples/resources/docker_config/import.sh" }} + +### Example + +Assuming you created a `config` as follows + +{{codefile "shell" "examples/resources/docker_config/import-create.sh" }} + +you provide the definition for the resource as follows + +{{tffile "examples/resources/docker_config/import-resource.tf" }} + +then the import command is as follows + +{{codefile "shell" "examples/resources/docker_config/import-resource.sh" }} \ No newline at end of file diff --git a/templates/resources/container.md.tmpl b/templates/resources/container.md.tmpl new file mode 100644 index 000000000..4bc4863b8 --- /dev/null +++ b/templates/resources/container.md.tmpl @@ -0,0 +1,37 @@ +--- +# generated by https://github.com/hashicorp/terraform-plugin-docs +page_title: "{{.Type}} {{.Name}} - {{.ProviderName}}" +subcategory: "" +description: |- +{{ .Description | plainmarkdown | trimspace | prefixlines " " }} +--- + +# {{.Type}} ({{.Name}}) + +{{ .Description | trimspace }} + +## Example Usage + +{{tffile "examples/resources/docker_container/resource.tf"}} + +{{ .SchemaMarkdown | trimspace }} + +## Import + +Import is supported using the following syntax by providing the `id`: + +{{codefile "shell" "examples/resources/docker_container/import.sh" }} + +### Example + +Assuming you created a `container` as follows + +{{codefile "shell" "examples/resources/docker_container/import-create.sh" }} + +you provide the definition for the resource as follows + +{{tffile "examples/resources/docker_container/import-resource.tf" }} + +then the import command is as follows + +{{codefile "shell" "examples/resources/docker_container/import-resource.sh" }} \ No newline at end of file diff --git a/templates/resources/image.md.tmpl b/templates/resources/image.md.tmpl new file mode 100644 index 000000000..0418fb87c --- /dev/null +++ b/templates/resources/image.md.tmpl @@ -0,0 +1,36 @@ +--- +# generated by https://github.com/hashicorp/terraform-plugin-docs +page_title: "{{.Type}} {{.Name}} - {{.ProviderName}}" +subcategory: "" +description: |- +{{ .Description | plainmarkdown | trimspace | prefixlines " " }} +--- + +# {{.Type}} ({{.Name}}) + +{{ .Description | trimspace }} + +## Example Usage + +### Basic + +Finds and downloads the latest `ubuntu:precise` image but does not check +for further updates of the image + +{{tffile "examples/resources/docker_image/resource.tf"}} + +### Dynamic updates + +To be able to update an update dynamically when the `sha256` sum changes, +you need to use it in combination with `docker_registry_image` as follows: + +{{tffile "examples/resources/docker_image/resource-dynamic.tf"}} + +### Build + +You can also use the resource to build and image. +In thid case the image "zoo" and "zoo:develop" are built. + +{{tffile "examples/resources/docker_image/resource-build.tf"}} + +{{ .SchemaMarkdown | trimspace }} \ No newline at end of file diff --git a/templates/resources/network.md.tmpl b/templates/resources/network.md.tmpl new file mode 100644 index 000000000..47d51b694 --- /dev/null +++ b/templates/resources/network.md.tmpl @@ -0,0 +1,37 @@ +--- +# generated by https://github.com/hashicorp/terraform-plugin-docs +page_title: "{{.Type}} {{.Name}} - {{.ProviderName}}" +subcategory: "" +description: |- +{{ .Description | plainmarkdown | trimspace | prefixlines " " }} +--- + +# {{.Type}} ({{.Name}}) + +{{ .Description | trimspace }} + +## Example Usage + +{{tffile "examples/resources/docker_network/resource.tf"}} + +{{ .SchemaMarkdown | trimspace }} + +## Import + +Import is supported using the following syntax by providing the `id`: + +{{codefile "shell" "examples/resources/docker_network/import.sh" }} + +### Example + +Assuming you created a `network` as follows + +{{codefile "shell" "examples/resources/docker_network/import-create.sh" }} + +you provide the definition for the resource as follows + +{{tffile "examples/resources/docker_network/import-resource.tf" }} + +then the import command is as follows + +{{codefile "shell" "examples/resources/docker_network/import-resource.sh" }} \ No newline at end of file diff --git a/templates/resources/plugin.md.tmpl b/templates/resources/plugin.md.tmpl new file mode 100644 index 000000000..f6126c68d --- /dev/null +++ b/templates/resources/plugin.md.tmpl @@ -0,0 +1,23 @@ +--- +# generated by https://github.com/hashicorp/terraform-plugin-docs +page_title: "{{.Type}} {{.Name}} - {{.ProviderName}}" +subcategory: "" +description: |- +{{ .Description | plainmarkdown | trimspace | prefixlines " " }} +--- + +# {{.Type}} ({{.Name}}) + +{{ .Description | trimspace }} + +## Example Usage + +{{tffile "examples/resources/docker_plugin/resource.tf"}} + +{{ .SchemaMarkdown | trimspace }} + +## Import + +Import is supported using the following syntax: + +{{codefile "shell" "examples/resources/docker_plugin/import.sh" }} \ No newline at end of file diff --git a/templates/resources/registry_image.md.tmpl b/templates/resources/registry_image.md.tmpl new file mode 100644 index 000000000..8b807b13f --- /dev/null +++ b/templates/resources/registry_image.md.tmpl @@ -0,0 +1,17 @@ +--- +# generated by https://github.com/hashicorp/terraform-plugin-docs +page_title: "{{.Type}} {{.Name}} - {{.ProviderName}}" +subcategory: "" +description: |- +{{ .Description | plainmarkdown | trimspace | prefixlines " " }} +--- + +# {{.Type}} ({{.Name}}) + +{{ .Description | trimspace }} + +## Example Usage + +{{tffile "examples/resources/docker_registry_image/resource.tf"}} + +{{ .SchemaMarkdown | trimspace }} \ No newline at end of file diff --git a/templates/resources/secret.md.tmpl b/templates/resources/secret.md.tmpl new file mode 100644 index 000000000..8d55b7e7b --- /dev/null +++ b/templates/resources/secret.md.tmpl @@ -0,0 +1,34 @@ +--- +# generated by https://github.com/hashicorp/terraform-plugin-docs +page_title: "{{.Type}} {{.Name}} - {{.ProviderName}}" +subcategory: "" +description: |- +{{ .Description | plainmarkdown | trimspace | prefixlines " " }} +--- + +# {{.Type}} ({{.Name}}) + +{{ .Description | trimspace }} + +## Example Usage + +### Basic + +{{tffile "examples/resources/docker_secret/resource-basic.tf"}} + +### Update secret with no downtime +To update a `secret`, Terraform will destroy the existing resource and create a replacement. +To effectively use a `docker_secret` resource with a `docker_service` resource, +it's recommended to specify `create_before_destroy` in a `lifecycle` block. Provide a unique `name` attribute, for example +with one of the interpolation functions `uuid` or `timestamp` as shown +in the example below. The reason is [moby-35803](https://github.com/moby/moby/issues/35803). + +{{tffile "examples/resources/docker_secret/resource-no-downtime.tf"}} + +{{ .SchemaMarkdown | trimspace }} + +## Import + +Import is supported using the following syntax: + +{{codefile "shell" "examples/resources/docker_secret/import.sh" }} \ No newline at end of file diff --git a/templates/resources/service.md.tmpl b/templates/resources/service.md.tmpl new file mode 100644 index 000000000..04c7cf667 --- /dev/null +++ b/templates/resources/service.md.tmpl @@ -0,0 +1,57 @@ +--- +# generated by https://github.com/hashicorp/terraform-plugin-docs +page_title: "{{.Type}} {{.Name}} - {{.ProviderName}}" +subcategory: "" +description: |- +{{ .Description | plainmarkdown | trimspace | prefixlines " " }} +--- + +# {{.Type}} ({{.Name}}) + +{{ .Description | trimspace }} + +## Example Usage + +### Basic + +The following configuration starts a Docker Service with + +- the given image, +- 1 replica +- exposes the port `8080` in `vip` mode to the host machine +- moreover, uses the `container` runtime + +{{tffile "examples/resources/docker_service/resource-basic.tf"}} + +The following command is the equivalent: + +{{codefile "shell" "examples/resources/docker_service/resource-basic-create.sh" }} + +### Advanced + +The following configuration shows the full capabilities of a Docker Service, +with a `volume`, `config`, `secret` and `network` + +{{tffile "examples/resources/docker_service/resource-advanced.tf"}} + +{{ .SchemaMarkdown | trimspace }} + +## Import + +Import is supported using the following syntax by providing the `id`: + +{{codefile "shell" "examples/resources/docker_service/import.sh" }} + +### Example + +Assuming you created a `service` as follows + +{{codefile "shell" "examples/resources/docker_service/import-create.sh" }} + +you provide the definition for the resource as follows + +{{tffile "examples/resources/docker_service/import-resource.tf" }} + +then the import command is as follows + +{{codefile "shell" "examples/resources/docker_service/import-resource.sh" }} \ No newline at end of file diff --git a/templates/resources/volume.md.tmpl b/templates/resources/volume.md.tmpl new file mode 100644 index 000000000..16e274638 --- /dev/null +++ b/templates/resources/volume.md.tmpl @@ -0,0 +1,37 @@ +--- +# generated by https://github.com/hashicorp/terraform-plugin-docs +page_title: "{{.Type}} {{.Name}} - {{.ProviderName}}" +subcategory: "" +description: |- +{{ .Description | plainmarkdown | trimspace | prefixlines " " }} +--- + +# {{.Type}} ({{.Name}}) + +{{ .Description | trimspace }} + +## Example Usage + +{{tffile "examples/resources/docker_volume/resource.tf"}} + +{{ .SchemaMarkdown | trimspace }} + +## Import + +Import is supported using the following syntax by providing the `id`: + +{{codefile "shell" "examples/resources/docker_volume/import.sh" }} + +### Example + +Assuming you created a `volume` as follows + +{{codefile "shell" "examples/resources/docker_volume/import-create.sh" }} + +you provide the definition for the resource as follows + +{{tffile "examples/resources/docker_volume/import-resource.tf" }} + +then the import command is as follows + +{{codefile "shell" "examples/resources/docker_volume/import-resource.sh" }} \ No newline at end of file diff --git a/tools/go.mod b/tools/go.mod index 47a051ff0..4416e6e7b 100644 --- a/tools/go.mod +++ b/tools/go.mod @@ -5,5 +5,6 @@ go 1.16 require ( github.com/client9/misspell v0.3.4 github.com/golangci/golangci-lint v1.40.0 + github.com/hashicorp/terraform-plugin-docs v0.4.0 github.com/katbyte/terrafmt v0.3.0 ) diff --git a/tools/go.sum b/tools/go.sum index 33382d0e1..0f0db5cae 100644 --- a/tools/go.sum +++ b/tools/go.sum @@ -43,11 +43,13 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03 github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24 h1:sHglBQTwgx+rWPdisA5ynNEsoARbiCBOyGcJM4/OzsM= github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs= +github.com/Masterminds/goutils v1.1.0 h1:zukEsf/1JZwCMgHiK3GZftabmxiCw4apj3a28RPBiVg= github.com/Masterminds/goutils v1.1.0/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= github.com/Masterminds/semver v1.4.2/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= github.com/Masterminds/sprig v2.15.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= +github.com/Masterminds/sprig v2.22.0+incompatible h1:z4yfnGrZ7netVz+0EDJ0Wi+5VZCSYp4Z0m2dk6cEM60= github.com/Masterminds/sprig v2.22.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/OpenPeeDeeP/depguard v1.0.1 h1:VlW4R6jmBIv3/u1JNlawEvJMM4J+dPORPaZasQee8Us= @@ -56,7 +58,6 @@ github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d/go.mod h1:3eOhrU github.com/agext/levenshtein v1.2.1/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558= github.com/agext/levenshtein v1.2.3 h1:YB2fHEn0UJagG8T1rrWknE3ZQzWM06O8AMAatNn7lmo= github.com/agext/levenshtein v1.2.3/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558= -github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7 h1:uSoVVbwJiQipAclBbw+8quDsfcvFjOpI5iCf4p/cqCs= github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= @@ -68,7 +69,6 @@ github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNg github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= github.com/andybalholm/brotli v1.0.0/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y= github.com/andybalholm/crlf v0.0.0-20171020200849-670099aa064f/go.mod h1:k8feO4+kXDxro6ErPXBRTJ/ro2mf0SsFG8s7doP9kJE= -github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239 h1:kFOfPq6dUM1hTo4JG6LR5AXSUEsOjtdm0kw0FtQtMJA= github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6/go.mod h1:V8iCPQYkqmusNa815XgQio277wI47sdRh1dUOLdyC6Q= github.com/aokoli/goutils v1.0.1/go.mod h1:SijmP0QR8LtwsmDs8Yii5Z/S4trXFGFC2oO5g9DP+DQ= @@ -80,8 +80,8 @@ github.com/apparentlymart/go-textseg/v12 v12.0.0/go.mod h1:S/4uRK2UtaQttw1GenVJE github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= +github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310 h1:BUAU3CGlLvorLI26FmByPp2eC2qla6E1Tw+scpcg/to= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/ashanbrown/forbidigo v1.1.0 h1:SJOPJyqsrVL3CvR0veFZFmIM0fXS/Kvyikqvfphd0Z4= github.com/ashanbrown/forbidigo v1.1.0/go.mod h1:vVW7PEdqEFqapJe95xHkTfB1+XvZXBFg8t0sG2FIxmI= @@ -98,6 +98,7 @@ github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d h1:xDfNPAt8lFiC1UJrqV3uuy861HCTo708pDMbjHHdCas= github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ00z/TKoufEY6K/a0k6AhaJrQKdFe6OfVXsa4= +github.com/bgentry/speakeasy v0.1.0 h1:ByYyxL9InA1OWqxJqqp2A5pYHUrCiAL6K3J+LKSsQkY= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= github.com/bkielbasa/cyclop v1.2.0 h1:7Jmnh0yL2DjKfw28p86YTd/B4lRGcNuu12sKE35sM7A= @@ -166,7 +167,6 @@ github.com/fatih/color v1.10.0 h1:s36xzo75JdqLaaWoiEHk767eHiwo0598uUxyfiPkDsg= github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= github.com/fatih/structtag v1.2.0 h1:/OdNE99OxoI/PqaW/SuSK9uxxT3f/tcSZgon/ssNSx4= github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94= -github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568 h1:BHsljHzVlRcyQhjrss6TZTdY2VfCqZPbv5k3iBFa2ZQ= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= @@ -175,7 +175,6 @@ github.com/fullstorydev/grpcurl v1.6.0/go.mod h1:ZQ+ayqbKMJNhzLmbpCiurTVlaK2M/3n github.com/fzipp/gocyclo v0.3.1 h1:A9UeX3HJSXTBzvHzhqoYVuE0eAhe+aM8XBCCwsPMZOc= github.com/fzipp/gocyclo v0.3.1/go.mod h1:DJHO6AUmbdqj2ET4Z9iArSuwWgYDRryYt2wASxc7x3E= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/gliderlabs/ssh v0.2.2 h1:6zsha5zo/TWhRhwqCD3+EarCAgZ2yN28ipRnGPnwkI0= github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= github.com/go-critic/go-critic v0.5.6 h1:siUR1+322iVikWXoV75I1YRfNaC/yaLzhdF9Zwd8Tus= github.com/go-critic/go-critic v0.5.6/go.mod h1:cVjj0DfqewQVIlIAGexPCaGaZDAqGE29PYDDADIVNEo= @@ -183,7 +182,6 @@ github.com/go-git/gcfg v1.5.0 h1:Q5ViNfGF8zFgyJWPqYwA7qGFoMTEiBmdlkcfRmpIMa4= github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E= github.com/go-git/go-billy/v5 v5.0.0 h1:7NQHvd9FVid8VL4qVUMm8XifBK+2xCoZ2lSk0agRrHM= github.com/go-git/go-billy/v5 v5.0.0/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= -github.com/go-git/go-git-fixtures/v4 v4.0.1 h1:q+IFMfLx200Q3scvt2hN79JsEzy4AmBTp/pqnefH+Bc= github.com/go-git/go-git-fixtures/v4 v4.0.1/go.mod h1:m+ICp2rF3jDhFgEZ/8yziagdT1C+ZpZcrJjappBCDSw= github.com/go-git/go-git/v5 v5.1.0 h1:HxJn9g/E7eYvKW3Fm7Jt4ee8LXfPOm/H1cdDu8vEssk= github.com/go-git/go-git/v5 v5.1.0/go.mod h1:ZKfuPUoY1ZqIG4QG9BDBh3G4gLM5zvPuSJAozQrZuyM= @@ -306,6 +304,8 @@ github.com/google/trillian v1.3.11/go.mod h1:0tPraVHrSDkA3BO6vKX67zgLXs6SsOAbHEi github.com/google/uuid v0.0.0-20161128191214-064e2069ce9c/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5 h1:sjZBwGj9Jlw33ImPtvFviGYvseOtDM7hkSKB7+Tv3SM= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= @@ -383,18 +383,25 @@ github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= -github.com/hashicorp/terraform-exec v0.11.1-0.20201127183041-b76393f0a6fb h1:V1qv2qqING0eIa6pQjGSvYgYbol+fDs3zEl6QTFn86A= github.com/hashicorp/terraform-exec v0.11.1-0.20201127183041-b76393f0a6fb/go.mod h1:CDlJgH0jMqygOIbTLk2THPHyp47zSaIX6pM09cyeNks= -github.com/hashicorp/terraform-json v0.5.0 h1:7TV3/F3y7QVSuN4r9BEXqnWqrAyeOtON8f0wvREtyzs= +github.com/hashicorp/terraform-exec v0.12.0 h1:Tb1VC2gqArl9EJziJjoazep2MyxMk00tnNKV/rgMba0= +github.com/hashicorp/terraform-exec v0.12.0/go.mod h1:SGhto91bVRlgXQWcJ5znSz+29UZIa8kpBbkGwQ+g9E8= github.com/hashicorp/terraform-json v0.5.0/go.mod h1:eAbqb4w0pSlRmdvl8fOyHAi/+8jnkVYN28gJkSJrLhU= +github.com/hashicorp/terraform-json v0.8.0 h1:XObQ3PgqU52YLQKEaJ08QtUshAfN3yu4u8ebSW0vztc= +github.com/hashicorp/terraform-json v0.8.0/go.mod h1:3defM4kkMfttwiE7VakJDwCd4R+umhSQnvJwORXbprE= +github.com/hashicorp/terraform-plugin-docs v0.4.0 h1:xJIXsMzBFwBvC1zcjoNz743GL2tNEfYFFU9+Hjp4Uek= +github.com/hashicorp/terraform-plugin-docs v0.4.0/go.mod h1:fKj/V3t45tiXpSlUms/0G4OrBayyWpbUJ4WtLjBkINU= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/huandu/xstrings v1.0.0/go.mod h1:4qWG/gcEcfX4z/mBDHJ++3ReCw9ibxbsNJbcucJdbSo= github.com/huandu/xstrings v1.2.0/go.mod h1:DvyZB1rfVYsBIigL8HwpZgxHwXozlTgGqn63UyNX5k4= +github.com/huandu/xstrings v1.3.2 h1:L18LIDzqlW6xN2rEkpdV8+oL/IXWJ1APd+vsdYy4Wdw= +github.com/huandu/xstrings v1.3.2/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/imdario/mergo v0.3.4/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/imdario/mergo v0.3.9 h1:UauaLniWCFHWd+Jp9oCEkTBj8VO/9DKg3PV3VCNMDIg= github.com/imdario/mergo v0.3.9/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/imdario/mergo v0.3.11 h1:3tnifQM4i+fbajXKBHXWEH+KvNHqojZ778UH75j3bGA= +github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= @@ -509,6 +516,9 @@ github.com/miekg/pkcs11 v1.0.2/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WT github.com/miekg/pkcs11 v1.0.3/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= github.com/mitchellh/cli v1.1.1/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= +github.com/mitchellh/cli v1.1.2 h1:PvH+lL2B7IQ101xQL63Of8yFS2y+aDlsFcsqNc+u/Kw= +github.com/mitchellh/cli v1.1.2/go.mod h1:6iaV0fGdElS6dPBx0EApTxHrcWvmJphyh2n8YBLPPZ4= +github.com/mitchellh/copystructure v1.0.0 h1:Laisrj+bAB6b/yJwB5Bt3ITZhGJdqmxquMKeZ+mmkFQ= github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= @@ -526,6 +536,7 @@ github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh github.com/mitchellh/mapstructure v1.3.3 h1:SzB1nHZ2Xi+17FP0zVQBHIZqvwRN9408fJO8h+eeNA8= github.com/mitchellh/mapstructure v1.3.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/mitchellh/reflectwalk v1.0.1 h1:FVzMWA5RllMAKIdUSC8mdWo3XtwoecrH79BY70sEEpE= github.com/mitchellh/reflectwalk v1.0.1/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -587,6 +598,7 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/polyfloyd/go-errorlint v0.0.0-20210418123303-74da32850375 h1:uuOfAQo7em74dKh41UzjlQ6dXmE9wYxjvUcfg2EHTDw= github.com/polyfloyd/go-errorlint v0.0.0-20210418123303-74da32850375/go.mod h1:wi9BfjxjF/bwiZ701TzmfKu6UKC357IOAtNr0Td0Lvw= +github.com/posener/complete v1.1.1 h1:ccV59UEOTzVDnDUEFdT95ZzHVZ+5+158q8+SJb2QV5w= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= @@ -627,6 +639,8 @@ github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR github.com/rogpeppe/go-internal v1.6.2/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= +github.com/russross/blackfriday v1.6.0 h1:KqfZb0pUVN2lYqZUYRddxF4OR8ZMURnJIG5Y3VRLtww= +github.com/russross/blackfriday v1.6.0/go.mod h1:ti0ldHuxg49ri4ksnFxlkCfN+hvslNlmVHqNRXXJNAY= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryancurrah/gomodguard v1.2.0 h1:YWfhGOrXwLGiqcC/u5EqG6YeS8nh+1fw0HEc85CVZro= github.com/ryancurrah/gomodguard v1.2.0/go.mod h1:rNqbC4TOIdUDcVMSIpNNAzTbzXAZa6W5lnUepvuMMgQ= @@ -737,6 +751,8 @@ github.com/valyala/quicktemplate v1.6.3/go.mod h1:fwPzK2fHuYEODzJ9pkw0ipCPNHZ2tD github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio= github.com/viki-org/dnscache v0.0.0-20130720023526-c70c1f23c5d8/go.mod h1:dniwbG03GafCjFohMDmz6Zc6oCuiqgH6tGNyXTkHzXE= github.com/vmihailenco/msgpack v3.3.3+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk= +github.com/vmihailenco/msgpack/v4 v4.3.12/go.mod h1:gborTTJjAo/GWTqqRjrLCn9pgNN+NXzzngzBKDPIqw4= +github.com/vmihailenco/tagparser v0.1.1/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI= github.com/xanzy/ssh-agent v0.2.1 h1:TCbipTQL2JiiCprBWx9frJ2eJlCYT00NmctrHxVAr70= github.com/xanzy/ssh-agent v0.2.1/go.mod h1:mLlQY/MoOhWBj+gOGMQkOeiEvkx+8pJSI+0Bx9h2kr4= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= @@ -753,8 +769,9 @@ github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9dec github.com/yuin/goldmark v1.3.3/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/zclconf/go-cty v1.2.0/go.mod h1:hOPWgoHbaTUnI5k4D2ld+GRpFJSCe6bCM7m1q/N4PQ8= github.com/zclconf/go-cty v1.2.1/go.mod h1:hOPWgoHbaTUnI5k4D2ld+GRpFJSCe6bCM7m1q/N4PQ8= -github.com/zclconf/go-cty v1.5.1 h1:oALUZX+aJeEBUe2a1+uD2+UTaYfEjnKFDEMRydkGvWE= github.com/zclconf/go-cty v1.5.1/go.mod h1:nHzOclRkoj++EU9ZjSrZvRG0BXIWt8c7loYc0qXAFGQ= +github.com/zclconf/go-cty v1.7.1 h1:AvsC01GMhMLFL8CgEYdHGM+yLnnDOwhPAYcgTkeF0Gw= +github.com/zclconf/go-cty v1.7.1/go.mod h1:VDR4+I79ubFBGm1uJac1226K5yANQFHeauxPBoP54+o= github.com/zclconf/go-cty-debug v0.0.0-20191215020915-b22d67c1ba0b/go.mod h1:ZRKQfBXbGkpdV6QMzT3rU1kSTAnfu1dO8dPKjYprgj8= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= @@ -789,6 +806,7 @@ golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83 h1:/ZScEX8SfEmUGRHs0gxpqteO5nfNW6axyZbBdw9A12g= golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= @@ -947,7 +965,6 @@ golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57 h1:F5Gozwx4I1xtr/sr/8CFbb57iKi3297KFs0QDbGN60A= golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1 h1:v+OssWQX+hTHEmOBgwxdZxK4zHq3yOs8F9J7mk0PY8E= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= diff --git a/tools/main.go b/tools/main.go index 93f4b51c3..1aa749022 100644 --- a/tools/main.go +++ b/tools/main.go @@ -5,5 +5,6 @@ package main import ( _ "github.com/client9/misspell/cmd/misspell" _ "github.com/golangci/golangci-lint/cmd/golangci-lint" + _ "github.com/hashicorp/terraform-plugin-docs/cmd/tfplugindocs" _ "github.com/katbyte/terrafmt" ) diff --git a/website/docker.erb b/website/docker.erb deleted file mode 100644 index f8d92dc88..000000000 --- a/website/docker.erb +++ /dev/null @@ -1,67 +0,0 @@ -<% wrap_layout :inner do %> - <% content_for :sidebar do %> - - <% end %> - - <%= yield %> -<% end %> diff --git a/website/docs/d/docker_network.html.markdown b/website/docs/d/docker_network.html.markdown deleted file mode 100644 index 9ec24d8c2..000000000 --- a/website/docs/d/docker_network.html.markdown +++ /dev/null @@ -1,42 +0,0 @@ ---- -layout: "docker" -page_title: "Docker: docker_network" -sidebar_current: "docs-docker-datasource-docker-network" -description: |- - `docker_network` provides details about a specific Docker Network. ---- - -# docker\_network - -Finds a specific docker network and returns information about it. - -## Example Usage - -```hcl -data "docker_network" "main" { - name = "main" -} -``` - -## Argument Reference - -The following arguments are supported: - -* `name` - (Optional, string) The name of the Docker network. -* `id` - (Optional, string) The id of the Docker network. - -## Attributes Reference - -The following attributes are exported in addition to the above configuration: - -* `driver` - (Optional, string) The driver of the Docker network. - Possible values are `bridge`, `host`, `overlay`, `macvlan`. - See [docker docs][networkdocs] for more details. -* `options` - (Optional, map) Only available with bridge networks. See - [docker docs][bridgeoptionsdocs] for more details. -* `internal` (Optional, bool) Boolean flag for whether the network is internal. -* `ipam_config` (Optional, map) See [IPAM](#ipam) below for details. -* `scope` (Optional, string) Scope of the network. One of `swarm`, `global`, or `local`. - -[networkdocs] https://docs.docker.com/network/#network-drivers -[bridgeoptionsdocs] https://docs.docker.com/engine/reference/commandline/network_create/#bridge-driver-options diff --git a/website/docs/d/plugin.html.markdown b/website/docs/d/plugin.html.markdown deleted file mode 100644 index 2fa731a0c..000000000 --- a/website/docs/d/plugin.html.markdown +++ /dev/null @@ -1,37 +0,0 @@ ---- -layout: "docker" -page_title: "Docker: docker_plugin" -sidebar_current: "docs-docker-datasource-plugin" -description: |- - Reads the local Docker pluign. ---- - -# docker\_plugin - -Reads the local Docker plugin. The plugin must be installed locally. - -## Example Usage - -```hcl -data "docker_plugin" "sample-volume-plugin" { - alias = "sample-volume-plugin:latest" -} -``` - -## Argument Reference - -The following arguments are supported: - -* `id` - (Optional, string) The Docker plugin ID. -* `alias` - (Optional, string) The alias of the Docker plugin. - -One of `id` or `alias` must be assigned. - -## Attributes Reference - -The following attributes are exported in addition to the above configuration: - -* `plugin_reference` - (Optional, string, Forces new resource) The plugin reference. -* `disabled` - (Optional, boolean) If true, the plugin is disabled. -* `grant_all_permissions` - (Optional, boolean) If true, grant all permissions necessary to run the plugin. -* `args` - (Optional, set of string). Currently, only environment variables are supported. diff --git a/website/docs/d/registry_image.html.markdown b/website/docs/d/registry_image.html.markdown deleted file mode 100644 index 662fd014f..000000000 --- a/website/docs/d/registry_image.html.markdown +++ /dev/null @@ -1,38 +0,0 @@ ---- -layout: "docker" -page_title: "Docker: docker_registry_image" -sidebar_current: "docs-docker-datasource-registry-image" -description: |- - Finds the latest available sha256 digest for a docker image/tag from a registry. ---- - -# docker\_registry\_image - -Reads the image metadata from a Docker Registry. Used in conjunction with the -[docker\_image](/docs/providers/docker/r/image.html) resource to keep an image up -to date on the latest available version of the tag. - -## Example Usage - -```hcl -data "docker_registry_image" "ubuntu" { - name = "ubuntu:precise" -} - -resource "docker_image" "ubuntu" { - name = data.docker_registry_image.ubuntu.name - pull_triggers = [data.docker_registry_image.ubuntu.sha256_digest] -} -``` - -## Argument Reference - -The following arguments are supported: - -* `name` - (Required, string) The name of the Docker image, including any tags. e.g. `alpine:latest` - -## Attributes Reference - -The following attributes are exported in addition to the above configuration: - -* `sha256_digest` (string) - The content digest of the image, as stored on the registry. diff --git a/website/docs/index.html.markdown b/website/docs/index.html.markdown deleted file mode 100644 index 172929bb8..000000000 --- a/website/docs/index.html.markdown +++ /dev/null @@ -1,171 +0,0 @@ ---- -layout: "docker" -page_title: "Provider: Docker" -sidebar_current: "docs-docker-index" -description: |- - The Docker provider is used to interact with Docker containers and images. ---- - -# Docker Provider - -The Docker provider is used to interact with Docker containers and images. -It uses the Docker API to manage the lifecycle of Docker containers. Because -the Docker provider uses the Docker API, it is immediately compatible not -only with single server Docker but Swarm and any additional Docker-compatible -API hosts. - -Use the navigation to the left to read about the available resources. - -## Example Usage - -```hcl -# Configure the Docker provider -provider "docker" { - host = "tcp://127.0.0.1:2376/" -} - -# Create a container -resource "docker_container" "foo" { - image = docker_image.ubuntu.latest - name = "foo" -} - -resource "docker_image" "ubuntu" { - name = "ubuntu:latest" -} -``` - --> **Note** -You can also use the `ssh` protocol to connect to the docker host on a remote machine. -The configuration would look as follows: - -```hcl -provider "docker" { - host = "ssh://user@remote-host:22" -} -``` - -## Registry Credentials - -Registry credentials can be provided on a per-registry basis with the `registry_auth` -field, passing either a config file or the username/password directly. - --> **Note** -The location of the config file is on the machine terraform runs on, nevertheless if the specified docker host is on another machine. - -``` hcl -provider "docker" { - host = "tcp://localhost:2376" - - registry_auth { - address = "registry.hub.docker.com" - config_file = pathexpand("~/.docker/config.json") - } - - registry_auth { - address = "registry.my.company.com" - config_file_content = var.plain_content_of_config_file - } - - registry_auth { - address = "quay.io:8181" - username = "someuser" - password = "somepass" - } -} - -data "docker_registry_image" "quay" { - name = "myorg/privateimage" -} - -data "docker_registry_image" "quay" { - name = "quay.io:8181/myorg/privateimage" -} -``` - --> **Note** -When passing in a config file either the corresponding `auth` string of the repository is read or the os specific -credential helpers (see [here](https://github.com/docker/docker-credential-helpers#available-programs)) are -used to retrieve the authentication credentials. - -You can still use the environment variables `DOCKER_REGISTRY_USER` and `DOCKER_REGISTRY_PASS`. - -An example content of the file `~/.docker/config.json` on macOS may look like follows: - -```json -{ - "auths": { - "repo.mycompany:8181": { - "auth": "dXNlcjpwYXNz=" - }, - "otherrepo.other-company:8181": { - - } - }, - "credsStore" : "osxkeychain" -} -``` - -## Certificate information - -Specify certificate information either with a directory or -directly with the content of the files for connecting to the Docker host via TLS. - -```hcl -provider "docker" { - host = "tcp://your-host-ip:2376/" - - # -> specify either - cert_path = pathexpand("~/.docker") - - # -> or the following - ca_material = file(pathexpand("~/.docker/ca.pem")) # this can be omitted - cert_material = file(pathexpand("~/.docker/cert.pem")) - key_material = file(pathexpand("~/.docker/key.pem")) -} -``` - -## Argument Reference - -The following arguments are supported: - -* `host` - (Required) This is the address to the Docker host. If this is - blank, the `DOCKER_HOST` environment variable will also be read. - -* `cert_path` - (Optional) Path to a directory with certificate information - for connecting to the Docker host via TLS. It is expected that the 3 files `{ca, cert, key}.pem` - are present in the path. If the path is blank, the `DOCKER_CERT_PATH` will also be checked. - -* `ca_material`, `cert_material`, `key_material`, - (Optional) Content of `ca.pem`, `cert.pem`, and `key.pem` files - for TLS authentication. Cannot be used together with `cert_path`. If `ca_material` is omitted - the client does not check the servers certificate chain and host name. - -* `registry_auth` - (Optional) A block specifying the credentials for a target - v2 Docker registry. - - * `address` - (Required) The address of the registry. - - * `username` - (Optional) The username to use for authenticating to the registry. - Cannot be used with the `config_file` option. If this is blank, the `DOCKER_REGISTRY_USER` - will also be checked. - - * `password` - (Optional) The password to use for authenticating to the registry. - Cannot be used with the `config_file` option. If this is blank, the `DOCKER_REGISTRY_PASS` - will also be checked. - - * `config_file` - (Optional) The path to a config file containing credentials for - authenticating to the registry. Cannot be used with the `username`/`password` or `config_file_content` options. - If this is blank, the `DOCKER_CONFIG` will also be checked. - - * `config_file_content` - (Optional) The content of a config file as string containing credentials for - authenticating to the registry. Cannot be used with the `username`/`password` or `config_file` options. - - - -~> **NOTE on Certificates and `docker-machine`:** As per [Docker Remote API -documentation](https://docs.docker.com/engine/reference/api/docker_remote_api/), -in any docker-machine environment, the Docker daemon uses an encrypted TCP -socket (TLS) and requires `cert_path` for a successful connection. As an alternative, -if using `docker-machine`, run `eval $(docker-machine env )` prior -to running Terraform, and the host and certificate path will be extracted from -the environment. diff --git a/website/docs/r/config.html.markdown b/website/docs/r/config.html.markdown deleted file mode 100644 index fce54b0fc..000000000 --- a/website/docs/r/config.html.markdown +++ /dev/null @@ -1,108 +0,0 @@ ---- -layout: "docker" -page_title: "Docker: docker_config" -sidebar_current: "docs-docker-resource-config" -description: |- - Manages the configs of a Docker service in a swarm. ---- - -# docker\_config - -Manages the configuration of a Docker service in a swarm. - -## Example Usage - -## Basic -```hcl -# Creates a config -resource "docker_config" "foo_config" { - name = "foo_config" - data = "ewogICJzZXJIfQo=" -} -``` - -### Advanced -#### Dynamically set config with a template -In this example you can use the `${var.foo_port}` variable to dynamically -set the `${port}` variable in the `foo.configs.json.tpl` template and create -the data of the `foo_config` with the help of the `base64encode` interpolation -function. - -File `foo.config.json.tpl` - -```json -{ - "server": { - "public_port": ${port} - } -} -``` - -File `main.tf` - -```hcl -# Creates the template in renders the variable -data "template_file" "foo_config_tpl" { - template = file("foo.config.json.tpl") - - vars { - port = var.foo_port - } -} - -# Creates the config -resource "docker_config" "foo_config" { - name = "foo_config" - data = base64encode(data.template_file.foo_config_tpl.rendered) -} -``` - -#### Update config with no downtime -To update a `config`, Terraform will destroy the existing resource and create a replacement. To effectively use a `docker_config` resource with a `docker_service` resource, it's recommended to specify `create_before_destroy` in a `lifecycle` block. Provide a unique `name` attribute, for example -with one of the interpolation functions `uuid` or `timestamp` as shown -in the example below. The reason is [moby-35803](https://github.com/moby/moby/issues/35803). - -```hcl -resource "docker_config" "service_config" { - name = "${var.service_name}-config-${replace(timestamp(), ":", ".")}" - data = base64encode(data.template_file.service_config_tpl.rendered) - - lifecycle { - ignore_changes = ["name"] - create_before_destroy = true - } -} - -resource "docker_service" "service" { - # ... - configs = [ - { - config_id = docker_config.service_config.id - config_name = docker_config.service_config.name - file_name = "/root/configs/configs.json" - }, - ] -} -``` - -## Argument Reference - -The following arguments are supported: - -* `name` - (Required, string) The name of the Docker config. -* `data` - (Required, string) The base64 encoded data of the config. - - -## Attributes Reference - -The following attributes are exported in addition to the above configuration: - -* `id` (string) - -## Import - -Docker config can be imported using the long id, e.g. for a config with the short id `p73jelnrme5f`: - -```sh -$ terraform import docker_config.foo $(docker config inspect -f {{.ID}} p73) -``` diff --git a/website/docs/r/container.html.markdown b/website/docs/r/container.html.markdown deleted file mode 100644 index fb029ea30..000000000 --- a/website/docs/r/container.html.markdown +++ /dev/null @@ -1,310 +0,0 @@ ---- -layout: "docker" -page_title: "Docker: docker_container" -sidebar_current: "docs-docker-resource-container" -description: |- - Manages the lifecycle of a Docker container. ---- - -# docker\_container - -Manages the lifecycle of a Docker container. - -## Example Usage - -```hcl -# Start a container -resource "docker_container" "ubuntu" { - name = "foo" - image = docker_image.ubuntu.latest -} - -# Find the latest Ubuntu precise image. -resource "docker_image" "ubuntu" { - name = "ubuntu:precise" -} -``` - -## Argument Reference - -The following arguments are supported: - -* `name` - (Required, string) The name of the Docker container. -* `image` - (Required, string) The ID of the image to back this container. - The easiest way to get this value is to use the `docker_image` resource - as is shown in the example above. - -* `command` - (Optional, list of strings) The command to use to start the - container. For example, to run `/usr/bin/myprogram -f baz.conf` set the - command to be `["/usr/bin/myprogram", "-f", "baz.conf"]`. -* `entrypoint` - (Optional, list of strings) The command to use as the - Entrypoint for the container. The Entrypoint allows you to configure a - container to run as an executable. For example, to run `/usr/bin/myprogram` - when starting a container, set the entrypoint to be - `["/usr/bin/myprogram"]`. -* `user` - (Optional, string) User used for run the first process. Format is - `user` or `user:group` which user and group can be passed literraly or - by name. -* `dns` - (Optional, set of strings) Set of DNS servers. -* `dns_opts` - (Optional, set of strings) Set of DNS options used by the DNS provider(s), see `resolv.conf` documentation for valid list of options. -* `dns_search` - (Optional, set of strings) Set of DNS search domains that are used when bare unqualified hostnames are used inside of the container. -* `env` - (Optional, set of strings) Environment variables to set. -* `labels` - (Optional, block) See [Labels](#labels-1) below for details. -* `links` - (Optional, set of strings) Set of links for link based - connectivity between containers that are running on the same host. - -~> **Warning** The --link flag is a legacy feature of Docker. It may eventually -be removed. It exposes _all_ environment variables originating from Docker to -any linked containers. This could have serious security implications if sensitive -data is stored in them. See [the docker documentation](https://docs.docker.com/network/links/) for more details. - -* `hostname` - (Optional, string) Hostname of the container. -* `domainname` - (Optional, string) Domain name of the container. -* `restart` - (Optional, string) The restart policy for the container. Must be - one of "no", "on-failure", "always", "unless-stopped". -* `max_retry_count` - (Optional, int) The maximum amount of times to an attempt - a restart when `restart` is set to "on-failure" -* `working_dir`- (Optional, string) The working directory for commands to run in -* `rm` - (Optional, boolean) If true, then the container will be automatically removed after his execution. Terraform - won't check this container after creation. -* `read_only` - (Optional, boolean) If true, the container will be started as readonly. -* `start` - (Optional, boolean) If true, then the Docker container will be - started after creation. If false, then the container is only created. -* `attach` - (Optional, boolean) If true attach to the container after its creation and waits the end of his execution. -* `logs` - (Optional, boolean) Save the container logs (`attach` must be enabled). -* `must_run` - (Optional, boolean) If true, then the Docker container will be - kept running. If false, then as long as the container exists, Terraform - assumes it is successful. -* `tty` - (Optional, boolean) if true, allocate a pseudo-tty (docker run -t) -* `stdin_open` - (Optional, boolean) if true, keep STDIN open even if not attached (docker run -i) -* `capabilities` - (Optional, block) See [Capabilities](#capabilities-1) below for details. -* `security_opts` - (Optional, set of strings) Set of string values to customize labels for MLS systems, such as SELinux. See https://docs.docker.com/engine/reference/run/#security-configuration. -* `mounts` - (Optional, set of blocks) See [Mounts](#mounts-1) below for details. -* `tmpfs` - (Optional, map) A map of container directories which should be replaced by `tmpfs mounts`, and their corresponding mount options. -* `ports` - (Optional, block) See [Ports](#ports-1) below for details. -* `host` - (Optional, block) See [Extra Hosts](#extra_hosts-1) below for - details. -* `privileged` - (Optional, boolean) Run container in privileged mode. -* `devices` - (Optional, block) See [Devices](#devices-1) below for details. -* `publish_all_ports` - (Optional, boolean) Publish all ports of the container. -* `volumes` - (Optional, block) See [Volumes](#volumes-1) below for details. -* `memory` - (Optional, int) The memory limit for the container in MBs. -* `memory_swap` - (Optional, int) The total memory limit (memory + swap) for the - container in MBs. This setting may compute to `-1` after `terraform apply` if the target host doesn't support memory swap, when that is the case docker will use a soft limitation. -* `shm_size` - (Optional, int) Size of `/dev/shm` in MBs. -* `cpu_shares` - (Optional, int) CPU shares (relative weight) for the container. -* `cpu_set` - (Optional, string) A comma-separated list or hyphen-separated range of CPUs a container can use, e.g. `0-1`. -* `log_driver` - (Optional, string) The logging driver to use for the container. - Defaults to "json-file". -* `log_opts` - (Optional, map of strings) Key/value pairs to use as options for - the logging driver. -* `network_alias` - (Optional, set of strings) Network aliases of the container for user-defined networks only. *Deprecated:* use `networks_advanced` instead. -* `network_mode` - (Optional, string) Network mode of the container. -* `networks` - (Optional, set of strings) Id of the networks in which the - container is. *Deprecated:* use `networks_advanced` instead. -* `networks_advanced` - (Optional, block) See [Networks Advanced](#networks_advanced-1) below for details. If this block has priority to the deprecated `network_alias` and `network` properties. -* `destroy_grace_seconds` - (Optional, int) If defined will attempt to stop the container before destroying. Container will be destroyed after `n` seconds or on successful stop. -* `upload` - (Optional, block) See [File Upload](#upload-1) below for details. -* `ulimit` - (Optional, block) See [Ulimits](#ulimits-1) below for - details. -* `pid_mode` - (Optional, string) The PID (Process) Namespace mode for the container. Either `container:` or `host`. -* `userns_mode` - (Optional, string) Sets the usernamespace mode for the container when usernamespace remapping option is enabled. -* `healthcheck` - (Optional, block) See [Healthcheck](#healthcheck-1) below for details. -* `sysctls` - (Optional, map) A map of kernel parameters (sysctls) to set in the container. -* `ipc_mode` - (Optional, string) IPC sharing mode for the container. Possible values are: `none`, `private`, `shareable`, `container:` or `host`. -* `group_add` - (Optional, set of strings) Add additional groups to run as. -* `init` - (Optional, bool) Configured whether an init process should be injected for this container. If unset this will default to the `dockerd` defaults. - - -#### Labels - -`labels` is a block within the configuration that can be repeated to specify -additional label name and value data to the container. Each `labels` block supports -the following: - -* `label` - (Required, string) Name of the label -* `value` (Required, string) Value of the label - -See [214](https://github.com/terraform-providers/terraform-provider-docker/issues/214#issuecomment-550128950) for Details. - - -### Capabilities - -`capabilities` is a block within the configuration that allows you to add or drop linux capabilities. For more information about what capabilities you can add and drop please visit the docker run documentation. - -* `add` - (Optional, set of strings) list of linux capabilities to add. -* `drop` - (Optional, set of strings) list of linux capabilities to drop. - -Example: - -```hcl -resource "docker_container" "ubuntu" { - name = "foo" - image = docker_image.ubuntu.latest - - capabilities { - add = ["ALL"] - drop = ["SYS_ADMIN"] - } -} -``` - - -### Mounts - -`mounts` is a block within the configuration that can be repeated to specify -the extra mount mappings for the container. Each `mounts` block is the Specification for mounts to be added to container and -supports the following: - -* `target` - (Required, string) The container path. -* `source` - (Optional, string) The mount source (e.g., a volume name, a host path) -* `type` - (Required, string) The mount type: valid values are `bind|volume|tmpfs`. -* `read_only` - (Optional, string) Whether the mount should be read-only -* `bind_options` - (Optional, map) Optional configuration for the `bind` type. - * `propagation` - (Optional, string) A propagation mode with the value. -* `volume_options` - (Optional, map) Optional configuration for the `volume` type. - * `no_copy` - (Optional, string) Whether to populate volume with data from the target. - * `labels` - (Optional, map of key/value pairs) Adding labels. - * `driver_options` - (Optional, map of key/value pairs) Options for the driver. -* `tmpfs_options` - (Optional, map) Optional configuration for the `tmpf` type. - * `size_bytes` - (Optional, int) The size for the tmpfs mount in bytes. - * `mode` - (Optional, int) The permission mode for the tmpfs mount in an integer. - - -### Ports - -`ports` is a block within the configuration that can be repeated to specify -the port mappings of the container. Each `ports` block supports -the following: - -* `internal` - (Required, int) Port within the container. -* `external` - (Optional, int) Port exposed out of the container. If not given a free random port `>= 32768` will be used. -* `ip` - (Optional, string) IP address/mask that can access this port, default to `0.0.0.0` -* `protocol` - (Optional, string) Protocol that can be used over this port, - defaults to `tcp`. - - -### Extra Hosts - -`host` is a block within the configuration that can be repeated to specify -the extra host mappings for the container. Each `host` block supports -the following: - -* `host` - (Required, string) Hostname to add. -* `ip` - (Required, string) IP address this hostname should resolve to. - -This is equivalent to using the `--add-host` option when using the `run` -command of the Docker CLI. - - -### Volumes - -`volumes` is a block within the configuration that can be repeated to specify -the volumes attached to a container. Each `volumes` block supports -the following: - -* `from_container` - (Optional, string) The container where the volume is - coming from. -* `host_path` - (Optional, string) The path on the host where the volume - is coming from. -* `volume_name` - (Optional, string) The name of the docker volume which - should be mounted. -* `container_path` - (Optional, string) The path in the container where the - volume will be mounted. -* `read_only` - (Optional, bool) If true, this volume will be readonly. - Defaults to false. - -One of `from_container`, `host_path` or `volume_name` must be set. - - -### File Upload - -`upload` is a block within the configuration that can be repeated to specify -files to upload to the container before starting it. Only one of `content` or `content_base64` can be set and at least -one of them has to be set. -Each `upload` supports the following - -* `content` - (Optional, string, conflicts with `content_base64` & `source`) Literal string value to use as the object content, which will be uploaded as UTF-8-encoded text. -* `content_base64` - (Optional, string, conflicts with `content` & `source`) Base64-encoded data that will be decoded and uploaded as raw bytes for the object content. This allows safely uploading non-UTF8 binary data, but is recommended only for larger binary content such as the result of the `base64encode` interpolation function. See [here](https://github.com/terraform-providers/terraform-provider-docker/issues/48#issuecomment-374174588) for the reason. -* `source` - (Optional, string, conflicts with `content` & `content_base64`) A filename that references a file which will be uploaded as the object content. This allows for large file uploads that do not get stored in state. -* `source_hash` - (Optional, string) If using `source`, this will force an update if the file content has updated but the filename has not. -* `file` - (Required, string) path to a file in the container. -* `executable` - (Optional, boolean) If true, the file will be uploaded with user - executable permission. - Defaults to false. - - -### Networks advanced - -`networks_advanced` is a block within the configuration that can be repeated to specify -advanced options for the container in a specific network. -Each `networks_advanced` supports the following: - -* `name` - (Required, string) The name of the network. -* `aliases` - (Optional, set of strings) The network aliases of the container in the specific network. -* `ipv4_address` - (Optional, string) The IPV4 address of the container in the specific network. -* `ipv6_address` - (Optional, string) The IPV6 address of the container in the specific network. - - -### Devices - -`devices` is a block within the configuration that can be repeated to specify -the devices exposed to a container. Each `devices` block supports -the following: - -* `host_path` - (Required, string) The path on the host where the device - is located. -* `container_path` - (Optional, string) The path in the container where the - device will be binded. -* `permissions` - (Optional, string) The cgroup permissions given to the - container to access the device. - Defaults to `rwm`. - - -### Ulimits - -`ulimit` is a block within the configuration that can be repeated to specify -the extra ulimits for the container. Each `ulimit` block supports -the following: - -* `name` - (Required, string) -* `soft` - (Required, int) -* `hard` - (Required, int) - - -### Healthcheck - -`healthcheck` is a block within the configuration that can be repeated only **once** to specify the extra healthcheck configuration for the container. The `healthcheck` block is a test to perform to check that the container is healthy and supports the following: - -* `test` - (Required, list of strings) Command to run to check health. For example, to run `curl -f http://localhost/health` set the - command to be `["CMD", "curl", "-f", "http://localhost/health"]`. -* `interval` - (Optional, string) Time between running the check `(ms|s|m|h)`. Default: `0s`. -* `timeout` - (Optional, string) Maximum time to allow one check to run `(ms|s|m|h)`. Default: `0s`. -* `start_period` - (Optional, string) Start period for the container to initialize before counting retries towards unstable `(ms|s|m|h)`. Default: `0s`. -* `retries` - (Optional, int) Consecutive failures needed to report unhealthy. Default: `0`. - -## Attributes Reference - -The following attributes are exported: - - * `exit_code` - The exit code of the container if its execution is done (`must_run` must be disabled). - * `container_logs` - The logs of the container if its execution is done (`attach` must be disabled). - * `network_data` - (Map of a block) The IP addresses of the container on each - network. Key are the network names, values are the IP addresses. - * `ip_address` - The IP address of the container. - * `ip_prefix_length` - The IP prefix length of the container. - * `gateway` - The network gateway of the container. - * `bridge` - The network bridge of the container as read from its NetworkSettings. - * `ip_address` - *Deprecated:* Use `network_data` instead. The IP address of the container's first network it. - * `ip_prefix_length` - *Deprecated:* Use `network_data` instead. The IP prefix length of the container as read from its - NetworkSettings. - * `gateway` - *Deprecated:* Use `network_data` instead. The network gateway of the container as read from its - NetworkSettings. - -## Import - -Docker containers can be imported using the long id, e.g. for a container named `foo`: - -```sh -$ terraform import docker_container.foo $(docker inspect -f {{.ID}} foo) -``` diff --git a/website/docs/r/image.html.markdown b/website/docs/r/image.html.markdown deleted file mode 100644 index 786b7bd0c..000000000 --- a/website/docs/r/image.html.markdown +++ /dev/null @@ -1,100 +0,0 @@ ---- -layout: "docker" -page_title: "Docker: docker_image" -sidebar_current: "docs-docker-resource-image" -description: |- - Pulls a Docker image to a given Docker host. ---- - -# docker\_image - -Pulls a Docker image to a given Docker host from a Docker Registry. - -This resource will *not* pull new layers of the image automatically unless used in -conjunction with [`docker_registry_image`](/docs/providers/docker/d/registry_image.html) -data source to update the `pull_triggers` field. - -## Example Usage - -```hcl -# Find the latest Ubuntu precise image. -resource "docker_image" "ubuntu" { - name = "ubuntu:precise" -} - -# Access it somewhere else with ${docker_image.ubuntu.latest} - -``` - -Building a Docker image - -```hcl -# image "zoo" and "zoo:develop" are built -resource "docker_image" "zoo" { - name = "zoo" - build { - path = "." - tag = ["zoo:develop"] - build_arg = { - foo : "zoo" - } - label = { - author : "zoo" - } - } -} -``` - -### Dynamic image - -```hcl -data "docker_registry_image" "ubuntu" { - name = "ubuntu:precise" -} - -resource "docker_image" "ubuntu" { - name = data.docker_registry_image.ubuntu.name - pull_triggers = [data.docker_registry_image.ubuntu.sha256_digest] -} -``` - -## Argument Reference - -The following arguments are supported: - -* `name` - (Required, string) The name of the Docker image, including any tags or SHA256 repo digests. -* `keep_locally` - (Optional, boolean) If true, then the Docker image won't be - deleted on destroy operation. If this is false, it will delete the image from - the docker local storage on destroy operation. -* `pull_triggers` - (Optional, list of strings) List of values which cause an - image pull when changed. This is used to store the image digest from the - registry when using the `docker_registry_image` [data source](/docs/providers/docker/d/registry_image.html) - to trigger an image update. -* `pull_trigger` - **Deprecated**, use `pull_triggers` instead. -* `force_remove` - (Optional, boolean) If true, then the image is removed forcibly when the resource is destroyed. -* `build` - (Optional, block) See [Build](#build-1) below for details. - - -### Build - -Build image. - -Please see [docker build command reference](https://docs.docker.com/engine/reference/commandline/build/#options) too. - -The `build` block supports: - -* `path` - (Required, string) Context path -* `dockerfile` - (Optional, string, default `Dockerfile`) Path to the Dockerfile -* `tag` - (Optional, list of strings) Built Docker image name and optionally a tag in the `name:tag` format -* `force_remove` - (Optional, boolean) Always remove intermediate containers -* `remove` - (Optional, boolean, default `true`) Remove intermediate containers after a successful build -* `no_cache` - (Optional, boolean) Do not use cache when building the image -* `target` - (Optional, string) Set the target build stage to build -* `build_arg` - (Optional, map of strings) Set build-time variables -* `label` - (Optional, map of strings) Set metadata for an image - -## Attributes Reference - -The following attributes are exported in addition to the above configuration: - -* `latest` (string) - The ID of the image. diff --git a/website/docs/r/network.html.markdown b/website/docs/r/network.html.markdown deleted file mode 100644 index 605832baf..000000000 --- a/website/docs/r/network.html.markdown +++ /dev/null @@ -1,88 +0,0 @@ ---- -layout: "docker" -page_title: "Docker: docker_network" -sidebar_current: "docs-docker-resource-network" -description: |- - Manages a Docker Network. ---- - -# docker\_network - -Manages a Docker Network. This can be used alongside -[docker\_container](/docs/providers/docker/r/container.html) -to create virtual networks within the docker environment. - -## Example Usage - -```hcl -# Create a new docker network -resource "docker_network" "private_network" { - name = "my_network" -} - -# Access it somewhere else with ${docker_network.private_network.name} - -``` - -## Argument Reference - -The following arguments are supported: - -* `name` - (Required, string) The name of the Docker network. -* `labels` - (Optional, block) See [Labels](#labels-1) below for details. -* `check_duplicate` - (Optional, boolean) Requests daemon to check for networks - with same name. -* `driver` - (Optional, string) Name of the network driver to use. Defaults to - `bridge` driver. -* `options` - (Optional, map of strings) Network specific options to be used by - the drivers. -* `internal` - (Optional, boolean) Restrict external access to the network. - Defaults to `false`. -* `attachable` - (Optional, boolean) Enable manual container attachment to the network. - Defaults to `false`. -* `ingress` - (Optional, boolean) Create swarm routing-mesh network. - Defaults to `false`. -* `ipv6` - (Optional, boolean) Enable IPv6 networking. - Defaults to `false`. -* `ipam_driver` - (Optional, string) Driver used by the custom IP scheme of the - network. -* `ipam_config` - (Optional, block) See [IPAM config](#ipam_config-1) below for - details. - - -#### Labels - -`labels` is a block within the configuration that can be repeated to specify -additional label name and value data to the container. Each `labels` block supports -the following: - -* `label` - (Required, string) Name of the label -* `value` (Required, string) Value of the label - -See [214](https://github.com/terraform-providers/terraform-provider-docker/issues/214#issuecomment-550128950) for Details. - - -### IPAM config -Configuration of the custom IP scheme of the network. - -The `ipam_config` block supports: - -* `subnet` - (Optional, string) -* `ip_range` - (Optional, string) -* `gateway` - (Optional, string) -* `aux_address` - (Optional, map of string) - -## Attributes Reference - -The following attributes are exported in addition to the above configuration: - -* `id` (string) -* `scope` (string) - -## Import - -Docker networks can be imported using the long id, e.g. for a network with the short id `p73jelnrme5f`: - -```sh -$ terraform import docker_network.foo $(docker network inspect -f {{.ID}} p73) -``` diff --git a/website/docs/r/plugin.html.markdown b/website/docs/r/plugin.html.markdown deleted file mode 100644 index 8cd4489b0..000000000 --- a/website/docs/r/plugin.html.markdown +++ /dev/null @@ -1,102 +0,0 @@ ---- -layout: "docker" -page_title: "Docker: docker_plugin" -sidebar_current: "docs-docker-resource-plugin" -description: |- - Manages the lifecycle of a Docker plugin. ---- - -# docker\_plugin - -Manages the lifecycle of a Docker plugin. - -## Example Usage - -```hcl -resource "docker_plugin" "sample-volume-plugin" { - name = "docker.io/tiborvass/sample-volume-plugin:latest" -} -``` - -```hcl -resource "docker_plugin" "sample-volume-plugin" { - name = "tiborvass/sample-volume-plugin" - alias = "sample-volume-plugin" - enabled = false - grant_all_permissions = true - force_destroy = true - enable_timeout = 60 - force_disable = true - env = [ - "DEBUG=1" - ] -} -``` - -## Argument Reference - -The following arguments are supported: - -* `name` - (Required, string, Forces new resource) The plugin name. If the tag is omitted, `:latest` is complemented to the attribute value. -* `alias` - (Optional, string, Forces new resource) The alias of the Docker plugin. If the tag is omitted, `:latest` is complemented to the attribute value. -* `enabled` - (Optional, boolean) If true, the plugin is enabled. The default value is `true`. -* `grant_all_permissions` - (Optional, boolean) If true, grant all permissions necessary to run the plugin. This attribute conflicts with `grant_permissions`. -* `grant_permissions` - (Optional, block) grant permissions necessary to run the plugin. This attribute conflicts with `grant_all_permissions`. See [grant_permissions](#grant-permissions-1) below for details. -* `env` - (Optional, set of string). The environment variables. -* `force_destroy` - (Optional, boolean) If true, the plugin is removed forcibly when the plugin is removed. -* `enable_timeout` - (Optional, int) HTTP client timeout to enable the plugin. -* `force_disable` - (Optional, boolean) If true, then the plugin is disabled forcibly when the plugin is disabled. - - -## grant_permissions - -`grant_permissions` is a block within the configuration that can be repeated to grant permissions to install the plugin. Each `grant_permissions` block supports -the following: - -* `name` - (Required, string) -* `value` - (Required, list of string) - -Example: - -```hcl -resource "docker_plugin" "sshfs" { - name = "docker.io/vieux/sshfs:latest" - grant_permissions { - name = "network" - value = [ - "host" - ] - } - grant_permissions { - name = "mount" - value = [ - "", - "/var/lib/docker/plugins/" - ] - } - grant_permissions { - name = "device" - value = [ - "/dev/fuse" - ] - } - grant_permissions { - name = "capabilities" - value = [ - "CAP_SYS_ADMIN" - ] - } -} -``` - -## Attributes Reference - -* `plugin_reference` - (string) The plugin reference. - -## Import - -Docker plugins can be imported using the long id, e.g. for a plugin `tiborvass/sample-volume-plugin:latest`: - -```sh -$ terraform import docker_plugin.sample-volume-plugin $(docker plugin inspect -f "{{.ID}}" tiborvass/sample-volume-plugin:latest) -``` diff --git a/website/docs/r/registry_image.html.markdown b/website/docs/r/registry_image.html.markdown deleted file mode 100644 index 924c1bf04..000000000 --- a/website/docs/r/registry_image.html.markdown +++ /dev/null @@ -1,96 +0,0 @@ ---- -layout: "docker" -page_title: "Docker: docker_registry_image" -sidebar_current: "docs-docker-resource-registry-image" -description: |- - Manages the lifecycle of docker image/tag in a registry. ---- - -# docker\_registry\_image - -Provides an image/tag in a Docker registry. - -## Example Usage - -```hcl -resource "docker_registry_image" "helloworld" { - - name = "helloworld:1.0" - - build { - context = "pathToContextFolder" - } - -} - -``` - -## Argument Reference - -* `name` - (Required, string) The name of the Docker image. -* `keep_remotely` - (Optional, boolean) If true, then the Docker image won't be - deleted on destroy operation. If this is false, it will delete the image from - the docker registry on destroy operation. - -* `build` - (Optional, Map) See [Build](#build-1) below for details. - - -#### Build Block - -* `context` (Required, string) - The path to the context folder -* `suppress_output` (Optional, bool) - Suppress the build output and print image ID on success -* `remote_context` (Optional, string) - A Git repository URI or HTTP/HTTPS context URI -* `no_cache` (Optional, bool) - Do not use the cache when building the image -* `remove` (Optional, bool) - Remove intermediate containers after a successful build (default behavior) -* `force_remove` (Optional, bool) - Always remove intermediate containers -* `pull_parent` (Optional, bool) - Attempt to pull the image even if an older image exists locally -* `isolation` (Optional, string) - Isolation represents the isolation technology of a container. The supported values are platform specific -* `cpu_set_cpus` (Optional, string) - CPUs in which to allow execution (e.g., 0-3, 0,1) -* `cpu_set_mems` (Optional, string) - MEMs in which to allow execution (0-3, 0,1) -* `cpu_shares` (Optional, int) - CPU shares (relative weight) -* `cpu_quota` (Optional, int) - Microseconds of CPU time that the container can get in a CPU period -* `cpu_period` (Optional, int) - The length of a CPU period in microseconds -* `memory` (Optional, int) - Set memory limit for build -* `memory_swap` (Optional, int) - Total memory (memory + swap), -1 to enable unlimited swap -* `cgroup_parent` (Optional, string) - Optional parent cgroup for the container -* `network_mode` (Optional, string) - Set the networking mode for the RUN instructions during build -* `shm_size` (Optional, int) - Size of /dev/shm in bytes. The size must be greater than 0 -* `` (Optional, string) - Set the networking mode for the RUN instructions during build -* `dockerfile` (Optional, string) - Dockerfile file. Default is "Dockerfile" -* `ulimit` (Optional, Map) - See [Ulimit](#ulimit-1) below for details -* `build_args` (Optional, map of key/value pairs) string pairs for build-time variables -* `auth_config` (Optional, Map) - See [AuthConfig](#authconfig-1) below for details -* `labels` (Optional, map of key/value pairs) string pairs for labels -* `squash` (Optional, bool) - squash the new layers into a new image with a single new layer -* `cache_from` (Optional, []string) - Images to consider as cache sources -* `security_opt` (Optional, []string) - Security options -* `extra_hosts` (Optional, []string) - A list of hostnames/IP mappings to add to the container’s /etc/hosts file. Specified in the form ["hostname:IP"] -* `target` (Optional, string) - Set the target build stage to build -* `platform` (Optional, string) - Set platform if server is multi-platform capable -* `version` (Optional, string) - Version of the unerlying builder to use -* `build_id` (Optional, string) - BuildID is an optional identifier that can be passed together with the build request. The same identifier can be used to gracefully cancel the build with the cancel request - - -#### Ulimit Block - -* `name` - (Required, string) type of ulimit, e.g. nofile -* `soft` (Required, int) - soft limit -* `hard` (Required, int) - hard limit - - -#### AuthConfig Block - -* `host_name` - (Required, string) hostname of the registry -* `user_name` - (Optional, string) the registry user name -* `password` - (Optional, string) the registry password -* `auth` - (Optional, string) the auth token -* `email` - (Optional, string) the user emal -* `server_address` - (Optional, string) the server address -* `identity_token` - (Optional, string) the identity token -* `registry_token` - (Optional, string) the registry token - -## Attributes Reference - -The following attributes are exported in addition to the above configuration: - -* `sha256_digest` (string) - The sha256 digest of the image. diff --git a/website/docs/r/secret.html.markdown b/website/docs/r/secret.html.markdown deleted file mode 100644 index 62b5b710b..000000000 --- a/website/docs/r/secret.html.markdown +++ /dev/null @@ -1,81 +0,0 @@ ---- -layout: "docker" -page_title: "Docker: docker_secret" -sidebar_current: "docs-docker-resource-secret" -description: |- - Manages the secrets of a Docker service in a swarm. ---- - -# docker\_secret - -Manages the secrets of a Docker service in a swarm. - -## Example Usage - -### Basic - -```hcl -# Creates a secret -resource "docker_secret" "foo_secret" { - name = "foo_secret" - data = "ewogICJzZXJsaasIfQo=" -} -``` - -#### Update secret with no downtime -To update a `secret`, Terraform will destroy the existing resource and create a replacement. To effectively use a `docker_secret` resource with a `docker_service` resource, it's recommended to specify `create_before_destroy` in a `lifecycle` block. Provide a unique `name` attribute, for example -with one of the interpolation functions `uuid` or `timestamp` as shown -in the example below. The reason is [moby-35803](https://github.com/moby/moby/issues/35803). - -```hcl -resource "docker_secret" "service_secret" { - name = "${var.service_name}-secret-${replace(timestamp(), ":", ".")}" - data = base64encode(data.template_file.service_secret_tpl.rendered) - - lifecycle { - ignore_changes = ["name"] - create_before_destroy = true - } -} - -resource "docker_service" "service" { - # ... - secrets = [ - { - secret_id = docker_secret.service_secret.id - secret_name = docker_secret.service_secret.name - file_name = "/root/configs/configs.json" - }, - ] -} -``` - -## Argument Reference - -The following arguments are supported: - -* `name` - (Required, string) The name of the Docker secret. -* `data` - (Required, string) The base64 encoded data of the secret. -* `labels` - (Optional, block) See [Labels](#labels-1) below for details. - - -#### Labels - -`labels` is a block within the configuration that can be repeated to specify -additional label name and value data to the container. Each `labels` block supports -the following: - -* `label` - (Required, string) Name of the label -* `value` (Required, string) Value of the label - -See [214](https://github.com/terraform-providers/terraform-provider-docker/issues/214#issuecomment-550128950) for Details. - -## Attributes Reference - -The following attributes are exported in addition to the above configuration: - -* `id` (string) - -## Import - -Docker secret cannot be imported as the secret data, once set, is never exposed again. diff --git a/website/docs/r/service.html.markdown b/website/docs/r/service.html.markdown deleted file mode 100644 index 6132587ea..000000000 --- a/website/docs/r/service.html.markdown +++ /dev/null @@ -1,590 +0,0 @@ ---- -layout: "docker" -page_title: "Docker: docker_service" -sidebar_current: "docs-docker-resource-service" -description: |- - Manages the lifecycle of a Docker service. ---- - -# docker\_service - -This resource manages the lifecycle of a Docker service. By default, the creation, update and delete of services are detached. - -With the [Converge Config](#convergeconfig) the behavior of the `docker cli` is imitated to guarantee that -for example, all tasks of a service are running or successfully updated or to inform `terraform` that a service could not -be updated and was successfully rolled back. - -## Example Usage -The following examples show the basic and advanced usage of the -Docker Service resource assuming the host machine is already part of a Swarm. - -### Basic -The following configuration starts a Docker Service with -- the given image, -- 1 replica -- exposes the port `8080` in `vip` mode to the host machine -- moreover, uses the `container` runtime - -```hcl -resource "docker_service" "foo" { - name = "foo-service" - - task_spec { - container_spec { - image = "repo.mycompany.com:8080/foo-service:v1" - } - } - - endpoint_spec { - ports { - target_port = "8080" - } - } -} -``` - -The following command is the equivalent: - -```bash -$ docker service create -d -p 8080 --name foo-service repo.mycompany.com:8080/foo-service:v1 -``` - -### Advanced -The following configuration shows the full capabilities of a Docker Service. Currently, the [Docker API 1.32](https://docs.docker.com/engine/api/v1.32) is implemented. - -```hcl -resource "docker_volume" "test_volume" { - name = "tftest-volume" -} - -resource "docker_config" "service_config" { - name = "tftest-full-myconfig" - data = "ewogICJwcmVmaXgiOiAiMTIzIgp9" -} - -resource "docker_secret" "service_secret" { - name = "tftest-mysecret" - data = "ewogICJrZXkiOiAiUVdFUlRZIgp9" -} - -resource "docker_network" "test_network" { - name = "tftest-network" - driver = "overlay" -} - -resource "docker_service" "foo" { - name = "tftest-service-basic" - - task_spec { - container_spec { - image = "repo.mycompany.com:8080/foo-service:v1" - - labels { - label = "foo.bar" - value = "baz" - } - - command = ["ls"] - args = ["-las"] - hostname = "my-fancy-service" - - env = { - MYFOO = "BAR" - } - - dir = "/root" - user = "root" - groups = ["docker", "foogroup"] - - privileges { - se_linux_context { - disable = true - user = "user-label" - role = "role-label" - type = "type-label" - level = "level-label" - } - } - - read_only = true - - mounts { - target = "/mount/test" - source = docker_volume.test_volume.name - type = "volume" - read_only = true - - bind_options { - propagation = "private" - } - } - - mounts { - # another mount - } - - stop_signal = "SIGTERM" - stop_grace_period = "10s" - - healthcheck { - test = ["CMD", "curl", "-f", "http://localhost:8080/health"] - interval = "5s" - timeout = "2s" - retries = 4 - } - - hosts { - host = "testhost" - ip = "10.0.1.0" - } - - dns_config { - nameservers = ["8.8.8.8"] - search = ["example.org"] - options = ["timeout:3"] - } - - secrets { - secret_id = docker_secret.service_secret.id - secret_name = docker_secret.service_secret.name - file_name = "/secrets.json" - file_uid = "0" - file_gid = "0" - file_mode = 0777 - } - - secrets { - # another secret - } - - configs { - config_id = docker_config.service_config.id - config_name = docker_config.service_config.name - file_name = "/configs.json" - } - - configs { - # another config - } - } - - resources { - limits { - nano_cpus = 1000000 - memory_bytes = 536870912 - } - - reservation { - nano_cpus = 1000000 - memory_bytes = 536870912 - - generic_resources { - named_resources_spec = [ - "GPU=UUID1", - ] - - discrete_resources_spec = [ - "SSD=3", - ] - } - } - } - - restart_policy = { - condition = "on-failure" - delay = "3s" - max_attempts = 4 - window = "10s" - } - - placement { - constraints = [ - "node.role==manager", - ] - - prefs = [ - "spread=node.role.manager", - ] - - max_replicas = 1 - } - - force_update = 0 - runtime = "container" - networks = [docker_network.test_network.id] - - log_driver { - name = "json-file" - - options { - max-size = "10m" - max-file = "3" - } - } - } - - mode { - replicated { - replicas = 2 - } - } - - update_config { - parallelism = 2 - delay = "10s" - failure_action = "pause" - monitor = "5s" - max_failure_ratio = "0.1" - order = "start-first" - } - - rollback_config { - parallelism = 2 - delay = "5ms" - failure_action = "pause" - monitor = "10h" - max_failure_ratio = "0.9" - order = "stop-first" - } - - endpoint_spec { - mode = "vip" - - ports { - name = "random" - protocol = "tcp" - target_port = "8080" - published_port = "8080" - publish_mode = "ingress" - } - - ports { - # another port - } - } -} -``` - -See also the `TestAccDockerService_full` test or all the other tests for a complete overview. - -## Argument Reference - -The following arguments are supported: - -* `auth` - (Optional, block) See [Auth](#auth-1) below for details. -* `name` - (Required, string) The name of the Docker service. -* `labels` - (Optional, block) See [Labels](#labels-1) below for details. -* `task_spec` - (Required, block) See [TaskSpec](#task-spec-1) below for details. -* `mode` - (Optional, block) See [Mode](#mode-1) below for details. -* `update_config` - (Optional, block) See [UpdateConfig](#update-rollback-config-1) below for details. -* `rollback_config` - (Optional, block) See [RollbackConfig](#update-rollback-config-1) below for details. -* `endpoint_spec` - (Optional, block) See [EndpointSpec](#endpoint-spec-1) below for details. -* `converge_config` - (Optional, block) See [Converge Config](#converge-config-1) below for details. - - -### Auth - -`auth` can be used additionally to the `registry_auth`. If both properties are given the `auth` wins and overwrites the auth of the provider. - -* `server_address` - (Required, string) The address of the registry server -* `username` - (Optional, string) The username to use for authenticating to the registry. If this is blank, the `DOCKER_REGISTRY_USER` is also be checked. -* `password` - (Optional, string) The password to use for authenticating to the registry. If this is blank, the `DOCKER_REGISTRY_PASS` is also be checked. - - - -### TaskSpec - -`task_spec` is a block within the configuration that can be repeated only **once** to specify the mode configuration for the service. The `task_spec` block is the user modifiable task configuration and supports the following: - -* `container_spec` (Required, block) See [ContainerSpec](#container-spec-1) below for details. -* `resources` (Optional, block) See [Resources](#resources-1) below for details. -* `restart_policy` (Optional, block) See [Restart Policy](#restart-policy-1) below for details. -* `placement` (Optional, block) See [Placement](#placement-1) below for details. -* `force_update` (Optional, int) A counter that triggers an update even if no relevant parameters have been changed. See [Docker Spec](https://github.com/docker/swarmkit/blob/master/api/specs.proto#L126). -* `runtime` (Optional, string) Runtime is the type of runtime specified for the task executor. See [Docker Runtime](https://github.com/moby/moby/blob/master/api/types/swarm/runtime.go). -* `networks` - (Optional, set of strings) Ids of the networks in which the container will be put in. -* `log_driver` - (Optional, block) See [Log Driver](#log-driver-1) below for details. - - - - -#### ContainerSpec - -`container_spec` is a block within the configuration that can be repeated only **once** to specify the mode configuration for the service. The `container_spec` block is the spec for each container and supports the following: - -* `image` - (Required, string) The image used to create the Docker service. -* `labels` - (Optional, block) See [Labels](#labels-1) below for details. -* `command` - (Optional, list of strings) The command to be run in the image. -* `args` - (Optional, list of strings) Arguments to the command. -* `hostname` - (Optional, string) The hostname to use for the container, as a valid RFC 1123 hostname. -* `env` - (Optional, map of string/string) A list of environment variables in the form VAR=value. -* `dir` - (Optional, string) The working directory for commands to run in. -* `user` - (Optional, string) The user inside the container. -* `groups` - (Optional, list of strings) A list of additional groups that the container process will run as. -* `privileges` (Optional, block) See [Privileges](#privileges-1) below for details. -* `read_only` - (Optional, bool) Mount the container's root filesystem as read only. -* `mounts` - (Optional, set of blocks) See [Mounts](#mounts-1) below for details. -* `stop_signal` - (Optional, string) Signal to stop the container. -* `stop_grace_period` - (Optional, string) Amount of time to wait for the container to terminate before forcefully removing it `(ms|s|m|h)`. -* `healthcheck` - (Optional, block) See [Healthcheck](#healthcheck-1) below for details. -* `host` - (Optional, map of string/string) A list of hostname/IP mappings to add to the container's hosts file. - * `ip` - (Required string) The ip - * `host` - (Required string) The hostname -* `dns_config` - (Optional, block) See [DNS Config](#dnsconfig-1) below for details. -* `secrets` - (Optional, set of blocks) See [Secrets](#secrets-1) below for details. -* `configs` - (Optional, set of blocks) See [Configs](#configs-1) below for details. -* `isolation` - (Optional, string) Isolation technology of the containers running the service. (Windows only). Valid values are: `default|process|hyperv` - - - -#### Labels - -`labels` is a block within the configuration that can be repeated to specify -additional label name and value data to the container. Each `labels` block supports -the following: - -* `label` - (Required, string) Name of the label -* `value` (Required, string) Value of the label - -See [214](https://github.com/terraform-providers/terraform-provider-docker/issues/214#issuecomment-550128950) for Details. - - -#### Privileges - -`privileges` is a block within the configuration that can be repeated only **once** to specify the mode configuration for the service. The `privileges` block holds the security options for the container and supports the following: - -* `credential_spec` - (Optional, block) For managed service account (Windows only) - * `file` - (Optional, string) Load credential spec from this file. - * `registry` - (Optional, string) Load credential spec from this value in the Windows registry. -* `se_linux_context` - (Optional, block) SELinux labels of the container - * `disable` - (Optional, bool) Disable SELinux - * `user` - (Optional, string) SELinux user label - * `role` - (Optional, string) SELinux role label - * `type` - (Optional, string) SELinux type label - * `level` - (Optional, string) SELinux level label - - -#### Mounts - -`mounts` is a block within the configuration that can be repeated to specify -the extra mount mappings for the container. Each `mounts` block is the Specification for mounts to be added to containers created as part of the service and supports -the following: - -* `target` - (Required, string) The container path. -* `source` - (Optional, string) The mount source (e.g., a volume name, a host path) -* `type` - (Required, string) The mount type: valid values are `bind|volume|tmpfs`. -* `read_only` - (Optional, string) Whether the mount should be read-only -* `bind_options` - (Optional, map) Optional configuration for the `bind` type. - * `propagation` - (Optional, string) A propagation mode with the value. -* `volume_options` - (Optional, map) Optional configuration for the `volume` type. - * `no_copy` - (Optional, string) Whether to populate volume with data from the target. - * `labels` - (Optional, block) See [Labels](#labels-1) above for details. - * `driver_config` - (Optional, map) The name of the driver to create the volume. - * `name` - (Optional, string) The name of the driver to create the volume. - * `options` - (Optional, map of key/value pairs) Options for the driver. -* `tmpfs_options` - (Optional, map) Optional configuration for the `tmpf` type. - * `size_bytes` - (Optional, int) The size for the tmpfs mount in bytes. - * `mode` - (Optional, int) The permission mode for the tmpfs mount in an integer. - - -#### Healthcheck - -`healthcheck` is a block within the configuration that can be repeated only **once** to specify the extra healthcheck configuration for the containers of the service. The `healthcheck` block is a test to perform to check that the container is healthy and supports the following: - -* `test` - (Required, list of strings) Command to run to check health. For example, to run `curl -f http://localhost/health` set the - command to be `["CMD", "curl", "-f", "http://localhost/health"]`. -* `interval` - (Optional, string) Time between running the check `(ms|s|m|h)`. Default: `0s`. -* `timeout` - (Optional, string) Maximum time to allow one check to run `(ms|s|m|h)`. Default: `0s`. -* `start_period` - (Optional, string) Start period for the container to initialize before counting retries towards unstable `(ms|s|m|h)`. Default: `0s`. -* `retries` - (Optional, int) Consecutive failures needed to report unhealthy. Default: `0`. - - -### DNS Config - -`dns_config` is a block within the configuration that can be repeated only **once** to specify the extra DNS configuration for the containers of the service. The `dns_config` block supports the following: - -* `nameservers` - (Required, list of strings) The IP addresses of the name servers, for example, `8.8.8.8` -* `search` - (Optional, list of strings)A search list for host-name lookup. -* `options` - (Optional, list of strings) A list of internal resolver variables to be modified, for example, `debug`, `ndots:3` - - -### Secrets - -`secrets` is a block within the configuration that can be repeated to specify -the extra mount mappings for the container. Each `secrets` block is a reference to a secret that will be exposed to the service and supports the following: - -* `secret_id` - (Required, string) ConfigID represents the ID of the specific secret. -* `secret_name` - (Optional, string) The name of the secret that this references, but internally it is just provided for lookup/display purposes -* `file_name` - (Required, string) Represents the final filename in the filesystem. The specific target file that the secret data is written within the docker container, e.g. `/root/secret/secret.json` -* `file_uid` - (Optional, string) Represents the file UID. Defaults: `0` -* `file_gid` - (Optional, string) Represents the file GID. Defaults: `0` -* `file_mode` - (Optional, int) Represents the FileMode of the file. Defaults: `0444` - - -### Configs - -`configs` is a block within the configuration that can be repeated to specify -the extra mount mappings for the container. Each `configs` is a reference to a secret that is exposed to the service and supports the following: - -* `config_id` - (Required, string) ConfigID represents the ID of the specific config. -* `config_name` - (Optional, string) The name of the config that this references, but internally it is just provided for lookup/display purposes -* `file_name` - (Required, string) Represents the final filename in the filesystem. The specific target file that the config data is written within the docker container, e.g. `/root/config/config.json` -* `file_uid` - (Optional, string) Represents the file UID. Defaults: `0` -* `file_gid` - (Optional, string) Represents the file GID. Defaults: `0` -* `file_mode` - (Optional, int) Represents the FileMode of the file. Defaults: `0444` - - - - - -#### Resources - -`resources` is a block within the configuration that can be repeated only **once** to specify the mode configuration for the service. The `resources` block represents the requirements which apply to each container created as part of the service and supports the following: - -* `limits` - (Optional, list of strings) Describes the resources which can be advertised by a node and requested by a task. - * `nano_cpus` (Optional, int) CPU shares in units of 1/1e9 (or 10^-9) of the CPU. Should be at least 1000000 - * `memory_bytes` (Optional, int) The amount of memory in bytes the container allocates -* `reservation` - (Optional, list of strings) An object describing the resources which can be advertised by a node and requested by a task. - * `nano_cpus` (Optional, int) CPU shares in units of 1/1e9 (or 10^-9) of the CPU. Should be at least 1000000 - * `memory_bytes` (Optional, int) The amount of memory in bytes the container allocates - * `generic_resources` (Optional, map) User-defined resources can be either Integer resources (e.g, SSD=3) or String resources (e.g, GPU=UUID1) - * `named_resources_spec` (Optional, set of string) The String resources - * `discrete_resources_spec` (Optional, set of string) The Integer resources - - - - -#### Restart Policy - -`restart_policy` is a block within the configuration that can be repeated only **once** to specify the mode configuration for the service. The `restart_policy` block specifies the restart policy which applies to containers created as part of this service and supports the following: - -* `condition` (Optional, string) Condition for restart: `(none|on-failure|any)` -* `delay` (Optional, string) Delay between restart attempts `(ms|s|m|h)` -* `max_attempts` (Optional, string) Maximum attempts to restart a given container before giving up (default value is `0`, which is ignored) -* `window` (Optional, string) The time window used to evaluate the restart policy (default value is `0`, which is unbounded) `(ms|s|m|h)` - - - - -#### Placement - -`placement` is a block within the configuration that can be repeated only **once** to specify the mode configuration for the service. The `placement` block specifies the placement preferences and supports the following: - -* `constraints` (Optional, set of strings) An array of constraints. e.g.: `node.role==manager` -* `prefs` (Optional, set of string) Preferences provide a way to make the scheduler aware of factors such as topology. They are provided in order from highest to lowest precedence, e.g.: `spread=node.role.manager` -* `platforms` (Optional, set of) Platforms stores all the platforms that the service's image can run on - * `architecture` (Required, string) The architecture, e.g., `amd64` - * `os` (Required, string) The operation system, e.g., `linux` -* `max_replicas` (Optional, int) Maximum number of replicas for per node (default value is 0, which is unlimited) - - - - -### Log Driver - -`log_driver` is a block within the configuration that can be repeated only **once** to specify the extra log_driver configuration for the containers of the service. The `log_driver` 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. The block supports the following: - -* `name` - (Required, string) The logging driver to use. Either `(none|json-file|syslog|journald|gelf|fluentd|awslogs|splunk|etwlogs|gcplogs)`. -* `options` - (Optional, a map of strings and strings) The options for the logging driver, e.g. - -```hcl -options { - awslogs-region = "us-west-2" - awslogs-group = "dev/foo-service" -} -``` - - - - -### Mode - -`mode` is a block within the configuration that can be repeated only **once** to specify the mode configuration for the service. The `mode` block supports the following: - -* `global` - (Optional, bool) set it to `true` to run the service in the global mode - -```hcl -resource "docker_service" "foo" { - // ... - mode { - global = true - } - // ... -} -``` -* `replicated` - (Optional, map), which contains atm only the amount of `replicas` - -```hcl -resource "docker_service" "foo" { - // ... - mode { - replicated { - replicas = 2 - } - } - // ... -} -``` - -~> **NOTE on `mode`:** if neither `global` nor `replicated` is specified, the service -is started in `replicated` mode with 1 replica. A change of service mode is not possible. The service has to be destroyed an recreated in the new mode. - - -### UpdateConfig and RollbackConfig - -`update_config` or `rollback_config` is a block within the configuration that can be repeated only **once** to specify the extra update configuration for the containers of the service. The `update_config` `rollback_config` block supports the following: - -* `parallelism` - (Optional, int) The maximum number of tasks to be updated in one iteration simultaneously (0 to update all at once). -* `delay` - (Optional, int) Delay between updates `(ns|us|ms|s|m|h)`, e.g. `5s`. -* `failure_action` - (Optional, int) Action on update failure: `pause|continue|rollback`. -* `monitor` - (Optional, int) Duration after each task update to monitor for failure `(ns|us|ms|s|m|h)` -* `max_failure_ratio` - (Optional, string) The failure rate to tolerate during an update as `float`. **Important:** the `float`need to be wrapped in a `string` to avoid internal -casting and precision errors. -* `order` - (Optional, int) Update order either 'stop-first' or 'start-first'. - - -### EndpointSpec - -`endpoint_spec` is a block within the configuration that can be repeated only **once** to specify properties that can be configured to access and load balance a service. The block supports the following: - -* `mode` - (Optional, string) The mode of resolution to use for internal load balancing between tasks. `(vip|dnsrr)`. Default: `vip`. -* `ports` - (Optional, block) See [Ports](#ports-1) below for details. - - -#### Ports - -`ports` is a block within the configuration that can be repeated to specify -the port mappings of the container. Each `ports` block supports -the following: - -* `name` - (Optional, string) A random name for the port. -* `protocol` - (Optional, string) Protocol that can be used over this port: `tcp|udp|sctp`. Default: `tcp`. -* `target_port` - (Required, int) Port inside the container. -* `published_port` - (Required, int) The port on the swarm hosts. If not set the value of `target_port` will be used. -* `publish_mode` - (Optional, string) Represents the mode in which the port is to be published: `ingress|host` - - -### Converge Config - -`converge_config` is a block within the configuration that can be repeated only **once** to specify the extra Converging configuration for the containers of the service. This is the same behavior as the `docker cli`. By adding this configuration, it is monitored with the -given interval that, e.g., all tasks/replicas of a service are up and healthy - -The `converge_config` block supports the following: - -* `delay` - (Optional, string) Time between each the check to check docker endpoint `(ms|s|m|h)`. For example, to check if -all tasks are up when a service is created, or to check if all tasks are successfully updated on an update. Default: `7s`. -* `timeout` - (Optional, string) The timeout of the service to reach the desired state `(s|m)`. Default: `3m`. - -## Attributes Reference - -The following attributes are exported in addition to the above configuration: - -* `id` (string) - -## Import - -Docker service can be imported using the long id, e.g. for a service with the short id `55ba873dd`: - -```sh -$ terraform import docker_service.foo $(docker service inspect -f {{.ID}} 55b) -``` diff --git a/website/docs/r/volume.html.markdown b/website/docs/r/volume.html.markdown deleted file mode 100644 index b26cdb7c2..000000000 --- a/website/docs/r/volume.html.markdown +++ /dev/null @@ -1,49 +0,0 @@ ---- -layout: "docker" -page_title: "Docker: docker_volume" -sidebar_current: "docs-docker-resource-volume" -description: |- - Creates and destroys docker volumes. ---- - -# docker\_volume - -Creates and destroys a volume in Docker. This can be used alongside -[docker\_container](/docs/providers/docker/r/container.html) -to prepare volumes that can be shared across containers. - -## Example Usage - -```hcl -# Creates a docker volume "shared_volume". -resource "docker_volume" "shared_volume" { - name = "shared_volume" -} - -# Reference the volume with ${docker_volume.shared_volume.name} - -``` - -## Argument Reference - -The following arguments are supported: - -* `name` - (Optional, string) The name of the Docker volume (generated if not - provided). -* `labels` - (Optional, map of string/string key/value pairs) User-defined key/value metadata. -* `driver` - (Optional, string) Driver type for the volume (defaults to local). -* `driver_opts` - (Optional, map of strings) Options specific to the driver. - -## Attributes Reference - -The following attributes are exported in addition to the above configuration: - -* `mountpoint` (string) - The mountpoint of the volume. - -## Import - -Docker volume can be imported using the long id, e.g. for a volume with the short id `ecae276c5`: - -```sh -$ terraform import docker_volume.foo $(docker volume inspect -f {{.ID}} eca) -```