diff --git a/.github/CODE_OF_CONDUCT.md b/.github/CODE_OF_CONDUCT.md deleted file mode 100644 index 0c8b092c..00000000 --- a/.github/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,5 +0,0 @@ -# Code of Conduct - -HashiCorp Community Guidelines apply to you when interacting with the community here on GitHub and contributing code. - -Please read the full text at https://www.hashicorp.com/community-guidelines diff --git a/.go-version b/.go-version new file mode 100644 index 00000000..4761f0e9 --- /dev/null +++ b/.go-version @@ -0,0 +1 @@ +1.15.2 \ No newline at end of file diff --git a/.goreleaser.yml b/.goreleaser.yml deleted file mode 100644 index 1a9f8636..00000000 --- a/.goreleaser.yml +++ /dev/null @@ -1,59 +0,0 @@ -# Visit https://goreleaser.com for documentation on how to customize this -# behavior. - -before: - hooks: - - go mod tidy -builds: -- env: - - CGO_ENABLED=0 - goos: - - freebsd - - openbsd - - solaris - - windows - - linux - - darwin - goarch: - - amd64 - - '386' - - arm - - arm64 - ignore: - - goos: darwin - goarch: '386' - - goos: darwin - goarch: arm - - goos: darwin - goarch: arm64 - - goos: openbsd - goarch: arm - - goos: openbsd - goarch: arm64 - - goos: solaris - goarch: arm - - goos: solaris - goarch: arm64 - - goos: solaris - goarch: '386' - binary: '{{ .ProjectName }}_v{{ .Version }}' -archives: -- format: zip - name_template: '{{ .ProjectName }}_{{ .Version }}_{{ .Os }}_{{ .Arch }}' -checksum: - name_template: '{{ .ProjectName }}_{{ .Version }}_SHA256SUMS' - algorithm: sha256 -signs: - - artifacts: checksum - args: - - "--local-user" - - "51852D87348FFC4C" # Replace this with your GPG signing key ID - - "--output" - - "${signature}" - - "--detach-sign" - - "${artifact}" -release: - # Visit your project's GitHub Releases page to publish this release. - draft: true -changelog: - skip: true diff --git a/CHANGELOG.md b/CHANGELOG.md index 52db2191..c627292a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,3 @@ ## 0.1.0 (Unreleased) -BACKWARDS INCOMPATIBILITIES / NOTES: +Initial release! diff --git a/README.md b/README.md index 22717fa3..b6826b39 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ Requirements ------------ - [Terraform](https://www.terraform.io/downloads.html) >= 0.12.x -- [Go](https://golang.org/doc/install) >= 1.12 +- [Go](https://golang.org/doc/install) >= 1.15 Building The Provider --------------------- @@ -59,6 +59,15 @@ In order to run the full suite of Acceptance tests, run `make testacc`. $ make testacc ``` +Generating Docs +---------------------- + +From the root of the repo run: + +``` +go run github.com/hashicorp/terraform-plugin-docs/cmd/tfplugindocs +``` + Using the provider ---------------------- Please see our detailed docs for individual resource usage. Below is a complex example using the Boundary provider to configure all resource types available: diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 00000000..48431459 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,37 @@ +--- +page_title: "Provider: Boundary" +subcategory: "" +description: |- + Terraform provider for configuring Boundary. +--- + +# Boundary Provider + +Terraform provider for configuring Boundary. + +## Example Usage + +Do not keep your authentication password in HCL for production environments, use Terraform environment variables. + +```terraform +provider "boundary" { + addr = "http://127.0.0.1:9200" + auth_method_id = "ampw_1234567890" # changeme + password_auth_method_login_name = "myuser" # changeme + password_auth_method_password = "passpass" # changeme +} +``` + +## Schema + +### Required + +- **addr** (String, Required) The base url of the Boundary API, e.g. "http://127.0.0.1". If not set, it will be read from the "BOUNDARY_ADDR" env var. + +### Optional + +- **auth_method_id** (String, Optional) The auth method ID e.g. ampw_1234567890 +- **password_auth_method_login_name** (String, Optional) The auth method login name for password-style auth methods +- **password_auth_method_password** (String, Optional) The auth method password for password-style auth methods +- **recovery_kms_hcl** (String, Optional) Can be a heredoc string or a path on disk. If set, the string/file will be parsed as HCL and used with the recovery KMS mechanism. While this is set, it will override any other authentication information; the KMS mechanism will always be used. +- **token** (String, Optional) The Boundary token to use, as a string or path on disk containing just the string. If set, the token read here will be used in place of authenticating with the auth method specified in "auth_method_id", although the recovery KMS mechanism will still override this. Can also be set with the BOUNDARY_TOKEN environment variable. \ No newline at end of file diff --git a/docs/resources/account.md b/docs/resources/account.md new file mode 100644 index 00000000..6b311ed6 --- /dev/null +++ b/docs/resources/account.md @@ -0,0 +1,50 @@ +--- +page_title: "boundary_account Resource - terraform-provider-boundary" +subcategory: "" +description: |- + The account resource allows you to configure a Boundary account. +--- + +# Resource `boundary_account` + +The account resource allows you to configure a Boundary account. + +## Example Usage + +```terraform +resource "boundary_scope" "org" { + name = "organization_one" + description = "My first scope!" + scope_id = "global" + auto_create_role = true +} + +resource "boundary_auth_method" "password" { + scope_id = boundary_scope.org.id + type = "password" +} + +resource "boundary_account" "jeff" { + auth_method_id = boundary_auth_method.password.id + type = "password" + login_name = "jeff" + password = "$uper$ecure" +} +``` + +## Schema + +### Required + +- **auth_method_id** (String, Required) The resource ID for the authentication method. +- **type** (String, Required) The resource type. + +### Optional + +- **description** (String, Optional) The account description. +- **id** (String, Optional) The ID of this resource. +- **login_name** (String, Optional) The login name for this account. +- **name** (String, Optional) The account name. Defaults to the resource name. +- **password** (String, Optional) The account password. + + diff --git a/docs/resources/auth_method.md b/docs/resources/auth_method.md new file mode 100644 index 00000000..f6fef688 --- /dev/null +++ b/docs/resources/auth_method.md @@ -0,0 +1,43 @@ +--- +page_title: "boundary_auth_method Resource - terraform-provider-boundary" +subcategory: "" +description: |- + The auth method resource allows you to configure a Boundary auth_method. +--- + +# Resource `boundary_auth_method` + +The auth method resource allows you to configure a Boundary auth_method. + +## Example Usage + +```terraform +resource "boundary_scope" "org" { + name = "organization_one" + description = "My first scope!" + scope_id = "global" + auto_create_role = true +} + +resource "boundary_auth_method" "password" { + scope_id = boundary_scope.org.id + type = "password" +} +``` + +## Schema + +### Required + +- **scope_id** (String, Required) The scope ID. +- **type** (String, Required) The resource type. + +### Optional + +- **description** (String, Optional) The auth method description. +- **id** (String, Optional) The ID of this resource. +- **min_login_name_length** (Number, Optional) The minimum login name length. +- **min_password_length** (Number, Optional) The minimum password length. +- **name** (String, Optional) The auth method name. Defaults to the resource name. + + diff --git a/website/docs/r/resource_group.html.markdown b/docs/resources/group.md similarity index 58% rename from website/docs/r/resource_group.html.markdown rename to docs/resources/group.md index ec3c3653..876fd7f4 100644 --- a/website/docs/r/resource_group.html.markdown +++ b/docs/resources/group.md @@ -1,21 +1,21 @@ --- -layout: "boundary" -page_title: "Boundary: group_resource" -sidebar_current: "docs-boundary-group-resource" +page_title: "boundary_group Resource - terraform-provider-boundary" +subcategory: "" description: |- - Group resource for the Boundary Terraform provider. + The group resource allows you to configure a Boundary group. --- -# boundary_group_resource -The group resource allows you to configure a Boundary group. +# Resource `boundary_group` + +The group resource allows you to configure a Boundary group. ## Example Usage -```hcl +```terraform resource "boundary_scope" "org" { name = "organization_one" description = "My first scope!" - scope_id = "global" + scope_id = "global" auto_create_role = true } @@ -34,11 +34,11 @@ resource "boundary_group" "example" { Usage for project-specific group: -```hcl +```terraform resource "boundary_scope" "org" { name = "organization_one" description = "My first scope!" - scope_id = "global" + scope_id = "global" auto_create_role = true } @@ -62,10 +62,15 @@ resource "boundary_group" "example" { } ``` -## Argument Reference +## Schema -The following arguments are optional: -* `description` - The group description. -* `name` - The group name. Defaults to the resource name. -* `scope_id` - The scope ID in which the resource is created. Defaults to the provider's `default_scope` if unset. -* `member_ids` - Resource IDs for group members, these are most likely boundary users. +### Required + +- **scope_id** (String, Required) The scope ID in which the resource is created. Defaults to the provider's `default_scope` if unset. + +### Optional + +- **description** (String, Optional) The group description. +- **id** (String, Optional) The ID of this resource. +- **member_ids** (Set of String, Optional) Resource IDs for group members, these are most likely boundary users. +- **name** (String, Optional) The group name. Defaults to the resource name. diff --git a/docs/resources/host.md b/docs/resources/host.md new file mode 100644 index 00000000..cae33a96 --- /dev/null +++ b/docs/resources/host.md @@ -0,0 +1,51 @@ +--- +page_title: "boundary_host Resource - terraform-provider-boundary" +subcategory: "" +description: |- + The host resource allows you to configure a Boundary static host. Hosts are always part of a project, so a project resource should be used inline or you should have the project ID in hand to successfully configure a host. +--- + +# Resource `boundary_host` + +The host resource allows you to configure a Boundary static host. Hosts are always part of a project, so a project resource should be used inline or you should have the project ID in hand to successfully configure a host. + +## Example Usage + +```terraform +resource "boundary_scope" "org" { + name = "organization_one" + description = "My first scope!" + scope_id = "global" + auto_create_role = true +} + +resource "boundary_scope" "project" { + name = "project_one" + description = "My first scope!" + scope_id = boundary_scope.org.id + auto_create_role = true +} + +resource "boundary_host" "example" { + name = "My catalog" + description = "My first host!" + address = "10.0.0.1" + scope_id = boundary_scope.project.id +} +``` + +## Schema + +### Required + +- **host_catalog_id** (String, Required) +- **type** (String, Required) + +### Optional + +- **address** (String, Optional) The static address of the host resource as `:` or a domain name. +- **description** (String, Optional) The host description. +- **id** (String, Optional) The ID of this resource. +- **name** (String, Optional) The host name. Defaults to the resource name. + + diff --git a/docs/resources/host_catalog.md b/docs/resources/host_catalog.md new file mode 100644 index 00000000..16951c42 --- /dev/null +++ b/docs/resources/host_catalog.md @@ -0,0 +1,50 @@ +--- +page_title: "boundary_host_catalog Resource - terraform-provider-boundary" +subcategory: "" +description: |- + The host catalog resource allows you to configure a Boundary host catalog. Host catalogs are always part of a project, so a project resource should be used inline or you should have the project ID in hand to successfully configure a host catalog. +--- + +# Resource `boundary_host_catalog` + +The host catalog resource allows you to configure a Boundary host catalog. Host catalogs are always part of a project, so a project resource should be used inline or you should have the project ID in hand to successfully configure a host catalog. + +## Example Usage + +```terraform +resource "boundary_scope" "org" { + name = "organization_one" + description = "My first scope!" + scope_id = boundary_scope.global.id + auto_create_role = true +} + +resource "boundary_scope" "project" { + name = "project_one" + description = "My first scope!" + scope_id = boundary_scope.org.id + auto_create_role = true +} + +resource "boundary_host_catalog" "example" { + name = "My catalog" + description = "My first host catalog!" + type = "Static" + scope_id = boundary_scope.project.id +} +``` + +## Schema + +### Required + +- **scope_id** (String, Required) The scope ID in which the resource is created. +- **type** (String, Required) The host catalog type. Only `Static` (yes, title case) is supported. + +### Optional + +- **description** (String, Optional) The host catalog description. +- **id** (String, Optional) The ID of this resource. +- **name** (String, Optional) The host catalog name. Defaults to the resource name. + + diff --git a/docs/resources/host_set.md b/docs/resources/host_set.md new file mode 100644 index 00000000..0afbc3d7 --- /dev/null +++ b/docs/resources/host_set.md @@ -0,0 +1,72 @@ +--- +page_title: "boundary_host_set Resource - terraform-provider-boundary" +subcategory: "" +description: |- + The host_set resource allows you to configure a Boundary host set. Host sets are always part of a host catalog, so a host catalog resource should be used inline or you should have the host catalog ID in hand to successfully configure a host set. +--- + +# Resource `boundary_host_set` + +The host_set resource allows you to configure a Boundary host set. Host sets are always part of a host catalog, so a host catalog resource should be used inline or you should have the host catalog ID in hand to successfully configure a host set. + +## Example Usage + +```terraform +resource "boundary_scope" "org" { + name = "organization_one" + description = "My first scope!" + scope_id = "global" + auto_create_role = true +} + +resource "boundary_scope" "project" { + name = "project_one" + description = "My first scope!" + scope_id = boundary_scope.org.id + auto_create_role = true +} + +resource "boundary_host_catalog" "static" { + scope_id = boundary_scope.project.id +} + +resource "boundary_host" "1" { + name = "host_1" + description = "My first host!" + address = "10.0.0.1" + host_catalog_id = boundary_host_catalog.static.id + scope_id = boundary_scope.project.id +} + +resource "boundary_host" "2" { + name = "host_2" + description = "My second host!" + address = "10.0.0.2" + host_catalog_id = boundary_host_catalog.static.id + scope_id = boundary_scope.project.id +} + +resource "boundary_host_set" "web" { + host_catalog_id = boundary_host_catalog.static.id + host_ids = [ + boundary_host.1.id, + boundary_host.2.id, + ] +} +``` + +## Schema + +### Required + +- **host_catalog_id** (String, Required) The catalog for the hostset. +- **type** (String, Required) + +### Optional + +- **description** (String, Optional) The hostset description. +- **host_ids** (Set of String, Optional) The list of host IDs contained in this set. +- **id** (String, Optional) The ID of this resource. +- **name** (String, Optional) The hostset name. Defaults to the resource name. + + diff --git a/website/docs/r/resource_role.html.markdown b/docs/resources/role.md similarity index 63% rename from website/docs/r/resource_role.html.markdown rename to docs/resources/role.md index f382a9dc..db79425f 100644 --- a/website/docs/r/resource_role.html.markdown +++ b/docs/resources/role.md @@ -1,22 +1,23 @@ --- -layout: "boundary" -page_title: "Boundary: role_resource" -sidebar_current: "docs-boundary-role-resource" +page_title: "boundary_role Resource - terraform-provider-boundary" +subcategory: "" description: |- - Role resource for the Boundary Terraform provider. + The role resource allows you to configure a Boundary role. --- -# role_resource -The role resource allows you to configure a Boundary role. +# Resource `boundary_role` + +The role resource allows you to configure a Boundary role. ## Example Usage + Basic usage: -```hcl +```terraform resource "boundary_scope" "org" { name = "organization_one" description = "My first scope!" - scope_id = "global" + scope_id = "global" auto_create_role = true } @@ -29,11 +30,11 @@ resource "boundary_role" "example" { Usage with a user resource: -```hcl +```terraform resource "boundary_scope" "org" { name = "organization_one" description = "My first scope!" - scope_id = "global" + scope_id = "global" auto_create_role = true } @@ -53,16 +54,15 @@ resource "boundary_role" "example" { principals = [boundary_user.foo.id, boundary_user.bar.id] scope_id = boundary_scope.org.id } - ``` Usage with user and grants resource: -```hcl +```terraform resource "boundary_scope" "org" { name = "organization_one" description = "My first scope!" - scope_id = "global" + scope_id = "global" auto_create_role = true } @@ -83,11 +83,11 @@ resource "boundary_role" "readonly" { Usage for a project-specific role: -```hcl +```terraform resource "boundary_scope" "org" { name = "organization_one" description = "My first scope!" - scope_id = "global" + scope_id = "global" auto_create_role = true } @@ -113,11 +113,18 @@ resource "boundary_role" "readonly" { } ``` -## Argument Reference +## Schema -The following arguments are optional: -* `description` - The role description. -* `grants` - A list of stringified grants for the role. -* `name` - The role name. Defaults to the resource name. -* `principals` - A list of principal (user or group) IDs to add as principals on the role. -* `scope_id` - The scope ID in which the resource is created. Defaults to the provider's `default_scope` if unset. +### Required + +- **scope_id** (String, Required) The scope ID in which the resource is created. Defaults to the provider's `default_scope` if unset. + +### Optional + +- **default_role** (Boolean, Optional) Indicates that the role containing this value is the default role (that is, has the id 'r_default'), which triggers some specialized behavior to allow it to be imported and managed. +- **description** (String, Optional) The role description. +- **grant_scope_id** (String, Optional) +- **grant_strings** (Set of String, Optional) A list of stringified grants for the role. +- **id** (String, Optional) The ID of this resource. +- **name** (String, Optional) The role name. Defaults to the resource name. +- **principal_ids** (Set of String, Optional) A list of principal (user or group) IDs to add as principals on the role. diff --git a/docs/resources/scope.md b/docs/resources/scope.md new file mode 100644 index 00000000..33e3d569 --- /dev/null +++ b/docs/resources/scope.md @@ -0,0 +1,76 @@ +--- +page_title: "boundary_scope Resource - terraform-provider-boundary" +subcategory: "" +description: |- + The scope resource allows you to configure a Boundary scope. +--- + +# Resource `boundary_scope` + +The scope resource allows you to configure a Boundary scope. + +## Example Usage + +Creating the global scope: + +```terraform +resource "boundary_scope" "global" { + global_scope = true + scope_id = "global" + auto_create_role = true +} +``` + +Creating an organization scope within global: + +```terraform +resource "boundary_scope" "org" { + name = "organization_one" + description = "My first scope!" + scope_id = boundary_scope.global.id + auto_create_role = true +} +``` + +Creating an project scope within an organization: + +```terraform +resource "boundary_scope" "project" { + name = "project_one" + description = "My first scope!" + scope_id = boundary_scope.org.id + auto_create_role = true +} +``` + +Creating an organization scope with a managed role for administration (auto create role set false): + +```terraform +resource "boundary_scope" "org" { + name = "organization_one" + description = "My first scope!" + scope_id = boundary_scope.global.id +} + +resource "boundary_role" "org_admin" { + scope_id = boundary_scope.global.id + grant_scope_id = boundary_scope.org.id + grant_strings = ["id=*;type=*;actions=*"] + principal_ids = ["u_auth"] +} +``` + +## Schema + +### Required + +- **scope_id** (String, Required) The scope ID containing the sub scope resource. + +### Optional + +- **auto_create_admin_role** (Boolean, Optional) If set, when a new scope is created, the provider will not disable the functionality that automatically creates a role in the new scope and gives permissions to manage the scope to the provider's user. Marking this true makes for simpler HCL but results in role resources that are unmanaged by Terraform. +- **auto_create_default_role** (Boolean, Optional) If set, when a new scope is created, the provider will not disable the functionality that automatically creates a role in the new scope and gives listing of scopes and auth methods and the ability to authenticate to the anonymous user. Marking this true makes for simpler HCL but results in role resources that are unmanaged by Terraform. +- **description** (String, Optional) The scope description. +- **global_scope** (Boolean, Optional) Indicates that the scope containing this value is the global scope, which triggers some specialized behavior to allow it to be imported and managed. +- **id** (String, Optional) The ID of this resource. +- **name** (String, Optional) The scope name. Defaults to the resource name. diff --git a/docs/resources/target.md b/docs/resources/target.md new file mode 100644 index 00000000..81439101 --- /dev/null +++ b/docs/resources/target.md @@ -0,0 +1,94 @@ +--- +page_title: "boundary_target Resource - terraform-provider-boundary" +subcategory: "" +description: |- + The target resource allows you to configure a Boundary target. +--- + +# Resource `boundary_target` + +The target resource allows you to configure a Boundary target. + +## Example Usage + +```terraform +resource "boundary_scope" "global" { + global_scope = true + scope_id = "global" + auto_create_role = true +} + +resource "boundary_scope" "org" { + name = "organization_one" + description = "My first scope!" + scope_id = boundary_scope.global.id + auto_create_role = true +} + +resource "boundary_scope" "project" { + name = "project_one" + description = "My first scope!" + scope_id = boundary_scope.org.id + auto_create_role = true +} + +resource "boundary_host_catalog" "foo" { + name = "test" + description = "test catalog" + scope_id = boundary_scope.project.id + type = "static" +} + +resource "boundary_host" "foo" { + name = "foo" + host_catalog_id = boundary_host_catalog.foo.id + scope_id = boundary_scope.project.id + address = "10.0.0.1" +} + +resource "boundary_host" "bar" { + name = "bar" + host_catalog_id = boundary_host_catalog.foo.id + scope_id = boundary_scope.project.id + address = "10.0.0.1" +} + +resource "boundary_host_set" "foo" { + name = "foo" + host_catalog_id = boundary_host_catalog.foo.id + + host_ids = [ + boundary_host.foo.id, + boundary_host.bar.id, + ] +} + +resource "boundary_target" "foo" { + name = "foo" + description = "Foo target" + default_port = "22" + scope_id = boundary_scope.project.id + host_set_ids = [ + boundary_host_set.foo.id + ] +} +``` + +## Schema + +### Required + +- **scope_id** (String, Required) The scope ID in which the resource is created. Defaults to the provider's `default_scope` if unset. +- **type** (String, Required) The target resource type. + +### Optional + +- **default_port** (Number, Optional) The default port for this target. +- **description** (String, Optional) The target description. +- **host_set_ids** (Set of String, Optional) A list of host set ID's. +- **id** (String, Optional) The ID of this resource. +- **name** (String, Optional) The target name. Defaults to the resource name. +- **session_connection_limit** (Number, Optional) +- **session_max_seconds** (Number, Optional) + + diff --git a/docs/resources/user.md b/docs/resources/user.md new file mode 100644 index 00000000..a1e5e71c --- /dev/null +++ b/docs/resources/user.md @@ -0,0 +1,55 @@ +--- +page_title: "boundary_user Resource - terraform-provider-boundary" +subcategory: "" +description: |- + The user resource allows you to configure a Boundary user. +--- + +# Resource `boundary_user` + +The user resource allows you to configure a Boundary user. + +## Example Usage + +```terraform +resource "boundary_scope" "org" { + name = "organization_one" + description = "My first scope!" + scope_id = "global" + auto_create_role = true +} + +resource "boundary_auth_method" "password" { + scope_id = boundary_scope.org.id + type = "password" +} + +resource "boundary_account" "jeff" { + auth_method_id = boundary_auth_method.password.id + type = "password" + login_name = "jeff" + password = "$uper$ecure" +} + +resource "boundary_user" "jeff" { + name = "jeff" + description = "Jeff's user resource" + account_ids = [boundary_account.jeff.id] + scope_id = boundary_scope.org.id +} +``` + +## Schema + +### Required + +- **scope_id** (String, Required) The scope ID in which the resource is created. Defaults to the provider's `default_scope` if unset. + +### Optional + +- **account_ids** (Set of String, Optional) Account ID's to associate with this user resource. +- **description** (String, Optional) The user description. +- **id** (String, Optional) The ID of this resource. +- **name** (String, Optional) The username. Defaults to the resource name. + + diff --git a/examples/provider/provider.tf b/examples/provider/provider.tf new file mode 100644 index 00000000..88d5afb0 --- /dev/null +++ b/examples/provider/provider.tf @@ -0,0 +1,6 @@ +provider "boundary" { + addr = "http://127.0.0.1:9200" + auth_method_id = "ampw_1234567890" # changeme + password_auth_method_login_name = "myuser" # changeme + password_auth_method_password = "passpass" # changeme +} diff --git a/examples/resources/boundary_account/resource.tf b/examples/resources/boundary_account/resource.tf new file mode 100644 index 00000000..4cea4f6a --- /dev/null +++ b/examples/resources/boundary_account/resource.tf @@ -0,0 +1,18 @@ +resource "boundary_scope" "org" { + name = "organization_one" + description = "My first scope!" + scope_id = "global" + auto_create_role = true +} + +resource "boundary_auth_method" "password" { + scope_id = boundary_scope.org.id + type = "password" +} + +resource "boundary_account" "jeff" { + auth_method_id = boundary_auth_method.password.id + type = "password" + login_name = "jeff" + password = "$uper$ecure" +} diff --git a/examples/resources/boundary_auth_method/resource.tf b/examples/resources/boundary_auth_method/resource.tf new file mode 100644 index 00000000..7a2925a0 --- /dev/null +++ b/examples/resources/boundary_auth_method/resource.tf @@ -0,0 +1,11 @@ +resource "boundary_scope" "org" { + name = "organization_one" + description = "My first scope!" + scope_id = "global" + auto_create_role = true +} + +resource "boundary_auth_method" "password" { + scope_id = boundary_scope.org.id + type = "password" +} diff --git a/examples/resources/boundary_group/project-specific/resource.tf b/examples/resources/boundary_group/project-specific/resource.tf new file mode 100644 index 00000000..ebdc5c61 --- /dev/null +++ b/examples/resources/boundary_group/project-specific/resource.tf @@ -0,0 +1,25 @@ +resource "boundary_scope" "org" { + name = "organization_one" + description = "My first scope!" + scope_id = "global" + auto_create_role = true +} + +resource "boundary_scope" "project" { + name = "project_one" + description = "My first scope!" + scope_id = boundary_scope.org.id + auto_create_role = true +} + +resource "boundary_user" "foo" { + description = "foo user" + scope_id = boundary_scope.org.id +} + +resource "boundary_group" "example" { + name = "My group" + description = "My first group!" + member_ids = [boundary_user.foo.id] + scope_id = boundary_scope.project.id +} diff --git a/examples/resources/boundary_group/simple/resource.tf b/examples/resources/boundary_group/simple/resource.tf new file mode 100644 index 00000000..fe348f27 --- /dev/null +++ b/examples/resources/boundary_group/simple/resource.tf @@ -0,0 +1,18 @@ +resource "boundary_scope" "org" { + name = "organization_one" + description = "My first scope!" + scope_id = "global" + auto_create_role = true +} + +resource "boundary_user" "foo" { + description = "foo user" + scope_id = boundary_scope.org.id +} + +resource "boundary_group" "example" { + name = "My group" + description = "My first group!" + member_ids = [boundary_user.foo.id] + scope_id = boundary_scope.org.id +} diff --git a/examples/resources/boundary_host/resource.tf b/examples/resources/boundary_host/resource.tf new file mode 100644 index 00000000..6f7bccef --- /dev/null +++ b/examples/resources/boundary_host/resource.tf @@ -0,0 +1,20 @@ +resource "boundary_scope" "org" { + name = "organization_one" + description = "My first scope!" + scope_id = "global" + auto_create_role = true +} + +resource "boundary_scope" "project" { + name = "project_one" + description = "My first scope!" + scope_id = boundary_scope.org.id + auto_create_role = true +} + +resource "boundary_host" "example" { + name = "My catalog" + description = "My first host!" + address = "10.0.0.1" + scope_id = boundary_scope.project.id +} diff --git a/examples/resources/boundary_host_catalog/resource.tf b/examples/resources/boundary_host_catalog/resource.tf new file mode 100644 index 00000000..26a3cf9a --- /dev/null +++ b/examples/resources/boundary_host_catalog/resource.tf @@ -0,0 +1,20 @@ +resource "boundary_scope" "org" { + name = "organization_one" + description = "My first scope!" + scope_id = boundary_scope.global.id + auto_create_role = true +} + +resource "boundary_scope" "project" { + name = "project_one" + description = "My first scope!" + scope_id = boundary_scope.org.id + auto_create_role = true +} + +resource "boundary_host_catalog" "example" { + name = "My catalog" + description = "My first host catalog!" + type = "Static" + scope_id = boundary_scope.project.id +} diff --git a/website/docs/r/resource_host_set.html.markdown b/examples/resources/boundary_host_set/resource.tf similarity index 53% rename from website/docs/r/resource_host_set.html.markdown rename to examples/resources/boundary_host_set/resource.tf index 278bc4f0..88b2110c 100644 --- a/website/docs/r/resource_host_set.html.markdown +++ b/examples/resources/boundary_host_set/resource.tf @@ -1,24 +1,7 @@ ---- -layout: "boundary" -page_title: "Boundary: hostset_resource" -sidebar_current: "docs-boundary-hostset-catalog-resource" -description: |- - Hostset resource for the Boundary Terraform provider. ---- - -# host_set_resource -The host_set resource allows you to configure a Boundary host set. Host sets are -always part of a host catalog, so a host catalog resource should be used inline -or you should have the host catalog ID in hand to successfully configure a host -set. - -## Example Usage - -```hcl resource "boundary_scope" "org" { name = "organization_one" description = "My first scope!" - scope_id = "global" + scope_id = "global" auto_create_role = true } @@ -51,19 +34,8 @@ resource "boundary_host" "2" { resource "boundary_host_set" "web" { host_catalog_id = boundary_host_catalog.static.id - host_ids = [ + host_ids = [ boundary_host.1.id, boundary_host.2.id, ] } -``` - -## Argument Reference - -The following arguments are required: -* `host_catalog_id`- The catalog for the hostset. - -The following arguments are optional: -* `name` - The hostset name. Defaults to the resource name. -* `description` - The hostset description. -* `host_ids` - The list of host IDs contained in this set. diff --git a/examples/resources/boundary_role/project-specific/resource.tf b/examples/resources/boundary_role/project-specific/resource.tf new file mode 100644 index 00000000..8a8bb9f8 --- /dev/null +++ b/examples/resources/boundary_role/project-specific/resource.tf @@ -0,0 +1,27 @@ +resource "boundary_scope" "org" { + name = "organization_one" + description = "My first scope!" + scope_id = "global" + auto_create_role = true +} + +resource "boundary_scope" "project" { + name = "project_one" + description = "My first scope!" + scope_id = boundary_scope.org.id + auto_create_role = true +} + +resource "boundary_user" "readonly" { + name = "readonly" + description = "A readonly user" + scope_id = boundary_scope.org.id +} + +resource "boundary_role" "readonly" { + name = "readonly" + description = "A readonly role" + principals = [boundary_user.readonly.id] + grants = ["id=*;action=read"] + scope_id = boundary_scope.project.id +} diff --git a/examples/resources/boundary_role/simple/resource.tf b/examples/resources/boundary_role/simple/resource.tf new file mode 100644 index 00000000..41e65fd5 --- /dev/null +++ b/examples/resources/boundary_role/simple/resource.tf @@ -0,0 +1,12 @@ +resource "boundary_scope" "org" { + name = "organization_one" + description = "My first scope!" + scope_id = "global" + auto_create_role = true +} + +resource "boundary_role" "example" { + name = "My role" + description = "My first role!" + scope_id = boundary_scope.org.id +} diff --git a/examples/resources/boundary_role/user-grants/resource.tf b/examples/resources/boundary_role/user-grants/resource.tf new file mode 100644 index 00000000..ed82b6b6 --- /dev/null +++ b/examples/resources/boundary_role/user-grants/resource.tf @@ -0,0 +1,20 @@ +resource "boundary_scope" "org" { + name = "organization_one" + description = "My first scope!" + scope_id = "global" + auto_create_role = true +} + +resource "boundary_user" "readonly" { + name = "readonly" + description = "A readonly user" + scope_id = boundary_scope.org.id +} + +resource "boundary_role" "readonly" { + name = "readonly" + description = "A readonly role" + principals = [boundary_user.readonly.id] + grants = ["id=*;action=read"] + scope_id = boundary_scope.org.id +} diff --git a/examples/resources/boundary_role/user/resource.tf b/examples/resources/boundary_role/user/resource.tf new file mode 100644 index 00000000..e5e40807 --- /dev/null +++ b/examples/resources/boundary_role/user/resource.tf @@ -0,0 +1,23 @@ +resource "boundary_scope" "org" { + name = "organization_one" + description = "My first scope!" + scope_id = "global" + auto_create_role = true +} + +resource "boundary_user" "foo" { + name = "User 1" + scope_id = boundary_scope.org.id +} + +resource "boundary_user" "bar" { + name = "User 2" + scope_id = boundary_scope.org.id +} + +resource "boundary_role" "example" { + name = "My role" + description = "My first role!" + principals = [boundary_user.foo.id, boundary_user.bar.id] + scope_id = boundary_scope.org.id +} diff --git a/examples/resources/boundary_scope/global.tf b/examples/resources/boundary_scope/global.tf new file mode 100644 index 00000000..c2a60309 --- /dev/null +++ b/examples/resources/boundary_scope/global.tf @@ -0,0 +1,5 @@ +resource "boundary_scope" "global" { + global_scope = true + scope_id = "global" + auto_create_role = true +} diff --git a/examples/resources/boundary_scope/organization.tf b/examples/resources/boundary_scope/organization.tf new file mode 100644 index 00000000..4aefe2ca --- /dev/null +++ b/examples/resources/boundary_scope/organization.tf @@ -0,0 +1,6 @@ +resource "boundary_scope" "org" { + name = "organization_one" + description = "My first scope!" + scope_id = boundary_scope.global.id + auto_create_role = true +} diff --git a/examples/resources/boundary_scope/project.tf b/examples/resources/boundary_scope/project.tf new file mode 100644 index 00000000..671cea0f --- /dev/null +++ b/examples/resources/boundary_scope/project.tf @@ -0,0 +1,6 @@ +resource "boundary_scope" "project" { + name = "project_one" + description = "My first scope!" + scope_id = boundary_scope.org.id + auto_create_role = true +} diff --git a/examples/resources/boundary_scope/role.tf b/examples/resources/boundary_scope/role.tf new file mode 100644 index 00000000..f6a2cbbb --- /dev/null +++ b/examples/resources/boundary_scope/role.tf @@ -0,0 +1,12 @@ +resource "boundary_scope" "org" { + name = "organization_one" + description = "My first scope!" + scope_id = boundary_scope.global.id +} + +resource "boundary_role" "org_admin" { + scope_id = boundary_scope.global.id + grant_scope_id = boundary_scope.org.id + grant_strings = ["id=*;type=*;actions=*"] + principal_ids = ["u_auth"] +} diff --git a/examples/resources/boundary_target/resource.tf b/examples/resources/boundary_target/resource.tf new file mode 100644 index 00000000..a0312dd1 --- /dev/null +++ b/examples/resources/boundary_target/resource.tf @@ -0,0 +1,60 @@ +resource "boundary_scope" "global" { + global_scope = true + scope_id = "global" + auto_create_role = true +} + +resource "boundary_scope" "org" { + name = "organization_one" + description = "My first scope!" + scope_id = boundary_scope.global.id + auto_create_role = true +} + +resource "boundary_scope" "project" { + name = "project_one" + description = "My first scope!" + scope_id = boundary_scope.org.id + auto_create_role = true +} + +resource "boundary_host_catalog" "foo" { + name = "test" + description = "test catalog" + scope_id = boundary_scope.project.id + type = "static" +} + +resource "boundary_host" "foo" { + name = "foo" + host_catalog_id = boundary_host_catalog.foo.id + scope_id = boundary_scope.project.id + address = "10.0.0.1" +} + +resource "boundary_host" "bar" { + name = "bar" + host_catalog_id = boundary_host_catalog.foo.id + scope_id = boundary_scope.project.id + address = "10.0.0.1" +} + +resource "boundary_host_set" "foo" { + name = "foo" + host_catalog_id = boundary_host_catalog.foo.id + + host_ids = [ + boundary_host.foo.id, + boundary_host.bar.id, + ] +} + +resource "boundary_target" "foo" { + name = "foo" + description = "Foo target" + default_port = "22" + scope_id = boundary_scope.project.id + host_set_ids = [ + boundary_host_set.foo.id + ] +} diff --git a/examples/resources/boundary_user/resource.tf b/examples/resources/boundary_user/resource.tf new file mode 100644 index 00000000..0104e97f --- /dev/null +++ b/examples/resources/boundary_user/resource.tf @@ -0,0 +1,25 @@ +resource "boundary_scope" "org" { + name = "organization_one" + description = "My first scope!" + scope_id = "global" + auto_create_role = true +} + +resource "boundary_auth_method" "password" { + scope_id = boundary_scope.org.id + type = "password" +} + +resource "boundary_account" "jeff" { + auth_method_id = boundary_auth_method.password.id + type = "password" + login_name = "jeff" + password = "$uper$ecure" +} + +resource "boundary_user" "jeff" { + name = "jeff" + description = "Jeff's user resource" + account_ids = [boundary_account.jeff.id] + scope_id = boundary_scope.org.id +} diff --git a/go.mod b/go.mod index 3dc0a1dd..5d17b3de 100644 --- a/go.mod +++ b/go.mod @@ -1,29 +1,31 @@ module github.com/hashicorp/terraform-provider-boundary -go 1.13 +go 1.15 require ( - cloud.google.com/go v0.66.0 // indirect + cloud.google.com/go v0.68.0 // indirect cloud.google.com/go/storage v1.11.0 // indirect github.com/Azure/azure-sdk-for-go v46.4.0+incompatible // indirect - github.com/Azure/go-autorest/autorest/azure/auth v0.5.2 // indirect + github.com/Azure/go-autorest/autorest/azure/auth v0.5.3 // indirect github.com/Azure/go-autorest/autorest/to v0.4.0 // indirect github.com/Azure/go-autorest/autorest/validation v0.3.0 // indirect github.com/DataDog/datadog-go v4.0.0+incompatible // indirect github.com/agext/levenshtein v1.2.3 // indirect - github.com/aliyun/alibaba-cloud-sdk-go v1.61.530 // indirect - github.com/aws/aws-sdk-go v1.34.32 // indirect + github.com/aliyun/alibaba-cloud-sdk-go v1.61.545 // indirect + github.com/aws/aws-sdk-go v1.35.4 // indirect github.com/cenkalti/backoff/v3 v3.2.2 // indirect github.com/circonus-labs/circonusllhist v0.1.4 // indirect github.com/containerd/continuity v0.0.0-20200710164510-efbc4488d8fe // indirect github.com/golang/snappy v0.0.2 // indirect - github.com/hashicorp/boundary v0.1.0-beta.1.0.20201001145154-fa700dc00278 + github.com/hashicorp/boundary v0.1.0-beta.3 github.com/hashicorp/go-immutable-radix v1.3.0 // indirect github.com/hashicorp/go-kms-wrapping v0.5.16 github.com/hashicorp/golang-lru v0.5.4 // indirect github.com/hashicorp/hcl/v2 v2.6.0 // indirect - github.com/hashicorp/terraform-plugin-sdk/v2 v2.0.3 + github.com/hashicorp/terraform-plugin-docs v0.2.0 + github.com/hashicorp/terraform-plugin-sdk/v2 v2.0.4 github.com/hashicorp/yamux v0.0.0-20200609203250-aecfd211c9ce // indirect + github.com/mattn/go-colorable v0.1.8 // indirect github.com/mitchellh/go-homedir v1.1.0 github.com/mitchellh/go-testing-interface v1.14.1 // indirect github.com/mitchellh/go-wordwrap v1.0.1 // indirect @@ -32,10 +34,10 @@ require ( github.com/prometheus/common v0.14.0 // indirect github.com/prometheus/procfs v0.2.0 // indirect github.com/tv42/httpunix v0.0.0-20191220191345-2ba4b9c3382c // indirect - github.com/ulikunitz/xz v0.5.8 // indirect github.com/zclconf/go-cty v1.6.1 // indirect - golang.org/x/net v0.0.0-20200925080053-05aa5d4ee321 // indirect - golang.org/x/sys v0.0.0-20200926100807-9d91bd62050c // indirect + golang.org/x/net v0.0.0-20201006153459-a7d1128ccaa0 // indirect + golang.org/x/sys v0.0.0-20201006155630-ac719f4daadf // indirect google.golang.org/api v0.32.0 // indirect - gopkg.in/ini.v1 v1.61.0 // indirect + google.golang.org/genproto v0.0.0-20201006033701-bcad7cf615f2 // indirect + gopkg.in/ini.v1 v1.62.0 // indirect ) diff --git a/go.sum b/go.sum index e3d0f5b5..9df23bf6 100644 --- a/go.sum +++ b/go.sum @@ -22,12 +22,15 @@ cloud.google.com/go v0.60.0/go.mod h1:yw2G51M9IfRboUH61Us8GqCeF1PzPblB823Mn2q2eA cloud.google.com/go v0.61.0 h1:NLQf5e1OMspfNT1RAHOB3ublr1TW3YTXO8OiWwVjK2U= cloud.google.com/go v0.61.0/go.mod h1:XukKJg4Y7QsUu0Hxg3qQKUWR4VuWivmyMK2+rUyxAqw= cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= +cloud.google.com/go v0.63.0/go.mod h1:GmezbQc7T2snqkEXWfZ0sy0VfkB/ivI2DdtJL2DEmlg= cloud.google.com/go v0.64.0 h1:xVP3LPvMjGT4J0a55y02Gw5y/dkY/rxGz58sfK1jqIo= cloud.google.com/go v0.64.0/go.mod h1:xfORb36jGvE+6EexW71nMEtL025s3x6xvuYUKM4JLv4= cloud.google.com/go v0.65.0 h1:Dg9iHVQfrhq82rUNu9ZxUDrJLaxFUe/HlCVaLyRruq8= cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= cloud.google.com/go v0.66.0 h1:DZeAkuQGQqnm9Xv36SbMJEU8aFBz4wL04UpMWPWwjzg= cloud.google.com/go v0.66.0/go.mod h1:dgqGAjKCDxyhGTtC9dAREQGUJpkceNm1yt590Qno0Ko= +cloud.google.com/go v0.68.0 h1:AnVkaPGAuWaIY/8a75HlNzZNrHDee6YL4rWkwS+CeyE= +cloud.google.com/go v0.68.0/go.mod h1:91NO4SCDjUfe1zeC0f4/dpckkUNpuNEyqm4X2KLrzNQ= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0 h1:xE3CPsOgttP4ACBePh79zTKALtXwn/Edhcr16R5hMWU= @@ -48,6 +51,7 @@ cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIA 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/spanner v1.8.0/go.mod h1:mdAPDiFUbE9vCmhHHlxyDUtaPPsIK+pUdf5KmHaUfT8= +cloud.google.com/go/spanner v1.9.0/go.mod h1:xvlEn0NZ5v1iJPYsBnUVRDNvccDxsBTEi16pJRKQVws= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= cloud.google.com/go/storage v1.5.0 h1:RPUcBvDeYgQFMfQu1eBMq6piD1SXmLH+vK3qjewZPus= cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= @@ -75,6 +79,8 @@ github.com/Azure/go-autorest/autorest v0.10.1 h1:uaB8A32IZU9YKs9v50+/LWIWTDHJk2v github.com/Azure/go-autorest/autorest v0.10.1/go.mod h1:/FALq9T/kS7b5J5qsQ+RSTUdAmGFqi0vUdVNNx8q630= github.com/Azure/go-autorest/autorest v0.11.6 h1:LIzfhNo9I3+il0KO2JY1/lgJmjig7lY0wFulQNZkbtg= github.com/Azure/go-autorest/autorest v0.11.6/go.mod h1:V6p3pKZx1KKkJubbxnDWrzNhEIfOy/pTGasLqzHIPHs= +github.com/Azure/go-autorest/autorest v0.11.9 h1:P0ZF0dEYoUPUVDQo3mA1CvH5b8mKev7DDcmTwauuNME= +github.com/Azure/go-autorest/autorest v0.11.9/go.mod h1:eipySxLmqSyC5s5k1CLupqet0PSENBEDP93LQ9a8QYw= 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= github.com/Azure/go-autorest/autorest/adal v0.8.1/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q= @@ -82,14 +88,20 @@ github.com/Azure/go-autorest/autorest/adal v0.8.2 h1:O1X4oexUxnZCaEUGsvMnr8ZGj8H github.com/Azure/go-autorest/autorest/adal v0.8.2/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q= github.com/Azure/go-autorest/autorest/adal v0.9.4 h1:1/DtH4Szusk4psLBrJn/gocMRIf1ji30WAz3GfyULRQ= github.com/Azure/go-autorest/autorest/adal v0.9.4/go.mod h1:/3SMAM86bP6wC9Ev35peQDUeqFZBMH07vvUOmg4z/fE= +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/auth v0.5.2 h1:R1pgoZkhXuv4+0ky9r3e5pcnRXWcXGIuPXpC/xkc7uI= github.com/Azure/go-autorest/autorest/azure/auth v0.5.2/go.mod h1:q98IH4qgc3eWM4/WOeR5+YPmBuy8Lq0jNRDwSM0CuFk= +github.com/Azure/go-autorest/autorest/azure/auth v0.5.3 h1:lZifaPRAk1bqg5vGqreL6F8uLC5V0fDpY8nFvc3boFc= +github.com/Azure/go-autorest/autorest/azure/auth v0.5.3/go.mod h1:4bJZhUhcq8LB20TruwHbAQsmUs2Xh+QR7utuJpLXX3A= 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/azure/cli v0.4.1 h1:jwcD1wURu0+hKceV04MubZmKLzwEYOCz6q4aOtVZ+Ng= github.com/Azure/go-autorest/autorest/azure/cli v0.4.1/go.mod h1:JfDgiIO1/RPu6z42AdQTyjOoCM2MFhLqSBDvMEkDgcg= +github.com/Azure/go-autorest/autorest/azure/cli v0.4.2 h1:dMOmEJfkLKW/7JsokJqkyoYSgmR08hi9KrhjZb+JALY= +github.com/Azure/go-autorest/autorest/azure/cli v0.4.2/go.mod h1:7qkJkT+j6b+hIpzMOwPChJhTqS8VbsqqgULzMNRugoM= 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 h1:yW+Zlqf26583pE43KhfnhFcdmSWlm5Ew6bxipnr/tbM= github.com/Azure/go-autorest/autorest/date v0.2.0/go.mod h1:vcORJHLJEh643/Ioh9+vPmf1Ij9AEBM5FuBIXLmIy0g= @@ -169,6 +181,8 @@ github.com/aliyun/alibaba-cloud-sdk-go v0.0.0-20190620160927-9418d7b0cd0f h1:oRD github.com/aliyun/alibaba-cloud-sdk-go v0.0.0-20190620160927-9418d7b0cd0f/go.mod h1:myCDvQSzCW+wB1WAlocEru4wMGJxy+vlxHdhegi1CDQ= github.com/aliyun/alibaba-cloud-sdk-go v1.61.530 h1:nWiPIMi6MUSoxJph1U2UDa1BmVMJraP290N+pn7kftA= github.com/aliyun/alibaba-cloud-sdk-go v1.61.530/go.mod h1:pUKYbK5JQ+1Dfxk80P0qxGqe5dkxDoabbZS7zOcouyA= +github.com/aliyun/alibaba-cloud-sdk-go v1.61.545 h1:JlwB4oyTQFRZ4owg+KGkA0DDHGfH1f2qdKNosqT/amg= +github.com/aliyun/alibaba-cloud-sdk-go v1.61.545/go.mod h1:pUKYbK5JQ+1Dfxk80P0qxGqe5dkxDoabbZS7zOcouyA= github.com/aliyun/aliyun-oss-go-sdk v0.0.0-20190307165228-86c17b95fcd5/go.mod h1:T/Aws4fEfogEE9v+HPhhw+CntffsBHJ8nXQCwKr0/g8= github.com/andybalholm/cascadia v1.1.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y= github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239 h1:kFOfPq6dUM1hTo4JG6LR5AXSUEsOjtdm0kw0FtQtMJA= @@ -215,6 +229,8 @@ github.com/aws/aws-sdk-go v1.30.27 h1:9gPjZWVDSoQrBO2AvqrWObS6KAZByfEJxQoCYo4ZfK github.com/aws/aws-sdk-go v1.30.27/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= github.com/aws/aws-sdk-go v1.34.32 h1:EHjowHEGXyLHWhcO7M7AVA+oA2c8aLE9WfRvqHwxd3A= github.com/aws/aws-sdk-go v1.34.32/go.mod h1:H7NKnBqNVzoTJpGfLrQkkD+ytBA93eiDYi/+8rV9s48= +github.com/aws/aws-sdk-go v1.35.4 h1:GG0sdhmzQSe4/UcF9iuQP9i+58bPRyU4OpujyzMlVjo= +github.com/aws/aws-sdk-go v1.35.4/go.mod h1:H7NKnBqNVzoTJpGfLrQkkD+ytBA93eiDYi/+8rV9s48= github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= github.com/baiyubin/aliyun-sts-go-sdk v0.0.0-20180326062324-cfa1a18b161f/go.mod h1:AuiFmCCPBSrqvVMvuqFuk0qogytodnVFVSN5CeJB8Gc= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= @@ -238,6 +254,7 @@ github.com/cenkalti/backoff/v3 v3.0.0 h1:ske+9nBpD9qZsTBoF41nW5L+AIuFBKMeze18XQ3 github.com/cenkalti/backoff/v3 v3.0.0/go.mod h1:cIeZDE3IrqwwJl6VUwCN6trj1oXrTS4rc0ij+ULvLYs= github.com/cenkalti/backoff/v3 v3.2.2 h1:cfUAAO3yvKMYKPrvhDuHSwQnhZNk/RMHKdZqKTxfm6M= github.com/cenkalti/backoff/v3 v3.2.2/go.mod h1:cIeZDE3IrqwwJl6VUwCN6trj1oXrTS4rc0ij+ULvLYs= +github.com/cenkalti/backoff/v4 v4.0.2/go.mod h1:eEew/i+1Q6OrCDZh3WiXYv3+nJwBASZ8Bog/87DQnVg= 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= @@ -349,6 +366,8 @@ github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga github.com/favadi/protoc-go-inject-tag v1.1.0/go.mod h1:13goAxKedbu5IbfI0n2wIKh1CCgZOwPNZQd0igDWvko= 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/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= github.com/frankban/quicktest v1.10.0 h1:Gfh+GAJZOAoKZsIZeZbdn2JF10kN1XHNvjsvQK8gVkE= @@ -502,6 +521,7 @@ github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXP github.com/goji/httpauth v0.0.0-20160601135302-2da839ab0f4d/go.mod h1:nnjvkQ9ptGaCkuDUx6wNykzzlUixGxvkme+H/lnzb+A= github.com/golang-migrate/migrate/v4 v4.12.2 h1:QI43Tlouiwpp2dK5Y767OouX0snJNRP/NubsVaArzDU= github.com/golang-migrate/migrate/v4 v4.12.2/go.mod h1:HQ1DaC8uLHkg4afY8ZQ8D/P5SG+YW9X5INZBVvm+d2k= +github.com/golang-migrate/migrate/v4 v4.13.0/go.mod h1:RUEXGkgYXTOdBY9Rbs9izc/SOalUK+dDi7YphFV/CUI= github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe h1:lXe2qZdvpiX5WZkZR4hgp4KJVfY3nMkvmwbVkpv1rVY= github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= @@ -616,14 +636,19 @@ github.com/grpc-ecosystem/grpc-gateway/v2 v2.0.0-beta.5/go.mod h1:fR9dOEfEyRM7lt github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed/go.mod h1:tMWxXQ9wFIaZeTI9F+hmhFiGpFmhOHzyShyFUhRm0H4= github.com/hashicorp/boundary v0.1.0-beta.1.0.20201001145154-fa700dc00278 h1:YP21FwAzTw5W3xZJN2w9GcYq0yCr6n4MmhFzYpVW8ms= github.com/hashicorp/boundary v0.1.0-beta.1.0.20201001145154-fa700dc00278/go.mod h1:BS5RWZUH8Y0Styc9k0oyWgJwtKreyYicKC2NZ3fO1Gc= +github.com/hashicorp/boundary v0.1.0-beta.3 h1:4v9WcKvZL1TVxfW1I/kV1MxJ5msa9IWh4S7zPG0Ssk4= +github.com/hashicorp/boundary v0.1.0-beta.3/go.mod h1:dzlfVFErEDtf36iqT5p1I+oXQvedvgcCAf0UVy+XMTE= github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/dbassert v0.0.0-20200928193136-88d5f2091187 h1:KULp/ad4VAihhHelqgAy7610xMVEsCIXQ9Tu+uK6Asg= github.com/hashicorp/dbassert v0.0.0-20200928193136-88d5f2091187/go.mod h1:+B5eZq7vXqN4Gxkgjm4ub1bwG6OTcYzFL0r+bMvWorg= +github.com/hashicorp/dbassert v0.0.0-20200930125617-6218396928df/go.mod h1:+B5eZq7vXqN4Gxkgjm4ub1bwG6OTcYzFL0r+bMvWorg= github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= +github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-checkpoint v0.5.0 h1:MFYpPZCnQqQTE18jFwSII6eUQrD/oxMFp3mlgcqk5mU= github.com/hashicorp/go-checkpoint v0.5.0/go.mod h1:7nfLNL10NsxqO4iWuW6tWW0HjZuDrwkBuEQsVcpCOgg= github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= @@ -633,8 +658,8 @@ github.com/hashicorp/go-cty v1.4.1-0.20200414143053-d3edf31b6320 h1:1/D3zfFHttUK github.com/hashicorp/go-cty v1.4.1-0.20200414143053-d3edf31b6320/go.mod h1:EiZBMaudVLy8fmjf9Npq1dq9RalhveqZG5w/yz3mHWs= github.com/hashicorp/go-getter v1.4.0 h1:ENHNi8494porjD0ZhIrjlAHnveSFhY7hvOJrV/fsKkw= github.com/hashicorp/go-getter v1.4.0/go.mod h1:7qxyCd8rBfcShwsvxgIguu4KbS3l8bUCwg2Umn7RjeY= -github.com/hashicorp/go-getter v1.4.2-0.20200106182914-9813cbd4eb02 h1:l1KB3bHVdvegcIf5upQ5mjcHjs2qsWnKh4Yr9xgIuu8= -github.com/hashicorp/go-getter v1.4.2-0.20200106182914-9813cbd4eb02/go.mod h1:7qxyCd8rBfcShwsvxgIguu4KbS3l8bUCwg2Umn7RjeY= +github.com/hashicorp/go-getter v1.5.0 h1:ciWJaeZWSMbc5OiLMpKp40MKFPqO44i0h3uyfXPBkkk= +github.com/hashicorp/go-getter v1.5.0/go.mod h1:a7z7NPPfNQpJWcn4rSWFtdrSldqLdLPEF3d8nFMsSLM= github.com/hashicorp/go-hclog v0.0.0-20180709165350-ff2cf002a8dd/go.mod h1:9bjs9uLqI8l75knNv3lV1kA55veR+WUPSiKIWcQHudI= github.com/hashicorp/go-hclog v0.8.0/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= github.com/hashicorp/go-hclog v0.9.2 h1:CG6TE5H9/JXsFWJCfoIVpKFIkFe6ysEuHirp4DxCsHI= @@ -711,14 +736,15 @@ github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2p github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= github.com/hashicorp/shared-secure-libs v0.0.2 h1:+izKlB8vxpBK+K6zNmB4DZtDEl1a7fB8JmqdBNhnhjs= github.com/hashicorp/shared-secure-libs v0.0.2/go.mod h1:xhtA0FH6AYYFOy0sir7u0O0zzdLi7ofU6oWxy+gjnuc= +github.com/hashicorp/terraform-exec v0.9.0/go.mod h1:tOT8j1J8rP05bZBGWXfMyU3HkLi1LWyqL3Bzsc3CJjo= github.com/hashicorp/terraform-exec v0.10.0 h1:3nh/1e3u9gYRUQGOKWp/8wPR7ABlL2F14sZMZBrp+dM= github.com/hashicorp/terraform-exec v0.10.0/go.mod h1:tOT8j1J8rP05bZBGWXfMyU3HkLi1LWyqL3Bzsc3CJjo= github.com/hashicorp/terraform-json v0.5.0 h1:7TV3/F3y7QVSuN4r9BEXqnWqrAyeOtON8f0wvREtyzs= github.com/hashicorp/terraform-json v0.5.0/go.mod h1:eAbqb4w0pSlRmdvl8fOyHAi/+8jnkVYN28gJkSJrLhU= -github.com/hashicorp/terraform-plugin-sdk/v2 v2.0.3 h1:X7VmKpcIxq+rIbuqe5TPN27KLzbO9aXQcjG4c5iC3tk= -github.com/hashicorp/terraform-plugin-sdk/v2 v2.0.3/go.mod h1:oz4kkpfTJ/hA2VMD0WpITTd3yPDGpT4uN7CiKdre/YI= -github.com/hashicorp/terraform-plugin-test/v2 v2.1.2 h1:p96IIn+XpvVjw7AtN8y9MKxn0x69S7wtbGf7JgDJoIk= -github.com/hashicorp/terraform-plugin-test/v2 v2.1.2/go.mod h1:jerO5mrd+jVNALy8aiq+VZOg/CR8T2T1QR3jd6JKGOI= +github.com/hashicorp/terraform-plugin-docs v0.2.0 h1:A1Uk+WIvU0B4VP4pBbTBP9bZJ9w9F8yoVGj7MC1vYc0= +github.com/hashicorp/terraform-plugin-docs v0.2.0/go.mod h1:4jopztPjeyZAr51wPzX4b8Ld8bFQKQ9dbF40JbCQIts= +github.com/hashicorp/terraform-plugin-sdk/v2 v2.0.4 h1:GYkUL3zjrZgig9Gm+/61+YglzESJxXRDMp7qhJsh4j0= +github.com/hashicorp/terraform-plugin-sdk/v2 v2.0.4/go.mod h1:GP0lmw4Y+XV1OfTmi/hK75t5KWGGzoOzEgUBPGZ6Wq4= github.com/hashicorp/vault/api v1.0.5-0.20200514164214-89b1987e38c2 h1:lfjJouPlC/inHjTOqe48N/BiLshU2YZqkxkUbNPj4fU= github.com/hashicorp/vault/api v1.0.5-0.20200514164214-89b1987e38c2/go.mod h1:P8A7gn1a6j/7qQ4zOaWI6FC/Q9jQWEBRTOwZH33tC9o= github.com/hashicorp/vault/api v1.0.5-0.20200519221902-385fac77e20f h1:PYtnlUZzFSZxPcq7mYp5oC9N+BcJ8IKYf6/EG0GHM2Y= @@ -769,6 +795,7 @@ github.com/jackc/pgconn v1.5.0/go.mod h1:QeD3lBfpTFe8WUnPZWN5KY/mB8FGMIYRdd8P8Jr github.com/jackc/pgconn v1.5.1-0.20200601181101-fa742c524853/go.mod h1:QeD3lBfpTFe8WUnPZWN5KY/mB8FGMIYRdd8P8Jr0fAI= github.com/jackc/pgconn v1.6.4 h1:S7T6cx5o2OqmxdHaXLH1ZeD1SbI8jBznyYE9Ec0RCQ8= github.com/jackc/pgconn v1.6.4/go.mod h1:w2pne1C2tZgP+TvjqLpOigGzNqjBgQW9dUw/4Chex78= +github.com/jackc/pgconn v1.7.0/go.mod h1:sF/lPpNEMEOp+IYhyQGdAvrG20gWf6A1tKlr0v7JMeA= github.com/jackc/pgio v1.0.0 h1:g12B9UwVnzGhueNavwioyEEpAmqMe1E/BN9ES+8ovkE= github.com/jackc/pgio v1.0.0/go.mod h1:oP+2QK2wFfUWgr+gxjoBH9KGBb31Eio69xUb0w5bYf8= github.com/jackc/pgmock v0.0.0-20190831213851-13a1b77aafa2 h1:JVX6jT/XfzNqIjye4717ITLaNwV9mWbJx0dLCpcRzdA= @@ -785,6 +812,7 @@ github.com/jackc/pgproto3/v2 v2.0.1 h1:Rdjp4NFjwHnEslx2b66FfCI2S0LhO4itac3hXz6WX github.com/jackc/pgproto3/v2 v2.0.1/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= github.com/jackc/pgproto3/v2 v2.0.2 h1:q1Hsy66zh4vuNsajBUF2PNqfAMMfxU5mk594lPE9vjY= github.com/jackc/pgproto3/v2 v2.0.2/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= +github.com/jackc/pgproto3/v2 v2.0.5/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= github.com/jackc/pgservicefile v0.0.0-20200307190119-3430c5407db8 h1:Q3tB+ExeflWUW7AFcAhXqk40s9mnNYLk1nOkKNZ5GnU= github.com/jackc/pgservicefile v0.0.0-20200307190119-3430c5407db8/go.mod h1:vsD4gTJCa9TptPL8sPkXrLZ+hDuNrZCnj29CQpr4X1E= github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b h1:C8S2+VttkHFdOOCXJe+YGfa4vHYwlt4Zx+IVXQ97jYg= @@ -797,6 +825,7 @@ github.com/jackc/pgtype v1.3.1-0.20200510190516-8cd94a14c75a/go.mod h1:vaogEUkAL github.com/jackc/pgtype v1.3.1-0.20200606141011-f6355165a91c/go.mod h1:cvk9Bgu/VzJ9/lxTO5R5sf80p0DiucVtN7ZxvaC4GmQ= github.com/jackc/pgtype v1.4.2 h1:t+6LWm5eWPLX1H5Se702JSBcirq6uWa4jiG4wV1rAWY= github.com/jackc/pgtype v1.4.2/go.mod h1:JCULISAZBFGrHaOXIIFiyfzW5VY0GRitRr8NeJsrdig= +github.com/jackc/pgtype v1.5.0/go.mod h1:JCULISAZBFGrHaOXIIFiyfzW5VY0GRitRr8NeJsrdig= github.com/jackc/pgx/v4 v4.0.0-20190420224344-cc3461e65d96/go.mod h1:mdxmSJJuR08CZQyj1PVQBHy9XOp5p8/SHH6a0psbY9Y= github.com/jackc/pgx/v4 v4.0.0-20190421002000-1b8f0016e912/go.mod h1:no/Y67Jkk/9WuGR0JG/JseM9irFbnEPbuWV2EELPNuM= github.com/jackc/pgx/v4 v4.0.0-pre1.0.20190824185557-6972a5742186/go.mod h1:X+GQnOEnf1dqHGpw7JmHqHc1NxDoalibchSk9/RWuDc= @@ -805,10 +834,12 @@ github.com/jackc/pgx/v4 v4.6.1-0.20200510190926-94ba730bb1e9/go.mod h1:t3/cdRQl6 github.com/jackc/pgx/v4 v4.6.1-0.20200606145419-4e5062306904/go.mod h1:ZDaNWkt9sW1JMiNn0kdYBaLelIhw7Pg4qd+Vk6tw7Hg= github.com/jackc/pgx/v4 v4.8.1 h1:SUbCLP2pXvf/Sr/25KsuI4aTxiFYIvpfk4l6aTSdyCw= github.com/jackc/pgx/v4 v4.8.1/go.mod h1:4HOLxrl8wToZJReD04/yB20GDwf4KBYETvlHciCnwW0= +github.com/jackc/pgx/v4 v4.9.0/go.mod h1:MNGWmViCgqbZck9ujOOBN63gK9XVGILXWCvKLGKmnms= github.com/jackc/puddle v0.0.0-20190413234325-e4ced69a3a2b/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jackc/puddle v1.1.0/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jackc/puddle v1.1.1/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= +github.com/jackc/puddle v1.1.2/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= 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/jcmturner/aescts/v2 v2.0.0 h1:9YKLH6ey7H4eDBXW8khjYslgyqG2xZikXP0EQFKrle8= @@ -936,6 +967,8 @@ github.com/mattn/go-colorable v0.1.6 h1:6Su7aK7lXmJ/U79bYtBjLNaha4Fs1Rg9plHpcH+v github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.7 h1:bQGKb3vps/j0E9GfJQ03JyhRuxsvdAanXlT9BTw3mdw= github.com/mattn/go-colorable v0.1.7/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-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.4 h1:bnP0vzxcAdeI1zdubAl5PjU6zsERjGZb7raWodagDYs= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= @@ -1005,6 +1038,7 @@ github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= +github.com/mutecomm/go-sqlcipher/v4 v4.4.0/go.mod h1:PyN04SaWalavxRGH9E8ZftG6Ju7rsPrGmQRjrEaVpiY= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/nakagami/firebirdsql v0.0.0-20190310045651-3c02a58cfed8/go.mod h1:86wM1zFnC6/uDBfZGNwB65O+pR2OFi5q/YQaEUid1qA= @@ -1074,6 +1108,7 @@ github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/9 github.com/pelletier/go-toml v1.4.0/go.mod h1:PN7xzY2wHTK0K9p34ErDQMlFxa51Fk0OUruD3k1mMwo= github.com/pelletier/go-toml v1.8.0/go.mod h1:D6yutnOGMveHEPV7VQOuvI/gXY61bv+9bAOTRnLElKs= github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= +github.com/pierrec/lz4 v1.0.1 h1:w6GMGWSsCI04fTM8wQRdnW74MuJISakuUU0onU0TYB4= github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pierrec/lz4 v2.5.2+incompatible h1:WCjObylUIOlKy/+7Abdn34TLIkXiA4UWUMhxq9m9ZXI= @@ -1148,6 +1183,8 @@ github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFR github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= github.com/rs/zerolog v1.13.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU= github.com/rs/zerolog v1.15.0/go.mod h1:xYTKnLHcpfU2225ny5qZjxnj9NvkumZYjJHlAThCjNc= +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/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= github.com/ryanuber/columnize v2.1.0+incompatible h1:j1Wcmh8OrK4Q7GXY+V7SVSY8nUWQxHW5TkBe7YUl+2s= @@ -1235,7 +1272,6 @@ github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVM github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= github.com/ulikunitz/xz v0.5.5 h1:pFrO0lVpTBXLpYw+pnLj6TbvHuyjXMfjGeCwSqCVwok= github.com/ulikunitz/xz v0.5.5/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/urfave/cli v0.0.0-20171014202726-7bc6a0acffa5/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= @@ -1266,6 +1302,7 @@ github.com/zalando/go-keyring v0.1.0 h1:ffq972Aoa4iHNzBlUHgK5Y+k8+r/8GvcGd80/OFZ github.com/zalando/go-keyring v0.1.0/go.mod h1:RaxNwUITJaHVdQ0VC7pELPZ3tOWn13nr0gZMZEhpVU0= 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.4.1/go.mod h1:nHzOclRkoj++EU9ZjSrZvRG0BXIWt8c7loYc0qXAFGQ= github.com/zclconf/go-cty v1.6.1 h1:wHtZ+LSSQVwUSb+XIJ5E9hgAQxyWATZsAWT+ESJ9dQ0= github.com/zclconf/go-cty v1.6.1/go.mod h1:VDR4+I79ubFBGm1uJac1226K5yANQFHeauxPBoP54+o= github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= @@ -1342,6 +1379,9 @@ golang.org/x/crypto v0.0.0-20200709230013-948cd5f35899 h1:DZhuSZLsGlFL4CmhA8BcRA golang.org/x/crypto v0.0.0-20200709230013-948cd5f35899/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a h1:vclmkQCjlDX5OydZ9wv8rBCcS0QyQY66Mpf/7BZbInM= golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200930160638-afb6bcd081ae/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0 h1:hb9wdF1z5waM+dSIICn1l0DkLVDT3hqhhQsDNUmHPRE= +golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -1391,6 +1431,7 @@ golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190225153610-fe579d43d832/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190320064053-1272bf9dcd53/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= @@ -1431,6 +1472,9 @@ golang.org/x/net v0.0.0-20200904194848-62affa334b73 h1:MXfv8rhZWmFeqX3GNZRsd6vOL golang.org/x/net v0.0.0-20200904194848-62affa334b73/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200925080053-05aa5d4ee321 h1:lleNcKRbcaC8MqgLwghIkzZ2JBQAb7QQ9MiwRt1BisA= golang.org/x/net v0.0.0-20200925080053-05aa5d4ee321/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200927032502-5d4f70055728/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20201006153459-a7d1128ccaa0 h1:wBouT66WTYFXdxfVdz9sVWARVd/2vfGcmI45D2gj45M= +golang.org/x/net v0.0.0-20201006153459-a7d1128ccaa0/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181106182150-f42d05182288/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1516,11 +1560,15 @@ golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200724161237-0e2f3a69832c h1:UIcGWL6/wpCfyGuJnRFJRurA+yj8RrW7Q6x2YMCXt6c= golang.org/x/sys v0.0.0-20200724161237-0e2f3a69832c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200817155316-9781c653f443/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200826173525-f9321e4c35a6/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200828194041-157a740278f4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200926100807-9d91bd62050c h1:38q6VNPWR010vN82/SB121GujZNIfAUb4YttE2rhGuc= golang.org/x/sys v0.0.0-20200926100807-9d91bd62050c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201006155630-ac719f4daadf h1:Bg47KQy0JhTHuf4sLiQwTMKwUMfSDwgSGatrxGR7nLM= +golang.org/x/sys v0.0.0-20201006155630-ac719f4daadf/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 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= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1598,7 +1646,10 @@ golang.org/x/tools v0.0.0-20200717024301-6ddee64345a6/go.mod h1:njjCfa9FT2d7l9Bc golang.org/x/tools v0.0.0-20200725200936-102e7d357031/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200806022845-90696ccdc692/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200814230902-9882f1d1823d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200817023811-d00afeaade8f/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200818005847-188abfa75333/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200827163409-021d7c6f1ec3/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200828161849-5deb26317202 h1:DrWbY9UUFi/sl/3HkNVoBjDbGfIPZZfgoGsGxOL1EU8= @@ -1609,6 +1660,8 @@ golang.org/x/tools v0.0.0-20200915173823-2db8f0ff891c/go.mod h1:z6u4i615ZeAfBE4X golang.org/x/tools v0.0.0-20200921190806-0f52b63a40e8/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= golang.org/x/tools v0.0.0-20200924224222-8d73f17870ce h1:XRr763sMfaUSNR4EsxbddvVEqYFa9picrx6ks9pJkKw= golang.org/x/tools v0.0.0-20200924224222-8d73f17870ce/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= +golang.org/x/tools v0.0.0-20201001104356-43ebab892c4c/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= +golang.org/x/tools v0.0.0-20201002184944-ecd9fd270d5d/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1695,6 +1748,7 @@ google.golang.org/genproto v0.0.0-20200720141249-1244ee217b7e/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20200726014623-da3ae01ef02d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200806141610-86f49bd18e98/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200815001618-f69a88009b70 h1:wboULUXGF3c5qdUnKp+6gLAccE6PRpa/czkYvQ4UXv8= google.golang.org/genproto v0.0.0-20200815001618-f69a88009b70/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= @@ -1707,6 +1761,10 @@ google.golang.org/genproto v0.0.0-20200921165018-b9da36f5f452/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20200923140941-5646d36feee1/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200925023002-c2d885f95484 h1:Rr9EZdYRq2WLckzJQVtN3ISKoP7dvgwi7jbglILNZ34= google.golang.org/genproto v0.0.0-20200925023002-c2d885f95484/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201001141541-efaab9d3c4f7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201002142447-3860012362da/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201006033701-bcad7cf615f2 h1:rBG1miiV00OG3NTbgxg42kPWohjVNn1sGhJyt4xyPLQ= +google.golang.org/genproto v0.0.0-20201006033701-bcad7cf615f2/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/grpc v1.8.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= @@ -1773,6 +1831,8 @@ gopkg.in/ini.v1 v1.57.0 h1:9unxIsFcTt4I55uWluz+UmL95q4kdJ0buvQ1ZIqVQww= gopkg.in/ini.v1 v1.57.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.61.0 h1:LBCdW4FmFYL4s/vDZD1RQYX7oAR6IjujCYgMdbHBR10= gopkg.in/ini.v1 v1.61.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/ini.v1 v1.62.0 h1:duBzk771uxoUuOlyRLkHsygud9+5lrlGjdFBb4mSKDU= +gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/jcmturner/aescts.v1 v1.0.1/go.mod h1:nsR8qBOg+OucoIW+WMhB3GspUQXq9XorLnQb9XtvcOo= gopkg.in/jcmturner/dnsutils.v1 v1.0.1/go.mod h1:m3v+5svpVOhtFAP/wSz+yzh4Mc0Fg7eRhxkJMWSIz9Q= gopkg.in/jcmturner/goidentity.v3 v3.0.0/go.mod h1:oG2kH0IvSYNIu80dVAyu/yoefjq1mNfM5bm88whjWx4= diff --git a/internal/provider/provider.go b/internal/provider/provider.go index a94afc65..efb0bb6e 100644 --- a/internal/provider/provider.go +++ b/internal/provider/provider.go @@ -14,6 +14,11 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) +func init() { + // descriptions are written in markdown for docs + schema.DescriptionKind = schema.StringMarkdown +} + func New() *schema.Provider { p := &schema.Provider{ Schema: map[string]*schema.Schema{ diff --git a/internal/provider/provider_test.go b/internal/provider/provider_test.go index 02fec983..fb47f3ca 100644 --- a/internal/provider/provider_test.go +++ b/internal/provider/provider_test.go @@ -13,9 +13,6 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" ) -var testProvider *schema.Provider -var testProviders map[string]*schema.Provider - var ( tcLoginName = "user" tcPassword = "passpass" @@ -28,11 +25,10 @@ var ( tcRecoveryKey = "7xtkEoS5EXPbgynwd+dDLHopaCqK8cq0Rpep4eooaTs=" ) -func init() { - testProvider = New() - testProviders = map[string]*schema.Provider{ - "boundary": testProvider, - } +var providerFactories = map[string]func() (*schema.Provider, error){ + "boundary": func() (*schema.Provider, error) { + return New(), nil + }, } func testWrapper(t *testing.T, key string) wrapping.Wrapper { diff --git a/internal/provider/resource_account.go b/internal/provider/resource_account.go index cad92db2..dea48d40 100644 --- a/internal/provider/resource_account.go +++ b/internal/provider/resource_account.go @@ -18,36 +18,44 @@ const ( func resourceAccount() *schema.Resource { return &schema.Resource{ + Description: "The account resource allows you to configure a Boundary account.", + CreateContext: resourceAccountCreate, ReadContext: resourceAccountRead, UpdateContext: resourceAccountUpdate, DeleteContext: resourceAccountDelete, Schema: map[string]*schema.Schema{ NameKey: { - Type: schema.TypeString, - Optional: true, + Description: "The account name. Defaults to the resource name.", + Type: schema.TypeString, + Optional: true, }, DescriptionKey: { - Type: schema.TypeString, - Optional: true, + Description: "The account description.", + Type: schema.TypeString, + Optional: true, }, AuthMethodIdKey: { - Type: schema.TypeString, - Required: true, - ForceNew: true, + Description: "The resource ID for the authentication method.", + Type: schema.TypeString, + Required: true, + ForceNew: true, }, TypeKey: { - Type: schema.TypeString, - Required: true, - ForceNew: true, + Description: "The resource type.", + Type: schema.TypeString, + Required: true, + ForceNew: true, }, accountLoginNameKey: { - Type: schema.TypeString, - Optional: true, + Description: "The login name for this account.", + Type: schema.TypeString, + Optional: true, }, accountPasswordKey: { - Type: schema.TypeString, - Optional: true, + Description: "The account password.", + Type: schema.TypeString, + Optional: true, }, }, } diff --git a/internal/provider/resource_account_test.go b/internal/provider/resource_account_test.go index 50bc8f7b..c88b4c37 100644 --- a/internal/provider/resource_account_test.go +++ b/internal/provider/resource_account_test.go @@ -62,8 +62,8 @@ func TestAccAccount(t *testing.T) { url := tc.ApiAddrs()[0] resource.Test(t, resource.TestCase{ - Providers: testProviders, - CheckDestroy: testAccCheckAccountResourceDestroy(t), + ProviderFactories: providerFactories, + CheckDestroy: testAccCheckAccountResourceDestroy(t), Steps: []resource.TestStep{ { //create diff --git a/internal/provider/resource_auth_method.go b/internal/provider/resource_auth_method.go index 918332dc..de4ae79f 100644 --- a/internal/provider/resource_auth_method.go +++ b/internal/provider/resource_auth_method.go @@ -19,38 +19,46 @@ const ( func resourceAuthMethod() *schema.Resource { return &schema.Resource{ + Description: "The auth method resource allows you to configure a Boundary auth_method.", + CreateContext: resourceAuthMethodCreate, ReadContext: resourceAuthMethodRead, UpdateContext: resourceAuthMethodUpdate, DeleteContext: resourceAuthMethodDelete, Schema: map[string]*schema.Schema{ NameKey: { - Type: schema.TypeString, - Optional: true, + Description: "The auth method name. Defaults to the resource name.", + Type: schema.TypeString, + Optional: true, }, DescriptionKey: { - Type: schema.TypeString, - Optional: true, + Description: "The auth method description.", + Type: schema.TypeString, + Optional: true, }, ScopeIdKey: { - Type: schema.TypeString, - Required: true, - ForceNew: true, + Description: "The scope ID.", + Type: schema.TypeString, + Required: true, + ForceNew: true, }, TypeKey: { - Type: schema.TypeString, - Required: true, - ForceNew: true, + Description: "The resource type.", + Type: schema.TypeString, + Required: true, + ForceNew: true, }, authmethodMinLoginNameLengthKey: { - Type: schema.TypeInt, - Optional: true, - Computed: true, + Description: "The minimum login name length.", + Type: schema.TypeInt, + Optional: true, + Computed: true, }, authmethodMinPasswordLengthKey: { - Type: schema.TypeInt, - Optional: true, - Computed: true, + Description: "The minimum password length.", + Type: schema.TypeInt, + Optional: true, + Computed: true, }, }, } diff --git a/internal/provider/resource_auth_method_test.go b/internal/provider/resource_auth_method_test.go index b2d9138b..5836fd44 100644 --- a/internal/provider/resource_auth_method_test.go +++ b/internal/provider/resource_auth_method_test.go @@ -44,8 +44,8 @@ func TestAccAuthMethod(t *testing.T) { url := tc.ApiAddrs()[0] resource.Test(t, resource.TestCase{ - Providers: testProviders, - CheckDestroy: testAccCheckAuthMethodResourceDestroy(t), + ProviderFactories: providerFactories, + CheckDestroy: testAccCheckAuthMethodResourceDestroy(t), Steps: []resource.TestStep{ { //create diff --git a/internal/provider/resource_group.go b/internal/provider/resource_group.go index 1148070d..2fcbb4a9 100644 --- a/internal/provider/resource_group.go +++ b/internal/provider/resource_group.go @@ -16,28 +16,34 @@ const ( func resourceGroup() *schema.Resource { return &schema.Resource{ + Description: "The group resource allows you to configure a Boundary group.", + CreateContext: resourceGroupCreate, ReadContext: resourceGroupRead, UpdateContext: resourceGroupUpdate, DeleteContext: resourceGroupDelete, Schema: map[string]*schema.Schema{ NameKey: { - Type: schema.TypeString, - Optional: true, + Description: "The group name. Defaults to the resource name.", + Type: schema.TypeString, + Optional: true, }, DescriptionKey: { - Type: schema.TypeString, - Optional: true, + Description: "The group description.", + Type: schema.TypeString, + Optional: true, }, ScopeIdKey: { - Type: schema.TypeString, - Required: true, - ForceNew: true, + Description: "The scope ID in which the resource is created. Defaults to the provider's `default_scope` if unset.", + Type: schema.TypeString, + Required: true, + ForceNew: true, }, groupMemberIdsKey: { - Type: schema.TypeSet, - Optional: true, - Elem: &schema.Schema{Type: schema.TypeString}, + Description: "Resource IDs for group members, these are most likely boundary users.", + Type: schema.TypeSet, + Optional: true, + Elem: &schema.Schema{Type: schema.TypeString}, }, }, } diff --git a/internal/provider/resource_group_test.go b/internal/provider/resource_group_test.go index e205a064..61712039 100644 --- a/internal/provider/resource_group_test.go +++ b/internal/provider/resource_group_test.go @@ -120,8 +120,8 @@ func TestAccGroup(t *testing.T) { url := tc.ApiAddrs()[0] resource.Test(t, resource.TestCase{ - Providers: testProviders, - CheckDestroy: testAccCheckGroupResourceDestroy(t), + ProviderFactories: providerFactories, + CheckDestroy: testAccCheckGroupResourceDestroy(t), Steps: []resource.TestStep{ { // test create @@ -197,7 +197,8 @@ func TestAccGroupWithMembers(t *testing.T) { url := tc.ApiAddrs()[0] resource.Test(t, resource.TestCase{ - Providers: testProviders, + ProviderFactories: providerFactories, + CheckDestroy: testAccCheckGroupResourceDestroy(t), Steps: []resource.TestStep{ { diff --git a/internal/provider/resource_host.go b/internal/provider/resource_host.go index 6a501b7f..51e7a172 100644 --- a/internal/provider/resource_host.go +++ b/internal/provider/resource_host.go @@ -17,18 +17,24 @@ const ( func resourceHost() *schema.Resource { return &schema.Resource{ + Description: "The host resource allows you to configure a Boundary static host. Hosts are " + + "always part of a project, so a project resource should be used inline or you should have " + + "the project ID in hand to successfully configure a host.", + CreateContext: resourceHostCreate, ReadContext: resourceHostRead, UpdateContext: resourceHostUpdate, DeleteContext: resourceHostDelete, Schema: map[string]*schema.Schema{ NameKey: { - Type: schema.TypeString, - Optional: true, + Description: "The host name. Defaults to the resource name.", + Type: schema.TypeString, + Optional: true, }, DescriptionKey: { - Type: schema.TypeString, - Optional: true, + Description: "The host description.", + Type: schema.TypeString, + Optional: true, }, TypeKey: { Type: schema.TypeString, @@ -40,8 +46,9 @@ func resourceHost() *schema.Resource { Required: true, }, hostAddressKey: { - Type: schema.TypeString, - Optional: true, + Description: "The static address of the host resource as `:` or a domain name.", + Type: schema.TypeString, + Optional: true, }, }, } diff --git a/internal/provider/resource_host_catalog.go b/internal/provider/resource_host_catalog.go index a13896f5..31428f91 100644 --- a/internal/provider/resource_host_catalog.go +++ b/internal/provider/resource_host_catalog.go @@ -16,28 +16,36 @@ const ( func resourceHostCatalog() *schema.Resource { return &schema.Resource{ + Description: "The host catalog resource allows you to configure a Boundary host catalog. Host " + + "catalogs are always part of a project, so a project resource should be used inline or you " + + "should have the project ID in hand to successfully configure a host catalog.", + CreateContext: resourceHostCatalogCreate, ReadContext: resourceHostCatalogRead, UpdateContext: resourceHostCatalogUpdate, DeleteContext: resourceHostCatalogDelete, Schema: map[string]*schema.Schema{ NameKey: { - Type: schema.TypeString, - Optional: true, + Description: "The host catalog name. Defaults to the resource name.", + Type: schema.TypeString, + Optional: true, }, DescriptionKey: { - Type: schema.TypeString, - Optional: true, + Description: "The host catalog description.", + Type: schema.TypeString, + Optional: true, }, ScopeIdKey: { - Type: schema.TypeString, - Required: true, - ForceNew: true, + Description: "The scope ID in which the resource is created.", + Type: schema.TypeString, + Required: true, + ForceNew: true, }, TypeKey: { - Type: schema.TypeString, - Required: true, - ForceNew: true, + Description: "The host catalog type. Only `Static` (yes, title case) is supported.", + Type: schema.TypeString, + Required: true, + ForceNew: true, }, }, } diff --git a/internal/provider/resource_host_catalog_test.go b/internal/provider/resource_host_catalog_test.go index ee571973..879e0aab 100644 --- a/internal/provider/resource_host_catalog_test.go +++ b/internal/provider/resource_host_catalog_test.go @@ -44,8 +44,8 @@ func TestAccHostCatalogCreate(t *testing.T) { url := tc.ApiAddrs()[0] resource.Test(t, resource.TestCase{ - Providers: testProviders, - CheckDestroy: testAccCheckHostCatalogResourceDestroy(t), + ProviderFactories: providerFactories, + CheckDestroy: testAccCheckHostCatalogResourceDestroy(t), Steps: []resource.TestStep{ { // test create diff --git a/internal/provider/resource_host_set.go b/internal/provider/resource_host_set.go index 2d875f98..793cacac 100644 --- a/internal/provider/resource_host_set.go +++ b/internal/provider/resource_host_set.go @@ -17,18 +17,24 @@ const ( func resourceHostset() *schema.Resource { return &schema.Resource{ + Description: "The host_set resource allows you to configure a Boundary host set. Host sets are " + + "always part of a host catalog, so a host catalog resource should be used inline or you " + + "should have the host catalog ID in hand to successfully configure a host set.", + CreateContext: resourceHostsetCreate, ReadContext: resourceHostsetRead, UpdateContext: resourceHostsetUpdate, DeleteContext: resourceHostsetDelete, Schema: map[string]*schema.Schema{ NameKey: { - Type: schema.TypeString, - Optional: true, + Description: "The hostset name. Defaults to the resource name.", + Type: schema.TypeString, + Optional: true, }, DescriptionKey: { - Type: schema.TypeString, - Optional: true, + Description: "The hostset description.", + Type: schema.TypeString, + Optional: true, }, TypeKey: { Type: schema.TypeString, @@ -36,13 +42,15 @@ func resourceHostset() *schema.Resource { ForceNew: true, }, HostCatalogIdKey: { - Type: schema.TypeString, - Required: true, + Description: "The catalog for the hostset.", + Type: schema.TypeString, + Required: true, }, hostsetHostIdsKey: { - Type: schema.TypeSet, - Optional: true, - Elem: &schema.Schema{Type: schema.TypeString}, + Description: "The list of host IDs contained in this set.", + Type: schema.TypeSet, + Optional: true, + Elem: &schema.Schema{Type: schema.TypeString}, }, }, } diff --git a/internal/provider/resource_host_set_test.go b/internal/provider/resource_host_set_test.go index d97573d2..e1999b7c 100644 --- a/internal/provider/resource_host_set_test.go +++ b/internal/provider/resource_host_set_test.go @@ -73,8 +73,8 @@ func TestAccHostset(t *testing.T) { url := tc.ApiAddrs()[0] resource.Test(t, resource.TestCase{ - Providers: testProviders, - CheckDestroy: testAccCheckHostsetResourceDestroy(t), + ProviderFactories: providerFactories, + CheckDestroy: testAccCheckHostsetResourceDestroy(t), Steps: []resource.TestStep{ { // test project hostset create diff --git a/internal/provider/resource_host_test.go b/internal/provider/resource_host_test.go index 8d3d68c7..808f0e81 100644 --- a/internal/provider/resource_host_test.go +++ b/internal/provider/resource_host_test.go @@ -62,8 +62,8 @@ func TestAccHost(t *testing.T) { url := tc.ApiAddrs()[0] resource.Test(t, resource.TestCase{ - Providers: testProviders, - CheckDestroy: testAccCheckHostResourceDestroy(t), + ProviderFactories: providerFactories, + CheckDestroy: testAccCheckHostResourceDestroy(t), Steps: []resource.TestStep{ { // test project host create diff --git a/internal/provider/resource_role.go b/internal/provider/resource_role.go index 14b7f92b..6ddb1b7a 100644 --- a/internal/provider/resource_role.go +++ b/internal/provider/resource_role.go @@ -19,33 +19,40 @@ const ( func resourceRole() *schema.Resource { return &schema.Resource{ + Description: "The role resource allows you to configure a Boundary role.", + CreateContext: resourceRoleCreate, ReadContext: resourceRoleRead, UpdateContext: resourceRoleUpdate, DeleteContext: resourceRoleDelete, Schema: map[string]*schema.Schema{ NameKey: { - Type: schema.TypeString, - Optional: true, + Description: "The role name. Defaults to the resource name.", + Type: schema.TypeString, + Optional: true, }, DescriptionKey: { - Type: schema.TypeString, - Optional: true, + Description: "The role description.", + Type: schema.TypeString, + Optional: true, }, ScopeIdKey: { - Type: schema.TypeString, - Required: true, - ForceNew: true, + Description: "The scope ID in which the resource is created. Defaults to the provider's `default_scope` if unset.", + Type: schema.TypeString, + Required: true, + ForceNew: true, }, rolePrincipalIdsKey: { - Type: schema.TypeSet, - Optional: true, - Elem: &schema.Schema{Type: schema.TypeString}, + Description: "A list of principal (user or group) IDs to add as principals on the role.", + Type: schema.TypeSet, + Optional: true, + Elem: &schema.Schema{Type: schema.TypeString}, }, roleGrantStringsKey: { - Type: schema.TypeSet, - Optional: true, - Elem: &schema.Schema{Type: schema.TypeString}, + Description: " A list of stringified grants for the role.", + Type: schema.TypeSet, + Optional: true, + Elem: &schema.Schema{Type: schema.TypeString}, }, roleGrantScopeIdKey: { Type: schema.TypeString, diff --git a/internal/provider/resource_role_test.go b/internal/provider/resource_role_test.go index 4e2e4fcf..d7fc40a1 100644 --- a/internal/provider/resource_role_test.go +++ b/internal/provider/resource_role_test.go @@ -153,8 +153,8 @@ func TestAccRoleToOrgToProject(t *testing.T) { url := tc.ApiAddrs()[0] resource.Test(t, resource.TestCase{ - Providers: testProviders, - CheckDestroy: testAccCheckRoleResourceDestroy(t), + ProviderFactories: providerFactories, + CheckDestroy: testAccCheckRoleResourceDestroy(t), Steps: []resource.TestStep{ { // test org role create @@ -202,8 +202,8 @@ func TestAccRoleWithGrants(t *testing.T) { url := tc.ApiAddrs()[0] resource.Test(t, resource.TestCase{ - Providers: testProviders, - CheckDestroy: testAccCheckRoleResourceDestroy(t), + ProviderFactories: providerFactories, + CheckDestroy: testAccCheckRoleResourceDestroy(t), Steps: []resource.TestStep{ { // test project role create with grants @@ -236,8 +236,8 @@ func TestAccRoleWithPrincipals(t *testing.T) { url := tc.ApiAddrs()[0] resource.Test(t, resource.TestCase{ - Providers: testProviders, - CheckDestroy: testAccCheckRoleResourceDestroy(t), + ProviderFactories: providerFactories, + CheckDestroy: testAccCheckRoleResourceDestroy(t), Steps: []resource.TestStep{ { // test create @@ -271,8 +271,8 @@ func TestAccRoleWithGroups(t *testing.T) { url := tc.ApiAddrs()[0] resource.Test(t, resource.TestCase{ - Providers: testProviders, - CheckDestroy: testAccCheckRoleResourceDestroy(t), + ProviderFactories: providerFactories, + CheckDestroy: testAccCheckRoleResourceDestroy(t), Steps: []resource.TestStep{ { // test create diff --git a/internal/provider/resource_scope.go b/internal/provider/resource_scope.go index 377b6763..19511e20 100644 --- a/internal/provider/resource_scope.go +++ b/internal/provider/resource_scope.go @@ -18,6 +18,8 @@ const ( func resourceScope() *schema.Resource { return &schema.Resource{ + Description: "The scope resource allows you to configure a Boundary scope.", + CreateContext: resourceScopeCreate, ReadContext: resourceScopeRead, UpdateContext: resourceScopeUpdate, @@ -25,32 +27,35 @@ func resourceScope() *schema.Resource { Schema: map[string]*schema.Schema{ NameKey: { - Type: schema.TypeString, - Optional: true, + Description: "The scope name. Defaults to the resource name.", + Type: schema.TypeString, + Optional: true, }, DescriptionKey: { - Type: schema.TypeString, - Optional: true, + Description: "The scope description.", + Type: schema.TypeString, + Optional: true, }, ScopeIdKey: { - Type: schema.TypeString, - Required: true, - ForceNew: true, + Description: "The scope ID containing the sub scope resource.", + Type: schema.TypeString, + Required: true, + ForceNew: true, }, scopeGlobalScopeKey: { + Description: "Indicates that the scope containing this value is the global scope, which triggers some specialized behavior to allow it to be imported and managed.", Type: schema.TypeBool, Optional: true, - Description: "Indicates that the scope containing this value is the global scope, which triggers some specialized behavior to allow it to be imported and managed.", }, scopeAutoCreateAdminRole: { + Description: "If set, when a new scope is created, the provider will not disable the functionality that automatically creates a role in the new scope and gives permissions to manage the scope to the provider's user. Marking this true makes for simpler HCL but results in role resources that are unmanaged by Terraform.", Type: schema.TypeBool, Optional: true, - Description: "If set, when a new scope is created, the provider will not disable the functionality that automatically creates a role in the new scope and gives permissions to manage the scope to the provider's user. Marking this true makes for simpler HCL but results in role resources that are unmanaged by Terraform.", }, scopeAutoCreateDefaultRole: { + Description: "If set, when a new scope is created, the provider will not disable the functionality that automatically creates a role in the new scope and gives listing of scopes and auth methods and the ability to authenticate to the anonymous user. Marking this true makes for simpler HCL but results in role resources that are unmanaged by Terraform.", Type: schema.TypeBool, Optional: true, - Description: "If set, when a new scope is created, the provider will not disable the functionality that automatically creates a role in the new scope and gives listing of scopes and auth methods and the ability to authenticate to the anonymous user. Marking this true makes for simpler HCL but results in role resources that are unmanaged by Terraform.", }, }, } diff --git a/internal/provider/resource_scope_test.go b/internal/provider/resource_scope_test.go index edf04ea1..3aff757d 100644 --- a/internal/provider/resource_scope_test.go +++ b/internal/provider/resource_scope_test.go @@ -89,8 +89,8 @@ func TestAccScopeCreation(t *testing.T) { url := tc.ApiAddrs()[0] resource.Test(t, resource.TestCase{ - Providers: testProviders, - CheckDestroy: testAccCheckScopeResourceDestroy(t), + ProviderFactories: providerFactories, + CheckDestroy: testAccCheckScopeResourceDestroy(t), Steps: []resource.TestStep{ { Config: testConfig(url, fooOrg, firstProjectFoo, secondProject), diff --git a/internal/provider/resource_target.go b/internal/provider/resource_target.go index 03ba2daf..ca651aa6 100644 --- a/internal/provider/resource_target.go +++ b/internal/provider/resource_target.go @@ -22,37 +22,45 @@ const ( func resourceTarget() *schema.Resource { return &schema.Resource{ + Description: "The target resource allows you to configure a Boundary target.", + CreateContext: resourceTargetCreate, ReadContext: resourceTargetRead, UpdateContext: resourceTargetUpdate, DeleteContext: resourceTargetDelete, Schema: map[string]*schema.Schema{ NameKey: { - Type: schema.TypeString, - Optional: true, + Description: "The target name. Defaults to the resource name.", + Type: schema.TypeString, + Optional: true, }, DescriptionKey: { - Type: schema.TypeString, - Optional: true, + Description: "The target description.", + Type: schema.TypeString, + Optional: true, }, TypeKey: { - Type: schema.TypeString, - Required: true, - ForceNew: true, + Description: "The target resource type.", + Type: schema.TypeString, + Required: true, + ForceNew: true, }, ScopeIdKey: { - Type: schema.TypeString, - Required: true, - ForceNew: true, + Description: "The scope ID in which the resource is created. Defaults to the provider's `default_scope` if unset.", + Type: schema.TypeString, + Required: true, + ForceNew: true, }, targetDefaultPortKey: { - Type: schema.TypeInt, - Optional: true, + Description: "The default port for this target.", + Type: schema.TypeInt, + Optional: true, }, targetHostSetIdsKey: { - Type: schema.TypeSet, - Optional: true, - Elem: &schema.Schema{Type: schema.TypeString}, + Description: "A list of host set ID's.", + Type: schema.TypeSet, + Optional: true, + Elem: &schema.Schema{Type: schema.TypeString}, }, targetSessionMaxSecondsKey: { Type: schema.TypeInt, diff --git a/internal/provider/resource_target_test.go b/internal/provider/resource_target_test.go index 9d26e1ed..ecad9d1c 100644 --- a/internal/provider/resource_target_test.go +++ b/internal/provider/resource_target_test.go @@ -90,8 +90,8 @@ func TestAccTarget(t *testing.T) { url := tc.ApiAddrs()[0] resource.Test(t, resource.TestCase{ - Providers: testProviders, - CheckDestroy: testAccCheckTargetResourceDestroy(t), + ProviderFactories: providerFactories, + CheckDestroy: testAccCheckTargetResourceDestroy(t), Steps: []resource.TestStep{ { // test create diff --git a/internal/provider/resource_user.go b/internal/provider/resource_user.go index 15dfd72a..5c7805c0 100644 --- a/internal/provider/resource_user.go +++ b/internal/provider/resource_user.go @@ -14,28 +14,34 @@ const userAccountIDsKey = "account_ids" func resourceUser() *schema.Resource { return &schema.Resource{ + Description: "The user resource allows you to configure a Boundary user.", + CreateContext: resourceUserCreate, ReadContext: resourceUserRead, UpdateContext: resourceUserUpdate, DeleteContext: resourceUserDelete, Schema: map[string]*schema.Schema{ NameKey: { - Type: schema.TypeString, - Optional: true, + Description: "The username. Defaults to the resource name.", + Type: schema.TypeString, + Optional: true, }, DescriptionKey: { - Type: schema.TypeString, - Optional: true, + Description: "The user description.", + Type: schema.TypeString, + Optional: true, }, ScopeIdKey: { - Type: schema.TypeString, - Required: true, - ForceNew: true, + Description: "The scope ID in which the resource is created. Defaults to the provider's `default_scope` if unset.", + Type: schema.TypeString, + Required: true, + ForceNew: true, }, userAccountIDsKey: { - Type: schema.TypeSet, - Optional: true, - Elem: &schema.Schema{Type: schema.TypeString}, + Description: "Account ID's to associate with this user resource.", + Type: schema.TypeSet, + Optional: true, + Elem: &schema.Schema{Type: schema.TypeString}, }, }, } diff --git a/internal/provider/resource_user_test.go b/internal/provider/resource_user_test.go index 5ce4bcc0..2817efdc 100644 --- a/internal/provider/resource_user_test.go +++ b/internal/provider/resource_user_test.go @@ -65,8 +65,8 @@ func TestAccUser(t *testing.T) { token := tc.Token().Token resource.Test(t, resource.TestCase{ - Providers: testProviders, - CheckDestroy: testAccCheckUserResourceDestroy(t), + ProviderFactories: providerFactories, + CheckDestroy: testAccCheckUserResourceDestroy(t), Steps: []resource.TestStep{ { // test create @@ -97,8 +97,8 @@ func TestAccUserWithAccounts(t *testing.T) { token := tc.Token().Token resource.Test(t, resource.TestCase{ - Providers: testProviders, - CheckDestroy: testAccCheckUserResourceDestroy(t), + ProviderFactories: providerFactories, + CheckDestroy: testAccCheckUserResourceDestroy(t), Steps: []resource.TestStep{ { // test create diff --git a/templates/index.md.tmpl b/templates/index.md.tmpl new file mode 100644 index 00000000..ae968c90 --- /dev/null +++ b/templates/index.md.tmpl @@ -0,0 +1,18 @@ +--- +page_title: "Provider: Boundary" +subcategory: "" +description: |- + Terraform provider for configuring Boundary. +--- + +# Boundary Provider + +Terraform provider for configuring Boundary. + +## Example Usage + +Do not keep your authentication password in HCL for production environments, use Terraform environment variables. + +{{tffile "examples/provider/provider.tf"}} + +{{ .SchemaMarkdown | trimspace }} \ No newline at end of file diff --git a/templates/resources/group.md.tmpl b/templates/resources/group.md.tmpl new file mode 100644 index 00000000..9bc445c9 --- /dev/null +++ b/templates/resources/group.md.tmpl @@ -0,0 +1,20 @@ +--- +page_title: "boundary_group Resource - terraform-provider-boundary" +subcategory: "" +description: |- +{{ .Description | plainmarkdown | trimspace | prefixlines " " }} +--- + +# Resource `boundary_group` + +{{ .Description | trimspace }} + +## Example Usage + +{{tffile "examples/resources/boundary_group/simple/resource.tf"}} + +Usage for project-specific group: + +{{tffile "examples/resources/boundary_group/project-specific/resource.tf"}} + +{{ .SchemaMarkdown | trimspace }} diff --git a/templates/resources/role.md.tmpl b/templates/resources/role.md.tmpl new file mode 100644 index 00000000..49229441 --- /dev/null +++ b/templates/resources/role.md.tmpl @@ -0,0 +1,30 @@ +--- +page_title: "boundary_role Resource - terraform-provider-boundary" +subcategory: "" +description: |- +{{ .Description | plainmarkdown | trimspace | prefixlines " " }} +--- + +# Resource `boundary_role` + +{{ .Description | trimspace }} + +## Example Usage + +Basic usage: + +{{tffile "examples/resources/boundary_role/simple/resource.tf"}} + +Usage with a user resource: + +{{tffile "examples/resources/boundary_role/user/resource.tf"}} + +Usage with user and grants resource: + +{{tffile "examples/resources/boundary_role/user-grants/resource.tf"}} + +Usage for a project-specific role: + +{{tffile "examples/resources/boundary_role/project-specific/resource.tf"}} + +{{ .SchemaMarkdown | trimspace }} diff --git a/templates/resources/scope.md.tmpl b/templates/resources/scope.md.tmpl new file mode 100644 index 00000000..aad4f285 --- /dev/null +++ b/templates/resources/scope.md.tmpl @@ -0,0 +1,30 @@ +--- +page_title: "boundary_scope Resource - terraform-provider-boundary" +subcategory: "" +description: |- +{{ .Description | plainmarkdown | trimspace | prefixlines " " }} +--- + +# Resource `boundary_scope` + +{{ .Description | trimspace }} + +## Example Usage + +Creating the global scope: + +{{tffile "examples/resources/boundary_scope/global.tf"}} + +Creating an organization scope within global: + +{{tffile "examples/resources/boundary_scope/organization.tf"}} + +Creating an project scope within an organization: + +{{tffile "examples/resources/boundary_scope/project.tf"}} + +Creating an organization scope with a managed role for administration (auto create role set false): + +{{tffile "examples/resources/boundary_scope/role.tf"}} + +{{ .SchemaMarkdown | trimspace }} diff --git a/tools/tools.go b/tools/tools.go new file mode 100644 index 00000000..65393f06 --- /dev/null +++ b/tools/tools.go @@ -0,0 +1,8 @@ +// +build tools + +package tools + +import ( + // docs generator + _ "github.com/hashicorp/terraform-plugin-docs/cmd/tfplugindocs" +) diff --git a/website/docs/d/scaffolding_data_source.html.markdown b/website/docs/d/scaffolding_data_source.html.markdown deleted file mode 100644 index 6ebe207f..00000000 --- a/website/docs/d/scaffolding_data_source.html.markdown +++ /dev/null @@ -1,23 +0,0 @@ ---- -layout: "scaffolding" -page_title: "Scaffolding: scaffolding_data_source" -sidebar_current: "docs-scaffolding-data-source" -description: |- - Sample data source in the Terraform provider scaffolding. ---- - -# scaffolding_data_source - -Sample data source in the Terraform provider scaffolding. - -## Example Usage - -```hcl -data "scaffolding_data_source" "example" { - sample_attribute = "foo" -} -``` - -## Attributes Reference - -* `sample_attribute` - Sample attribute. diff --git a/website/docs/index.html.markdown b/website/docs/index.html.markdown deleted file mode 100644 index 6b958822..00000000 --- a/website/docs/index.html.markdown +++ /dev/null @@ -1,316 +0,0 @@ ---- -layout: "boundary" -page_title: "Provider: Boundary" -sidebar_current: "docs-boundary-index" -description: |- - Terraform provider Boundary. ---- - -# Boundary Provider - -This provider configures Boundary. - -## Example Usage - -Do not keep your authentication password in HCL for production environments, use Terraform environment variables. - -```hcl -provider "boundary" { - addr = "http://127.0.0.1:9200" - auth_method_id = "ampw_1234567890" # changeme - password_auth_method_login_name = "myuser" # changeme - password_auth_method_password = "passpass" # changeme -} -``` - -## Complex Usage - -```hcl -provider "boundary" { - addr = "http://127.0.0.1:9200" - auth_method_id = "ampw_1234567890" # changeme - password_auth_method_login_name = "myuser" # changeme - password_auth_method_password = "passpass" # changeme -} - -variable "backend_team" { - type = set(string) - default = [ - "Jim Lambert", - "Mike Gaffney", - "Todd Knight", - ] -} - -variable "frontend_team" { - type = set(string) - default = [ - "Randall Morey", - "Susmitha Girumala", - ] -} - -variable "leadership_team" { - type = set(string) - default = [ - "Jeff Mitchell", - "Pete Pacent", - "Jonathan Thomas (JT)", - "Jeff Malnick" - ] -} - -variable "web_server_ips" { - type = set(string) - default = [ - "10.0.0.1", - "10.0.0.2", - ] -} - -variable "backend_server_ips" { - type = set(string) - default = [ - "10.1.0.1", - "10.1.0.2", - ] -} - -variable "frontend_server_ips" { - type = set(string) - default = [ - "10.2.0.1", - "10.2.0.2", - ] -} - -resource "boundary_scope" "global" { - global_scope = true - scope_id = "global" -} - -resource "boundary_scope" "corp" { - scope_id = boundary_scope.global.id - auto_create_role = true -} - -resource "boundary_user" "backend" { - for_each = var.backend_team - name = each.key - description = "Backend user: ${each.key}" - scope_id = boundary_scope.corp.id -} - -resource "boundary_user" "frontend" { - for_each = var.frontend_team - name = each.key - description = "Frontend user: ${each.key}" - scope_id = boundary_scope.corp.id -} - -resource "boundary_user" "leadership" { - for_each = var.leadership_team - name = each.key - description = "WARNING: Managers should be read-only" - scope_id = boundary_scope.corp.id -} - -// organiation level group for the leadership team -resource "boundary_group" "leadership" { - name = "leadership_team" - description = "Organization group for leadership team" - member_ids = [for user in boundary_user.leadership : user.id] - scope_id = boundary_scope.corp.id -} - -// add org-level role for readonly access -resource "boundary_role" "organization_readonly" { - name = "readonly" - description = "Read-only role" - principal_ids = [boundary_group.leadership.id] - grant_strings = ["id=*;type=*;actions=read"] - scope_id = boundary_scope.corp.id -} - -// add org-level role for administration access -resource "boundary_role" "organization_admin" { - name = "admin" - description = "Administrator role" - principal_ids = concat( - [for user in boundary_user.backend : user.id], - [for user in boundary_user.frontend : user.id] - ) - grant_strings = ["id=*;type=*;actions=create,read,update,delete"] - scope_id = boundary_scope.corp.id -} - -// create a project for core infrastructure -resource "boundary_scope" "core_infra" { - description = "Core infrastrcture" - scope_id = boundary_scope.corp.id - auto_create_role = true -} - -resource "boundary_group" "backend_core_infra" { - name = "backend" - description = "Backend team group" - member_ids = [for user in boundary_user.backend : user.id] - scope_id = boundary_scope.core_infra.id -} - -resource "boundary_group" "frontend_core_infra" { - name = "frontend" - description = "Frontend team group" - member_ids = [for user in boundary_user.frontend : user.id] - scope_id = boundary_scope.core_infra.id -} - -resource "boundary_host" "backend_servers_service" { - for_each = var.backend_server_ips - type = "static" - name = "backend_server_service_${each.value}" - description = "Backend server host for service port" - address = "${each.key}:9200" - host_catalog_id = boundary_host_catalog.backend_servers.id -} - -resource "boundary_host" "backend_servers_ssh" { - for_each = var.backend_server_ips - type = "static" - name = "backend_server_ssh_${each.value}" - description = "Backend server host for SSH port" - address = "${each.key}:22" - host_catalog_id = boundary_host_catalog.backend_servers.id -} - -resource "boundary_host" "frontend_servers_console" { - for_each = var.frontend_server_ips - type = "static" - name = "frontend_server_console_${each.value}" - description = "Frontend server host for console port" - address = "${each.key}:443" - host_catalog_id = boundary_host_catalog.frontend_servers.id -} - -resource "boundary_host" "frontend_servers_ssh" { - for_each = var.frontend_server_ips - type = "static" - name = "frontend_server_ssh_${each.value}" - description = "Frontend server host for SSH port" - address = "${each.key}:22" - host_catalog_id = boundary_host_catalog.frontend_servers.id -} - -resource "boundary_host_catalog" "web_servers" { - name = "web_servers" - description = "Web servers for frontend team" - type = "static" - scope_id = boundary_scope.core_infra.id -} - -resource "boundary_host_catalog" "backend_servers" { - name = "backend_servers" - description = "Web servers for backend team" - type = "static" - scope_id = boundary_scope.core_infra.id -} - -resource "boundary_host_catalog" "frontend_servers" { - name = "frontend_servers" - description = "Web servers for backend team" - type = "static" - scope_id = boundary_scope.core_infra.id -} - -resource "boundary_host_set" "backend_servers_service" { - type = "static" - name = "backend_servers_service" - description = "Host set for services servers" - host_catalog_id = boundary_host_catalog.backend_servers.id - host_ids = [for host in boundary_host.backend_servers_service : host.id] -} - -resource "boundary_host_set" "backend_servers_ssh" { - type = "static" - name = "backend_servers_ssh" - description = "Host set for backend servers SSH access" - host_catalog_id = boundary_host_catalog.backend_servers.id - host_ids = [for host in boundary_host.backend_servers_ssh : host.id] -} - -resource "boundary_host_set" "frontend_servers_console" { - type = "static" - name = "frontend_servers_console" - description = "Host set for frontend servers console access" - host_catalog_id = boundary_host_catalog.frontend_servers.id - host_ids = [for host in boundary_host.frontend_servers_console : host.id] -} - -resource "boundary_host_set" "frontend_servers_ssh" { - type = "static" - name = "frontend_servers_ssh" - description = "Host set for frontend servers SSH access" - host_catalog_id = boundary_host_catalog.frontend_servers.id - host_ids = [for host in boundary_host.frontend_servers_ssh : host.id] -} - -resource "boundary_target" "frontend_servers_console" { - type = "tcp" - name = "frontend_servers_console" - description = "Frontend console target" - scope_id = boundary_scope.core_infra.id - - host_set_ids = [ - boundary_host_set.frontend_servers_console.id - ] -} - -resource "boundary_target" "frontend_servers_ssh" { - type = "tcp" - name = "frontend_servers_ssh" - description = "Frontend SSH target" - scope_id = boundary_scope.core_infra.id - - host_set_ids = [ - boundary_host_set.frontend_servers_ssh.id - ] -} - -resource "boundary_target" "backend_servers_service" { - type = "tcp" - name = "backend_servers_service" - description = "Backend service target" - scope_id = boundary_scope.core_infra.id - - host_set_ids = [ - boundary_host_set.backend_servers_service.id - ] -} - -resource "boundary_target" "backend_servers_ssh" { - type = "tcp" - name = "backend_servers_ssh" - description = "Backend SSH target" - scope_id = boundary_scope.core_infra.id - - host_set_ids = [ - boundary_host_set.backend_servers_ssh.id - ] -} - -// only allow the backend team access to the backend web servers host catalog -resource "boundary_role" "admin_backend_core_infra" { - description = "Administrator role for backend core infrastructure" - principal_ids = [boundary_group.backend_core_infra.id] - grant_strings = ["id=${boundary_host_catalog.backend_servers.id};actions=create,read,update,delete"] - scope_id = boundary_scope.core_infra.id -} - -// only allow the frontend team access to the frontend web servers host catalog -resource "boundary_role" "admin_frontend_core_infra" { - description = "Administrator role for frontend core infrastructure" - principal_ids = [boundary_group.frontend_core_infra.id] - grant_strings = ["id=${boundary_host_catalog.web_servers.id};actions=create,read,update,delete"] - scope_id = boundary_scope.core_infra.id -} -``` diff --git a/website/docs/r/resource_account.html.markdown b/website/docs/r/resource_account.html.markdown deleted file mode 100644 index 9e755fa7..00000000 --- a/website/docs/r/resource_account.html.markdown +++ /dev/null @@ -1,46 +0,0 @@ ---- -layout: "boundary" -page_title: "Boundary: account_resource" -sidebar_current: "docs-boundary-account-resource" -description: |- - Account resource for the Boundary Terraform provider. ---- - -# boundary_account_resource -The account resource allows you to configure a Boundary account. - -## Example Usage - -```hcl -resource "boundary_scope" "org" { - name = "organization_one" - description = "My first scope!" - scope_id = "global" - auto_create_role = true -} - -resource "boundary_auth_method" "password" { - scope_id = boundary_scope.org.id - type = "password" -} - -resource "boundary_account" "jeff" { - auth_method_id = boundary_auth_method.password.id - type = "password" - login_name = "jeff" - password = "$uper$ecure" -} -``` - -## Argument Reference - -The following arguments are required: -* `auth_method_id` - The resource ID for the authentication method. -* `type` - The resource type - -The following arguments are optional: -* `description` - The account description. -* `name` - The account name. Defaults to the resource name. -* `login_name` - The login name for this account. -* `password` - The account password. - diff --git a/website/docs/r/resource_auth_method.html.markdown b/website/docs/r/resource_auth_method.html.markdown deleted file mode 100644 index a0ebb2bb..00000000 --- a/website/docs/r/resource_auth_method.html.markdown +++ /dev/null @@ -1,39 +0,0 @@ ---- -layout: "boundary" -page_title: "Boundary: auth_method_resource" -sidebar_current: "docs-boundary-auth-method-resource" -description: |- - Auth Method resource for the Boundary Terraform provider. ---- - -# boundary_auth_method_resource -The auth method resource allows you to configure a Boundary auth_method. - -## Example Usage - -```hcl -resource "boundary_scope" "org" { - name = "organization_one" - description = "My first scope!" - scope_id = "global" - auto_create_role = true -} - -resource "boundary_auth_method" "password" { - scope_id = boundary_scope.org.id - type = "password" -} -``` - -## Argument Reference - -The following arguments are required: -* `scope_id` - The scope ID. -* `type` - The resource type. - -The following arguments are optional: -* `description` - The auth method description. -* `name` - The auth method name. Defaults to the resource name. -* `min_login_name_length` - The minimum login name length. -* `min_password_length` - The minimum password length. - diff --git a/website/docs/r/resource_host.html.markdown b/website/docs/r/resource_host.html.markdown deleted file mode 100644 index 7aa4ec4b..00000000 --- a/website/docs/r/resource_host.html.markdown +++ /dev/null @@ -1,47 +0,0 @@ ---- -layout: "boundary" -page_title: "Boundary: host_resource" -sidebar_current: "docs-boundary-host-catalog-resource" -description: |- - Host resource for the Boundary Terraform provider. ---- - -# host_resource -The host resource allows you to configure a Boundary static host. Hosts are always part -of a project, so a project resource should be used inline or you should have the project -ID in hand to successfully configure a host. - -## Example Usage - -```hcl -resource "boundary_scope" "org" { - name = "organization_one" - description = "My first scope!" - scope_id = "global" - auto_create_role = true -} - -resource "boundary_scope" "project" { - name = "project_one" - description = "My first scope!" - scope_id = boundary_scope.org.id - auto_create_role = true -} - -resource "boundary_host" "example" { - name = "My catalog" - description = "My first host!" - address = "10.0.0.1" - scope_id = boundary_scope.project.id -} -``` - -## Argument Reference - -The following arguments are required: -* `scope_id` - The scope ID in which the resource is created. - -The following arguments are optional: -* `name` - The host name. Defaults to the resource name. -* `description` - The host description. -* `address` - The static address of the host resource as : or a domain name. diff --git a/website/docs/r/resource_host_catalog.html.markdown b/website/docs/r/resource_host_catalog.html.markdown deleted file mode 100644 index 4d19f433..00000000 --- a/website/docs/r/resource_host_catalog.html.markdown +++ /dev/null @@ -1,47 +0,0 @@ ---- -layout: "boundary" -page_title: "Boundary: host_catalog_resource" -sidebar_current: "docs-boundary-host-catalog-resource" -description: |- - Host catalog resource for the Boundary Terraform provider. ---- - -# host_catalog_resource -The host catalog resource allows you to configure a Boundary host catalog. Host catalogs -are always part of a project, so a project resource should be used inline or you should have -the project ID in hand to successfully configure a host catalog. - -## Example Usage - -```hcl -resource "boundary_scope" "org" { - name = "organization_one" - description = "My first scope!" - scope_id = boundary_scope.global.id - auto_create_role = true -} - -resource "boundary_scope" "project" { - name = "project_one" - description = "My first scope!" - scope_id = boundary_scope.org.id - auto_create_role = true -} - -resource "boundary_host_catalog" "example" { - name = "My catalog" - description = "My first host catalog!" - type = "Static" - scope_id = boundary_scope.project.id -} -``` - -## Argument Reference - -The following arguments are required: -* `type` - The host catalog type. Only `Static` (yes, title case) is supported. -* `scope_id` - The scope ID in which the resource is created. - -The following arguments are optional: -* `name` - The host catalog name. Defaults to the resource name. -* `description` - The host catalog description. diff --git a/website/docs/r/resource_scope.html.markdown b/website/docs/r/resource_scope.html.markdown deleted file mode 100644 index 602c030f..00000000 --- a/website/docs/r/resource_scope.html.markdown +++ /dev/null @@ -1,71 +0,0 @@ ---- -layout: "boundary" -page_title: "Boundary: scope_resource" -sidebar_current: "docs-boundary-scope-resource" -description: |- - Scope resource for the Boundary Terraform provider. ---- - -# boundary_scope_resource -The scope resource allows you to configure a Boundary scope. - -## Example Usage - -Creating the global scope: - -```hcl -resource "boundary_scope" "global" { - global_scope = true - scope_id = "global" - auto_create_role = true -} -``` - -Creating an organization scope within global: - -```hcl -resource "boundary_scope" "org" { - name = "organization_one" - description = "My first scope!" - scope_id = boundary_scope.global.id - auto_create_role = true -} -``` - -Creating an project scope within an organization: - -```hcl -resource "boundary_scope" "project" { - name = "project_one" - description = "My first scope!" - scope_id = boundary_scope.org.id - auto_create_role = true -} -``` - -Creating an organization scope with a managed role for administration (auto create role set false): - -```hcl -resource "boundary_scope" "org" { - name = "organization_one" - description = "My first scope!" - scope_id = boundary_scope.global.id -} - -resource "boundary_role" "org_admin" { - scope_id = boundary_scope.global.id - grant_scope_id = boundary_scope.org.id - grant_strings = ["id=*;type=*;actions=*"] - principal_ids = ["u_auth"] ->>>>>>> docs: add scope resource -} -``` - -## Argument Reference - -The following arguments are optional: -* `description` - The scope description. -* `name` - The scope name. Defaults to the resource name. -* `global_scope` - Indicates that the scope containing this value is the global scope, which triggers some specialized behavior to allow it to be imported and managed. -* `auto_create_role` - If set, when a new scope is created, the provider will not disable the functionality that automatically crates a role in the new scope and gives permissions to manage the scope to the provider's user. Marking this true makes for simpler HCL but results in role resources that are unmanaged by Terraform. -* `scope_id` - The scope ID containing the sub scope resource. diff --git a/website/docs/r/resource_target.html.markdown b/website/docs/r/resource_target.html.markdown deleted file mode 100644 index 71607f2b..00000000 --- a/website/docs/r/resource_target.html.markdown +++ /dev/null @@ -1,85 +0,0 @@ ---- -layout: "boundary" -page_title: "Boundary: target_resource" -sidebar_current: "docs-boundary-target-resource" -description: |- - Target resource for the Boundary Terraform provider. ---- - -# boundary_target_resource -The target resource allows you to configure a Boundary target. - -## Example Usage - -```hcl -resource "boundary_scope" "global" { - global_scope = true - scope_id = "global" - auto_create_role = true -} - -resource "boundary_scope" "org" { - name = "organization_one" - description = "My first scope!" - scope_id = boundary_scope.global.id - auto_create_role = true -} - -resource "boundary_scope" "project" { - name = "project_one" - description = "My first scope!" - scope_id = boundary_scope.org.id - auto_create_role = true -} - -resource "boundary_host_catalog" "foo" { - name = "test" - description = "test catalog" - scope_id = boundary_scope.project.id - type = "static" -} - -resource "boundary_host" "foo" { - name = "foo" - host_catalog_id = boundary_host_catalog.foo.id - scope_id = boundary_scope.project.id - address = "10.0.0.1" -} - -resource "boundary_host" "bar" { - name = "bar" - host_catalog_id = boundary_host_catalog.foo.id - scope_id = boundary_scope.project.id - address = "10.0.0.1" -} - -resource "boundary_host_set" "foo" { - name = "foo" - host_catalog_id = boundary_host_catalog.foo.id - - host_ids = [ - boundary_host.foo.id, - boundary_host.bar.id, - ] -} - -resource "boundary_target" "foo" { - name = "foo" - description = "Foo target" - default_port = "22" - scope_id = boundary_scope.project.id - host_set_ids = [ - boundary_host_set.foo.id - ] -} -``` - -## Argument Reference - -The following arguments are optional: -* `description` - The target description. -* `name` - The target name. Defaults to the resource name. -* `scope_id` - The scope ID in which the resource is created. Defaults to the provider's `default_scope` if unset. -* `host_set_ids` - A list of host set ID's. -* `default_port` - The default port for this target. -* `type` - The target resource type. diff --git a/website/docs/r/resource_user.html.markdown b/website/docs/r/resource_user.html.markdown deleted file mode 100644 index 620526d7..00000000 --- a/website/docs/r/resource_user.html.markdown +++ /dev/null @@ -1,48 +0,0 @@ ---- -layout: "boundary" -page_title: "Boundary: user_resource" -sidebar_current: "docs-boundary-user-resource" -description: |- - User resource for the Boundary Terraform provider. ---- - -# user_resource -The user resource allows you to configure a Boundary user. - -## Example Usage - -```hcl -resource "boundary_scope" "org" { - name = "organization_one" - description = "My first scope!" - scope_id = "global" - auto_create_role = true -} - -resource "boundary_auth_method" "password" { - scope_id = boundary_scope.org.id - type = "password" -} - -resource "boundary_account" "jeff" { - auth_method_id = boundary_auth_method.password.id - type = "password" - login_name = "jeff" - password = "$uper$ecure" -} - -resource "boundary_user" "jeff" { - name = "jeff" - description = "Jeff's user resource" - account_ids = [boundary_account.jeff.id] - scope_id = boundary_scope.org.id -} -``` - -## Argument Reference - -The following arguments are optional: -* `account_ids` - Account ID's to associate with this user resource. -* `name` - The username. Defaults to the resource name. -* `description` - The user description. -* `scope_id` - The scope ID in which the resource is created. Defaults to the provider's `default_scope` if unset. diff --git a/website/docs/r/scaffolding_resource.html.markdown b/website/docs/r/scaffolding_resource.html.markdown deleted file mode 100644 index be959275..00000000 --- a/website/docs/r/scaffolding_resource.html.markdown +++ /dev/null @@ -1,26 +0,0 @@ ---- -layout: "scaffolding" -page_title: "Scaffolding: scaffolding_resource" -sidebar_current: "docs-scaffolding-resource" -description: |- - Sample resource in the Terraform provider scaffolding. ---- - -# scaffolding_resource - -Sample resource in the Terraform provider scaffolding. - -## Example Usage - -```hcl -resource "scaffolding_resource" "example" { - sample_attribute = "foo" -} -``` - -## Argument Reference - -The following arguments are supported: - -* `sample_attribute` - Sample attribute. - diff --git a/website/scaffolding.erb b/website/scaffolding.erb deleted file mode 100644 index 859105a2..00000000 --- a/website/scaffolding.erb +++ /dev/null @@ -1,35 +0,0 @@ -<% wrap_layout :inner do %> - <% content_for :sidebar do %> - - <% end %> - - <%= yield %> - <% end %>