From 4096e899a6c869d271ea95422c0b88bc7eb8ceaa Mon Sep 17 00:00:00 2001 From: Prom3theu5 Date: Sun, 12 Jun 2022 01:47:14 +0100 Subject: [PATCH] Generated provider from the Official 1Password terraform provider Provider version 1.1.4 --- .../workflows}/release.yml | 32 +- .../.goreleaser.yml => .goreleaser.yml | 9 +- CHANGELOG.md | 5 +- Makefile | 13 +- README-PROVIDER.md | 56 - README.md | 350 +--- deployment-templates/README-DEPLOYMENT.md | 28 - examples/.gitignore | 4 - examples/examples_nodejs_test.go | 22 - examples/examples_py_test.go | 22 - examples/examples_test.go | 24 - examples/go.mod | 3 - .../.gitignore | 0 .../pulumi-resource-onepassword/Pulumi.yaml | 0 .../generate.go | 0 .../main.go | 8 +- .../pulumi-resource-onepassword/schema.json | 775 +++++++++ .../main.go | 8 +- provider/go.mod | 196 ++- provider/go.sum | 1516 +++++++++++++++++ provider/resources.go | 134 +- sdk/dotnet/Config/Config.cs | 57 + sdk/dotnet/Config/README.md | 1 + sdk/dotnet/GetItem.cs | 230 +++ sdk/dotnet/GetVault.cs | 100 ++ sdk/dotnet/Inputs/ItemPasswordRecipeArgs.cs | 43 + .../Inputs/ItemPasswordRecipeGetArgs.cs | 43 + sdk/dotnet/Inputs/ItemSectionArgs.cs | 43 + sdk/dotnet/Inputs/ItemSectionFieldArgs.cs | 43 + sdk/dotnet/Inputs/ItemSectionFieldGetArgs.cs | 43 + .../ItemSectionFieldPasswordRecipeArgs.cs | 43 + .../ItemSectionFieldPasswordRecipeGetArgs.cs | 43 + sdk/dotnet/Inputs/ItemSectionGetArgs.cs | 43 + sdk/dotnet/Item.cs | 506 ++++++ .../Outputs/GetItemSectionFieldResult.cs | 44 + sdk/dotnet/Outputs/GetItemSectionResult.cs | 33 + sdk/dotnet/Outputs/ItemPasswordRecipe.cs | 49 + sdk/dotnet/Outputs/ItemSection.cs | 42 + sdk/dotnet/Outputs/ItemSectionField.cs | 51 + .../Outputs/ItemSectionFieldPasswordRecipe.cs | 49 + sdk/dotnet/Provider.cs | 80 + sdk/dotnet/Pulumi.Onepassword.csproj | 61 + sdk/dotnet/Pulumi.yaml | 0 sdk/dotnet/README.md | 1 + sdk/dotnet/Utilities.cs | 84 + sdk/dotnet/logo.png | Bin 0 -> 7934 bytes sdk/dotnet/pulumi-plugin.json | 5 + sdk/go.mod | 4 +- sdk/go/Pulumi.yaml | 0 sdk/go/onepassword/config/config.go | 20 + sdk/go/onepassword/doc.go | 3 + sdk/go/onepassword/getItem.go | 203 +++ sdk/go/onepassword/getVault.go | 104 ++ sdk/go/onepassword/init.go | 62 + sdk/go/onepassword/item.go | 492 ++++++ sdk/go/onepassword/provider.go | 115 ++ sdk/go/onepassword/pulumi-plugin.json | 5 + sdk/go/onepassword/pulumiTypes.go | 898 ++++++++++ sdk/go/onepassword/pulumiUtilities.go | 101 ++ sdk/nodejs/Pulumi.yaml | 0 sdk/nodejs/README.md | 4 + sdk/nodejs/config/index.ts | 5 + sdk/nodejs/config/vars.ts | 32 + sdk/nodejs/getItem.ts | 133 ++ sdk/nodejs/getVault.ts | 72 + sdk/nodejs/index.ts | 48 + sdk/nodejs/item.ts | 309 ++++ sdk/nodejs/package.json | 29 + sdk/nodejs/provider.ts | 73 + sdk/nodejs/scripts/install-pulumi-plugin.js | 26 + sdk/nodejs/tsconfig.json | 28 + sdk/nodejs/types/index.ts | 11 + sdk/nodejs/types/input.ts | 73 + sdk/nodejs/types/output.ts | 91 + sdk/nodejs/utilities.ts | 54 + sdk/python/Pulumi.yaml | 0 sdk/python/README.md | 56 + sdk/python/setup.py | 66 + .../simcubeltd_pulumi_onepassword/README.md | 4 + .../simcubeltd_pulumi_onepassword/__init__.py | 45 + .../simcubeltd_pulumi_onepassword/_inputs.py | 299 ++++ .../_utilities.py | 239 +++ .../config/__init__.py | 8 + .../config/__init__.pyi | 21 + .../config/vars.py | 31 + .../simcubeltd_pulumi_onepassword/get_item.py | 274 +++ .../get_vault.py | 118 ++ .../simcubeltd_pulumi_onepassword/item.py | 822 +++++++++ .../simcubeltd_pulumi_onepassword/outputs.py | 323 ++++ .../simcubeltd_pulumi_onepassword/provider.py | 143 ++ .../pulumi-plugin.json | 5 + .../simcubeltd_pulumi_onepassword/py.typed | 0 92 files changed, 9785 insertions(+), 606 deletions(-) rename {deployment-templates => .github/workflows}/release.yml (74%) rename deployment-templates/.goreleaser.yml => .goreleaser.yml (57%) delete mode 100644 README-PROVIDER.md delete mode 100644 deployment-templates/README-DEPLOYMENT.md delete mode 100644 examples/.gitignore delete mode 100644 examples/examples_nodejs_test.go delete mode 100644 examples/examples_py_test.go delete mode 100644 examples/examples_test.go delete mode 100644 examples/go.mod rename provider/cmd/{pulumi-resource-xyz => pulumi-resource-onepassword}/.gitignore (100%) create mode 100644 provider/cmd/pulumi-resource-onepassword/Pulumi.yaml rename provider/cmd/{pulumi-resource-xyz => pulumi-resource-onepassword}/generate.go (100%) rename provider/cmd/{pulumi-resource-xyz => pulumi-resource-onepassword}/main.go (78%) create mode 100644 provider/cmd/pulumi-resource-onepassword/schema.json rename provider/cmd/{pulumi-tfgen-xyz => pulumi-tfgen-onepassword}/main.go (79%) create mode 100644 provider/go.sum create mode 100644 sdk/dotnet/Config/Config.cs create mode 100644 sdk/dotnet/Config/README.md create mode 100644 sdk/dotnet/GetItem.cs create mode 100644 sdk/dotnet/GetVault.cs create mode 100644 sdk/dotnet/Inputs/ItemPasswordRecipeArgs.cs create mode 100644 sdk/dotnet/Inputs/ItemPasswordRecipeGetArgs.cs create mode 100644 sdk/dotnet/Inputs/ItemSectionArgs.cs create mode 100644 sdk/dotnet/Inputs/ItemSectionFieldArgs.cs create mode 100644 sdk/dotnet/Inputs/ItemSectionFieldGetArgs.cs create mode 100644 sdk/dotnet/Inputs/ItemSectionFieldPasswordRecipeArgs.cs create mode 100644 sdk/dotnet/Inputs/ItemSectionFieldPasswordRecipeGetArgs.cs create mode 100644 sdk/dotnet/Inputs/ItemSectionGetArgs.cs create mode 100644 sdk/dotnet/Item.cs create mode 100644 sdk/dotnet/Outputs/GetItemSectionFieldResult.cs create mode 100644 sdk/dotnet/Outputs/GetItemSectionResult.cs create mode 100644 sdk/dotnet/Outputs/ItemPasswordRecipe.cs create mode 100644 sdk/dotnet/Outputs/ItemSection.cs create mode 100644 sdk/dotnet/Outputs/ItemSectionField.cs create mode 100644 sdk/dotnet/Outputs/ItemSectionFieldPasswordRecipe.cs create mode 100644 sdk/dotnet/Provider.cs create mode 100644 sdk/dotnet/Pulumi.Onepassword.csproj create mode 100644 sdk/dotnet/Pulumi.yaml create mode 100644 sdk/dotnet/README.md create mode 100644 sdk/dotnet/Utilities.cs create mode 100644 sdk/dotnet/logo.png create mode 100644 sdk/dotnet/pulumi-plugin.json create mode 100644 sdk/go/Pulumi.yaml create mode 100644 sdk/go/onepassword/config/config.go create mode 100644 sdk/go/onepassword/doc.go create mode 100644 sdk/go/onepassword/getItem.go create mode 100644 sdk/go/onepassword/getVault.go create mode 100644 sdk/go/onepassword/init.go create mode 100644 sdk/go/onepassword/item.go create mode 100644 sdk/go/onepassword/provider.go create mode 100644 sdk/go/onepassword/pulumi-plugin.json create mode 100644 sdk/go/onepassword/pulumiTypes.go create mode 100644 sdk/go/onepassword/pulumiUtilities.go create mode 100644 sdk/nodejs/Pulumi.yaml create mode 100644 sdk/nodejs/README.md create mode 100644 sdk/nodejs/config/index.ts create mode 100644 sdk/nodejs/config/vars.ts create mode 100644 sdk/nodejs/getItem.ts create mode 100644 sdk/nodejs/getVault.ts create mode 100644 sdk/nodejs/index.ts create mode 100644 sdk/nodejs/item.ts create mode 100644 sdk/nodejs/package.json create mode 100644 sdk/nodejs/provider.ts create mode 100644 sdk/nodejs/scripts/install-pulumi-plugin.js create mode 100644 sdk/nodejs/tsconfig.json create mode 100644 sdk/nodejs/types/index.ts create mode 100644 sdk/nodejs/types/input.ts create mode 100644 sdk/nodejs/types/output.ts create mode 100644 sdk/nodejs/utilities.ts create mode 100644 sdk/python/Pulumi.yaml create mode 100644 sdk/python/README.md create mode 100644 sdk/python/setup.py create mode 100644 sdk/python/simcubeltd_pulumi_onepassword/README.md create mode 100644 sdk/python/simcubeltd_pulumi_onepassword/__init__.py create mode 100644 sdk/python/simcubeltd_pulumi_onepassword/_inputs.py create mode 100644 sdk/python/simcubeltd_pulumi_onepassword/_utilities.py create mode 100644 sdk/python/simcubeltd_pulumi_onepassword/config/__init__.py create mode 100644 sdk/python/simcubeltd_pulumi_onepassword/config/__init__.pyi create mode 100644 sdk/python/simcubeltd_pulumi_onepassword/config/vars.py create mode 100644 sdk/python/simcubeltd_pulumi_onepassword/get_item.py create mode 100644 sdk/python/simcubeltd_pulumi_onepassword/get_vault.py create mode 100644 sdk/python/simcubeltd_pulumi_onepassword/item.py create mode 100644 sdk/python/simcubeltd_pulumi_onepassword/outputs.py create mode 100644 sdk/python/simcubeltd_pulumi_onepassword/provider.py create mode 100644 sdk/python/simcubeltd_pulumi_onepassword/pulumi-plugin.json create mode 100644 sdk/python/simcubeltd_pulumi_onepassword/py.typed diff --git a/deployment-templates/release.yml b/.github/workflows/release.yml similarity index 74% rename from deployment-templates/release.yml rename to .github/workflows/release.yml index aa2a8a2..c83465d 100644 --- a/deployment-templates/release.yml +++ b/.github/workflows/release.yml @@ -4,29 +4,21 @@ on: tags: - v*.*.* env: - # THIS GITHUB_TOKEN IS A REQUIREMENT TO BE ABLE TO WRITE TO GH RELEASES - GITHUB_TOKEN: ${{ YOUR GITHUB TOKEN HERE }} - # IF YOU NEED TO PUBLISH A NPM PACKAGE THEN ENSURE A NPM_TOKEN SECRET IS SET - # AND PUBLISH_NPM: TRUE. IF YOU WANT TO PUBLISH TO A PRIVATE NPM REGISTRY - # THEN ENSURE THE NPM_REGISTRY_URL IS CHANGED - NODE_AUTH_TOKEN: ${{ YOUR NPM TOKEN HERE }} - NPM_TOKEN: ${{ YOUR NPM TOKEN HERE }} + + GITHUB_TOKEN: ${{ github.token }} + + NODE_AUTH_TOKEN: ${{ secrets.NPMJS_TOKEN }} + NPM_TOKEN: ${{ secrets.NPMJS_TOKEN }} PUBLISH_NPM: true NPM_REGISTRY_URL: https://registry.npmjs.org - # IF YOU NEED TO PUBLISH A NUGET PACKAGE THEN ENSURE AN NUGET_PUBLISH_KEY - # SECRET IS SET AND PUBLISH_NUGET: TRUE. IF YOU WANT TO PUBLISH TO AN ALTERNATIVE - # NPM REGISTRY THEN ENSURE THE NPM_REGISTRY_URL IS CHANGED - NUGET_PUBLISH_KEY: ${{ YOUR NUGET PUBLISH KEY HERE }} + + NUGET_PUBLISH_KEY: ${{ secrets.PUBLIC_NUGET_TOKEN }} NUGET_FEED_URL: https://api.nuget.org/v3/index.json PUBLISH_NUGET: true - # IF YOU NEED TO PUBLISH A PYPI PACKAGE THEN ENSURE AN PYPI_API_TOKEN - # SECRET IS SET AND PUBLISH_PYPI: TRUE. IF YOU WANT TO PUBLISH TO AN ALTERNATIVE - # PYPI REGISTRY THEN ENSURE THE PYPI_REPOSITORY_URL IS SET. IF YOU ARE USING AN API_TOKEN THEN - # YOU DO NOT NEED TO CHANGE THE PYPI_USERNAME (__token__) , IF YOU ARE USING PASSWORD AUTHENTICATION THEN YOU WILL - # NEED TO CHANGE TO USE THE CORRECT PASSWORD - PYPI_PASSWORD: ${{ YOUR PYPI PASSWORD HERE }} - PYPI_USERNAME: "YOUR PYPI USERNAME HERE" - PYPI_REPOSITORY_URL: "" + + PYPI_PASSWORD: ${{ secrets.PYPI_TOKEN }} + PYPI_USERNAME: "__token__" + PYPI_REPOSITORY_URL: "https://github.com/SimCubeLtd/pulumi-onepassword" PUBLISH_PYPI: true jobs: publish_binary: @@ -133,4 +125,4 @@ jobs: nodeversion: - 14.x pythonversion: - - "3.9" + - "3.9" \ No newline at end of file diff --git a/deployment-templates/.goreleaser.yml b/.goreleaser.yml similarity index 57% rename from deployment-templates/.goreleaser.yml rename to .goreleaser.yml index 8ed0e9b..23434d6 100644 --- a/deployment-templates/.goreleaser.yml +++ b/.goreleaser.yml @@ -5,7 +5,7 @@ before: hooks: - make tfgen builds: - - binary: provider-resource-xyz + - binary: provider-resource-onepassword dir: provider env: - CGO_ENABLED=0 @@ -17,13 +17,12 @@ builds: - windows - linux ldflags: - # The line below MUST align with the module in current provider/go.mod - - -X github.com/your-org-name/pulumi-xyz/provider/pkg/version.Version={{.Tag }} - main: ./cmd/pulumi-resource-xyz/ + - -X github.com/SimCubeLtd/pulumi-onepassword/provider/pkg/version.Version={{.Tag }} + main: ./cmd/pulumi-resource-onepassword/ changelog: skip: true release: disable: false prerelease: auto snapshot: - name_template: '{{ .Tag }}-SNAPSHOT' + name_template: '{{ .Tag }}-SNAPSHOT' \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index c99e7fd..0f1d662 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ CHANGELOG ========= -## HEAD (Unreleased) +# v1.0.0 +### [2022-06-12] ---- +* Initial Release, Built from the 1Password Terraform Provider: https://github.com/1Password/terraform-provider-onepassword \ No newline at end of file diff --git a/Makefile b/Makefile index 9f2e285..e7339bc 100644 --- a/Makefile +++ b/Makefile @@ -1,8 +1,8 @@ -PROJECT_NAME := xyz Package +PROJECT_NAME := onepassword Package SHELL := /bin/bash -PACK := xyz -ORG := pulumi +PACK := onepassword +ORG := SimCubeLtd PROJECT := github.com/${ORG}/pulumi-${PACK} NODE_MODULE_NAME := @pulumi/${PACK} TF_NAME := ${PACK} @@ -29,13 +29,13 @@ prepare:: mv "provider/cmd/pulumi-resource-x${EMPTY_TO_AVOID_SED}yz" provider/cmd/pulumi-resource-${NAME} if [[ "${OS}" != "Darwin" ]]; then \ - sed -i 's,github.com/pulumi/pulumi-xyz,${REPOSITORY},g' provider/go.mod; \ + sed -i 's,github.com/SimCubeLtd/pulumi-onepassword,${REPOSITORY},g' provider/go.mod; \ find ./ ! -path './.git/*' -type f -exec sed -i 's/[x]yz/${NAME}/g' {} \; &> /dev/null; \ fi # In MacOS the -i parameter needs an empty string to execute in place. if [[ "${OS}" == "Darwin" ]]; then \ - sed -i '' 's,github.com/pulumi/pulumi-xyz,${REPOSITORY},g' provider/go.mod; \ + sed -i '' 's,github.com/SimCubeLtd/pulumi-onepassword,${REPOSITORY},g' provider/go.mod; \ find ./ ! -path './.git/*' -type f -exec sed -i '' 's/[x]yz/${NAME}/g' {} \; &> /dev/null; \ fi @@ -122,5 +122,4 @@ install_nodejs_sdk:: install_sdks:: install_dotnet_sdk install_python_sdk install_nodejs_sdk test:: - cd examples && go test -v -tags=all -parallel ${TESTPARALLELISM} -timeout 2h - + cd examples && go test -v -tags=all -parallel ${TESTPARALLELISM} -timeout 2h \ No newline at end of file diff --git a/README-PROVIDER.md b/README-PROVIDER.md deleted file mode 100644 index fd3567b..0000000 --- a/README-PROVIDER.md +++ /dev/null @@ -1,56 +0,0 @@ -# Foo Resource Provider - -The Foo Resource Provider lets you manage [Foo](http://example.com) resources. - -## Installing - -This package is available for several languages/platforms: - -### Node.js (JavaScript/TypeScript) - -To use from JavaScript or TypeScript in Node.js, install using either `npm`: - -```bash -npm install @pulumi/foo -``` - -or `yarn`: - -```bash -yarn add @pulumi/foo -``` - -### Python - -To use from Python, install using `pip`: - -```bash -pip install pulumi_foo -``` - -### Go - -To use from Go, use `go get` to grab the latest version of the library: - -```bash -go get github.com/pulumi/pulumi-foo/sdk/go/... -``` - -### .NET - -To use from .NET, install using `dotnet add package`: - -```bash -dotnet add package Pulumi.Foo -``` - -## Configuration - -The following configuration points are available for the `foo` provider: - -- `foo:apiKey` (environment: `FOO_API_KEY`) - the API key for `foo` -- `foo:region` (environment: `FOO_REGION`) - the region in which to deploy resources - -## Reference - -For detailed reference documentation, please visit [the Pulumi registry](https://www.pulumi.com/registry/packages/foo/api-docs/). diff --git a/README.md b/README.md index 76b1a95..7d9f5f0 100644 --- a/README.md +++ b/README.md @@ -1,336 +1,56 @@ -# Terraform Bridge Provider Boilerplate +# 1Password Provider +https://1password.com/ -This repository contains boilerplate code for building a new Pulumi provider which wraps an existing Terraform provider. +  -### Background -This repository is part of the [guide for authoring and publishing a Pulumi Package](https://www.pulumi.com/docs/guides/pulumi-packages/how-to-author). +The 1Password resource provider for Pulumi lets you use 1Password resources in your Infrastructure as Code deployments. -Learn about the concepts behind [Pulumi Packages](https://www.pulumi.com/docs/guides/pulumi-packages/#pulumi-packages). -## Creating a Pulumi Terraform Bridge Provider +## Installing -The following instructions cover: -- providers maintained by Pulumi (denoted with a "Pulumi Official" checkmark on the Pulumi registry) -- providers published and maintained by the Pulumi community, referred to as "third-party" providers +This package is available in C#, TypeScript, Python and Go -We showcase a Pulumi-owned provider based on an upstream provider named `terraform-provider-foo`. Substitute appropriate values below for your use case. +### .NET -> Note: If the name of the desired Pulumi provider differs from the name of the Terraform provider, you will need to carefully distinguish between the references - see for an example. +To use from .NET, install using `dotnet add package`: -### Prerequisites +```bash +dotnet add package Pulumi.Onepassword +``` -Ensure the following tools are installed and present in your `$PATH`: +### Node.js (Java/TypeScript) -* [`pulumictl`](https://github.com/pulumi/pulumictl#installation) -* [Go 1.17](https://golang.org/dl/) or 1.latest -* [NodeJS](https://nodejs.org/en/) 14.x. We recommend using [nvm](https://github.com/nvm-sh/nvm) to manage NodeJS installations. -* [Yarn](https://yarnpkg.com/) -* [TypeScript](https://www.typescriptlang.org/) -* [Python](https://www.python.org/downloads/) (called as `python3`). For recent versions of MacOS, the system-installed version is fine. -* [.NET](https://dotnet.microsoft.com/download) +```bash +npm install @SimCubeLtd/pulumi-onepassword +``` -### Creating and Initializing the Repository +or `yarn`: -Pulumi offers this repository as a [GitHub template repository](https://docs.github.com/en/repositories/creating-and-managing-repositories/creating-a-repository-from-a-template) for convenience. From this repository: +```bash +yarn add @SimCubeLtd/pulumi-onepassword +``` -1. Click "Use this template". -1. Set the following options: - * Owner: pulumi (third-party: your GitHub organization/username) - * Repository name: pulumi-foo (third-party: preface your repo name with "pulumi" as standard practice) - * Description: Pulumi provider for Foo - * Repository type: Public -1. Clone the generated repository. +### Python -From the templated repository: +To use from Python, install using `pip`: -1. Run the following command to update files to use the name of your provider (third-party: use your GitHub organization/username): +```bash +pip install simcubeltd_pulumi_onepassword +``` - ```bash - make prepare NAME=foo REPOSITORY=github.com/pulumi/pulumi-foo - ``` +### Go - This will do the following: - - rename folders in `provider/cmd` to `pulumi-resource-foo` and `pulumi-tfgen-foo` - - replace dependencies in `provider/go.mod` to reflect your repository name - - find and replace all instances of the boilerplate `xyz` with the `NAME` of your provider. +To use from Go, use `go get` to grab the latest version of the library: - Note for third-party providers: - - Make sure to set the correct GitHub organization/username in all files referencing your provider as a dependency: - - `examples/go.mod` - - `provider/resources.go` - - `sdk/go.mod` - - `provider/cmd/pulumi-resource-foo/main.go` - - `provider/cmd/pulumi-tfgen-foo/main.go` +```bash +go get github.com/SimCubeLtd/pulumi-onepassword/sdk/go/onepassword +``` -2. Modify `README-PROVIDER.md` to include the following (we'll rename it to `README.md` toward the end of this guide): - * Any desired build status badges. - * An introductory paragraph describing the type of resources the provider manages, e.g. "The Foo provider for Pulumi manages resources for [Foo](http://example.com/). - * In the "Installing" section, correct package names for the various SDK libraries in the languages Pulumi supports. - * In the "Configuration" section, any configurable options for the provider. These may include, but are not limited to, environment variables or options that can be set via [`pulumi config set`](https://www.pulumi.com/docs/reference/cli/pulumi_config_set/). - * In the "Reference" section, provide a link to the to-be-published documentation. - * Feel free to refer to [the Pulumi AWS provider README](https://github.com/pulumi/pulumi-aws) as an example. +## Configuration -### Composing the Provider Code - Prerequisites +The following configuration entries are available: -Pulumi provider repositories have the following general structure: - -* `examples/` contains sample code which may optionally be included as integration tests to be run as part of a CI/CD pipeline. -* `provider/` contains the Go code used to create the provider as well as generate the SDKs in the various languages that Pulumi supports. - * `provider/cmd/pulumi-tfgen-foo` generates the Pulumi resource schema (`schema.json`), based on the Terraform provider's resources. - * `provider/cmd/pulumi-resource-foo` generates the SDKs in all supported languages from the schema, placing them in the `sdk/` folder. - * `provider/pkg/resources.go` is the location where we will define the Terraform-to-Pulumi mappings for resources. -* `sdk/` contains the generated SDK code for each of the language platforms that Pulumi supports, with each supported platform in a separate subfolder. - -1. In `provider/go.mod`, add a reference to the upstream Terraform provider in the `require` section, e.g. - - ```go - github.com/foo/terraform-provider-foo v0.4.0 - ``` - -1. In `provider/resources.go`, ensure the reference in the `import` section uses the correct Go module path, e.g.: - - ```go - github.com/foo/terraform-provider-foo/foo - ``` - -1. Download the dependencies: - - ```bash - cd provider && go mod tidy && cd - - ``` - -1. Create the schema by running the following command: - - ```bash - make tfgen - ``` - - Note warnings about unmapped resources and data sources in the command's output. We map these in the next section, e.g.: - - ```text - warning: resource foo_something not found in provider map; skipping - warning: resource foo_something_else not found in provider map; skipping - warning: data source foo_something not found in provider map; skipping - warning: data source foo_something_else not found in provider map; skipping - ``` - -## Adding Mappings, Building the Provider and SDKs - -In this section we will add the mappings that allow the interoperation between the Pulumi provider and the Terraform provider. Terraform resources map to an identically named concept in Pulumi. Terraform data sources map to plain old functions in your supported programming language of choice. Pulumi also allows provider functions and resources to be grouped into _namespaces_ to improve the cohesion of a provider's code, thereby making it easier for developers to use. If your provider has a large number of resources, consider using namespaces to improve usability. - -The following instructions all pertain to `provider/resources.go`, in the section of the code where we construct a `tfbridge.ProviderInfo` object: - -1. **Add resource mappings:** For each resource in the provider, add an entry in the `Resources` property of the `tfbridge.ProviderInfo`, e.g.: - - ```go - // Most providers will have all resources (and data sources) in the main module. - // Note the mapping from snake_case HCL naming conventions to UpperCamelCase Pulumi SDK naming conventions. - // The name of the provider is omitted from the mapped name due to the presence of namespaces in all supported Pulumi languages. - "foo_something": {Tok: tfbridge.MakeResource(mainPkg, mainMod, "Something")}, - "foo_something_else": {Tok: tfbridge.MakeResource(mainPkg, mainMod, "SomethingElse")}, - ``` - -1. **Add CSharpName (if necessary):** Dotnet does not allow for fields named the same as the enclosing type, which sometimes results in errors during the dotnet SDK build. - If you see something like - ```text - error CS0542: 'ApiKey': member names cannot be the same as their enclosing type [/Users/guin/go/src/github.com/pulumi/pulumi-artifactory/sdk/dotnet/Pulumi.Artifactory.csproj] - ``` - you'll want to give your Resource a CSharpName, which can have any value that makes sense: - - ```go - "foo_something_dotnet": { - Tok: tfbridge.MakeResource(mainPkg, mainMod, "SomethingDotnet"), - Fields: map[string]*tfbridge.SchemaInfo{ - "something_dotnet": { - CSharpName: "SpecialName", - }, - }, - }, - ``` - - [See the underlying terraform-bridge code here.](https://github.com/pulumi/pulumi-terraform-bridge/blob/master/pkg/tfbridge/info.go#L168) -1. **Add data source mappings:** For each data source in the provider, add an entry in the `DataSources` property of the `tfbridge.ProviderInfo`, e.g.: - - ```go - // Note the 'get' prefix for data sources - "foo_something": {Tok: tfbridge.MakeDataSource(mainPkg, mainMod, "getSomething")}, - "foo_something_else": {Tok: tfbridge.MakeDataSource(mainPkg, mainMod, "getSomethingElse")}, - ``` - -1. **Add documentation mapping (sometimes needed):** If the upstream provider's repo is not a part of the `terraform-providers` GitHub organization, specify the `GitHubOrg` property of `tfbridge.ProviderInfo` to ensure that documentation is picked up by the codegen process, and that attribution for the upstream provider is correct, e.g.: - - ```go - GitHubOrg: "foo", - ``` - -1. **Add provider configuration overrides (not typically needed):** Pulumi's Terraform bridge automatically detects configuration options for the upstream provider. However, in rare cases these settings may need to be overridden, e.g. if we want to change an environment variable default from `API_KEY` to `FOO_API_KEY`. Examples of common uses cases: - - ```go - "additional_required_parameter": {}, - "additional_optional_string_parameter": { - Default: &tfbridge.DefaultInfo{ - Value: "default_value", - }, - "additional_optional_boolean_parameter": { - Default: &tfbridge.DefaultInfo{ - Value: true, - }, - // Renamed environment variables can be accounted for like so: - "apikey": { - Default: &tfbridge.DefaultInfo{ - EnvVars: []string{"FOO_API_KEY"}, - }, - ``` - -1. Build the provider binary and ensure there are no warnings about unmapped resources and no warnings about unmapped data sources: - - ```bash - make provider - ``` - - You may see warnings about documentation and examples, including "unexpected code snippets". These can be safely ignored for now. Pulumi will add additional documentation on mapping docs in a future revision of this guide. - -1. Build the SDKs in the various languages Pulumi supports: - - ```bash - make build_sdks - ``` - -1. Ensure the Golang SDK is a proper go module: - - ```bash - cd sdk && go mod tidy && cd - - ``` - - This will pull in the correct dependencies in `sdk/go.mod` as well as setting the dependency tree in `sdk/go.sum`. - -1. Finally, ensure the provider code conforms to Go standards: - - ```bash - make lint_provider - ``` - - Fix any issues found by the linter. - -**Note:** If you make revisions to code in `resources.go`, you must re-run the `make tfgen` target to regenerate the schema. -The `make tfgen` target will take the file `schema.json` and serialize it to a byte array so that it can be included in the build output. -(This is a holdover from Go 1.16, which does not have the ability to directly embed text files. We are working on removing the need for this step.) - -## Sample Program - -In this section, we will create a Pulumi program in TypeScript that utilizes the provider we created to ensure everything is working properly. - -1. Create an account with the provider's service and generate any necessary credentials, e.g. API keys. - * Email: bot@pulumi.com - * Password: (Create a random password in 1Password with the maximum length and complexity allowed by the provider.) - * Ensure all secrets (passwords, generated API keys) are stored in Pulumi's 1Password vault. - -1. Copy the `pulumi-resource-foo` binary generated by `make provider` and place it in your `$PATH` (`$GOPATH/bin` is a convenient choice), e.g.: - - ```bash - cp bin/pulumi-resource-foo $GOPATH/bin - ``` - -1. Tell Yarn to use your local copy of the SDK: - - ```bash - make install_nodejs_sdk - ``` - -1. Create a new Pulumi program in the `examples/` directory, e.g.: - - ```bash - mkdir examples/my-example/ts # Change "my-example" to something more meaningful. - cd examples/my-example/ts - pulumi new typescript - # (Go through the prompts with the default values) - npm install - yarn link @pulumi/foo - ``` - -1. Create a minimal program for the provider, i.e. one that creates the smallest-footprint resource. Place this code in `index.ts`. -1. Configure any necessary environment variables for authentication, e.g `$FOO_USERNAME`, `$FOO_TOKEN`, in your local environment. -1. Ensure the program runs successfully via `pulumi up`. -1. Once the program completes successfully, verify the resource was created in the provider's UI. -1. Destroy any resources created by the program via `pulumi destroy`. - -Optionally, you may create additional examples for SDKs in other languages supported by Pulumi: - -1. Python: - - ```bash - mkdir examples/my-example/py - cd examples/my-example/py - pulumi new python - # (Go through the prompts with the default values) - source venv/bin/activate # use the virtual Python env that Pulumi sets up for you - pip install pulumi_foo - ``` - -1. Follow the steps above to verify the program runs successfully. - -## Add End-to-end Testing - -We can run integration tests on our examples using the `*_test.go` files in the `examples/` folder. - -1. Add code to `examples_nodejs_test.go` to call the example you created, e.g.: - - ```go - // Swap out MyExample and "my-example" below with the name of your integration test. - func TestAccMyExampleTs(t *testing.T) { - test := getJSBaseOptions(t). - With(integration.ProgramTestOptions{ - Dir: filepath.Join(getCwd(t), "my-example", "ts"), - }) - integration.ProgramTest(t, &test) - } - ``` - -1. Add a similar function for each example that you want to run in an integration test. For examples written in other languages, create similar files for `examples_${LANGUAGE}_test.go`. - -1. You can run these tests locally via Make: - - ```bash - make test - ``` - - You can also run each test file separately via test tags: - - ```bash - cd examples && go test -v -tags=nodejs - ``` - -## Configuring CI with GitHub Actions - -### Third-party providers - -1. Follow the instructions laid out in the [deployment templates](./deployment-templates/README-DEPLOYMENT.md). - -### Pulumi Internal - -In this section, we'll add the necessary configuration to work with GitHub Actions for Pulumi's standard CI/CD workflows for providers. - -1. Generate GitHub workflows per [the instructions in the ci-mgmt repository](https://github.com/pulumi/ci-mgmt/) and copy to `.github/` in this repository. - -1. Ensure that any required secrets are present as repository-level [secrets](https://docs.github.com/en/actions/security-guides/encrypted-secrets) in GitHub. These will be used by the integration tests during the CI/CD process. - -1. Repository settings: Toggle `Allow auto-merge` on in your provider repo to automate GitHub Actions workflow updates. - -## Final Steps - -1. Ensure all required configurations (API keys, etc.) are documented in README-PROVIDER.md. - -1. Replace this file with the README for the provider and push your changes: - - ```bash - mv README-PROVIDER.md README.md - ``` - -1. If publishing the npm package fails during the "Publish SDKs" Action, perform the following steps: - 1. Go to [NPM Packages](https://www.npmjs.com/) and sign in as pulumi-bot. - 1. Click on the bot's profile pic and navigate to "Packages". - 1. On the left, under "Organizations, click on the Pulumi organization. - 1. On the last page of the listed packages, you should see the new package. - 1. Under "Settings", set the Package Status to "public". - -Now you are ready to use the provider, cut releases, and have some well-deserved :ice_cream:! +| **Key** | **Value** | +|-------------------|:-----------------------------------------------------| +| onepassword:token | The access token for your 1Password Connect server | +| onepassword:url | URL where your 1Password Connect API is being served | \ No newline at end of file diff --git a/deployment-templates/README-DEPLOYMENT.md b/deployment-templates/README-DEPLOYMENT.md deleted file mode 100644 index e95b185..0000000 --- a/deployment-templates/README-DEPLOYMENT.md +++ /dev/null @@ -1,28 +0,0 @@ -# Configure - -1. Create a directory at the root of your repo called .github/workflows - -1. Place the release.yml from this directory there - -1. Place the .goreleaser.yml from this directory at the root of your repo - -1. Obtain needed accounts and tokens from the language specific package managers you will use - -1. Add any needed tokens to the actions secrets for your repository or organization - -1. Customize the release.yml with the correct tokens using the format: - - `${{ secrets.MyTokenName }}` - -1. Customize .goreleaser.yml for your provider, paying special attention that the ldlflags are set to match your provider/go.mod exactly: - - `-X github.com/pulumi/pulumi-aws/provider/v5/pkg/version.Version={{.Tag}}` - -1. Delete this directory if desired - - -# Deploy - -1. Push a tag to your repo in the format "v0.0.0" to initiate a release - -1. IMPORTANT: also add a tag in the format "sdk/v0.0.0" for the Go SDK diff --git a/examples/.gitignore b/examples/.gitignore deleted file mode 100644 index ed6aaad..0000000 --- a/examples/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -.pulumi/ -**/bin/ -node_modules/ - diff --git a/examples/examples_nodejs_test.go b/examples/examples_nodejs_test.go deleted file mode 100644 index e63642f..0000000 --- a/examples/examples_nodejs_test.go +++ /dev/null @@ -1,22 +0,0 @@ -//go:build nodejs || all -// +build nodejs all - -package examples - -import ( - "path/filepath" - "testing" - - "github.com/pulumi/pulumi/pkg/v3/testing/integration" -) - -func getJSBaseOptions(t *testing.T) integration.ProgramTestOptions { - base := getBaseOptions() - baseJS := base.With(integration.ProgramTestOptions{ - Dependencies: []string{ - "@pulumi/foo", - }, - }) - - return baseJS -} diff --git a/examples/examples_py_test.go b/examples/examples_py_test.go deleted file mode 100644 index 7d832f4..0000000 --- a/examples/examples_py_test.go +++ /dev/null @@ -1,22 +0,0 @@ -//go:build python || all -// +build python all - -package examples - -import ( - "path/filepath" - "testing" - - "github.com/pulumi/pulumi/pkg/v3/testing/integration" -) - -func getPythonBaseOptions(t *testing.T) integration.ProgramTestOptions { - base := getBaseOptions() - basePython := base.With(integration.ProgramTestOptions{ - Dependencies: []string{ - filepath.Join("..", "sdk", "python", "bin"), - }, - }) - - return basePython -} diff --git a/examples/examples_test.go b/examples/examples_test.go deleted file mode 100644 index 9810e75..0000000 --- a/examples/examples_test.go +++ /dev/null @@ -1,24 +0,0 @@ -package examples - -import ( - "os" - "testing" - - "github.com/pulumi/pulumi/pkg/v3/testing/integration" -) - -func getCwd(t *testing.T) string { - cwd, err := os.Getwd() - if err != nil { - t.FailNow() - } - - return cwd -} - -func getBaseOptions() integration.ProgramTestOptions { - return integration.ProgramTestOptions{ - RunUpdateTest: false, - ExpectRefreshChanges: true, - } -} diff --git a/examples/go.mod b/examples/go.mod deleted file mode 100644 index 709bf5a..0000000 --- a/examples/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module github.com/pulumi/pulumi-xyz/examples - -go 1.16 diff --git a/provider/cmd/pulumi-resource-xyz/.gitignore b/provider/cmd/pulumi-resource-onepassword/.gitignore similarity index 100% rename from provider/cmd/pulumi-resource-xyz/.gitignore rename to provider/cmd/pulumi-resource-onepassword/.gitignore diff --git a/provider/cmd/pulumi-resource-onepassword/Pulumi.yaml b/provider/cmd/pulumi-resource-onepassword/Pulumi.yaml new file mode 100644 index 0000000..e69de29 diff --git a/provider/cmd/pulumi-resource-xyz/generate.go b/provider/cmd/pulumi-resource-onepassword/generate.go similarity index 100% rename from provider/cmd/pulumi-resource-xyz/generate.go rename to provider/cmd/pulumi-resource-onepassword/generate.go diff --git a/provider/cmd/pulumi-resource-xyz/main.go b/provider/cmd/pulumi-resource-onepassword/main.go similarity index 78% rename from provider/cmd/pulumi-resource-xyz/main.go rename to provider/cmd/pulumi-resource-onepassword/main.go index 1e6ac0e..15dde45 100644 --- a/provider/cmd/pulumi-resource-xyz/main.go +++ b/provider/cmd/pulumi-resource-onepassword/main.go @@ -18,11 +18,11 @@ package main import ( "github.com/pulumi/pulumi-terraform-bridge/v3/pkg/tfbridge" - xyz "github.com/pulumi/pulumi-xyz/provider" - "github.com/pulumi/pulumi-xyz/provider/pkg/version" + onepassword "github.com/SimCubeLtd/pulumi-onepassword/provider" + "github.com/SimCubeLtd/pulumi-onepassword/provider/pkg/version" ) func main() { // Modify the path to point to the new provider - tfbridge.Main("xyz", version.Version, xyz.Provider(), pulumiSchema) -} + tfbridge.Main("onepassword", version.Version, onepassword.Provider(), pulumiSchema) +} \ No newline at end of file diff --git a/provider/cmd/pulumi-resource-onepassword/schema.json b/provider/cmd/pulumi-resource-onepassword/schema.json new file mode 100644 index 0000000..fd4eadf --- /dev/null +++ b/provider/cmd/pulumi-resource-onepassword/schema.json @@ -0,0 +1,775 @@ +{ + "name": "onepassword", + "displayName": "1Password", + "description": "A Pulumi package for creating and managing onepassword resources.", + "keywords": [ + "pulumi", + "onepassword", + "category/cloud" + ], + "homepage": "https://github.com/SimCubeLtd/pulumi-onepassword", + "license": "Apache-2.0", + "attribution": "This Pulumi package is based on the [`onepassword` Terraform Provider](https://github.com/1Password/terraform-provider-onepassword).", + "repository": "https://github.com/SimCubeLtd/pulumi-onepassword", + "logoUrl": "https://avatars.githubusercontent.com/u/38230737?s=200\u0026v=4", + "pluginDownloadURL": "https://github.com/SimCubeLtd/pulumi-onepassword/releases/download/v${VERSION}", + "publisher": "SimCubeLtd", + "meta": { + "moduleFormat": "(.*)(?:/[^/]*)" + }, + "config": { + "variables": { + "token": { + "type": "string", + "description": "A valid token for your 1Password Connect API. Can also be sourced from OP_CONNECT_TOKEN.\n" + }, + "url": { + "type": "string", + "description": "The HTTP(S) URL where your 1Password Connect API can be found. Must be provided through the the OP_CONNECT_HOST\nenvironment variable if this attribute is not set.\n" + } + }, + "defaults": [ + "token" + ] + }, + "types": { + "onepassword:index/GetItemSection:GetItemSection": { + "properties": { + "fields": { + "type": "array", + "items": { + "$ref": "#/types/onepassword:index/GetItemSectionField:GetItemSectionField" + }, + "language": { + "python": { + "mapCase": false + } + } + }, + "id": { + "type": "string", + "language": { + "python": { + "mapCase": false + } + } + }, + "label": { + "type": "string", + "language": { + "python": { + "mapCase": false + } + } + } + }, + "type": "object", + "required": [ + "fields", + "id", + "label" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, + "onepassword:index/GetItemSectionField:GetItemSectionField": { + "properties": { + "id": { + "type": "string", + "language": { + "python": { + "mapCase": false + } + } + }, + "label": { + "type": "string", + "language": { + "python": { + "mapCase": false + } + } + }, + "purpose": { + "type": "string", + "language": { + "python": { + "mapCase": false + } + } + }, + "type": { + "type": "string", + "description": "(Only applies to the database category) The type of database. One of [\"db2\" \"filemaker\" \"msaccess\" \"mssql\" \"mysql\" \"oracle\" \"postgresql\" \"sqlite\" \"other\"]\n", + "language": { + "python": { + "mapCase": false + } + } + }, + "value": { + "type": "string", + "language": { + "python": { + "mapCase": false + } + } + } + }, + "type": "object", + "required": [ + "id", + "label", + "purpose", + "type", + "value" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, + "onepassword:index/ItemPasswordRecipe:ItemPasswordRecipe": { + "properties": { + "digits": { + "type": "boolean", + "description": "Use digits [0-9] when generating the password.\n", + "language": { + "python": { + "mapCase": false + } + } + }, + "length": { + "type": "integer", + "description": "The length of the password to be generated.\n", + "language": { + "python": { + "mapCase": false + } + } + }, + "letters": { + "type": "boolean", + "description": "Use letters [a-zA-Z] when generating the password.\n", + "language": { + "python": { + "mapCase": false + } + } + }, + "symbols": { + "type": "boolean", + "description": "Use symbols [!@.-_*] when generating the password.\n", + "language": { + "python": { + "mapCase": false + } + } + } + }, + "type": "object" + }, + "onepassword:index/ItemSection:ItemSection": { + "properties": { + "fields": { + "type": "array", + "items": { + "$ref": "#/types/onepassword:index/ItemSectionField:ItemSectionField" + }, + "description": "A list of custom fields in the section.\n", + "language": { + "python": { + "mapCase": false + } + } + }, + "id": { + "type": "string", + "description": "A unique identifier for the section.\n", + "language": { + "python": { + "mapCase": false + } + } + }, + "label": { + "type": "string", + "description": "The label for the section.\n", + "language": { + "python": { + "mapCase": false + } + } + } + }, + "type": "object", + "required": [ + "label" + ], + "language": { + "nodejs": { + "requiredOutputs": [ + "id", + "label" + ] + } + } + }, + "onepassword:index/ItemSectionField:ItemSectionField": { + "properties": { + "id": { + "type": "string", + "language": { + "python": { + "mapCase": false + } + } + }, + "label": { + "type": "string", + "language": { + "python": { + "mapCase": false + } + } + }, + "passwordRecipe": { + "$ref": "#/types/onepassword:index/ItemSectionFieldPasswordRecipe:ItemSectionFieldPasswordRecipe", + "description": "Password for this item.\n", + "language": { + "python": { + "mapCase": false + } + } + }, + "purpose": { + "type": "string", + "language": { + "python": { + "mapCase": false + } + } + }, + "type": { + "type": "string", + "description": "(Only applies to the database category) The type of database. One of [\"db2\" \"filemaker\" \"msaccess\" \"mssql\" \"mysql\" \"oracle\" \"postgresql\" \"sqlite\" \"other\"]\n", + "language": { + "python": { + "mapCase": false + } + } + }, + "value": { + "type": "string", + "language": { + "python": { + "mapCase": false + } + } + } + }, + "type": "object", + "required": [ + "label" + ], + "language": { + "nodejs": { + "requiredOutputs": [ + "id", + "label", + "value" + ] + } + } + }, + "onepassword:index/ItemSectionFieldPasswordRecipe:ItemSectionFieldPasswordRecipe": { + "properties": { + "digits": { + "type": "boolean", + "description": "Use digits [0-9] when generating the password.\n", + "language": { + "python": { + "mapCase": false + } + } + }, + "length": { + "type": "integer", + "description": "The length of the password to be generated.\n", + "language": { + "python": { + "mapCase": false + } + } + }, + "letters": { + "type": "boolean", + "description": "Use letters [a-zA-Z] when generating the password.\n", + "language": { + "python": { + "mapCase": false + } + } + }, + "symbols": { + "type": "boolean", + "description": "Use symbols [!@.-_*] when generating the password.\n", + "language": { + "python": { + "mapCase": false + } + } + } + }, + "type": "object" + } + }, + "provider": { + "description": "The provider type for the onepassword package. By default, resources use package-wide configuration\nsettings, however an explicit `Provider` instance may be created and passed during resource\nconstruction to achieve fine-grained programmatic control over provider settings. See the\n[documentation](https://www.pulumi.com/docs/reference/programming-model/#providers) for more information.\n", + "properties": { + "token": { + "type": "string", + "description": "A valid token for your 1Password Connect API. Can also be sourced from OP_CONNECT_TOKEN.\n" + }, + "url": { + "type": "string", + "description": "The HTTP(S) URL where your 1Password Connect API can be found. Must be provided through the the OP_CONNECT_HOST\nenvironment variable if this attribute is not set.\n" + } + }, + "required": [ + "token" + ], + "inputProperties": { + "token": { + "type": "string", + "description": "A valid token for your 1Password Connect API. Can also be sourced from OP_CONNECT_TOKEN.\n" + }, + "url": { + "type": "string", + "description": "The HTTP(S) URL where your 1Password Connect API can be found. Must be provided through the the OP_CONNECT_HOST\nenvironment variable if this attribute is not set.\n" + } + }, + "requiredInputs": [ + "token" + ] + }, + "resources": { + "onepassword:index/item:Item": { + "description": "A 1Password item.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as pulumi_onepassword from \"@SimCubeLtd/pulumi-onepassword\";\n\nconst demoPassword = new onepassword.Item(\"demoPassword\", {\n vault: _var.demo_vault,\n title: \"Demo Password Recipe\",\n category: \"password\",\n passwordRecipe: {\n length: 40,\n symbols: false,\n },\n});\nconst demoLogin = new onepassword.Item(\"demoLogin\", {\n vault: _var.demo_vault,\n title: \"Demo Terraform Login\",\n category: \"login\",\n username: \"test@example.com\",\n});\nconst demoDb = new onepassword.Item(\"demoDb\", {\n vault: _var.demo_vault,\n category: \"database\",\n type: \"mysql\",\n title: \"Demo TF Database\",\n username: \"root\",\n database: \"Example MySQL Instance\",\n hostname: \"localhost\",\n port: \"3306\",\n});\n```\n```python\nimport pulumi\nimport simcubeltd_pulumi_onepassword as onepassword\n\ndemo_password = onepassword.Item(\"demoPassword\",\n vault=var[\"demo_vault\"],\n title=\"Demo Password Recipe\",\n category=\"password\",\n password_recipe=onepassword.ItemPasswordRecipeArgs(\n length=40,\n symbols=False,\n ))\ndemo_login = onepassword.Item(\"demoLogin\",\n vault=var[\"demo_vault\"],\n title=\"Demo Terraform Login\",\n category=\"login\",\n username=\"test@example.com\")\ndemo_db = onepassword.Item(\"demoDb\",\n vault=var[\"demo_vault\"],\n category=\"database\",\n type=\"mysql\",\n title=\"Demo TF Database\",\n username=\"root\",\n database=\"Example MySQL Instance\",\n hostname=\"localhost\",\n port=\"3306\")\n```\n```csharp\nusing Pulumi;\nusing Onepassword = Pulumi.Onepassword;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var demoPassword = new Onepassword.Item(\"demoPassword\", new Onepassword.ItemArgs\n {\n Vault = @var.Demo_vault,\n Title = \"Demo Password Recipe\",\n Category = \"password\",\n PasswordRecipe = new Onepassword.Inputs.ItemPasswordRecipeArgs\n {\n Length = 40,\n Symbols = false,\n },\n });\n var demoLogin = new Onepassword.Item(\"demoLogin\", new Onepassword.ItemArgs\n {\n Vault = @var.Demo_vault,\n Title = \"Demo Terraform Login\",\n Category = \"login\",\n Username = \"test@example.com\",\n });\n var demoDb = new Onepassword.Item(\"demoDb\", new Onepassword.ItemArgs\n {\n Vault = @var.Demo_vault,\n Category = \"database\",\n Type = \"mysql\",\n Title = \"Demo TF Database\",\n Username = \"root\",\n Database = \"Example MySQL Instance\",\n Hostname = \"localhost\",\n Port = \"3306\",\n });\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/SimCubeLtd/pulumi-onepassword/sdk/go/onepassword\"\n\t\"github.com/pulumi/pulumi-onepassword/sdk/go/onepassword\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := onepassword.NewItem(ctx, \"demoPassword\", \u0026onepassword.ItemArgs{\n\t\t\tVault: pulumi.Any(_var.Demo_vault),\n\t\t\tTitle: pulumi.String(\"Demo Password Recipe\"),\n\t\t\tCategory: pulumi.String(\"password\"),\n\t\t\tPasswordRecipe: \u0026ItemPasswordRecipeArgs{\n\t\t\t\tLength: pulumi.Int(40),\n\t\t\t\tSymbols: pulumi.Bool(false),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = onepassword.NewItem(ctx, \"demoLogin\", \u0026onepassword.ItemArgs{\n\t\t\tVault: pulumi.Any(_var.Demo_vault),\n\t\t\tTitle: pulumi.String(\"Demo Terraform Login\"),\n\t\t\tCategory: pulumi.String(\"login\"),\n\t\t\tUsername: pulumi.String(\"test@example.com\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = onepassword.NewItem(ctx, \"demoDb\", \u0026onepassword.ItemArgs{\n\t\t\tVault: pulumi.Any(_var.Demo_vault),\n\t\t\tCategory: pulumi.String(\"database\"),\n\t\t\tType: pulumi.String(\"mysql\"),\n\t\t\tTitle: pulumi.String(\"Demo TF Database\"),\n\t\t\tUsername: pulumi.String(\"root\"),\n\t\t\tDatabase: pulumi.String(\"Example MySQL Instance\"),\n\t\t\tHostname: pulumi.String(\"localhost\"),\n\t\t\tPort: pulumi.String(\"3306\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport java.util.*;\nimport java.io.*;\nimport java.nio.*;\nimport com.pulumi.*;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var demoPassword = new Item(\"demoPassword\", ItemArgs.builder() \n .vault(var_.demo_vault())\n .title(\"Demo Password Recipe\")\n .category(\"password\")\n .passwordRecipe(ItemPasswordRecipeArgs.builder()\n .length(40)\n .symbols(false)\n .build())\n .build());\n\n var demoLogin = new Item(\"demoLogin\", ItemArgs.builder() \n .vault(var_.demo_vault())\n .title(\"Demo Terraform Login\")\n .category(\"login\")\n .username(\"test@example.com\")\n .build());\n\n var demoDb = new Item(\"demoDb\", ItemArgs.builder() \n .vault(var_.demo_vault())\n .category(\"database\")\n .type(\"mysql\")\n .title(\"Demo TF Database\")\n .username(\"root\")\n .database(\"Example MySQL Instance\")\n .hostname(\"localhost\")\n .port(3306)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n demoPassword:\n type: onepassword:Item\n properties:\n vault: ${var.demo_vault}\n title: Demo Password Recipe\n category: password\n passwordRecipe:\n length: 40\n symbols: false\n demoLogin:\n type: onepassword:Item\n properties:\n vault: ${var.demo_vault}\n title: Demo Terraform Login\n category: login\n username: test@example.com\n demoDb:\n type: onepassword:Item\n properties:\n vault: ${var.demo_vault}\n category: database\n type: mysql\n title: Demo TF Database\n username: root\n database: Example MySQL Instance\n hostname: localhost\n port: 3306\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\n# import an existing 1Password item\n\n```sh\n $ pulumi import onepassword:index/item:Item myitem vaults/\u003cvault uuid\u003e/items/\u003citem uuid\u003e\n```\n\n ", + "properties": { + "category": { + "type": "string", + "description": "The category of the item. One of [\"login\" \"password\" \"database\"]\n" + }, + "database": { + "type": "string", + "description": "(Only applies to the database category) The name of the database.\n" + }, + "hostname": { + "type": "string", + "description": "(Only applies to the database category) The address where the database can be found\n", + "secret": true + }, + "password": { + "type": "string", + "description": "Password for this item.\n", + "secret": true + }, + "passwordRecipe": { + "$ref": "#/types/onepassword:index/ItemPasswordRecipe:ItemPasswordRecipe", + "description": "Password for this item.\n" + }, + "port": { + "type": "string", + "description": "(Only applies to the database category) The port the database is listening on.\n", + "secret": true + }, + "sections": { + "type": "array", + "items": { + "$ref": "#/types/onepassword:index/ItemSection:ItemSection" + }, + "description": "A list of custom sections in an item\n" + }, + "tags": { + "type": "array", + "items": { + "type": "string" + }, + "description": "An array of strings of the tags assigned to the item.\n" + }, + "title": { + "type": "string", + "description": "The title of the item.\n" + }, + "type": { + "type": "string", + "description": "(Only applies to the database category) The type of database. One of [\"db2\" \"filemaker\" \"msaccess\" \"mssql\" \"mysql\" \"oracle\" \"postgresql\" \"sqlite\" \"other\"]\n" + }, + "url": { + "type": "string", + "description": "The primary URL for the item.\n" + }, + "username": { + "type": "string", + "description": "Username for this item.\n", + "secret": true + }, + "uuid": { + "type": "string", + "description": "The UUID of the item. Item identifiers are unique within a specific vault.\n" + }, + "vault": { + "type": "string", + "description": "The UUID of the vault the item is in.\n", + "secret": true + } + }, + "required": [ + "password", + "uuid", + "vault" + ], + "inputProperties": { + "category": { + "type": "string", + "description": "The category of the item. One of [\"login\" \"password\" \"database\"]\n", + "willReplaceOnChanges": true + }, + "database": { + "type": "string", + "description": "(Only applies to the database category) The name of the database.\n" + }, + "hostname": { + "type": "string", + "description": "(Only applies to the database category) The address where the database can be found\n", + "secret": true + }, + "password": { + "type": "string", + "description": "Password for this item.\n", + "secret": true + }, + "passwordRecipe": { + "$ref": "#/types/onepassword:index/ItemPasswordRecipe:ItemPasswordRecipe", + "description": "Password for this item.\n" + }, + "port": { + "type": "string", + "description": "(Only applies to the database category) The port the database is listening on.\n", + "secret": true + }, + "sections": { + "type": "array", + "items": { + "$ref": "#/types/onepassword:index/ItemSection:ItemSection" + }, + "description": "A list of custom sections in an item\n" + }, + "tags": { + "type": "array", + "items": { + "type": "string" + }, + "description": "An array of strings of the tags assigned to the item.\n" + }, + "title": { + "type": "string", + "description": "The title of the item.\n" + }, + "type": { + "type": "string", + "description": "(Only applies to the database category) The type of database. One of [\"db2\" \"filemaker\" \"msaccess\" \"mssql\" \"mysql\" \"oracle\" \"postgresql\" \"sqlite\" \"other\"]\n" + }, + "url": { + "type": "string", + "description": "The primary URL for the item.\n" + }, + "username": { + "type": "string", + "description": "Username for this item.\n", + "secret": true + }, + "vault": { + "type": "string", + "description": "The UUID of the vault the item is in.\n", + "secret": true, + "willReplaceOnChanges": true + } + }, + "requiredInputs": [ + "vault" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering Item resources.\n", + "properties": { + "category": { + "type": "string", + "description": "The category of the item. One of [\"login\" \"password\" \"database\"]\n", + "willReplaceOnChanges": true + }, + "database": { + "type": "string", + "description": "(Only applies to the database category) The name of the database.\n" + }, + "hostname": { + "type": "string", + "description": "(Only applies to the database category) The address where the database can be found\n", + "secret": true + }, + "password": { + "type": "string", + "description": "Password for this item.\n", + "secret": true + }, + "passwordRecipe": { + "$ref": "#/types/onepassword:index/ItemPasswordRecipe:ItemPasswordRecipe", + "description": "Password for this item.\n" + }, + "port": { + "type": "string", + "description": "(Only applies to the database category) The port the database is listening on.\n", + "secret": true + }, + "sections": { + "type": "array", + "items": { + "$ref": "#/types/onepassword:index/ItemSection:ItemSection" + }, + "description": "A list of custom sections in an item\n" + }, + "tags": { + "type": "array", + "items": { + "type": "string" + }, + "description": "An array of strings of the tags assigned to the item.\n" + }, + "title": { + "type": "string", + "description": "The title of the item.\n" + }, + "type": { + "type": "string", + "description": "(Only applies to the database category) The type of database. One of [\"db2\" \"filemaker\" \"msaccess\" \"mssql\" \"mysql\" \"oracle\" \"postgresql\" \"sqlite\" \"other\"]\n" + }, + "url": { + "type": "string", + "description": "The primary URL for the item.\n" + }, + "username": { + "type": "string", + "description": "Username for this item.\n", + "secret": true + }, + "uuid": { + "type": "string", + "description": "The UUID of the item. Item identifiers are unique within a specific vault.\n" + }, + "vault": { + "type": "string", + "description": "The UUID of the vault the item is in.\n", + "secret": true, + "willReplaceOnChanges": true + } + }, + "type": "object" + } + } + }, + "functions": { + "onepassword:index/getItem:GetItem": { + "description": "Use this data source to get details of an item by its vault uuid and either the title or the uuid of the item.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as onepassword from \"@pulumi/onepassword\";\n\nconst example = onepassword.GetItem({\n vault: _var.demo_vault,\n uuid: onepassword_item.demo_sections.uuid,\n});\n```\n```python\nimport pulumi\nimport pulumi_onepassword as onepassword\n\nexample = onepassword.get_item(vault=var[\"demo_vault\"],\n uuid=onepassword_item[\"demo_sections\"][\"uuid\"])\n```\n```csharp\nusing Pulumi;\nusing Onepassword = Pulumi.Onepassword;\n\nclass MyStack : Stack\n{\n public MyStack()\n {\n var example = Output.Create(Onepassword.GetItem.InvokeAsync(new Onepassword.GetItemArgs\n {\n Vault = @var.Demo_vault,\n Uuid = onepassword_item.Demo_sections.Uuid,\n }));\n }\n\n}\n```\n```go\npackage main\n\nimport (\n\t\"github.com/SimCubeLtd/pulumi-onepassword/sdk/go/onepassword\"\n\t\"github.com/pulumi/pulumi-onepassword/sdk/go/onepassword\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := onepassword.GetItem(ctx, \u0026GetItemArgs{\n\t\t\tVault: _var.Demo_vault,\n\t\t\tUuid: pulumi.StringRef(onepassword_item.Demo_sections.Uuid),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport java.util.*;\nimport java.io.*;\nimport java.nio.*;\nimport com.pulumi.*;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var example = OnepasswordFunctions.GetItem();\n\n }\n}\n```\n```yaml\nvariables:\n example:\n Fn::Invoke:\n Function: onepassword:GetItem\n Arguments:\n vault: ${var.demo_vault}\n uuid: ${onepassword_item.demo_sections.uuid}\n```\n{{% /example %}}\n{{% /examples %}}", + "inputs": { + "description": "A collection of arguments for invoking GetItem.\n", + "properties": { + "title": { + "type": "string", + "description": "The title of the item to retrieve. This field will be populated with the title of the item if the item it looked up by its UUID.\n" + }, + "uuid": { + "type": "string", + "description": "The UUID of the item to retrieve. This field will be populated with the UUID of the item if the item it looked up by its title.\n" + }, + "vault": { + "type": "string", + "description": "The UUID of the vault the item is in.\n" + } + }, + "type": "object", + "required": [ + "vault" + ] + }, + "outputs": { + "description": "A collection of values returned by GetItem.\n", + "properties": { + "category": { + "type": "string", + "description": "The category of the item. One of [\"login\" \"password\" \"database\"]\n" + }, + "database": { + "type": "string", + "description": "(Only applies to the database category) The name of the database.\n" + }, + "hostname": { + "type": "string", + "description": "(Only applies to the database category) The address where the database can be found\n" + }, + "id": { + "type": "string" + }, + "password": { + "type": "string", + "description": "Password for this item.\n" + }, + "port": { + "type": "string", + "description": "(Only applies to the database category) The port the database is listening on.\n" + }, + "sections": { + "type": "array", + "items": { + "$ref": "#/types/onepassword:index/GetItemSection:GetItemSection" + }, + "description": "A list of custom sections in an item\n" + }, + "tags": { + "type": "array", + "items": { + "type": "string" + }, + "description": "An array of strings of the tags assigned to the item.\n" + }, + "title": { + "type": "string", + "description": "The title of the item to retrieve. This field will be populated with the title of the item if the item it looked up by its UUID.\n" + }, + "type": { + "type": "string", + "description": "(Only applies to the database category) The type of database. One of [\"db2\" \"filemaker\" \"msaccess\" \"mssql\" \"mysql\" \"oracle\" \"postgresql\" \"sqlite\" \"other\"]\n" + }, + "url": { + "type": "string", + "description": "The primary URL for the item.\n" + }, + "username": { + "type": "string", + "description": "Username for this item.\n" + }, + "uuid": { + "type": "string", + "description": "The UUID of the item to retrieve. This field will be populated with the UUID of the item if the item it looked up by its title.\n" + }, + "vault": { + "type": "string", + "description": "The UUID of the vault the item is in.\n" + } + }, + "type": "object", + "required": [ + "category", + "database", + "hostname", + "id", + "password", + "port", + "sections", + "tags", + "title", + "type", + "url", + "username", + "uuid", + "vault" + ] + } + }, + "onepassword:index/getVault:GetVault": { + "description": "Use this data source to get details of a vault by either its name or uuid.\n", + "inputs": { + "description": "A collection of arguments for invoking GetVault.\n", + "properties": { + "name": { + "type": "string", + "description": "The name of the vault to retrieve. This field will be populated with the name of the vault if the vault it looked up by its UUID.\n" + }, + "uuid": { + "type": "string", + "description": "The UUID of the vault to retrieve. This field will be populated with the UUID of the vault if the vault it looked up by its name.\n" + } + }, + "type": "object" + }, + "outputs": { + "description": "A collection of values returned by GetVault.\n", + "properties": { + "description": { + "type": "string", + "description": "The description of the vault.\n" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string", + "description": "The name of the vault to retrieve. This field will be populated with the name of the vault if the vault it looked up by its UUID.\n" + }, + "uuid": { + "type": "string", + "description": "The UUID of the vault to retrieve. This field will be populated with the UUID of the vault if the vault it looked up by its name.\n" + } + }, + "type": "object", + "required": [ + "description", + "id", + "name", + "uuid" + ] + } + } + }, + "language": { + "csharp": { + "compatibility": "tfbridge20", + "namespaces": null, + "packageReferences": { + "Pulumi": "3.*" + } + }, + "go": { + "generateExtraInputTypes": true, + "generateResourceContainerTypes": true, + "importBasePath": "github.com/SimCubeLtd/pulumi-onepassword/sdk/go/onepassword" + }, + "nodejs": { + "compatibility": "tfbridge20", + "dependencies": { + "@pulumi/pulumi": "^3.0.0" + }, + "devDependencies": { + "@types/mime": "^2.0.0", + "@types/node": "^10.0.0" + }, + "disableUnionOutputTypes": true, + "packageDescription": "A Pulumi package for creating and managing onepassword resources.", + "packageName": "@SimCubeLtd/pulumi-onepassword", + "readme": "\u003e This provider is a derived work of the [Terraform Provider](https://github.com/1Password/terraform-provider-onepassword)\n\u003e distributed under [MPL 2.0](https://www.mozilla.org/en-US/MPL/2.0/). If you encounter a bug or missing feature,\n\u003e first check the [`pulumi/pulumi-onepassword` repo](https://github.com/pulumi/pulumi-onepassword/issues); however, if that doesn't turn up anything,\n\u003e please consult the source [`1Password/terraform-provider-onepassword` repo](https://github.com/1Password/terraform-provider-onepassword/issues).", + "typescriptVersion": "" + }, + "python": { + "compatibility": "tfbridge20", + "packageName": "simcubeltd_pulumi_onepassword", + "readme": "\u003e This provider is a derived work of the [Terraform Provider](https://github.com/1Password/terraform-provider-onepassword)\n\u003e distributed under [MPL 2.0](https://www.mozilla.org/en-US/MPL/2.0/). If you encounter a bug or missing feature,\n\u003e first check the [`pulumi/pulumi-onepassword` repo](https://github.com/pulumi/pulumi-onepassword/issues); however, if that doesn't turn up anything,\n\u003e please consult the source [`1Password/terraform-provider-onepassword` repo](https://github.com/1Password/terraform-provider-onepassword/issues).", + "requires": { + "pulumi": "\u003e=3.0.0,\u003c4.0.0" + } + } + } +} \ No newline at end of file diff --git a/provider/cmd/pulumi-tfgen-xyz/main.go b/provider/cmd/pulumi-tfgen-onepassword/main.go similarity index 79% rename from provider/cmd/pulumi-tfgen-xyz/main.go rename to provider/cmd/pulumi-tfgen-onepassword/main.go index 76648ce..e5f80da 100644 --- a/provider/cmd/pulumi-tfgen-xyz/main.go +++ b/provider/cmd/pulumi-tfgen-onepassword/main.go @@ -16,11 +16,11 @@ package main import ( "github.com/pulumi/pulumi-terraform-bridge/v3/pkg/tfgen" - xyz "github.com/pulumi/pulumi-xyz/provider" - "github.com/pulumi/pulumi-xyz/provider/pkg/version" + onepassword "github.com/SimCubeLtd/pulumi-onepassword/provider" + "github.com/SimCubeLtd/pulumi-onepassword/provider/pkg/version" ) func main() { // Modify the path to point to the new provider - tfgen.Main("xyz", version.Version, xyz.Provider()) -} + tfgen.Main("onepassword", version.Version, onepassword.Provider()) +} \ No newline at end of file diff --git a/provider/go.mod b/provider/go.mod index e962c7d..0e95b6c 100644 --- a/provider/go.mod +++ b/provider/go.mod @@ -1,4 +1,4 @@ -module github.com/pulumi/pulumi-xyz/provider +module github.com/SimCubeLtd/pulumi-onepassword/provider go 1.18 @@ -8,7 +8,199 @@ replace ( ) require ( - github.com/hashicorp/terraform-plugin-sdk v1.9.1 + github.com/1Password/terraform-provider-onepassword v1.1.4 github.com/pulumi/pulumi-terraform-bridge/v3 v3.24.1 github.com/pulumi/pulumi/sdk/v3 v3.33.1 ) + +require ( + cloud.google.com/go v0.100.2 // indirect + cloud.google.com/go/compute v1.5.0 // indirect + cloud.google.com/go/iam v0.3.0 // indirect + cloud.google.com/go/kms v1.1.0 // indirect + cloud.google.com/go/logging v1.0.0 // indirect + cloud.google.com/go/storage v1.22.0 // indirect + github.com/1Password/connect-sdk-go v1.2.0 // indirect + github.com/Azure/azure-pipeline-go v0.2.3 // indirect + github.com/Azure/azure-sdk-for-go v57.0.0+incompatible // indirect + github.com/Azure/azure-storage-blob-go v0.14.0 // indirect + github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect + github.com/Azure/go-autorest v14.2.0+incompatible // indirect + github.com/Azure/go-autorest/autorest v0.11.20 // indirect + github.com/Azure/go-autorest/autorest/adal v0.9.15 // indirect + github.com/Azure/go-autorest/autorest/azure/auth v0.5.8 // indirect + github.com/Azure/go-autorest/autorest/azure/cli v0.4.3 // indirect + github.com/Azure/go-autorest/autorest/date v0.3.0 // indirect + github.com/Azure/go-autorest/autorest/to v0.4.0 // indirect + github.com/Azure/go-autorest/autorest/validation v0.3.1 // indirect + github.com/Azure/go-autorest/logger v0.2.1 // indirect + github.com/Azure/go-autorest/tracing v0.6.0 // indirect + github.com/Masterminds/goutils v1.1.0 // indirect + github.com/Masterminds/semver v1.5.0 // indirect + github.com/Masterminds/sprig v2.22.0+incompatible // indirect + github.com/Microsoft/go-winio v0.5.1 // indirect + github.com/agext/levenshtein v1.2.3 // indirect + github.com/apparentlymart/go-cidr v1.1.0 // indirect + github.com/apparentlymart/go-textseg/v13 v13.0.0 // indirect + github.com/armon/go-radix v1.0.0 // indirect + github.com/aws/aws-sdk-go v1.40.34 // indirect + github.com/aws/aws-sdk-go-v2 v1.9.0 // indirect + github.com/aws/aws-sdk-go-v2/config v1.7.0 // indirect + github.com/aws/aws-sdk-go-v2/credentials v1.4.0 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.5.0 // indirect + github.com/aws/aws-sdk-go-v2/internal/ini v1.2.2 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.3.0 // indirect + github.com/aws/aws-sdk-go-v2/service/kms v1.5.0 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.4.0 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.7.0 // indirect + github.com/aws/smithy-go v1.8.0 // indirect + github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect + github.com/bgentry/speakeasy v0.1.0 // indirect + github.com/blang/semver v3.5.1+incompatible // indirect + github.com/cenkalti/backoff/v3 v3.2.2 // indirect + github.com/cheggaaa/pb v1.0.29 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/dimchansky/utfbom v1.1.1 // indirect + github.com/djherbis/times v1.5.0 // indirect + github.com/dustin/go-humanize v1.0.0 // indirect + github.com/emirpasic/gods v1.12.0 // indirect + github.com/ettle/strcase v0.1.1 // indirect + github.com/fatih/color v1.9.0 // indirect + github.com/gedex/inflector v0.0.0-20170307190818-16278e9db813 // indirect + github.com/gofrs/uuid v4.2.0+incompatible // indirect + github.com/gogo/protobuf v1.3.2 // indirect + github.com/golang-jwt/jwt/v4 v4.0.0 // indirect + github.com/golang/glog v1.0.0 // indirect + github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect + github.com/golang/protobuf v1.5.2 // indirect + github.com/golang/snappy v0.0.4 // indirect + github.com/google/go-cmp v0.5.7 // indirect + github.com/google/go-querystring v1.1.0 // indirect + github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect + github.com/google/uuid v1.3.0 // indirect + github.com/google/wire v0.5.0 // indirect + github.com/googleapis/gax-go/v2 v2.2.0 // indirect + github.com/googleapis/go-type-adapters v1.0.0 // indirect + github.com/gorilla/mux v1.7.4 // indirect + github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 // indirect + github.com/hashicorp/errwrap v1.1.0 // indirect + github.com/hashicorp/go-cleanhttp v0.5.2 // indirect + github.com/hashicorp/go-cty v1.4.1-0.20200414143053-d3edf31b6320 // indirect + github.com/hashicorp/go-getter v1.5.3 // indirect + github.com/hashicorp/go-hclog v1.2.0 // indirect + github.com/hashicorp/go-multierror v1.1.1 // indirect + github.com/hashicorp/go-retryablehttp v0.7.0 // indirect + github.com/hashicorp/go-rootcerts v1.0.2 // indirect + github.com/hashicorp/go-safetemp v1.0.0 // indirect + github.com/hashicorp/go-sockaddr v1.0.2 // indirect + github.com/hashicorp/go-uuid v1.0.2 // indirect + github.com/hashicorp/go-version v1.4.0 // indirect + github.com/hashicorp/hcl v1.0.0 // indirect + github.com/hashicorp/hcl/v2 v2.11.1 // indirect + github.com/hashicorp/hil v0.0.0-20190212132231-97b3a9cdfa93 // indirect + github.com/hashicorp/logutils v1.0.0 // indirect + github.com/hashicorp/terraform-plugin-go v0.8.0 // indirect + github.com/hashicorp/terraform-plugin-log v0.3.0 // indirect + github.com/hashicorp/terraform-plugin-sdk v1.9.1 // indirect + github.com/hashicorp/terraform-plugin-sdk/v2 v2.13.0 // indirect + github.com/hashicorp/terraform-svchost v0.0.0-20200729002733-f050f53b9734 // indirect + github.com/hashicorp/vault/api v1.1.1 // indirect + github.com/hashicorp/vault/sdk v0.2.1 // indirect + github.com/huandu/xstrings v1.3.2 // indirect + github.com/iancoleman/strcase v0.2.0 // indirect + github.com/ijc/Gotty v0.0.0-20170406111628-a8b993ba6abd // indirect + github.com/imdario/mergo v0.3.12 // indirect + github.com/inconshreveable/mousetrap v1.0.0 // indirect + github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect + github.com/jmespath/go-jmespath v0.4.0 // indirect + github.com/json-iterator/go v1.1.12 // indirect + github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect + github.com/kevinburke/ssh_config v1.1.0 // indirect + github.com/klauspost/compress v1.13.5 // indirect + github.com/mattn/go-colorable v0.1.12 // indirect + github.com/mattn/go-ieproxy v0.0.1 // indirect + github.com/mattn/go-isatty v0.0.14 // indirect + github.com/mattn/go-runewidth v0.0.13 // indirect + github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b // indirect + github.com/mitchellh/cli v1.1.2 // indirect + github.com/mitchellh/copystructure v1.2.0 // indirect + github.com/mitchellh/go-homedir v1.1.0 // indirect + github.com/mitchellh/go-ps v1.0.0 // indirect + github.com/mitchellh/go-testing-interface v1.14.1 // indirect + github.com/mitchellh/go-wordwrap v1.0.1 // indirect + github.com/mitchellh/hashstructure v1.0.0 // indirect + github.com/mitchellh/mapstructure v1.4.3 // indirect + github.com/mitchellh/reflectwalk v1.0.2 // indirect + github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/opentracing/basictracer-go v1.1.0 // indirect + github.com/opentracing/opentracing-go v1.2.0 // indirect + github.com/pgavlin/goldmark v1.1.33-0.20200616210433-b5eb04559386 // indirect + github.com/pierrec/lz4 v2.6.1+incompatible // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/pkg/term v1.1.0 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/posener/complete v1.2.1 // indirect + github.com/pulumi/pulumi-java/pkg v0.2.0 // indirect + github.com/pulumi/pulumi-yaml v0.3.0 // indirect + github.com/pulumi/pulumi/pkg/v3 v3.33.1 // indirect + github.com/pulumi/terraform-diff-reader v0.0.0-20201211191010-ad4715e9285e // indirect + github.com/rivo/uniseg v0.2.0 // indirect + github.com/rjeczalik/notify v0.9.2 // indirect + github.com/rogpeppe/go-internal v1.8.1 // indirect + github.com/russross/blackfriday/v2 v2.1.0 // indirect + github.com/ryanuber/go-glob v1.0.0 // indirect + github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06 // indirect + github.com/santhosh-tekuri/jsonschema/v5 v5.0.0 // indirect + github.com/sergi/go-diff v1.2.0 // indirect + github.com/spf13/afero v1.6.0 // indirect + github.com/spf13/cast v1.4.1 // indirect + github.com/spf13/cobra v1.4.0 // indirect + github.com/spf13/pflag v1.0.5 // indirect + github.com/src-d/gcfg v1.4.0 // indirect + github.com/stretchr/testify v1.7.1 // indirect + github.com/terraform-providers/terraform-provider-archive v1.3.0 // indirect + github.com/terraform-providers/terraform-provider-http v1.2.0 // indirect + github.com/texttheater/golang-levenshtein v1.0.1 // indirect + github.com/tweekmonster/luser v0.0.0-20161003172636-3fa38070dbd7 // indirect + github.com/uber/jaeger-client-go v2.30.0+incompatible // indirect + github.com/uber/jaeger-lib v2.4.1+incompatible // indirect + github.com/ulikunitz/xz v0.5.8 // indirect + github.com/vmihailenco/msgpack v4.0.4+incompatible // indirect + github.com/vmihailenco/msgpack/v4 v4.3.12 // indirect + github.com/vmihailenco/tagparser v0.1.1 // indirect + github.com/xanzy/ssh-agent v0.3.1 // indirect + github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f // indirect + github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect + github.com/xeipuuv/gojsonschema v1.2.0 // indirect + github.com/zclconf/go-cty v1.10.0 // indirect + github.com/zclconf/go-cty-yaml v1.0.1 // indirect + go.opencensus.io v0.23.0 // indirect + go.uber.org/atomic v1.9.0 // indirect + gocloud.dev v0.24.0 // indirect + gocloud.dev/secrets/hashivault v0.24.0 // indirect + golang.org/x/crypto v0.0.0-20220131195533-30dcbda58838 // indirect + golang.org/x/mod v0.5.0 // indirect + golang.org/x/net v0.0.0-20220325170049-de3da57026de // indirect + golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a // indirect + golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect + golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886 // indirect + golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 // indirect + golang.org/x/text v0.3.7 // indirect + golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac // indirect + golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect + google.golang.org/api v0.74.0 // indirect + google.golang.org/appengine v1.6.7 // indirect + google.golang.org/genproto v0.0.0-20220405205423-9d709892a2bf // indirect + google.golang.org/grpc v1.45.0 // indirect + google.golang.org/protobuf v1.28.0 // indirect + gopkg.in/AlecAivazis/survey.v1 v1.8.9-0.20200217094205-6773bdf39b7f // indirect + gopkg.in/square/go-jose.v2 v2.6.0 // indirect + gopkg.in/src-d/go-billy.v4 v4.3.2 // indirect + gopkg.in/src-d/go-git.v4 v4.13.1 // indirect + gopkg.in/warnings.v0 v0.1.2 // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect + gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect + sourcegraph.com/sourcegraph/appdash v0.0.0-20211028080628-e2786a622600 // indirect +) diff --git a/provider/go.sum b/provider/go.sum new file mode 100644 index 0000000..cac2215 --- /dev/null +++ b/provider/go.sum @@ -0,0 +1,1516 @@ +bazil.org/fuse v0.0.0-20160811212531-371fbbdaa898/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8= +bazil.org/fuse v0.0.0-20180421153158-65cc252bf669/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8= +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +cloud.google.com/go v0.43.0/go.mod h1:BOSR3VbTLkk6FDC/TcffxP4NF/FFBGA5ku+jvKOP7pg= +cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= +cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= +cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= +cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= +cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= +cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= +cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= +cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= +cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= +cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= +cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= +cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= +cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= +cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= +cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= +cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= +cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= +cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= +cloud.google.com/go v0.82.0/go.mod h1:vlKccHJGuFBFufnAnuB08dfEH9Y3H7dzDzRECFdC2TA= +cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= +cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= +cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= +cloud.google.com/go v0.88.0/go.mod h1:dnKwfYbP9hQhefiUvpbcAyoGSHUrOxR20JVElLiUvEY= +cloud.google.com/go v0.89.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= +cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= +cloud.google.com/go v0.92.2/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= +cloud.google.com/go v0.92.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= +cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= +cloud.google.com/go v0.94.0/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= +cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= +cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= +cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= +cloud.google.com/go v0.100.2 h1:t9Iw5QH5v4XtlEQaCtUY7x6sCABps8sW0acw7e2WQ6Y= +cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= +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/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= +cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= +cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= +cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= +cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= +cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= +cloud.google.com/go/compute v1.5.0 h1:b1zWmYuuHz7gO9kDcM/EpHGr06UgsYNRpNJzI2kFiLM= +cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= +cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= +cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/firestore v1.5.0/go.mod h1:c4nNYR1qdq7eaZ+jSc5fonrQN2k3M7sWATcYTiakjEo= +cloud.google.com/go/iam v0.3.0 h1:exkAomrVUuzx9kWFI1wm3KI0uoDeUFPB4kKGzx6x+Gc= +cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= +cloud.google.com/go/kms v0.1.0/go.mod h1:8Qp8PCAypHg4FdmlyW1QRAv09BGQ9Uzh7JnmIZxPk+c= +cloud.google.com/go/kms v1.1.0 h1:1yc4rLqCkVDS9Zvc7m+3mJ47kw0Uo5Q5+sMjcmUVUeM= +cloud.google.com/go/kms v1.1.0/go.mod h1:WdbppnCDMDpOvoYBMn1+gNmOeEoZYqAv+HeuKARGCXI= +cloud.google.com/go/logging v1.0.0 h1:kaunpnoEh9L4hu6JUsBa8Y20LBfKnCuDhKUgdZp7oK8= +cloud.google.com/go/logging v1.0.0/go.mod h1:V1cc3ogwobYzQq5f2R7DS/GvRIrI4FKj01Gs5glwAls= +cloud.google.com/go/monitoring v0.1.0/go.mod h1:Hpm3XfzJv+UTiXzCG5Ffp0wijzHTC7Cv4eR7o3x/fEE= +cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= +cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= +cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= +cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= +cloud.google.com/go/pubsub v1.16.0/go.mod h1:6A8EfoWZ/lUvCWStKGwAWauJZSiuV0Mkmu6WilK/TxQ= +cloud.google.com/go/secretmanager v0.1.0/go.mod h1:3nGKHvnzDUVit7U0S9KAKJ4aOsO1xtwRG+7ey5LK1bM= +cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= +cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= +cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= +cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= +cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= +cloud.google.com/go/storage v1.16.1/go.mod h1:LaNorbty3ehnU3rEjXSNV/NRgQA0O8Y+uh6bPe5UOk4= +cloud.google.com/go/storage v1.22.0 h1:NUV0NNp9nkBuW66BFRLuMgldN60C57ET3dhbwLIYio8= +cloud.google.com/go/storage v1.22.0/go.mod h1:GbaLEoMqbVm6sx3Z0R++gSiBlgMv6yUi2q1DeGFKQgE= +cloud.google.com/go/trace v0.1.0/go.mod h1:wxEwsoeRVPbeSkt7ZC9nWCgmoKQRAoySN7XHW2AmI7g= +contrib.go.opencensus.io/exporter/aws v0.0.0-20200617204711-c478e41e60e9/go.mod h1:uu1P0UCM/6RbsMrgPa98ll8ZcHM858i/AD06a9aLRCA= +contrib.go.opencensus.io/exporter/stackdriver v0.13.8/go.mod h1:huNtlWx75MwO7qMs0KrMxPZXzNNWebav1Sq/pm02JdQ= +contrib.go.opencensus.io/integrations/ocsql v0.1.7/go.mod h1:8DsSdjz3F+APR+0z0WkU1aRorQCFfRxvqjUUPMbF3fE= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +github.com/1Password/connect-sdk-go v1.2.0 h1:WbIvmbDUpA89nyH0l3LF2iRSFJAv86d2D7IjVNjw6iw= +github.com/1Password/connect-sdk-go v1.2.0/go.mod h1:qK2bF/GweAq812xj+HGfbauaE6cKX1MXfKhpAvoHEq8= +github.com/1Password/terraform-provider-onepassword v1.1.4 h1:tJ4QXksgMQ0FJngolnrZdRF1sq0ufyUfXveEjznDDxs= +github.com/1Password/terraform-provider-onepassword v1.1.4/go.mod h1:Rz0dsmLwMYpIdO8pU699omhjzLTcv8OD29KV/7eQySc= +github.com/AlecAivazis/survey/v2 v2.0.5/go.mod h1:WYBhg6f0y/fNYUuesWQc0PKbJcEliGcYHB9sNT3Bg74= +github.com/Azure/azure-amqp-common-go/v3 v3.1.0/go.mod h1:PBIGdzcO1teYoufTKMcGibdKaYZv4avS+O6LNIp8bq0= +github.com/Azure/azure-amqp-common-go/v3 v3.1.1/go.mod h1:YsDaPfaO9Ub2XeSKdIy2DfwuiQlHQCauHJwSqtrkECI= +github.com/Azure/azure-pipeline-go v0.2.3 h1:7U9HBg1JFK3jHl5qmo4CTZKFTVgMwdFHMVtCdfBE21U= +github.com/Azure/azure-pipeline-go v0.2.3/go.mod h1:x841ezTBIMG6O3lAcl8ATHnsOPVl2bqk7S3ta6S6u4k= +github.com/Azure/azure-sdk-for-go v51.1.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= +github.com/Azure/azure-sdk-for-go v57.0.0+incompatible h1:isVki3PbIFrwKvKdVP1byxo73/pt+Nn174YxW1k4PNw= +github.com/Azure/azure-sdk-for-go v57.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= +github.com/Azure/azure-service-bus-go v0.10.16/go.mod h1:MlkLwGGf1ewcx5jZadn0gUEty+tTg0RaElr6bPf+QhI= +github.com/Azure/azure-storage-blob-go v0.14.0 h1:1BCg74AmVdYwO3dlKwtFU1V0wU2PZdREkXvAmZJRUlM= +github.com/Azure/azure-storage-blob-go v0.14.0/go.mod h1:SMqIBi+SuiQH32bvyjngEewEeXoPfKMgWlBDaYf6fck= +github.com/Azure/go-amqp v0.13.0/go.mod h1:qj+o8xPCz9tMSbQ83Vp8boHahuRDl5mkNHyt1xlxUTs= +github.com/Azure/go-amqp v0.13.11/go.mod h1:D5ZrjQqB1dyp1A+G73xeL/kNn7D5qHJIIsNNps7YNmk= +github.com/Azure/go-amqp v0.13.12/go.mod h1:D5ZrjQqB1dyp1A+G73xeL/kNn7D5qHJIIsNNps7YNmk= +github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= +github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= +github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= +github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs= +github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= +github.com/Azure/go-autorest/autorest v0.11.3/go.mod h1:JFgpikqFJ/MleTTxwepExTKnFUKKszPS8UavbQYUMuw= +github.com/Azure/go-autorest/autorest v0.11.17/go.mod h1:eipySxLmqSyC5s5k1CLupqet0PSENBEDP93LQ9a8QYw= +github.com/Azure/go-autorest/autorest v0.11.18/go.mod h1:dSiJPy22c3u0OtOKDNttNgqpNFY/GeWa7GH/Pz56QRA= +github.com/Azure/go-autorest/autorest v0.11.20 h1:s8H1PbCZSqg/DH7JMlOz6YMig6htWLNPsjDdlLqCx3M= +github.com/Azure/go-autorest/autorest v0.11.20/go.mod h1:o3tqFY+QR40VOlk+pV4d77mORO64jOXSgEnPQgLK6JY= +github.com/Azure/go-autorest/autorest/adal v0.9.0/go.mod h1:/c022QCutn2P7uY+/oQWWNcK9YU+MH96NgK+jErpbcg= +github.com/Azure/go-autorest/autorest/adal v0.9.5/go.mod h1:B7KF7jKIeC9Mct5spmyCB/A8CG/sEz1vwIRGv/bbw7A= +github.com/Azure/go-autorest/autorest/adal v0.9.11/go.mod h1:nBKAnTomx8gDtl+3ZCJv2v0KACFHWTB2drffI1B68Pk= +github.com/Azure/go-autorest/autorest/adal v0.9.13/go.mod h1:W/MM4U6nLxnIskrw4UwWzlHfGjwUS50aOsc/I3yuU8M= +github.com/Azure/go-autorest/autorest/adal v0.9.14/go.mod h1:W/MM4U6nLxnIskrw4UwWzlHfGjwUS50aOsc/I3yuU8M= +github.com/Azure/go-autorest/autorest/adal v0.9.15 h1:X+p2GF0GWyOiSmqohIaEeuNFNDY4I4EOlVuUQvFdWMk= +github.com/Azure/go-autorest/autorest/adal v0.9.15/go.mod h1:tGMin8I49Yij6AQ+rvV+Xa/zwxYQB5hmsd6DkfAx2+A= +github.com/Azure/go-autorest/autorest/azure/auth v0.5.8 h1:TzPg6B6fTZ0G1zBf3T54aI7p3cAT6u//TOXGPmFMOXg= +github.com/Azure/go-autorest/autorest/azure/auth v0.5.8/go.mod h1:kxyKZTSfKh8OVFWPAgOgQ/frrJgeYQJPyR5fLFmXko4= +github.com/Azure/go-autorest/autorest/azure/cli v0.4.2/go.mod h1:7qkJkT+j6b+hIpzMOwPChJhTqS8VbsqqgULzMNRugoM= +github.com/Azure/go-autorest/autorest/azure/cli v0.4.3 h1:DOhB+nXkF7LN0JfBGB5YtCF6QLK8mLe4psaHF7ZQEKM= +github.com/Azure/go-autorest/autorest/azure/cli v0.4.3/go.mod h1:yAQ2b6eP/CmLPnmLvxtT1ALIY3OR1oFcCqVBi8vHiTc= +github.com/Azure/go-autorest/autorest/date v0.3.0 h1:7gUk1U5M/CQbp9WoqinNzJar+8KY+LPI6wiWrP/myHw= +github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74= +github.com/Azure/go-autorest/autorest/mocks v0.4.0/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= +github.com/Azure/go-autorest/autorest/mocks v0.4.1 h1:K0laFcLE6VLTOwNgSxaGbUcLPuGXlNkbVvq4cW4nIHk= +github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= +github.com/Azure/go-autorest/autorest/to v0.4.0 h1:oXVqrxakqqV1UZdSazDOPOLvOIz+XA683u8EctwboHk= +github.com/Azure/go-autorest/autorest/to v0.4.0/go.mod h1:fE8iZBn7LQR7zH/9XU2NcPR4o9jEImooCeWJcYV/zLE= +github.com/Azure/go-autorest/autorest/validation v0.3.1 h1:AgyqjAd94fwNAoTjl/WQXg4VvFeRFpO+UhNyRXqF1ac= +github.com/Azure/go-autorest/autorest/validation v0.3.1/go.mod h1:yhLgjC0Wda5DYXl6JAsWyUe4KVNffhoDhG0zVzUMo3E= +github.com/Azure/go-autorest/logger v0.2.0/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= +github.com/Azure/go-autorest/logger v0.2.1 h1:IG7i4p/mDa2Ce4TRyAO8IHnVhAVF3RFU+ZtXWSmf4Tg= +github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= +github.com/Azure/go-autorest/tracing v0.6.0 h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUMfuitfgcfuo= +github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= +github.com/GoogleCloudPlatform/cloudsql-proxy v1.24.0/go.mod h1:3tx938GhY4FC+E1KT/jNjDw7Z5qxAEtIiERJ2sXjnII= +github.com/HdrHistogram/hdrhistogram-go v1.0.1/go.mod h1:BWJ+nMSHY3L41Zj7CA3uXnloDp7xxV0YvstAE7nKTaM= +github.com/HdrHistogram/hdrhistogram-go v1.1.2 h1:5IcZpTvzydCQeHzK4Ef/D5rrSqwxob0t8PQPMybUNFM= +github.com/Masterminds/goutils v1.1.0 h1:zukEsf/1JZwCMgHiK3GZftabmxiCw4apj3a28RPBiVg= +github.com/Masterminds/goutils v1.1.0/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= +github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= +github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= +github.com/Masterminds/sprig v2.22.0+incompatible h1:z4yfnGrZ7netVz+0EDJ0Wi+5VZCSYp4Z0m2dk6cEM60= +github.com/Masterminds/sprig v2.22.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= +github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= +github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw= +github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= +github.com/Microsoft/go-winio v0.5.0/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= +github.com/Microsoft/go-winio v0.5.1 h1:aPJp2QD7OOrhO5tQXqQoGSJc+DjDtWTGLOmNyAm6FgY= +github.com/Microsoft/go-winio v0.5.1/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= +github.com/Microsoft/hcsshim v0.8.9/go.mod h1:5692vkUqntj1idxauYlpoINNKeqCiG6Sg38RRsjT5y8= +github.com/Netflix/go-expect v0.0.0-20180615182759-c93bf25de8e8 h1:xzYJEypr/85nBpB11F9br+3HUrpgb+fcm5iADzXXYEw= +github.com/Netflix/go-expect v0.0.0-20180615182759-c93bf25de8e8/go.mod h1:oX5x61PbNXchhh0oikYAH+4Pcfw5LKv21+Jnpr6r6Pc= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/ProtonMail/go-crypto v0.0.0-20210428141323-04723f9f07d7/go.mod h1:z4/9nQmJSSwwds7ejkxaJwO37dru3geImFUdJlaLzQo= +github.com/acomagu/bufpipe v1.0.3/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= +github.com/agext/levenshtein v1.2.1/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558= +github.com/agext/levenshtein v1.2.2/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558= +github.com/agext/levenshtein v1.2.3 h1:YB2fHEn0UJagG8T1rrWknE3ZQzWM06O8AMAatNn7lmo= +github.com/agext/levenshtein v1.2.3/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558= +github.com/agl/ed25519 v0.0.0-20170116200512-5312a6153412/go.mod h1:WPjqKcmVOxf0XSf3YxCJs6N6AOSrOx3obionmG7T0y0= +github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7 h1:uSoVVbwJiQipAclBbw+8quDsfcvFjOpI5iCf4p/cqCs= +github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs= +github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= +github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/andybalholm/crlf v0.0.0-20171020200849-670099aa064f/go.mod h1:k8feO4+kXDxro6ErPXBRTJ/ro2mf0SsFG8s7doP9kJE= +github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239 h1:kFOfPq6dUM1hTo4JG6LR5AXSUEsOjtdm0kw0FtQtMJA= +github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= +github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/apparentlymart/go-cidr v1.0.1/go.mod h1:EBcsNrHc3zQeuaeCeCtQruQm+n9/YjEn/vI25Lg7Gwc= +github.com/apparentlymart/go-cidr v1.1.0 h1:2mAhrMoF+nhXqxTzSZMUzDHkLjmIHC+Zzn4tdgBZjnU= +github.com/apparentlymart/go-cidr v1.1.0/go.mod h1:EBcsNrHc3zQeuaeCeCtQruQm+n9/YjEn/vI25Lg7Gwc= +github.com/apparentlymart/go-dump v0.0.0-20180507223929-23540a00eaa3/go.mod h1:oL81AME2rN47vu18xqj1S1jPIPuN7afo62yKTNn3XMM= +github.com/apparentlymart/go-dump v0.0.0-20190214190832-042adf3cf4a0 h1:MzVXffFUye+ZcSR6opIgz9Co7WcDx6ZcY+RjfFHoA0I= +github.com/apparentlymart/go-dump v0.0.0-20190214190832-042adf3cf4a0/go.mod h1:oL81AME2rN47vu18xqj1S1jPIPuN7afo62yKTNn3XMM= +github.com/apparentlymart/go-textseg v1.0.0/go.mod h1:z96Txxhf3xSFMPmb5X/1W05FF/Nj9VFpLOpjS5yuumk= +github.com/apparentlymart/go-textseg/v12 v12.0.0/go.mod h1:S/4uRK2UtaQttw1GenVJEynmyUenKwP++x/+DdGV/Ec= +github.com/apparentlymart/go-textseg/v13 v13.0.0 h1:Y+KvPE1NYz0xl601PVImeQfFyEy6iT90AvPUL1NNfNw= +github.com/apparentlymart/go-textseg/v13 v13.0.0/go.mod h1:ZK2fH7c4NqDTLtiYLvIkEghdlcqw7yxLeM89kiTRPUo= +github.com/armon/go-metrics v0.3.0/go.mod h1:zXjbSimjXTd7vOpY8B0/2LpvNvDoXBuplAD+gJD3GYs= +github.com/armon/go-metrics v0.3.3/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= +github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/armon/go-radix v1.0.0 h1:F4z6KzEeeQIMeLFa97iZU6vupzoecKdU5TX24SNppXI= +github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= +github.com/aws/aws-sdk-go v1.15.27/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0= +github.com/aws/aws-sdk-go v1.15.78/go.mod h1:E3/ieXAlvM0XWO57iftYVDLLvQ824smPP3ATZkfNZeM= +github.com/aws/aws-sdk-go v1.19.39/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.25.3/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.25.37/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.30.27/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= +github.com/aws/aws-sdk-go v1.37.0/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= +github.com/aws/aws-sdk-go v1.40.34 h1:SBYmodndE2d4AYucuuJnOXk4MD1SFbucoIdpwKVKeSA= +github.com/aws/aws-sdk-go v1.40.34/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q= +github.com/aws/aws-sdk-go-v2 v1.9.0 h1:+S+dSqQCN3MSU5vJRu1HqHrq00cJn6heIMU7X9hcsoo= +github.com/aws/aws-sdk-go-v2 v1.9.0/go.mod h1:cK/D0BBs0b/oWPIcX/Z/obahJK1TT7IPVjy53i/mX/4= +github.com/aws/aws-sdk-go-v2/config v1.7.0 h1:J2cZ7qe+3IpqBEXnHUrFrOjoB9BlsXg7j53vxcl5IVg= +github.com/aws/aws-sdk-go-v2/config v1.7.0/go.mod h1:w9+nMZ7soXCe5nT46Ri354SNhXDQ6v+V5wqDjnZE+GY= +github.com/aws/aws-sdk-go-v2/credentials v1.4.0 h1:kmvesfjY861FzlCU9mvAfe01D9aeXcG2ZuC+k9F2YLM= +github.com/aws/aws-sdk-go-v2/credentials v1.4.0/go.mod h1:dgGR+Qq7Wjcd4AOAW5Rf5Tnv3+x7ed6kETXyS9WCuAY= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.5.0 h1:OxTAgH8Y4BXHD6PGCJ8DHx2kaZPCQfSTqmDsdRZFezE= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.5.0/go.mod h1:CpNzHK9VEFUCknu50kkB8z58AH2B5DvPP7ea1LHve/Y= +github.com/aws/aws-sdk-go-v2/internal/ini v1.2.2 h1:d95cddM3yTm4qffj3P6EnP+TzX1SSkWaQypXSgT/hpA= +github.com/aws/aws-sdk-go-v2/internal/ini v1.2.2/go.mod h1:BQV0agm+JEhqR+2RT5e1XTFIDcAAV0eW6z2trp+iduw= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.3.0 h1:VNJ5NLBteVXEwE2F1zEXVmyIH58mZ6kIQGJoC7C+vkg= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.3.0/go.mod h1:R1KK+vY8AfalhG1AOu5e35pOD2SdoPKQCFLTvnxiohk= +github.com/aws/aws-sdk-go-v2/service/kms v1.5.0 h1:10e9mzaaYIIePEuxUzW5YJ8LKHNG/NX63evcvS3ux9U= +github.com/aws/aws-sdk-go-v2/service/kms v1.5.0/go.mod h1:w7JuP9Oq1IKMFQPkNe3V6s9rOssXzOVEMNEqK1L1bao= +github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.6.0/go.mod h1:B+7C5UKdVq1ylkI/A6O8wcurFtaux0R1njePNPtKwoA= +github.com/aws/aws-sdk-go-v2/service/ssm v1.10.0/go.mod h1:4dXS5YNqI3SNbetQ7X7vfsMlX6ZnboJA2dulBwJx7+g= +github.com/aws/aws-sdk-go-v2/service/sso v1.4.0 h1:sHXMIKYS6YiLPzmKSvDpPmOpJDHxmAUgbiF49YNVztg= +github.com/aws/aws-sdk-go-v2/service/sso v1.4.0/go.mod h1:+1fpWnL96DL23aXPpMGbsmKe8jLTEfbjuQoA4WS1VaA= +github.com/aws/aws-sdk-go-v2/service/sts v1.7.0 h1:1at4e5P+lvHNl2nUktdM2/v+rpICg/QSEr9TO/uW9vU= +github.com/aws/aws-sdk-go-v2/service/sts v1.7.0/go.mod h1:0qcSMCyASQPN2sk/1KQLQ2Fh6yq8wm0HSDAimPhzCoM= +github.com/aws/smithy-go v1.8.0 h1:AEwwwXQZtUwP5Mz506FeXXrKBe0jA8gVM+1gEcSRooc= +github.com/aws/smithy-go v1.8.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E= +github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= +github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= +github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= +github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d h1:xDfNPAt8lFiC1UJrqV3uuy861HCTo708pDMbjHHdCas= +github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ00z/TKoufEY6K/a0k6AhaJrQKdFe6OfVXsa4= +github.com/bgentry/speakeasy v0.1.0 h1:ByYyxL9InA1OWqxJqqp2A5pYHUrCiAL6K3J+LKSsQkY= +github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= +github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ= +github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/bsm/go-vlq v0.0.0-20150828105119-ec6e8d4f5f4e/go.mod h1:N+BjUcTjSxc2mtRGSCPsat1kze3CUtvJN3/jTXlp29k= +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/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cheggaaa/pb v1.0.27/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s= +github.com/cheggaaa/pb v1.0.29 h1:FckUN5ngEk2LpvuG0fw1GEFx6LtyY2pWI/Z2QgCnEYo= +github.com/cheggaaa/pb v1.0.29/go.mod h1:W40334L7FMC5JKWldsTWbdGjLo0RxUKK73K+TuPxX30= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= +github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= +github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= +github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/containerd/cgroups v0.0.0-20190919134610-bf292b21730f/go.mod h1:OApqhQ4XNSNC13gXIwDjhOQxjWa/NxkwZXJ1EvqT0ko= +github.com/containerd/console v0.0.0-20180822173158-c12b1e7919c1/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw= +github.com/containerd/containerd v1.3.2/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.3.4/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= +github.com/containerd/continuity v0.0.0-20200709052629-daa8e1ccc0bc/go.mod h1:cECdGN1O8G9bgKTlLhuPJimka6Xb/Gg7vYzCTNVxhvo= +github.com/containerd/fifo v0.0.0-20190226154929-a9fb20d87448/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI= +github.com/containerd/go-runc v0.0.0-20180907222934-5a6d9f37cfa3/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0= +github.com/containerd/ttrpc v0.0.0-20190828154514-0e0f228740de/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o= +github.com/containerd/typeurl v0.0.0-20180627222232-a93fcdb778cd/go.mod h1:Cm3kwCdlkCfMSHURc+r6fwoGH6/F1hH3S4sg0rLFWPc= +github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= +github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/creack/pty v1.1.11 h1:07n33Z8lZxZ2qwegKbObQohDhXDQxiMMz1NOUGYlesw= +github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/denisenkom/go-mssqldb v0.9.0/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU= +github.com/devigned/tab v0.1.1/go.mod h1:XG9mPq0dFghrYvoBF3xdRrJzSTX1b7IQrvaL9mzjeJY= +github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/dimchansky/utfbom v1.1.0/go.mod h1:rO41eb7gLfo8SF1jd9F8HplJm1Fewwi4mQvIirEdv+8= +github.com/dimchansky/utfbom v1.1.1 h1:vV6w1AhK4VMnhBno/TPVCoK9U/LP0PkLCS9tbxHdi/U= +github.com/dimchansky/utfbom v1.1.1/go.mod h1:SxdoEBH5qIqFocHMyGOXVAybYJdr71b1Q/j0mACtrfE= +github.com/djherbis/times v1.5.0 h1:79myA211VwPhFTqUk8xehWrsEO+zcIZj0zT8mXPVARU= +github.com/djherbis/times v1.5.0/go.mod h1:5q7FDLvbNg1L/KaBmPcWlVR9NmoKo3+ucqUA3ijQhA0= +github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/docker v1.4.2-0.20200319182547-c7ad2b866182/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= +github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= +github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/emirpasic/gods v1.12.0 h1:QAUIPSaCu4G+POclxeqb3F+WPpdKqFGlw36+yOzGlrg= +github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= +github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= +github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/ettle/strcase v0.1.1 h1:htFueZyVeE1XNnMEfbqp5r67qAN/4r6ya1ysq8Q+Zcw= +github.com/ettle/strcase v0.1.1/go.mod h1:hzDLsPC7/lwKyBOywSHEP89nt2pDgdy+No1NBA9o9VY= +github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/fatih/color v1.9.0 h1:8xPHl4/q1VyqGIPif1F+1V3Y3lSmrq01EabUW3CoW5s= +github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= +github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= +github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= +github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= +github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= +github.com/frankban/quicktest v1.10.0 h1:Gfh+GAJZOAoKZsIZeZbdn2JF10kN1XHNvjsvQK8gVkE= +github.com/frankban/quicktest v1.10.0/go.mod h1:ui7WezCLWMWxVWr1GETZY3smRy0G4KWq9vcPtJmFl7Y= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU= +github.com/gedex/inflector v0.0.0-20170307190818-16278e9db813 h1:Uc+IZ7gYqAf/rSGFplbWBSHaGolEQlNLgMgSE3ccnIQ= +github.com/gedex/inflector v0.0.0-20170307190818-16278e9db813/go.mod h1:P+oSoE9yhSRvsmYyZsshflcR6ePWYLql6UU1amW13IM= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= +github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= +github.com/gliderlabs/ssh v0.2.2 h1:6zsha5zo/TWhRhwqCD3+EarCAgZ2yN28ipRnGPnwkI0= +github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= +github.com/go-asn1-ber/asn1-ber v1.3.1/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0= +github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E= +github.com/go-git/go-billy/v5 v5.0.0/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= +github.com/go-git/go-billy/v5 v5.1.0/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= +github.com/go-git/go-billy/v5 v5.2.0/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= +github.com/go-git/go-billy/v5 v5.3.1/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= +github.com/go-git/go-git-fixtures/v4 v4.0.1/go.mod h1:m+ICp2rF3jDhFgEZ/8yziagdT1C+ZpZcrJjappBCDSw= +github.com/go-git/go-git-fixtures/v4 v4.0.2-0.20200613231340-f56387b50c12/go.mod h1:m+ICp2rF3jDhFgEZ/8yziagdT1C+ZpZcrJjappBCDSw= +github.com/go-git/go-git-fixtures/v4 v4.2.1/go.mod h1:K8zd3kDUAykwTdDCr+I0per6Y6vMiRR/nnVTBtavnB0= +github.com/go-git/go-git/v5 v5.1.0/go.mod h1:ZKfuPUoY1ZqIG4QG9BDBh3G4gLM5zvPuSJAozQrZuyM= +github.com/go-git/go-git/v5 v5.3.0/go.mod h1:xdX4bWJ48aOrdhnl2XqHYstHbbp6+LFS4r4X+lNVprw= +github.com/go-git/go-git/v5 v5.4.2/go.mod h1:gQ1kArt6d+n+BGd+/B/I74HwRTLhth2+zti4ihgckDc= +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= +github.com/go-ini/ini v1.25.4/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= +github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +github.com/go-ldap/ldap/v3 v3.1.3/go.mod h1:3rbOH3jRS2u6jg2rJnKAMLE/xQyCKIveG2Sa/Cohzb8= +github.com/go-ldap/ldap/v3 v3.1.10/go.mod h1:5Zun81jBTabRaI8lzN7E1JjyEl1g6zI6u9pd8luAK4Q= +github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= +github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= +github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= +github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= +github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= +github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= +github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= +github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/go-test/deep v1.0.2-0.20181118220953-042da051cf31/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= +github.com/go-test/deep v1.0.2/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= +github.com/go-test/deep v1.0.3 h1:ZrJSEWsXzPOxaZnFteGEfooLba+ju3FYIbOrS+rQd68= +github.com/go-test/deep v1.0.3/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= +github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= +github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= +github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= +github.com/godbus/dbus v0.0.0-20190422162347-ade71ed3457e/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= +github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/gofrs/uuid v4.2.0+incompatible h1:yyYWMnhkhrKwwr8gAOcOCYxOOscHgDS9yZgBrnJfGa0= +github.com/gofrs/uuid v4.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= +github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang-jwt/jwt/v4 v4.0.0 h1:RAqyYixv1p7uEnocuy8P1nru5wprCh/MH2BIlW5z5/o= +github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= +github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/glog v1.0.0 h1:nfP3RFugxnNRyKgeWd4oI1nYvXpxrx8ck8ZrcizshdQ= +github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= +github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= +github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= +github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= +github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= +github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= +github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= +github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= +github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.7 h1:81/ik6ipDQS2aGcBfIN5dHDB36BwrStyeAQquSYCV4o= +github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= +github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= +github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= +github.com/google/go-replayers/grpcreplay v1.1.0 h1:S5+I3zYyZ+GQz68OfbURDdt/+cSMqCK1wrvNx7WBzTE= +github.com/google/go-replayers/grpcreplay v1.1.0/go.mod h1:qzAvJ8/wi57zq7gWqaE6AwLM6miiXUQwP1S+I9icmhk= +github.com/google/go-replayers/httpreplay v1.0.0 h1:8SmT8fUYM4nueF+UnXIX8LJxNTb1vpPuknXz+yTWzL4= +github.com/google/go-replayers/httpreplay v1.0.0/go.mod h1:LJhKoTwS5Wy5Ld/peq8dFFG5OfJyHEz7ft+DsTUv25M= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/martian v2.1.1-0.20190517191504-25dcb96d9e51+incompatible h1:xmapqc1AyLoB+ddYT6r04bD9lIjlOqGaREovi0SzFaE= +github.com/google/martian v2.1.1-0.20190517191504-25dcb96d9e51+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= +github.com/google/martian/v3 v3.2.1 h1:d8MncMlErDFTwQGBK1xhv026j9kqhvw1Qv9IbWT1VLQ= +github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= +github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= +github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210506205249-923b5ab0fc1a/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210715191844-86eeefc3e471/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= +github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= +github.com/google/subcommands v1.0.1/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= +github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/wire v0.5.0 h1:I7ELFeVBr3yfPIcc8+MWvrjk+3VjbcSzoXm3JVa+jD8= +github.com/google/wire v0.5.0/go.mod h1:ngWDr9Qvq3yZA10YrxfyGELY/AFWGVpy9c1LTRi1EoU= +github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= +github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= +github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= +github.com/googleapis/gax-go/v2 v2.2.0 h1:s7jOdKSaksJVOxE0Y/S32otcfiP+UQ0cL8/GTKaONwE= +github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/OthfcblKl4IGNaM= +github.com/googleapis/go-type-adapters v1.0.0 h1:9XdMn+d/G57qq1s8dNc5IesGCXHf6V2HZ2JwRxfA2tA= +github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= +github.com/gorilla/mux v1.7.4 h1:VuZ8uybHlWmqV03+zRzdwKL4tUnIp1MAQtp1mIFE1bc= +github.com/gorilla/mux v1.7.4/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= +github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 h1:MJG/KsmcqMwFAkh8mTnAwhyKoB+sTAnY4CACC110tbU= +github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645/go.mod h1:6iZfnjpejD4L/4DwD7NryNaJyCQdzwWwH2MWhCA90Kw= +github.com/hashicorp/errwrap v0.0.0-20180715044906-d6c0cd880357/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +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/go.mod h1:7nfLNL10NsxqO4iWuW6tWW0HjZuDrwkBuEQsVcpCOgg= +github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= +github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= +github.com/hashicorp/go-cty v1.4.1-0.20200414143053-d3edf31b6320 h1:1/D3zfFHttUKaCaGKZ/dR2roBXv0vKbSCnssIldfQdI= +github.com/hashicorp/go-cty v1.4.1-0.20200414143053-d3edf31b6320/go.mod h1:EiZBMaudVLy8fmjf9Npq1dq9RalhveqZG5w/yz3mHWs= +github.com/hashicorp/go-getter v1.4.0/go.mod h1:7qxyCd8rBfcShwsvxgIguu4KbS3l8bUCwg2Umn7RjeY= +github.com/hashicorp/go-getter v1.5.3 h1:NF5+zOlQegim+w/EUhSLh6QhXHmZMEeHLQzllkQ3ROU= +github.com/hashicorp/go-getter v1.5.3/go.mod h1:BrrV/1clo8cCYu6mxvboYg+KutTiFnXjMEgDD8+i7ZI= +github.com/hashicorp/go-hclog v0.0.0-20180709165350-ff2cf002a8dd/go.mod h1:9bjs9uLqI8l75knNv3lV1kA55veR+WUPSiKIWcQHudI= +github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= +github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= +github.com/hashicorp/go-hclog v0.14.1/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= +github.com/hashicorp/go-hclog v0.16.1/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= +github.com/hashicorp/go-hclog v1.2.0 h1:La19f8d7WIlm4ogzNHB0JGqs5AUDAZ2UfCY4sJXcJdM= +github.com/hashicorp/go-hclog v1.2.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= +github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-immutable-radix v1.1.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-kms-wrapping/entropy v0.1.0/go.mod h1:d1g9WGtAunDNpek8jUIEJnBlbgKS1N2Q61QkHiZyR1g= +github.com/hashicorp/go-multierror v0.0.0-20180717150148-3d5d8f294aa0/go.mod h1:JMRHfdO9jKNzS/+BTlxCjKNQHg/jZAft8U7LloJvN7I= +github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= +github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= +github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= +github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= +github.com/hashicorp/go-plugin v1.0.1/go.mod h1:++UyYGoz3o5w9ZzAdZxtQKrWWP+iqPBn3cQptSMzBuY= +github.com/hashicorp/go-plugin v1.4.3 h1:DXmvivbWD5qdiBts9TpBC7BYL1Aia5sxbRgQB+v6UZM= +github.com/hashicorp/go-plugin v1.4.3/go.mod h1:5fGEH17QVwTTcR0zV7yhDPLLmFX9YSZ38b18Udy6vYQ= +github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= +github.com/hashicorp/go-retryablehttp v0.6.2/go.mod h1:gEx6HMUGxYYhJScX7W1Il64m6cc2C1mDaW3NQ9sY1FY= +github.com/hashicorp/go-retryablehttp v0.6.6/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= +github.com/hashicorp/go-retryablehttp v0.7.0 h1:eu1EI/mbirUgP5C8hVsTNaGZreBDlYiwC1FZWkvQPQ4= +github.com/hashicorp/go-retryablehttp v0.7.0/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= +github.com/hashicorp/go-rootcerts v1.0.1/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= +github.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5Oi2viEzc= +github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= +github.com/hashicorp/go-safetemp v1.0.0 h1:2HR189eFNrjHQyENnQMMpCiBAsRxzbTMIgBhEyExpmo= +github.com/hashicorp/go-safetemp v1.0.0/go.mod h1:oaerMy3BhqiTbVye6QuFhFtIceqFoDHxNAB65b+Rj1I= +github.com/hashicorp/go-sockaddr v1.0.2 h1:ztczhD1jLxIRjVejw8gFomI1BQZOe2WoVOu0SyteCQc= +github.com/hashicorp/go-sockaddr v1.0.2/go.mod h1:rB4wwRAUzs07qva3c5SdrY/NEtAUjGlgmH/UkBUC97A= +github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.2 h1:cfejS+Tpcp13yd5nYHWDI6qVCny6wyX2Mt5SGur2IGE= +github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-version v1.1.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go-version v1.2.1/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go-version v1.3.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go-version v1.4.0 h1:aAQzgqIrRKRa7w75CKpbBxYsmUoPjzVm1W59ca1L0J4= +github.com/hashicorp/go-version v1.4.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.3/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/hc-install v0.3.1/go.mod h1:3LCdWcCDS1gaHC9mhHCGbkYfoY6vdsKohGjugbZdZak= +github.com/hashicorp/hcl v0.0.0-20170504190234-a4b07c25de5f/go.mod h1:oZtUIOe8dh44I2q6ScRibXws4Ajl+d+nod3AaR9vL5w= +github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= +github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/hashicorp/hcl/v2 v2.0.0/go.mod h1:oVVDG71tEinNGYCxinCYadcmKU9bglqW9pV3txagJ90= +github.com/hashicorp/hcl/v2 v2.8.2/go.mod h1:bQTN5mpo+jewjJgh8jr0JUguIi7qPHUF6yIfAEN3jqY= +github.com/hashicorp/hcl/v2 v2.11.1 h1:yTyWcXcm9XB0TEkyU/JCRU6rYy4K+mgLtzn2wlrJbcc= +github.com/hashicorp/hcl/v2 v2.11.1/go.mod h1:FwWsfWEjyV/CMj8s/gqAuiviY72rJ1/oayI9WftqcKg= +github.com/hashicorp/hcl2 v0.0.0-20190821123243-0c888d1241f6/go.mod h1:Cxv+IJLuBiEhQ7pBYGEuORa0nr4U994pE8mYLuFd7v0= +github.com/hashicorp/hil v0.0.0-20190212112733-ab17b08d6590/go.mod h1:n2TSygSNwsLJ76m8qFXTSc7beTb+auJxYdqrnoqwZWE= +github.com/hashicorp/hil v0.0.0-20190212132231-97b3a9cdfa93 h1:T1Q6ag9tCwun16AW+XK3tAql24P4uTGUMIn1/92WsQQ= +github.com/hashicorp/hil v0.0.0-20190212132231-97b3a9cdfa93/go.mod h1:n2TSygSNwsLJ76m8qFXTSc7beTb+auJxYdqrnoqwZWE= +github.com/hashicorp/logutils v1.0.0 h1:dLEQVugN8vlakKOUE3ihGLTZJRB4j+M2cdTm/ORI65Y= +github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= +github.com/hashicorp/terraform-config-inspect v0.0.0-20190821133035-82a99dc22ef4/go.mod h1:JDmizlhaP5P0rYTTZB0reDMefAiJyfWPEtugV4in1oI= +github.com/hashicorp/terraform-config-inspect v0.0.0-20191115094559-17f92b0546e8 h1:+RyjwU+Gnd/aTJBPZVDNm903eXVjjqhbaR4Ypx3xYyY= +github.com/hashicorp/terraform-config-inspect v0.0.0-20191115094559-17f92b0546e8/go.mod h1:p+ivJws3dpqbp1iP84+npOyAmTTOLMgCzrXd3GSdn/A= +github.com/hashicorp/terraform-exec v0.9.0/go.mod h1:tOT8j1J8rP05bZBGWXfMyU3HkLi1LWyqL3Bzsc3CJjo= +github.com/hashicorp/terraform-exec v0.13.3/go.mod h1:SSg6lbUsVB3DmFyCPjBPklqf6EYGX0TlQ6QTxOlikDU= +github.com/hashicorp/terraform-exec v0.16.0/go.mod h1:wB5JHmjxZ/YVNZuv9npAXKmz5pGyxy8PSi0GRR0+YjA= +github.com/hashicorp/terraform-json v0.4.0/go.mod h1:eAbqb4w0pSlRmdvl8fOyHAi/+8jnkVYN28gJkSJrLhU= +github.com/hashicorp/terraform-json v0.5.0/go.mod h1:eAbqb4w0pSlRmdvl8fOyHAi/+8jnkVYN28gJkSJrLhU= +github.com/hashicorp/terraform-json v0.10.0/go.mod h1:3defM4kkMfttwiE7VakJDwCd4R+umhSQnvJwORXbprE= +github.com/hashicorp/terraform-json v0.13.0 h1:Li9L+lKD1FO5RVFRM1mMMIBDoUHslOniyEi5CM+FWGY= +github.com/hashicorp/terraform-json v0.13.0/go.mod h1:y5OdLBCT+rxbwnpxZs9kGL7R9ExU76+cpdY8zHwoazk= +github.com/hashicorp/terraform-plugin-docs v0.2.0/go.mod h1:4jopztPjeyZAr51wPzX4b8Ld8bFQKQ9dbF40JbCQIts= +github.com/hashicorp/terraform-plugin-go v0.8.0 h1:MvY43PcDj9VlBjYifBWCO/6j1wf106xU8d5Tob/WRs0= +github.com/hashicorp/terraform-plugin-go v0.8.0/go.mod h1:E3GuvfX0Pz2Azcl6BegD6t51StXsVZMOYQoGO8mkHM0= +github.com/hashicorp/terraform-plugin-log v0.3.0 h1:NPENNOjaJSVX0f7JJTl4f/2JKRPQ7S2ZN9B4NSqq5kA= +github.com/hashicorp/terraform-plugin-log v0.3.0/go.mod h1:EjueSP/HjlyFAsDqt+okpCPjkT4NDynAe32AeDC4vps= +github.com/hashicorp/terraform-plugin-sdk v1.0.0/go.mod h1:NuwtLpEpPsFaKJPJNGtMcn9vlhe6Ofe+Y6NqXhJgV2M= +github.com/hashicorp/terraform-plugin-sdk v1.7.0/go.mod h1:OjgQmey5VxnPej/buEhe+YqKm0KNvV3QqU4hkqHqPCY= +github.com/hashicorp/terraform-plugin-sdk v1.9.1 h1:AgHnd6yPCg7o57XWrv4L7tIMdF0KQpcZro1pDHF1Xbw= +github.com/hashicorp/terraform-plugin-sdk v1.9.1/go.mod h1:C/AXwmDHqbc3h6URiHpIsVKrwV4PS0Sh0+VTaeEkShw= +github.com/hashicorp/terraform-plugin-test v1.2.0 h1:AWFdqyfnOj04sxTdaAF57QqvW7XXrT8PseUHkbKsE8I= +github.com/hashicorp/terraform-plugin-test v1.2.0/go.mod h1:QIJHYz8j+xJtdtLrFTlzQVC0ocr3rf/OjIpgZLK56Hs= +github.com/hashicorp/terraform-registry-address v0.0.0-20210412075316-9b2996cce896/go.mod h1:bzBPnUIkI0RxauU8Dqo+2KrZZ28Cf48s8V6IHt3p4co= +github.com/hashicorp/terraform-svchost v0.0.0-20191011084731-65d371908596/go.mod h1:kNDNcF7sN4DocDLBkQYz73HGKwN1ANB1blq4lIYLYvg= +github.com/hashicorp/terraform-svchost v0.0.0-20200729002733-f050f53b9734 h1:HKLsbzeOsfXmKNpr3GiT18XAblV0BjCbzL8KQAMZGa0= +github.com/hashicorp/terraform-svchost v0.0.0-20200729002733-f050f53b9734/go.mod h1:kNDNcF7sN4DocDLBkQYz73HGKwN1ANB1blq4lIYLYvg= +github.com/hashicorp/vault/api v1.0.5-0.20200519221902-385fac77e20f/go.mod h1:euTFbi2YJgwcju3imEt919lhJKF68nN1cQPq3aA+kBE= +github.com/hashicorp/vault/api v1.1.1 h1:907ld+Z9cALyvbZK2qUX9cLwvSaEQsMVQB3x2KE8+AI= +github.com/hashicorp/vault/api v1.1.1/go.mod h1:29UXcn/1cLOPHQNMWA7bCz2By4PSd0VKPAydKXS5yN0= +github.com/hashicorp/vault/sdk v0.1.14-0.20200519221530-14615acda45f/go.mod h1:WX57W2PwkrOPQ6rVQk+dy5/htHIaB4aBM70EwKThu10= +github.com/hashicorp/vault/sdk v0.2.1 h1:S4O6Iv/dyKlE9AUTXGa7VOvZmsCvg36toPKgV4f2P4M= +github.com/hashicorp/vault/sdk v0.2.1/go.mod h1:WfUiO1vYzfBkz1TmoE4ZGU7HD0T0Cl/rZwaxjBkgN4U= +github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= +github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d h1:kJCB4vdITiW1eC1vq2e6IsrXKrZit1bv/TDYFGMp4BQ= +github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= +github.com/hexops/autogold v1.3.0 h1:IEtGNPxBeBu8RMn8eKWh/Ll9dVNgSnJ7bp/qHgMQ14o= +github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM= +github.com/hexops/valast v1.4.0 h1:sFzyxPDP0riFQUzSBXTCCrAbbIndHPWMndxuEjXdZlc= +github.com/hinshun/vt10x v0.0.0-20180616224451-1954e6464174 h1:WlZsjVhE8Af9IcZDGgJGQpNflI3+MJSBhsgT5PCtzBQ= +github.com/hinshun/vt10x v0.0.0-20180616224451-1954e6464174/go.mod h1:DqJ97dSdRW1W22yXSB90986pcOyQ7r45iio1KN2ez1A= +github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/huandu/xstrings v1.3.2 h1:L18LIDzqlW6xN2rEkpdV8+oL/IXWJ1APd+vsdYy4Wdw= +github.com/huandu/xstrings v1.3.2/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= +github.com/iancoleman/strcase v0.2.0 h1:05I4QRnGpI0m37iZQRuskXh+w77mr6Z41lwQzuHLwW0= +github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= +github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/ijc/Gotty v0.0.0-20170406111628-a8b993ba6abd h1:anPrsicrIi2ColgWTVPk+TrN42hJIWlfPHSBP9S0ZkM= +github.com/ijc/Gotty v0.0.0-20170406111628-a8b993ba6abd/go.mod h1:3LVOLeyx9XVvwPgrt2be44XgSqndprz1G18rSk8KD84= +github.com/imdario/mergo v0.3.9/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= +github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU= +github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= +github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= +github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/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/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4= +github.com/jhump/protoreflect v1.6.0/go.mod h1:eaTn3RZAmMBcV0fifFvlm6VHNz3wSkYyXYWUh7ymB74= +github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik= +github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= +github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= +github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= +github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= +github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= +github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= +github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= +github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs= +github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= +github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= +github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= +github.com/kevinburke/ssh_config v1.1.0 h1:pH/t1WS9NzT8go394IqZeJTMHVm6Cr6ZJ6AQ+mdNo/o= +github.com/kevinburke/ssh_config v1.1.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= +github.com/keybase/go-crypto v0.0.0-20161004153544-93f5b35093ba/go.mod h1:ghbZscTyKdM07+Fw3KSi0hcJm+AlEUWj8QLlPtijN/M= +github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= +github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= +github.com/klauspost/compress v1.11.2/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= +github.com/klauspost/compress v1.13.5 h1:9O69jUPDcsT9fEm74W92rZL9FQY7rCdaXVneq+yyzl4= +github.com/klauspost/compress v1.13.5/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI= +github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/pty v1.1.4/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/pty v1.1.8 h1:AkaSdXYQOWeaO3neb8EM634ahkXXe3jYbVh/F9lq+GI= +github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= +github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= +github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= +github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= +github.com/lib/pq v1.10.2/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA= +github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= +github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= +github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= +github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.7/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40= +github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= +github.com/mattn/go-ieproxy v0.0.1 h1:qiyop7gCflfhwCzGyeT0gro3sF9AIg9HU98JORTkqfI= +github.com/mattn/go-ieproxy v0.0.1/go.mod h1:pYabZ6IHcRpFh7vIaLfK7rdcWgFEb3SFJ6/gNWuh88E= +github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= +github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= +github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= +github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= +github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= +github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4OSgU= +github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b h1:j7+1HpAFS1zy5+Q4qx1fWh90gTKwiN4QCGoY9TWyyO4= +github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= +github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= +github.com/mitchellh/cli v1.1.1/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= +github.com/mitchellh/cli v1.1.2 h1:PvH+lL2B7IQ101xQL63Of8yFS2y+aDlsFcsqNc+u/Kw= +github.com/mitchellh/cli v1.1.2/go.mod h1:6iaV0fGdElS6dPBx0EApTxHrcWvmJphyh2n8YBLPPZ4= +github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db h1:62I3jR2EmQ4l5rM/4FEfDWcRD+abF5XlKShorW5LRoQ= +github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db/go.mod h1:l0dey0ia/Uv7NcFFVbCLtqEBQbrT4OCwCSKTEv6enCw= +github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= +github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= +github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= +github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-ps v1.0.0 h1:i6ampVEEF4wQFF+bkYfwYgY+F/uYJDktmvLPf7qIgjc= +github.com/mitchellh/go-ps v1.0.0/go.mod h1:J4lOc8z8yJs6vUwklHw2XEIiT4z4C40KtWVN3nvg8Pg= +github.com/mitchellh/go-testing-interface v0.0.0-20171004221916-a61a99592b77/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= +github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= +github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU= +github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8= +github.com/mitchellh/go-wordwrap v0.0.0-20150314170334-ad45545899c7/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= +github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= +github.com/mitchellh/go-wordwrap v1.0.1 h1:TLuKupo69TCn6TQSyGxwI1EblZZEsQ0vMlAFQflz0v0= +github.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTSsCt+hzestvNj0= +github.com/mitchellh/hashstructure v1.0.0 h1:ZkRJX1CyOoTkar7p/mLS5TZU4nJ1Rn/F8u9dGS02Q3Y= +github.com/mitchellh/hashstructure v1.0.0/go.mod h1:QjSHrPWS+BGUVBYkbTZWEnOh3G1DutKwClXU/ABz6AQ= +github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mitchellh/mapstructure v1.3.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/mapstructure v1.3.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/mapstructure v1.4.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/mapstructure v1.4.3 h1:OVowDSCllw/YjdLkam3/sm7wEtOy59d8ndGgCcyj8cs= +github.com/mitchellh/mapstructure v1.4.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/mitchellh/reflectwalk v1.0.1/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= +github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6 h1:dcztxKSvZ4Id8iPpHERQBbIJfabdt4wUm5qy3wOL2Zc= +github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= +github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= +github.com/nightlyone/lockfile v1.0.0 h1:RHep2cFKK4PonZJDdEl4GmkabuhbsRMgk/k3uAmxBiA= +github.com/nsf/jsondiff v0.0.0-20200515183724-f29ed568f4ce h1:RPclfga2SEJmgMmz2k+Mg7cowZ8yv4Trqw9UsJby758= +github.com/nsf/jsondiff v0.0.0-20200515183724-f29ed568f4ce/go.mod h1:uFMI8w+ref4v2r9jz+c9i1IfIttS/OkmLfrk1jne5hs= +github.com/oklog/run v1.0.0 h1:Ru7dDtJNOyC66gQ5dQmaCa0qIsAUFY3sFpK1Xk8igrw= +github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= +github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/opencontainers/go-digest v0.0.0-20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= +github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= +github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= +github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= +github.com/opencontainers/runc v0.0.0-20190115041553-12f6a991201f/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= +github.com/opencontainers/runc v0.1.1/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= +github.com/opencontainers/runtime-spec v0.1.2-0.20190507144316-5b71a03e2700/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opentracing/basictracer-go v1.1.0 h1:Oa1fTSBvAl8pa3U+IJYqrKm0NALwH9OsgwOqDv4xJW0= +github.com/opentracing/basictracer-go v1.1.0/go.mod h1:V2HZueSJEp879yv285Aap1BS69fQMD+MNP1mRs6mBQc= +github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= +github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= +github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/pelletier/go-buffruneio v0.2.0/go.mod h1:JkE26KsDizTr40EUHkXVtNPvgGtbSNq5BcowyYOWdKo= +github.com/pgavlin/goldmark v1.1.33-0.20200616210433-b5eb04559386 h1:LoCV5cscNVWyK5ChN/uCoIFJz8jZD63VQiGJIRgr6uo= +github.com/pgavlin/goldmark v1.1.33-0.20200616210433-b5eb04559386/go.mod h1:MRxHTJrf9FhdfNQ8Hdeh9gmHevC9RJE/fu8M3JIGjoE= +github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pierrec/lz4 v2.5.2+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pierrec/lz4 v2.6.1+incompatible h1:9UY3+iC23yxF0UfGaYrGplQ+79Rg+h/q9FV9ix19jjM= +github.com/pierrec/lz4 v2.6.1+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= +github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.8.1-0.20171018195549-f15c970de5b7/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= +github.com/pkg/term v1.1.0 h1:xIAAdCMh3QIAy+5FrE8Ad8XoDhEU4ufwbaSozViP9kk= +github.com/pkg/term v1.1.0/go.mod h1:E25nymQcrSllhX42Ok8MRm1+hyBdHY0dCeiKZ9jpNGw= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= +github.com/posener/complete v1.2.1 h1:LrvDIY//XNo65Lq84G/akBuMGlawHvGBABv8f/ZN6DI= +github.com/posener/complete v1.2.1/go.mod h1:6gapUrK/U1TAN7ciCoNRIdVC5sbdBTUh1DKN0g6uH7E= +github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v0.9.2/go.mod h1:OsXs2jCmiKlQ1lTBmv21f2mNfw4xf/QclQDMrYNZzcM= +github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= +github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/common v0.0.0-20181126121408-4724e9255275/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= +github.com/prometheus/procfs v0.0.0-20180125133057-cb4147076ac7/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= +github.com/pulumi/pulumi-java/pkg v0.2.0 h1:/aV/3c5MhXNkUu/aW6dtbYDbODFVqVQiGjVkLnl5KYo= +github.com/pulumi/pulumi-java/pkg v0.2.0/go.mod h1:LUz8JGS7Lxn2EnPkxFhB6Rap0CwZyHTHmwLQ16NFIhc= +github.com/pulumi/pulumi-terraform-bridge/v3 v3.24.1 h1:UZ3VKhrs8xH51W8YBG340VZbeT/auXuEoo8VeT4jmtI= +github.com/pulumi/pulumi-terraform-bridge/v3 v3.24.1/go.mod h1:9S7dC3IGa7a5D2dHEaiUbbE74iWFng6y1fS6BC2I35w= +github.com/pulumi/pulumi-yaml v0.3.0 h1:I7aW6Qm/1EsYDJJDJ0DLrLvpOlpmjbAgTnYo8pZlUcs= +github.com/pulumi/pulumi-yaml v0.3.0/go.mod h1:6pQ0QcQqLYbq+i5vYjir/gDnpCvTkKcHqB5+mt0d3So= +github.com/pulumi/pulumi/pkg/v3 v3.33.1 h1:8MhgX+xRxCxEw4Ke9kNdB3q7LVBB9lX3dHNYeAweWxU= +github.com/pulumi/pulumi/pkg/v3 v3.33.1/go.mod h1:7qbbfchJvtcGt7nAt+tIQiUYoBulGfCgLeO3RouhJoU= +github.com/pulumi/pulumi/sdk/v3 v3.33.1 h1:CCJdxK91D0ycuAIBV94xmCZQXeoSdRmKwe3rEvjtrVg= +github.com/pulumi/pulumi/sdk/v3 v3.33.1/go.mod h1:hGo/+AL1L4sPL9Ukd/i5bNFM3WHs3dHcA+GKEW7M3RA= +github.com/pulumi/terraform-diff-reader v0.0.0-20201211191010-ad4715e9285e h1:Dik4Qe/+xguB8JagPyXNlbOnRiXGmq/PSPQTGunYnTk= +github.com/pulumi/terraform-diff-reader v0.0.0-20201211191010-ad4715e9285e/go.mod h1:sZ9FUzGO+yM41hsQHs/yIcj/Y993qMdBxBU5mpDmAfQ= +github.com/pulumi/terraform-plugin-sdk/v2 v2.0.0-20220505215311-795430389fa7 h1:RAiGj0GniixD+G+HuUzFWZh2VKdQ50nv5+EmkKG1u3E= +github.com/pulumi/terraform-plugin-sdk/v2 v2.0.0-20220505215311-795430389fa7/go.mod h1:TPjMXvpPNWagHzYOmVPzzRRIBTuaLVukR+esL08tgzg= +github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= +github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= +github.com/rjeczalik/notify v0.9.2 h1:MiTWrPj55mNDHEiIX5YUSKefw/+lCQVoAFmD6oQm5w8= +github.com/rjeczalik/notify v0.9.2/go.mod h1:aErll2f0sUX9PXZnVNyeiObbmTlk5jnMoCa4QEjJeqM= +github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.8.1 h1:geMPLpDpQOgVyCg5z5GoRwLHepNdb71NXb67XFkP+Eg= +github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o= +github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= +github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/ryanuber/go-glob v1.0.0 h1:iQh3xXAumdQ+4Ufa5b25cRpC5TYKlno6hsv6Cb3pkBk= +github.com/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc= +github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06 h1:OkMGxebDjyw0ULyrTYWeN0UNCCkmCWfjPnIA2W6oviI= +github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06/go.mod h1:+ePHsJ1keEjQtpvf9HHw0f4ZeJ0TLRsxhunSI2hYJSs= +github.com/santhosh-tekuri/jsonschema/v5 v5.0.0 h1:TToq11gyfNlrMFZiYujSekIsPd9AmsA2Bj/iv+s4JHE= +github.com/santhosh-tekuri/jsonschema/v5 v5.0.0/go.mod h1:FKdcjfQW6rpZSnxxUvEA5H/cDPdvJ/SZJQLWWXWGrZ0= +github.com/sebdah/goldie v1.0.0/go.mod h1:jXP4hmWywNEwZzhMuv2ccnqTSFpuq8iyQhtQdkkZBH4= +github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= +github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= +github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ= +github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= +github.com/shurcooL/go-goon v0.0.0-20210110234559-7585751d9a17 h1:lRAUE0dIvigSSFAmaM2dfg7OH8T+a8zJ5smEh09a/GI= +github.com/sirupsen/logrus v1.0.4-0.20170822132746-89742aefa4b2/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= +github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= +github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= +github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= +github.com/spf13/afero v1.6.0 h1:xoax2sJ2DT8S8xA2paPFjDCScCNeWsg75VG0DLRreiY= +github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= +github.com/spf13/cast v1.4.1 h1:s0hze+J0196ZfEMTs80N7UlFt0BDuQ7Q+JDnHiMWKdA= +github.com/spf13/cast v1.4.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cobra v0.0.2-0.20171109065643-2da4a54c5cee/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= +github.com/spf13/cobra v1.4.0 h1:y+wJpx64xcgO1V+RcnwW0LEHxTKRi2ZDPSBjWnrg88Q= +github.com/spf13/cobra v1.4.0/go.mod h1:Wo4iy3BUC+X2Fybo0PDqwJIv3dNRiZLHQymsfxlB84g= +github.com/spf13/pflag v1.0.1-0.20171106142849-4c012f6dcd95/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.2/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/src-d/gcfg v1.4.0 h1:xXbNR5AlLSA315x2UO+fTSSAXCDf+Ar38/6oyGbDKQ4= +github.com/src-d/gcfg v1.4.0/go.mod h1:p/UMsR43ujA89BJY9duynAwIpvqEujIH/jFlfL7jWoI= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48= +github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= +github.com/stretchr/testify v1.2.1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1 h1:5TQK59W5E3v0r2duFAb7P95B6hEeOyEnHRa8MjYSMTY= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/terraform-providers/terraform-provider-archive v1.3.0 h1:8WzDXMwTdTd4Z7KAUjnYwopk1DgGJ/DLH0xowJ8h+/8= +github.com/terraform-providers/terraform-provider-archive v1.3.0/go.mod h1:7oAwNW55F65KauS++/XmAnrXhLfQRTYt549eYs4zU0w= +github.com/terraform-providers/terraform-provider-http v1.2.0 h1:pOP/SNlLjB18CydtTJJwzkZGkHYX3LWzIoQpYQuBdyw= +github.com/terraform-providers/terraform-provider-http v1.2.0/go.mod h1:2Iot921OkLVSZr8FbIkvRN84ZV3w+oFKb7RlmPTQQAQ= +github.com/texttheater/golang-levenshtein v1.0.1 h1:+cRNoVrfiwufQPhoMzB6N0Yf/Mqajr6t1lOv8GyGE2U= +github.com/texttheater/golang-levenshtein v1.0.1/go.mod h1:PYAKrbF5sAiq9wd+H82hs7gNaen0CplQ9uvm6+enD/8= +github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= +github.com/tweekmonster/luser v0.0.0-20161003172636-3fa38070dbd7 h1:X9dsIWPuuEJlPX//UmRKophhOKCGXc46RVIGuttks68= +github.com/tweekmonster/luser v0.0.0-20161003172636-3fa38070dbd7/go.mod h1:UxoP3EypF8JfGEjAII8jx1q8rQyDnX8qdTCs/UQBVIE= +github.com/uber/jaeger-client-go v2.25.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= +github.com/uber/jaeger-client-go v2.30.0+incompatible h1:D6wyKGCecFaSRUpo8lCVbaOOb6ThwMmTEbhRwtKR97o= +github.com/uber/jaeger-client-go v2.30.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk= +github.com/uber/jaeger-lib v2.4.0+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= +github.com/uber/jaeger-lib v2.4.1+incompatible h1:td4jdvLcExb4cBISKIpHuGoVXh+dVKhn2Um6rjCsSsg= +github.com/uber/jaeger-lib v2.4.1+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U= +github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= +github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= +github.com/ulikunitz/xz v0.5.5/go.mod h1:2bypXElzHzzJZwzH67Y6wb67pO62Rzfn7BSiF4ABRW8= +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= +github.com/vmihailenco/msgpack v3.3.3+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk= +github.com/vmihailenco/msgpack v4.0.1+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk= +github.com/vmihailenco/msgpack v4.0.4+incompatible h1:dSLoQfGFAo3F6OoNhwUmLwVgaUXK79GlxNBwueZn0xI= +github.com/vmihailenco/msgpack v4.0.4+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk= +github.com/vmihailenco/msgpack/v4 v4.3.12 h1:07s4sz9IReOgdikxLTKNbBdqDMLsjPKXwvCazn8G65U= +github.com/vmihailenco/msgpack/v4 v4.3.12/go.mod h1:gborTTJjAo/GWTqqRjrLCn9pgNN+NXzzngzBKDPIqw4= +github.com/vmihailenco/tagparser v0.1.1 h1:quXMXlA39OCbd2wAdTsGDlK9RkOk6Wuw+x37wVyIuWY= +github.com/vmihailenco/tagparser v0.1.1/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI= +github.com/xanzy/ssh-agent v0.2.1/go.mod h1:mLlQY/MoOhWBj+gOGMQkOeiEvkx+8pJSI+0Bx9h2kr4= +github.com/xanzy/ssh-agent v0.3.0/go.mod h1:3s9xbODqPuuhK9JV1R321M/FlMZSBvE5aY6eAcqrDh0= +github.com/xanzy/ssh-agent v0.3.1 h1:AmzO1SSWxw73zxFZPRwaMN1MohDw8UyHnmuxyceTEGo= +github.com/xanzy/ssh-agent v0.3.1/go.mod h1:QIE4lCeL7nkC25x+yA3LBIYfwCc1TFziCtG7cBAac6w= +github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f h1:J9EGpcZtP0E/raorCMxlFGSTBrsSlaDGf3jU/qvAE2c= +github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= +github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0= +github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= +github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74= +github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= +github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/zclconf/go-cty v1.0.0/go.mod h1:xnAOWiHeOqg2nWS62VtQ7pbOu17FtxJNW8RLEih+O3s= +github.com/zclconf/go-cty v1.1.0/go.mod h1:xnAOWiHeOqg2nWS62VtQ7pbOu17FtxJNW8RLEih+O3s= +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.8.0/go.mod h1:vVKLxnk3puL4qRAv72AO+W99LUD4da90g3uUAzyuvAk= +github.com/zclconf/go-cty v1.8.2/go.mod h1:vVKLxnk3puL4qRAv72AO+W99LUD4da90g3uUAzyuvAk= +github.com/zclconf/go-cty v1.9.1/go.mod h1:vVKLxnk3puL4qRAv72AO+W99LUD4da90g3uUAzyuvAk= +github.com/zclconf/go-cty v1.10.0 h1:mp9ZXQeIcN8kAwuqorjH+Q+njbJKjLrvB2yIh4q7U+0= +github.com/zclconf/go-cty v1.10.0/go.mod h1:vVKLxnk3puL4qRAv72AO+W99LUD4da90g3uUAzyuvAk= +github.com/zclconf/go-cty-debug v0.0.0-20191215020915-b22d67c1ba0b/go.mod h1:ZRKQfBXbGkpdV6QMzT3rU1kSTAnfu1dO8dPKjYprgj8= +github.com/zclconf/go-cty-yaml v1.0.1 h1:up11wlgAaDvlAGENcFDnZgkn0qUJurso7k6EpURKNF8= +github.com/zclconf/go-cty-yaml v1.0.1/go.mod h1:IP3Ylp0wQpYm50IHK8OZWKMu6sPJIUgKa8XhiVHura0= +go.opencensus.io v0.15.0/go.mod h1:UffZAU+4sDEINUGP/B7UfBBkq4fqLu9zXAX7ke6CHW0= +go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= +go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= +go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= +go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= +go.opencensus.io v0.22.6/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= +go.opencensus.io v0.23.0 h1:gqCw0LfLxScz8irSi8exQc7fyQ0fKQU/qnC/X8+V/1M= +go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= +go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= +go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE= +go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= +go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= +go.uber.org/multierr v1.7.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= +go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= +go.uber.org/zap v1.19.0/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= +gocloud.dev v0.24.0 h1:cNtHD07zQQiv02OiwwDyVMuHmR7iQt2RLkzoAgz7wBs= +gocloud.dev v0.24.0/go.mod h1:uA+als++iBX5ShuG4upQo/3Zoz49iIPlYUWHV5mM8w8= +gocloud.dev/secrets/hashivault v0.24.0 h1:rutqnevHcRze+92YMGmjCH3gX+qES8IArg5qPhr8ZnM= +gocloud.dev/secrets/hashivault v0.24.0/go.mod h1:I4EieZgy8VTp5iVK2jSPlTidjENujhKq2Y/wXz8r8V0= +golang.org/x/crypto v0.0.0-20171113213409-9f005a07e0d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190418165655-df01cb2cc480/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= +golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190530122614-20be4c3c3ed5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200604202706-70a84ac30bf9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= +golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20220131195533-30dcbda58838 h1:71vQrMauZZhcTVK6KdYM+rklehEEwb3E+ZhaE5jrPrE= +golang.org/x/crypto v0.0.0-20220131195533-30dcbda58838/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +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= +golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= +golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= +golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= +golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= +golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= +golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= +golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= +golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= +golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.5.0 h1:UG21uOlmZabA4fW5i7ZX6bjw1xELEGg/ZLgZq9auk/Q= +golang.org/x/mod v0.5.0/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= +golang.org/x/net v0.0.0-20180530234432-1e491301e022/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180811021610-c39426892332/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/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-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190502183928-7f726cade0ab/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191009170851-d66e71096ffb/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191112182307-2180aed22343/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200421231249-e086a090c8fd/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200602114024-627f9648deb9/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= +golang.org/x/net v0.0.0-20210326060303-6b1517762897/go.mod h1:uSPa2vr4CLtc/ILN5odXGNXS6mhrKVzTaCXzk9m6W3k= +golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210825183410-e898025ed96a/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220325170049-de3da57026de h1:pZB1TWnKi+o4bENlbzAgLrEbY4RMYmUIRobMcSmfeYc= +golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210126194326-f9ce19ea3013/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210427180440-81ed05c6b58c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a h1:qfl7ob3DIEs3Ml9oLuPwY2N04gymzAW04WsUQHIClgM= +golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180926160741-c2ed4eda69e7/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190129075346-302c3dd5f1cc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190221075227-b4e8571b14e0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190502175342-a43fa875dd82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190514135907-3a4b5fb9f71f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190530182044-ad28b68e88f1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190804053845-51ab0e2deafa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191112214154-59a1497f0cea/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/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-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210223095934-7937bea0104d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210502180810-71e4cd670f79/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210503080704-8803ae5d1324/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210831042530-f4d43177bf5e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210917161153-d61c044b1678/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886 h1:eJv7u3ksNXoLbGSKuv2s/SIO4tJVxc/A+MTpzxDgz/Q= +golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +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= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac h1:7zkz7BUtwNFFqcowJ+RIgu2MaV/MapERkDIy+mwPyjs= +golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190422233926-fe54fb35175b/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190729092621-ff9f1409240a/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI= +golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200713011307-fd294ab11aed/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-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= +golang.org/x/tools v0.0.0-20201028111035-eafbe7b904eb/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= +golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.5 h1:ouewzE6p+/VEB31YYnTbEJdi8pFqKp4P4n85vwo3DHA= +golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= +google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= +google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= +google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= +google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= +google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= +google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= +google.golang.org/api v0.34.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= +google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= +google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= +google.golang.org/api v0.37.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= +google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= +google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= +google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= +google.golang.org/api v0.46.0/go.mod h1:ceL4oozhkAiTID8XMmJBsIxID/9wMXJVVFXPg4ylg3I= +google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= +google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= +google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= +google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU= +google.golang.org/api v0.52.0/go.mod h1:Him/adpjt0sxtkWViy0b6xyKW/SD71CwdJ7HqJo7SrU= +google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k= +google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= +google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= +google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= +google.golang.org/api v0.58.0/go.mod h1:cAbP2FsxoGVNwtgNAmmn3y5G1TWAiVYRmg4yku3lv+E= +google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= +google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo= +google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g= +google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA= +google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8= +google.golang.org/api v0.74.0 h1:ExR2D+5TYIrMphWgs5JCgwRhEDlPDXXrLwHHMgPHTXE= +google.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= +google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/genproto v0.0.0-20170818010345-ee236bd376b0/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190708153700-3bdd9d9f5532/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= +google.golang.org/genproto v0.0.0-20190716160619-c506a9f90610/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= +google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= +google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200310143817-43be25429f5a/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200711021454-869866162049/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-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210126160654-44e461bb6506/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210329143202-679c6ae281ee/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= +google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= +google.golang.org/genproto v0.0.0-20210429181445-86c259c2b4ab/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= +google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= +google.golang.org/genproto v0.0.0-20210517163617-5e0236093d7a/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= +google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= +google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210721163202-f1cecdd8b78a/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210722135532-667f2b7c528f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= +google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210825212027-de86158e7fda/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210917145530-b395a37504d4/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211018162055-cf77aa76bad2/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= +google.golang.org/genproto v0.0.0-20220405205423-9d709892a2bf h1:JTjwKJX9erVpsw17w+OIPP7iAgEkN/r8urhWSunEDTs= +google.golang.org/genproto v0.0.0-20220405205423-9d709892a2bf/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +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.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.22.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= +google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= +google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= +google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= +google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= +google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= +google.golang.org/grpc v1.45.0 h1:NEpgUqV3Z+ZjkqMsxMg11IaDrXY4RY6CQukSGK0uI1M= +google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= +google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw= +google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +gopkg.in/AlecAivazis/survey.v1 v1.8.9-0.20200217094205-6773bdf39b7f h1:AQkMzsSzHWrgZWqGRpuRaRPDmyNibcXlpGcnQJ7HxZw= +gopkg.in/AlecAivazis/survey.v1 v1.8.9-0.20200217094205-6773bdf39b7f/go.mod h1:CaHjv79TCgAvXMSFJSVgonHXYWxnhzI3eoHtnX5UgUo= +gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U= +gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/cheggaaa/pb.v1 v1.0.27/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= +gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo= +gopkg.in/square/go-jose.v2 v2.3.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= +gopkg.in/square/go-jose.v2 v2.5.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= +gopkg.in/square/go-jose.v2 v2.6.0 h1:NGk74WTnPKBNUhNzQX7PYcTLUjoq7mzKk2OKbvwk2iI= +gopkg.in/square/go-jose.v2 v2.6.0/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= +gopkg.in/src-d/go-billy.v4 v4.3.2 h1:0SQA1pRztfTFx2miS8sA97XvooFeNOmvUenF4o0EcVg= +gopkg.in/src-d/go-billy.v4 v4.3.2/go.mod h1:nDjArDMp+XMs1aFAESLRjfGSgfvoYN0hDfzEk0GjC98= +gopkg.in/src-d/go-git-fixtures.v3 v3.5.0 h1:ivZFOIltbce2Mo8IjzUHAFoq/IylO9WHhNOAJK+LsJg= +gopkg.in/src-d/go-git-fixtures.v3 v3.5.0/go.mod h1:dLBcvytrw/TYZsNTWCnkNF2DSIlzWYqTe3rJR56Ac7g= +gopkg.in/src-d/go-git.v4 v4.13.1 h1:SRtFyV8Kxc0UP7aCHcijOMQGPxHSmMOPrzulQWolkYE= +gopkg.in/src-d/go-git.v4 v4.13.1/go.mod h1:nx5NYcxdKxq5fpltdHnPa2Exj4Sx0EclMWZQbYDu2z8= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= +gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= +gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= +gotest.tools/v3 v3.0.2 h1:kG1BFyqVHuQoVQiR1bWGnfz/fmHvvuiSPIV7rvl360E= +gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= +honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +howett.net/plist v0.0.0-20181124034731-591f970eefbb/go.mod h1:vMygbs4qMhSZSc4lCUl2OEE+rDiIIJAIdR4m7MiMcm0= +mvdan.cc/gofumpt v0.1.0 h1:hsVv+Y9UsZ/mFZTxJZuHVI6shSQCtzZ11h1JEFPAZLw= +nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= +nhooyr.io/websocket v1.8.7/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= +pgregory.net/rapid v0.4.7 h1:MTNRktPuv5FNqOO151TM9mDTa+XHcX6ypYeISDVD14g= +rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= +rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= +sourcegraph.com/sourcegraph/appdash v0.0.0-20211028080628-e2786a622600 h1:hfyJ5ku9yFtLVOiSxa3IN+dx5eBQT9mPmKFypAmg8XM= +sourcegraph.com/sourcegraph/appdash v0.0.0-20211028080628-e2786a622600/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= diff --git a/provider/resources.go b/provider/resources.go index d194874..b2cae6a 100644 --- a/provider/resources.go +++ b/provider/resources.go @@ -12,127 +12,89 @@ // See the License for the specific language governing permissions and // limitations under the License. -package xyz +package onepassword import ( "fmt" "path/filepath" "github.com/pulumi/pulumi-terraform-bridge/v3/pkg/tfbridge" - shim "github.com/pulumi/pulumi-terraform-bridge/v3/pkg/tfshim" shimv2 "github.com/pulumi/pulumi-terraform-bridge/v3/pkg/tfshim/sdk-v2" - "github.com/pulumi/pulumi-xyz/provider/pkg/version" - "github.com/pulumi/pulumi/sdk/v3/go/common/resource" - "github.com/terraform-providers/terraform-provider-xyz/xyz" + "github.com/SimCubeLtd/pulumi-onepassword/provider/pkg/version" + "github.com/1Password/terraform-provider-onepassword/onepassword" ) -// all of the token components used below. const ( - // This variable controls the default name of the package in the package - // registries for nodejs and python: - mainPkg = "xyz" - // modules: - mainMod = "index" // the xyz module + mainPkg = "onepassword" + mainMod = "index" ) -// preConfigureCallback is called before the providerConfigure function of the underlying provider. -// It should validate that the provider can be configured, and provide actionable errors in the case -// it cannot be. Configuration variables can be read from `vars` using the `stringValue` function - -// for example `stringValue(vars, "accessKey")`. -func preConfigureCallback(vars resource.PropertyMap, c shim.ResourceConfig) error { - return nil -} - -// Provider returns additional overlaid schema and metadata associated with the provider.. func Provider() tfbridge.ProviderInfo { - // Instantiate the Terraform provider - p := shimv2.NewProvider(xyz.Provider()) + p := shimv2.NewProvider(onepassword.Provider()) - // Create a Pulumi provider mapping prov := tfbridge.ProviderInfo{ P: p, - Name: "xyz", - // DisplayName is a way to be able to change the casing of the provider - // name when being displayed on the Pulumi registry - DisplayName: "", - // The default publisher for all packages is Pulumi. - // Change this to your personal name (or a company name) that you - // would like to be shown in the Pulumi Registry if this package is published - // there. - Publisher: "Pulumi", - // LogoURL is optional but useful to help identify your package in the Pulumi Registry - // if this package is published there. - // - // You may host a logo on a domain you control or add an SVG logo for your package - // in your repository and use the raw content URL for that file as your logo URL. - LogoURL: "", - // PluginDownloadURL is an optional URL used to download the Provider - // for use in Pulumi programs - // e.g https://github.com/org/pulumi-provider-name/releases/ - PluginDownloadURL: "", - Description: "A Pulumi package for creating and managing xyz cloud resources.", - // category/cloud tag helps with categorizing the package in the Pulumi Registry. - // For all available categories, see `Keywords` in - // https://www.pulumi.com/docs/guides/pulumi-packages/schema/#package. - Keywords: []string{"pulumi", "xyz", "category/cloud"}, + Name: "onepassword", + DisplayName: "1Password", + Publisher: "SimCubeLtd", + LogoURL: "https://avatars.githubusercontent.com/u/38230737?s=200&v=4", + PluginDownloadURL: "https://github.com/SimCubeLtd/pulumi-onepassword/releases/download/v${VERSION}", + Description: "A Pulumi package for creating and managing onepassword resources.", + Keywords: []string{"pulumi", "onepassword", "category/cloud"}, License: "Apache-2.0", - Homepage: "https://www.pulumi.com", - Repository: "https://github.com/pulumi/pulumi-xyz", - // The GitHub Org for the provider - defaults to `terraform-providers` - GitHubOrg: "", - Config: map[string]*tfbridge.SchemaInfo{ - // Add any required configuration here, or remove the example below if - // no additional points are required. - // "region": { - // Type: tfbridge.MakeType("region", "Region"), - // Default: &tfbridge.DefaultInfo{ - // EnvVars: []string{"AWS_REGION", "AWS_DEFAULT_REGION"}, - // }, - // }, - }, - PreConfigureCallback: preConfigureCallback, + Homepage: "https://github.com/SimCubeLtd/pulumi-onepassword", + Repository: "https://github.com/SimCubeLtd/pulumi-onepassword", + GitHubOrg: "1Password", + Config: map[string]*tfbridge.SchemaInfo{}, Resources: map[string]*tfbridge.ResourceInfo{ - // Map each resource in the Terraform provider to a Pulumi type. Two examples - // are below - the single line form is the common case. The multi-line form is - // needed only if you wish to override types or other default options. - // - // "aws_iam_role": {Tok: tfbridge.MakeResource(mainPkg, mainMod, "IamRole")} - // - // "aws_acm_certificate": { - // Tok: tfbridge.MakeResource(mainPkg, mainMod, "Certificate"), - // Fields: map[string]*tfbridge.SchemaInfo{ - // "tags": {Type: tfbridge.MakeType(mainPkg, "Tags")}, - // }, - // }, + "onepassword_item": { + Tok: tfbridge.MakeResource(mainPkg, mainMod, "Item"), + Fields: map[string]*tfbridge.SchemaInfo{ + "password": { + Secret: tfbridge.True(), + }, + "username": { + Secret: tfbridge.True(), + }, + "vault": { + Secret: tfbridge.True(), + }, + "hostname": { + Secret: tfbridge.True(), + }, + "port": { + Secret: tfbridge.True(), + }, + }, + }, }, DataSources: map[string]*tfbridge.DataSourceInfo{ - // Map each resource in the Terraform provider to a Pulumi function. An example - // is below. - // "aws_ami": {Tok: tfbridge.MakeDataSource(mainPkg, mainMod, "getAmi")}, + "onepassword_item": { + Tok: tfbridge.MakeDataSource(mainPkg, mainMod, "GetItem"), + }, + "onepassword_vault": { + Tok: tfbridge.MakeDataSource(mainPkg, mainMod, "GetVault"), + }, }, JavaScript: &tfbridge.JavaScriptInfo{ - // List any npm dependencies and their versions + PackageName: "@SimCubeLtd/pulumi-onepassword", Dependencies: map[string]string{ "@pulumi/pulumi": "^3.0.0", }, DevDependencies: map[string]string{ - "@types/node": "^10.0.0", // so we can access strongly typed node definitions. + "@types/node": "^10.0.0", "@types/mime": "^2.0.0", }, - // See the documentation for tfbridge.OverlayInfo for how to lay out this - // section, or refer to the AWS provider. Delete this section if there are - // no overlay files. - //Overlay: &tfbridge.OverlayInfo{}, }, Python: &tfbridge.PythonInfo{ - // List any Python dependencies and their version ranges + PackageName: "simcubeltd_pulumi_onepassword", Requires: map[string]string{ "pulumi": ">=3.0.0,<4.0.0", }, }, Golang: &tfbridge.GolangInfo{ ImportBasePath: filepath.Join( - fmt.Sprintf("github.com/pulumi/pulumi-%[1]s/sdk/", mainPkg), + fmt.Sprintf("github.com/SimCubeLtd/pulumi-%[1]s/sdk/", mainPkg), tfbridge.GetModuleMajorVersion(version.Version), "go", mainPkg, @@ -149,4 +111,4 @@ func Provider() tfbridge.ProviderInfo { prov.SetAutonaming(255, "-") return prov -} +} \ No newline at end of file diff --git a/sdk/dotnet/Config/Config.cs b/sdk/dotnet/Config/Config.cs new file mode 100644 index 0000000..029d33f --- /dev/null +++ b/sdk/dotnet/Config/Config.cs @@ -0,0 +1,57 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Immutable; + +namespace Pulumi.Onepassword +{ + public static class Config + { + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "IDE1006", Justification = + "Double underscore prefix used to avoid conflicts with variable names.")] + private sealed class __Value + { + private readonly Func _getter; + private T _value = default!; + private bool _set; + + public __Value(Func getter) + { + _getter = getter; + } + + public T Get() => _set ? _value : _getter(); + + public void Set(T value) + { + _value = value; + _set = true; + } + } + + private static readonly Pulumi.Config __config = new Pulumi.Config("onepassword"); + + private static readonly __Value _token = new __Value(() => __config.Get("token")); + /// + /// A valid token for your 1Password Connect API. Can also be sourced from OP_CONNECT_TOKEN. + /// + public static string? Token + { + get => _token.Get(); + set => _token.Set(value); + } + + private static readonly __Value _url = new __Value(() => __config.Get("url")); + /// + /// The HTTP(S) URL where your 1Password Connect API can be found. Must be provided through the the OP_CONNECT_HOST + /// environment variable if this attribute is not set. + /// + public static string? Url + { + get => _url.Get(); + set => _url.Set(value); + } + + } +} diff --git a/sdk/dotnet/Config/README.md b/sdk/dotnet/Config/README.md new file mode 100644 index 0000000..c671f0f --- /dev/null +++ b/sdk/dotnet/Config/README.md @@ -0,0 +1 @@ +A Pulumi package for creating and managing onepassword resources. diff --git a/sdk/dotnet/GetItem.cs b/sdk/dotnet/GetItem.cs new file mode 100644 index 0000000..9a5dca7 --- /dev/null +++ b/sdk/dotnet/GetItem.cs @@ -0,0 +1,230 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Onepassword +{ + public static class GetItem + { + /// + /// Use this data source to get details of an item by its vault uuid and either the title or the uuid of the item. + /// + /// {{% examples %}} + /// ## Example Usage + /// {{% example %}} + /// + /// ```csharp + /// using Pulumi; + /// using Onepassword = Pulumi.Onepassword; + /// + /// class MyStack : Stack + /// { + /// public MyStack() + /// { + /// var example = Output.Create(Onepassword.GetItem.InvokeAsync(new Onepassword.GetItemArgs + /// { + /// Vault = @var.Demo_vault, + /// Uuid = onepassword_item.Demo_sections.Uuid, + /// })); + /// } + /// + /// } + /// ``` + /// {{% /example %}} + /// {{% /examples %}} + /// + public static Task InvokeAsync(GetItemArgs args, InvokeOptions? options = null) + => Pulumi.Deployment.Instance.InvokeAsync("onepassword:index/getItem:GetItem", args ?? new GetItemArgs(), options.WithDefaults()); + + /// + /// Use this data source to get details of an item by its vault uuid and either the title or the uuid of the item. + /// + /// {{% examples %}} + /// ## Example Usage + /// {{% example %}} + /// + /// ```csharp + /// using Pulumi; + /// using Onepassword = Pulumi.Onepassword; + /// + /// class MyStack : Stack + /// { + /// public MyStack() + /// { + /// var example = Output.Create(Onepassword.GetItem.InvokeAsync(new Onepassword.GetItemArgs + /// { + /// Vault = @var.Demo_vault, + /// Uuid = onepassword_item.Demo_sections.Uuid, + /// })); + /// } + /// + /// } + /// ``` + /// {{% /example %}} + /// {{% /examples %}} + /// + public static Output Invoke(GetItemInvokeArgs args, InvokeOptions? options = null) + => Pulumi.Deployment.Instance.Invoke("onepassword:index/getItem:GetItem", args ?? new GetItemInvokeArgs(), options.WithDefaults()); + } + + + public sealed class GetItemArgs : Pulumi.InvokeArgs + { + /// + /// The title of the item to retrieve. This field will be populated with the title of the item if the item it looked up by its UUID. + /// + [Input("title")] + public string? Title { get; set; } + + /// + /// The UUID of the item to retrieve. This field will be populated with the UUID of the item if the item it looked up by its title. + /// + [Input("uuid")] + public string? Uuid { get; set; } + + /// + /// The UUID of the vault the item is in. + /// + [Input("vault", required: true)] + public string Vault { get; set; } = null!; + + public GetItemArgs() + { + } + } + + public sealed class GetItemInvokeArgs : Pulumi.InvokeArgs + { + /// + /// The title of the item to retrieve. This field will be populated with the title of the item if the item it looked up by its UUID. + /// + [Input("title")] + public Input? Title { get; set; } + + /// + /// The UUID of the item to retrieve. This field will be populated with the UUID of the item if the item it looked up by its title. + /// + [Input("uuid")] + public Input? Uuid { get; set; } + + /// + /// The UUID of the vault the item is in. + /// + [Input("vault", required: true)] + public Input Vault { get; set; } = null!; + + public GetItemInvokeArgs() + { + } + } + + + [OutputType] + public sealed class GetItemResult + { + /// + /// The category of the item. One of ["login" "password" "database"] + /// + public readonly string Category; + /// + /// (Only applies to the database category) The name of the database. + /// + public readonly string Database; + /// + /// (Only applies to the database category) The address where the database can be found + /// + public readonly string Hostname; + public readonly string Id; + /// + /// Password for this item. + /// + public readonly string Password; + /// + /// (Only applies to the database category) The port the database is listening on. + /// + public readonly string Port; + /// + /// A list of custom sections in an item + /// + public readonly ImmutableArray Sections; + /// + /// An array of strings of the tags assigned to the item. + /// + public readonly ImmutableArray Tags; + /// + /// The title of the item to retrieve. This field will be populated with the title of the item if the item it looked up by its UUID. + /// + public readonly string Title; + /// + /// (Only applies to the database category) The type of database. One of ["db2" "filemaker" "msaccess" "mssql" "mysql" "oracle" "postgresql" "sqlite" "other"] + /// + public readonly string Type; + /// + /// The primary URL for the item. + /// + public readonly string Url; + /// + /// Username for this item. + /// + public readonly string Username; + /// + /// The UUID of the item to retrieve. This field will be populated with the UUID of the item if the item it looked up by its title. + /// + public readonly string Uuid; + /// + /// The UUID of the vault the item is in. + /// + public readonly string Vault; + + [OutputConstructor] + private GetItemResult( + string category, + + string database, + + string hostname, + + string id, + + string password, + + string port, + + ImmutableArray sections, + + ImmutableArray tags, + + string title, + + string type, + + string url, + + string username, + + string uuid, + + string vault) + { + Category = category; + Database = database; + Hostname = hostname; + Id = id; + Password = password; + Port = port; + Sections = sections; + Tags = tags; + Title = title; + Type = type; + Url = url; + Username = username; + Uuid = uuid; + Vault = vault; + } + } +} diff --git a/sdk/dotnet/GetVault.cs b/sdk/dotnet/GetVault.cs new file mode 100644 index 0000000..2fc1e04 --- /dev/null +++ b/sdk/dotnet/GetVault.cs @@ -0,0 +1,100 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Onepassword +{ + public static class GetVault + { + /// + /// Use this data source to get details of a vault by either its name or uuid. + /// + public static Task InvokeAsync(GetVaultArgs? args = null, InvokeOptions? options = null) + => Pulumi.Deployment.Instance.InvokeAsync("onepassword:index/getVault:GetVault", args ?? new GetVaultArgs(), options.WithDefaults()); + + /// + /// Use this data source to get details of a vault by either its name or uuid. + /// + public static Output Invoke(GetVaultInvokeArgs? args = null, InvokeOptions? options = null) + => Pulumi.Deployment.Instance.Invoke("onepassword:index/getVault:GetVault", args ?? new GetVaultInvokeArgs(), options.WithDefaults()); + } + + + public sealed class GetVaultArgs : Pulumi.InvokeArgs + { + /// + /// The name of the vault to retrieve. This field will be populated with the name of the vault if the vault it looked up by its UUID. + /// + [Input("name")] + public string? Name { get; set; } + + /// + /// The UUID of the vault to retrieve. This field will be populated with the UUID of the vault if the vault it looked up by its name. + /// + [Input("uuid")] + public string? Uuid { get; set; } + + public GetVaultArgs() + { + } + } + + public sealed class GetVaultInvokeArgs : Pulumi.InvokeArgs + { + /// + /// The name of the vault to retrieve. This field will be populated with the name of the vault if the vault it looked up by its UUID. + /// + [Input("name")] + public Input? Name { get; set; } + + /// + /// The UUID of the vault to retrieve. This field will be populated with the UUID of the vault if the vault it looked up by its name. + /// + [Input("uuid")] + public Input? Uuid { get; set; } + + public GetVaultInvokeArgs() + { + } + } + + + [OutputType] + public sealed class GetVaultResult + { + /// + /// The description of the vault. + /// + public readonly string Description; + public readonly string Id; + /// + /// The name of the vault to retrieve. This field will be populated with the name of the vault if the vault it looked up by its UUID. + /// + public readonly string Name; + /// + /// The UUID of the vault to retrieve. This field will be populated with the UUID of the vault if the vault it looked up by its name. + /// + public readonly string Uuid; + + [OutputConstructor] + private GetVaultResult( + string description, + + string id, + + string name, + + string uuid) + { + Description = description; + Id = id; + Name = name; + Uuid = uuid; + } + } +} diff --git a/sdk/dotnet/Inputs/ItemPasswordRecipeArgs.cs b/sdk/dotnet/Inputs/ItemPasswordRecipeArgs.cs new file mode 100644 index 0000000..2f44078 --- /dev/null +++ b/sdk/dotnet/Inputs/ItemPasswordRecipeArgs.cs @@ -0,0 +1,43 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Onepassword.Inputs +{ + + public sealed class ItemPasswordRecipeArgs : Pulumi.ResourceArgs + { + /// + /// Use digits [0-9] when generating the password. + /// + [Input("digits")] + public Input? Digits { get; set; } + + /// + /// The length of the password to be generated. + /// + [Input("length")] + public Input? Length { get; set; } + + /// + /// Use letters [a-zA-Z] when generating the password. + /// + [Input("letters")] + public Input? Letters { get; set; } + + /// + /// Use symbols [!@.-_*] when generating the password. + /// + [Input("symbols")] + public Input? Symbols { get; set; } + + public ItemPasswordRecipeArgs() + { + } + } +} diff --git a/sdk/dotnet/Inputs/ItemPasswordRecipeGetArgs.cs b/sdk/dotnet/Inputs/ItemPasswordRecipeGetArgs.cs new file mode 100644 index 0000000..dc896ec --- /dev/null +++ b/sdk/dotnet/Inputs/ItemPasswordRecipeGetArgs.cs @@ -0,0 +1,43 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Onepassword.Inputs +{ + + public sealed class ItemPasswordRecipeGetArgs : Pulumi.ResourceArgs + { + /// + /// Use digits [0-9] when generating the password. + /// + [Input("digits")] + public Input? Digits { get; set; } + + /// + /// The length of the password to be generated. + /// + [Input("length")] + public Input? Length { get; set; } + + /// + /// Use letters [a-zA-Z] when generating the password. + /// + [Input("letters")] + public Input? Letters { get; set; } + + /// + /// Use symbols [!@.-_*] when generating the password. + /// + [Input("symbols")] + public Input? Symbols { get; set; } + + public ItemPasswordRecipeGetArgs() + { + } + } +} diff --git a/sdk/dotnet/Inputs/ItemSectionArgs.cs b/sdk/dotnet/Inputs/ItemSectionArgs.cs new file mode 100644 index 0000000..1493493 --- /dev/null +++ b/sdk/dotnet/Inputs/ItemSectionArgs.cs @@ -0,0 +1,43 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Onepassword.Inputs +{ + + public sealed class ItemSectionArgs : Pulumi.ResourceArgs + { + [Input("fields")] + private InputList? _fields; + + /// + /// A list of custom fields in the section. + /// + public InputList Fields + { + get => _fields ?? (_fields = new InputList()); + set => _fields = value; + } + + /// + /// A unique identifier for the section. + /// + [Input("id")] + public Input? Id { get; set; } + + /// + /// The label for the section. + /// + [Input("label", required: true)] + public Input Label { get; set; } = null!; + + public ItemSectionArgs() + { + } + } +} diff --git a/sdk/dotnet/Inputs/ItemSectionFieldArgs.cs b/sdk/dotnet/Inputs/ItemSectionFieldArgs.cs new file mode 100644 index 0000000..3cc6b62 --- /dev/null +++ b/sdk/dotnet/Inputs/ItemSectionFieldArgs.cs @@ -0,0 +1,43 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Onepassword.Inputs +{ + + public sealed class ItemSectionFieldArgs : Pulumi.ResourceArgs + { + [Input("id")] + public Input? Id { get; set; } + + [Input("label", required: true)] + public Input Label { get; set; } = null!; + + /// + /// Password for this item. + /// + [Input("passwordRecipe")] + public Input? PasswordRecipe { get; set; } + + [Input("purpose")] + public Input? Purpose { get; set; } + + /// + /// (Only applies to the database category) The type of database. One of ["db2" "filemaker" "msaccess" "mssql" "mysql" "oracle" "postgresql" "sqlite" "other"] + /// + [Input("type")] + public Input? Type { get; set; } + + [Input("value")] + public Input? Value { get; set; } + + public ItemSectionFieldArgs() + { + } + } +} diff --git a/sdk/dotnet/Inputs/ItemSectionFieldGetArgs.cs b/sdk/dotnet/Inputs/ItemSectionFieldGetArgs.cs new file mode 100644 index 0000000..11d4790 --- /dev/null +++ b/sdk/dotnet/Inputs/ItemSectionFieldGetArgs.cs @@ -0,0 +1,43 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Onepassword.Inputs +{ + + public sealed class ItemSectionFieldGetArgs : Pulumi.ResourceArgs + { + [Input("id")] + public Input? Id { get; set; } + + [Input("label", required: true)] + public Input Label { get; set; } = null!; + + /// + /// Password for this item. + /// + [Input("passwordRecipe")] + public Input? PasswordRecipe { get; set; } + + [Input("purpose")] + public Input? Purpose { get; set; } + + /// + /// (Only applies to the database category) The type of database. One of ["db2" "filemaker" "msaccess" "mssql" "mysql" "oracle" "postgresql" "sqlite" "other"] + /// + [Input("type")] + public Input? Type { get; set; } + + [Input("value")] + public Input? Value { get; set; } + + public ItemSectionFieldGetArgs() + { + } + } +} diff --git a/sdk/dotnet/Inputs/ItemSectionFieldPasswordRecipeArgs.cs b/sdk/dotnet/Inputs/ItemSectionFieldPasswordRecipeArgs.cs new file mode 100644 index 0000000..0e67e18 --- /dev/null +++ b/sdk/dotnet/Inputs/ItemSectionFieldPasswordRecipeArgs.cs @@ -0,0 +1,43 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Onepassword.Inputs +{ + + public sealed class ItemSectionFieldPasswordRecipeArgs : Pulumi.ResourceArgs + { + /// + /// Use digits [0-9] when generating the password. + /// + [Input("digits")] + public Input? Digits { get; set; } + + /// + /// The length of the password to be generated. + /// + [Input("length")] + public Input? Length { get; set; } + + /// + /// Use letters [a-zA-Z] when generating the password. + /// + [Input("letters")] + public Input? Letters { get; set; } + + /// + /// Use symbols [!@.-_*] when generating the password. + /// + [Input("symbols")] + public Input? Symbols { get; set; } + + public ItemSectionFieldPasswordRecipeArgs() + { + } + } +} diff --git a/sdk/dotnet/Inputs/ItemSectionFieldPasswordRecipeGetArgs.cs b/sdk/dotnet/Inputs/ItemSectionFieldPasswordRecipeGetArgs.cs new file mode 100644 index 0000000..f36cc62 --- /dev/null +++ b/sdk/dotnet/Inputs/ItemSectionFieldPasswordRecipeGetArgs.cs @@ -0,0 +1,43 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Onepassword.Inputs +{ + + public sealed class ItemSectionFieldPasswordRecipeGetArgs : Pulumi.ResourceArgs + { + /// + /// Use digits [0-9] when generating the password. + /// + [Input("digits")] + public Input? Digits { get; set; } + + /// + /// The length of the password to be generated. + /// + [Input("length")] + public Input? Length { get; set; } + + /// + /// Use letters [a-zA-Z] when generating the password. + /// + [Input("letters")] + public Input? Letters { get; set; } + + /// + /// Use symbols [!@.-_*] when generating the password. + /// + [Input("symbols")] + public Input? Symbols { get; set; } + + public ItemSectionFieldPasswordRecipeGetArgs() + { + } + } +} diff --git a/sdk/dotnet/Inputs/ItemSectionGetArgs.cs b/sdk/dotnet/Inputs/ItemSectionGetArgs.cs new file mode 100644 index 0000000..e632d72 --- /dev/null +++ b/sdk/dotnet/Inputs/ItemSectionGetArgs.cs @@ -0,0 +1,43 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Onepassword.Inputs +{ + + public sealed class ItemSectionGetArgs : Pulumi.ResourceArgs + { + [Input("fields")] + private InputList? _fields; + + /// + /// A list of custom fields in the section. + /// + public InputList Fields + { + get => _fields ?? (_fields = new InputList()); + set => _fields = value; + } + + /// + /// A unique identifier for the section. + /// + [Input("id")] + public Input? Id { get; set; } + + /// + /// The label for the section. + /// + [Input("label", required: true)] + public Input Label { get; set; } = null!; + + public ItemSectionGetArgs() + { + } + } +} diff --git a/sdk/dotnet/Item.cs b/sdk/dotnet/Item.cs new file mode 100644 index 0000000..fc53164 --- /dev/null +++ b/sdk/dotnet/Item.cs @@ -0,0 +1,506 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Onepassword +{ + /// + /// A 1Password item. + /// + /// ## Example Usage + /// + /// ```csharp + /// using Pulumi; + /// using Onepassword = Pulumi.Onepassword; + /// + /// class MyStack : Stack + /// { + /// public MyStack() + /// { + /// var demoPassword = new Onepassword.Item("demoPassword", new Onepassword.ItemArgs + /// { + /// Vault = @var.Demo_vault, + /// Title = "Demo Password Recipe", + /// Category = "password", + /// PasswordRecipe = new Onepassword.Inputs.ItemPasswordRecipeArgs + /// { + /// Length = 40, + /// Symbols = false, + /// }, + /// }); + /// var demoLogin = new Onepassword.Item("demoLogin", new Onepassword.ItemArgs + /// { + /// Vault = @var.Demo_vault, + /// Title = "Demo Terraform Login", + /// Category = "login", + /// Username = "test@example.com", + /// }); + /// var demoDb = new Onepassword.Item("demoDb", new Onepassword.ItemArgs + /// { + /// Vault = @var.Demo_vault, + /// Category = "database", + /// Type = "mysql", + /// Title = "Demo TF Database", + /// Username = "root", + /// Database = "Example MySQL Instance", + /// Hostname = "localhost", + /// Port = "3306", + /// }); + /// } + /// + /// } + /// ``` + /// + /// ## Import + /// + /// # import an existing 1Password item + /// + /// ```sh + /// $ pulumi import onepassword:index/item:Item myitem vaults/<vault uuid>/items/<item uuid> + /// ``` + /// + [OnepasswordResourceType("onepassword:index/item:Item")] + public partial class Item : Pulumi.CustomResource + { + /// + /// The category of the item. One of ["login" "password" "database"] + /// + [Output("category")] + public Output Category { get; private set; } = null!; + + /// + /// (Only applies to the database category) The name of the database. + /// + [Output("database")] + public Output Database { get; private set; } = null!; + + /// + /// (Only applies to the database category) The address where the database can be found + /// + [Output("hostname")] + public Output Hostname { get; private set; } = null!; + + /// + /// Password for this item. + /// + [Output("password")] + public Output Password { get; private set; } = null!; + + /// + /// Password for this item. + /// + [Output("passwordRecipe")] + public Output PasswordRecipe { get; private set; } = null!; + + /// + /// (Only applies to the database category) The port the database is listening on. + /// + [Output("port")] + public Output Port { get; private set; } = null!; + + /// + /// A list of custom sections in an item + /// + [Output("sections")] + public Output> Sections { get; private set; } = null!; + + /// + /// An array of strings of the tags assigned to the item. + /// + [Output("tags")] + public Output> Tags { get; private set; } = null!; + + /// + /// The title of the item. + /// + [Output("title")] + public Output Title { get; private set; } = null!; + + /// + /// (Only applies to the database category) The type of database. One of ["db2" "filemaker" "msaccess" "mssql" "mysql" "oracle" "postgresql" "sqlite" "other"] + /// + [Output("type")] + public Output Type { get; private set; } = null!; + + /// + /// The primary URL for the item. + /// + [Output("url")] + public Output Url { get; private set; } = null!; + + /// + /// Username for this item. + /// + [Output("username")] + public Output Username { get; private set; } = null!; + + /// + /// The UUID of the item. Item identifiers are unique within a specific vault. + /// + [Output("uuid")] + public Output Uuid { get; private set; } = null!; + + /// + /// The UUID of the vault the item is in. + /// + [Output("vault")] + public Output Vault { get; private set; } = null!; + + + /// + /// Create a Item resource with the given unique name, arguments, and options. + /// + /// + /// The unique name of the resource + /// The arguments used to populate this resource's properties + /// A bag of options that control this resource's behavior + public Item(string name, ItemArgs args, CustomResourceOptions? options = null) + : base("onepassword:index/item:Item", name, args ?? new ItemArgs(), MakeResourceOptions(options, "")) + { + } + + private Item(string name, Input id, ItemState? state = null, CustomResourceOptions? options = null) + : base("onepassword:index/item:Item", name, state, MakeResourceOptions(options, id)) + { + } + + private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input? id) + { + var defaultOptions = new CustomResourceOptions + { + Version = Utilities.Version, + PluginDownloadURL = "https://github.com/SimCubeLtd/pulumi-onepassword/releases/download/v${VERSION}", + AdditionalSecretOutputs = + { + "hostname", + "password", + "port", + "username", + "vault", + }, + }; + var merged = CustomResourceOptions.Merge(defaultOptions, options); + // Override the ID if one was specified for consistency with other language SDKs. + merged.Id = id ?? merged.Id; + return merged; + } + /// + /// Get an existing Item resource's state with the given name, ID, and optional extra + /// properties used to qualify the lookup. + /// + /// + /// The unique name of the resulting resource. + /// The unique provider ID of the resource to lookup. + /// Any extra arguments used during the lookup. + /// A bag of options that control this resource's behavior + public static Item Get(string name, Input id, ItemState? state = null, CustomResourceOptions? options = null) + { + return new Item(name, id, state, options); + } + } + + public sealed class ItemArgs : Pulumi.ResourceArgs + { + /// + /// The category of the item. One of ["login" "password" "database"] + /// + [Input("category")] + public Input? Category { get; set; } + + /// + /// (Only applies to the database category) The name of the database. + /// + [Input("database")] + public Input? Database { get; set; } + + [Input("hostname")] + private Input? _hostname; + + /// + /// (Only applies to the database category) The address where the database can be found + /// + public Input? Hostname + { + get => _hostname; + set + { + var emptySecret = Output.CreateSecret(0); + _hostname = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } + + [Input("password")] + private Input? _password; + + /// + /// Password for this item. + /// + public Input? Password + { + get => _password; + set + { + var emptySecret = Output.CreateSecret(0); + _password = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } + + /// + /// Password for this item. + /// + [Input("passwordRecipe")] + public Input? PasswordRecipe { get; set; } + + [Input("port")] + private Input? _port; + + /// + /// (Only applies to the database category) The port the database is listening on. + /// + public Input? Port + { + get => _port; + set + { + var emptySecret = Output.CreateSecret(0); + _port = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } + + [Input("sections")] + private InputList? _sections; + + /// + /// A list of custom sections in an item + /// + public InputList Sections + { + get => _sections ?? (_sections = new InputList()); + set => _sections = value; + } + + [Input("tags")] + private InputList? _tags; + + /// + /// An array of strings of the tags assigned to the item. + /// + public InputList Tags + { + get => _tags ?? (_tags = new InputList()); + set => _tags = value; + } + + /// + /// The title of the item. + /// + [Input("title")] + public Input? Title { get; set; } + + /// + /// (Only applies to the database category) The type of database. One of ["db2" "filemaker" "msaccess" "mssql" "mysql" "oracle" "postgresql" "sqlite" "other"] + /// + [Input("type")] + public Input? Type { get; set; } + + /// + /// The primary URL for the item. + /// + [Input("url")] + public Input? Url { get; set; } + + [Input("username")] + private Input? _username; + + /// + /// Username for this item. + /// + public Input? Username + { + get => _username; + set + { + var emptySecret = Output.CreateSecret(0); + _username = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } + + [Input("vault", required: true)] + private Input? _vault; + + /// + /// The UUID of the vault the item is in. + /// + public Input? Vault + { + get => _vault; + set + { + var emptySecret = Output.CreateSecret(0); + _vault = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } + + public ItemArgs() + { + } + } + + public sealed class ItemState : Pulumi.ResourceArgs + { + /// + /// The category of the item. One of ["login" "password" "database"] + /// + [Input("category")] + public Input? Category { get; set; } + + /// + /// (Only applies to the database category) The name of the database. + /// + [Input("database")] + public Input? Database { get; set; } + + [Input("hostname")] + private Input? _hostname; + + /// + /// (Only applies to the database category) The address where the database can be found + /// + public Input? Hostname + { + get => _hostname; + set + { + var emptySecret = Output.CreateSecret(0); + _hostname = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } + + [Input("password")] + private Input? _password; + + /// + /// Password for this item. + /// + public Input? Password + { + get => _password; + set + { + var emptySecret = Output.CreateSecret(0); + _password = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } + + /// + /// Password for this item. + /// + [Input("passwordRecipe")] + public Input? PasswordRecipe { get; set; } + + [Input("port")] + private Input? _port; + + /// + /// (Only applies to the database category) The port the database is listening on. + /// + public Input? Port + { + get => _port; + set + { + var emptySecret = Output.CreateSecret(0); + _port = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } + + [Input("sections")] + private InputList? _sections; + + /// + /// A list of custom sections in an item + /// + public InputList Sections + { + get => _sections ?? (_sections = new InputList()); + set => _sections = value; + } + + [Input("tags")] + private InputList? _tags; + + /// + /// An array of strings of the tags assigned to the item. + /// + public InputList Tags + { + get => _tags ?? (_tags = new InputList()); + set => _tags = value; + } + + /// + /// The title of the item. + /// + [Input("title")] + public Input? Title { get; set; } + + /// + /// (Only applies to the database category) The type of database. One of ["db2" "filemaker" "msaccess" "mssql" "mysql" "oracle" "postgresql" "sqlite" "other"] + /// + [Input("type")] + public Input? Type { get; set; } + + /// + /// The primary URL for the item. + /// + [Input("url")] + public Input? Url { get; set; } + + [Input("username")] + private Input? _username; + + /// + /// Username for this item. + /// + public Input? Username + { + get => _username; + set + { + var emptySecret = Output.CreateSecret(0); + _username = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } + + /// + /// The UUID of the item. Item identifiers are unique within a specific vault. + /// + [Input("uuid")] + public Input? Uuid { get; set; } + + [Input("vault")] + private Input? _vault; + + /// + /// The UUID of the vault the item is in. + /// + public Input? Vault + { + get => _vault; + set + { + var emptySecret = Output.CreateSecret(0); + _vault = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } + + public ItemState() + { + } + } +} diff --git a/sdk/dotnet/Outputs/GetItemSectionFieldResult.cs b/sdk/dotnet/Outputs/GetItemSectionFieldResult.cs new file mode 100644 index 0000000..f4903cc --- /dev/null +++ b/sdk/dotnet/Outputs/GetItemSectionFieldResult.cs @@ -0,0 +1,44 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Onepassword.Outputs +{ + + [OutputType] + public sealed class GetItemSectionFieldResult + { + public readonly string Id; + public readonly string Label; + public readonly string Purpose; + /// + /// (Only applies to the database category) The type of database. One of ["db2" "filemaker" "msaccess" "mssql" "mysql" "oracle" "postgresql" "sqlite" "other"] + /// + public readonly string Type; + public readonly string Value; + + [OutputConstructor] + private GetItemSectionFieldResult( + string id, + + string label, + + string purpose, + + string type, + + string value) + { + Id = id; + Label = label; + Purpose = purpose; + Type = type; + Value = value; + } + } +} diff --git a/sdk/dotnet/Outputs/GetItemSectionResult.cs b/sdk/dotnet/Outputs/GetItemSectionResult.cs new file mode 100644 index 0000000..15b9b23 --- /dev/null +++ b/sdk/dotnet/Outputs/GetItemSectionResult.cs @@ -0,0 +1,33 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Onepassword.Outputs +{ + + [OutputType] + public sealed class GetItemSectionResult + { + public readonly ImmutableArray Fields; + public readonly string Id; + public readonly string Label; + + [OutputConstructor] + private GetItemSectionResult( + ImmutableArray fields, + + string id, + + string label) + { + Fields = fields; + Id = id; + Label = label; + } + } +} diff --git a/sdk/dotnet/Outputs/ItemPasswordRecipe.cs b/sdk/dotnet/Outputs/ItemPasswordRecipe.cs new file mode 100644 index 0000000..ab22856 --- /dev/null +++ b/sdk/dotnet/Outputs/ItemPasswordRecipe.cs @@ -0,0 +1,49 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Onepassword.Outputs +{ + + [OutputType] + public sealed class ItemPasswordRecipe + { + /// + /// Use digits [0-9] when generating the password. + /// + public readonly bool? Digits; + /// + /// The length of the password to be generated. + /// + public readonly int? Length; + /// + /// Use letters [a-zA-Z] when generating the password. + /// + public readonly bool? Letters; + /// + /// Use symbols [!@.-_*] when generating the password. + /// + public readonly bool? Symbols; + + [OutputConstructor] + private ItemPasswordRecipe( + bool? digits, + + int? length, + + bool? letters, + + bool? symbols) + { + Digits = digits; + Length = length; + Letters = letters; + Symbols = symbols; + } + } +} diff --git a/sdk/dotnet/Outputs/ItemSection.cs b/sdk/dotnet/Outputs/ItemSection.cs new file mode 100644 index 0000000..3250728 --- /dev/null +++ b/sdk/dotnet/Outputs/ItemSection.cs @@ -0,0 +1,42 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Onepassword.Outputs +{ + + [OutputType] + public sealed class ItemSection + { + /// + /// A list of custom fields in the section. + /// + public readonly ImmutableArray Fields; + /// + /// A unique identifier for the section. + /// + public readonly string? Id; + /// + /// The label for the section. + /// + public readonly string Label; + + [OutputConstructor] + private ItemSection( + ImmutableArray fields, + + string? id, + + string label) + { + Fields = fields; + Id = id; + Label = label; + } + } +} diff --git a/sdk/dotnet/Outputs/ItemSectionField.cs b/sdk/dotnet/Outputs/ItemSectionField.cs new file mode 100644 index 0000000..80d219d --- /dev/null +++ b/sdk/dotnet/Outputs/ItemSectionField.cs @@ -0,0 +1,51 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Onepassword.Outputs +{ + + [OutputType] + public sealed class ItemSectionField + { + public readonly string? Id; + public readonly string Label; + /// + /// Password for this item. + /// + public readonly Outputs.ItemSectionFieldPasswordRecipe? PasswordRecipe; + public readonly string? Purpose; + /// + /// (Only applies to the database category) The type of database. One of ["db2" "filemaker" "msaccess" "mssql" "mysql" "oracle" "postgresql" "sqlite" "other"] + /// + public readonly string? Type; + public readonly string? Value; + + [OutputConstructor] + private ItemSectionField( + string? id, + + string label, + + Outputs.ItemSectionFieldPasswordRecipe? passwordRecipe, + + string? purpose, + + string? type, + + string? value) + { + Id = id; + Label = label; + PasswordRecipe = passwordRecipe; + Purpose = purpose; + Type = type; + Value = value; + } + } +} diff --git a/sdk/dotnet/Outputs/ItemSectionFieldPasswordRecipe.cs b/sdk/dotnet/Outputs/ItemSectionFieldPasswordRecipe.cs new file mode 100644 index 0000000..87224a5 --- /dev/null +++ b/sdk/dotnet/Outputs/ItemSectionFieldPasswordRecipe.cs @@ -0,0 +1,49 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Onepassword.Outputs +{ + + [OutputType] + public sealed class ItemSectionFieldPasswordRecipe + { + /// + /// Use digits [0-9] when generating the password. + /// + public readonly bool? Digits; + /// + /// The length of the password to be generated. + /// + public readonly int? Length; + /// + /// Use letters [a-zA-Z] when generating the password. + /// + public readonly bool? Letters; + /// + /// Use symbols [!@.-_*] when generating the password. + /// + public readonly bool? Symbols; + + [OutputConstructor] + private ItemSectionFieldPasswordRecipe( + bool? digits, + + int? length, + + bool? letters, + + bool? symbols) + { + Digits = digits; + Length = length; + Letters = letters; + Symbols = symbols; + } + } +} diff --git a/sdk/dotnet/Provider.cs b/sdk/dotnet/Provider.cs new file mode 100644 index 0000000..f4fca55 --- /dev/null +++ b/sdk/dotnet/Provider.cs @@ -0,0 +1,80 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Onepassword +{ + /// + /// The provider type for the onepassword package. By default, resources use package-wide configuration + /// settings, however an explicit `Provider` instance may be created and passed during resource + /// construction to achieve fine-grained programmatic control over provider settings. See the + /// [documentation](https://www.pulumi.com/docs/reference/programming-model/#providers) for more information. + /// + [OnepasswordResourceType("pulumi:providers:onepassword")] + public partial class Provider : Pulumi.ProviderResource + { + /// + /// A valid token for your 1Password Connect API. Can also be sourced from OP_CONNECT_TOKEN. + /// + [Output("token")] + public Output Token { get; private set; } = null!; + + /// + /// The HTTP(S) URL where your 1Password Connect API can be found. Must be provided through the the OP_CONNECT_HOST + /// environment variable if this attribute is not set. + /// + [Output("url")] + public Output Url { get; private set; } = null!; + + + /// + /// Create a Provider resource with the given unique name, arguments, and options. + /// + /// + /// The unique name of the resource + /// The arguments used to populate this resource's properties + /// A bag of options that control this resource's behavior + public Provider(string name, ProviderArgs args, CustomResourceOptions? options = null) + : base("onepassword", name, args ?? new ProviderArgs(), MakeResourceOptions(options, "")) + { + } + + private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input? id) + { + var defaultOptions = new CustomResourceOptions + { + Version = Utilities.Version, + PluginDownloadURL = "https://github.com/SimCubeLtd/pulumi-onepassword/releases/download/v${VERSION}", + }; + var merged = CustomResourceOptions.Merge(defaultOptions, options); + // Override the ID if one was specified for consistency with other language SDKs. + merged.Id = id ?? merged.Id; + return merged; + } + } + + public sealed class ProviderArgs : Pulumi.ResourceArgs + { + /// + /// A valid token for your 1Password Connect API. Can also be sourced from OP_CONNECT_TOKEN. + /// + [Input("token", required: true)] + public Input Token { get; set; } = null!; + + /// + /// The HTTP(S) URL where your 1Password Connect API can be found. Must be provided through the the OP_CONNECT_HOST + /// environment variable if this attribute is not set. + /// + [Input("url")] + public Input? Url { get; set; } + + public ProviderArgs() + { + } + } +} diff --git a/sdk/dotnet/Pulumi.Onepassword.csproj b/sdk/dotnet/Pulumi.Onepassword.csproj new file mode 100644 index 0000000..bfc3509 --- /dev/null +++ b/sdk/dotnet/Pulumi.Onepassword.csproj @@ -0,0 +1,61 @@ + + + + true + SimCubeLtd + SimCubeLtd + A Pulumi package for creating and managing onepassword resources. + Apache-2.0 + https://github.com/SimCubeLtd/pulumi-onepassword + https://github.com/SimCubeLtd/pulumi-onepassword + logo.png + + netcoreapp3.1 + enable + false + + + + true + 1701;1702;1591 + + + + $(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb + true + true + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + True + + + + + diff --git a/sdk/dotnet/Pulumi.yaml b/sdk/dotnet/Pulumi.yaml new file mode 100644 index 0000000..e69de29 diff --git a/sdk/dotnet/README.md b/sdk/dotnet/README.md new file mode 100644 index 0000000..c671f0f --- /dev/null +++ b/sdk/dotnet/README.md @@ -0,0 +1 @@ +A Pulumi package for creating and managing onepassword resources. diff --git a/sdk/dotnet/Utilities.cs b/sdk/dotnet/Utilities.cs new file mode 100644 index 0000000..e11cc6e --- /dev/null +++ b/sdk/dotnet/Utilities.cs @@ -0,0 +1,84 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +namespace Pulumi.Onepassword +{ + static class Utilities + { + public static string? GetEnv(params string[] names) + { + foreach (var n in names) + { + var value = global::System.Environment.GetEnvironmentVariable(n); + if (value != null) + { + return value; + } + } + return null; + } + + static string[] trueValues = { "1", "t", "T", "true", "TRUE", "True" }; + static string[] falseValues = { "0", "f", "F", "false", "FALSE", "False" }; + public static bool? GetEnvBoolean(params string[] names) + { + var s = GetEnv(names); + if (s != null) + { + if (global::System.Array.IndexOf(trueValues, s) != -1) + { + return true; + } + if (global::System.Array.IndexOf(falseValues, s) != -1) + { + return false; + } + } + return null; + } + + public static int? GetEnvInt32(params string[] names) => int.TryParse(GetEnv(names), out int v) ? (int?)v : null; + + public static double? GetEnvDouble(params string[] names) => double.TryParse(GetEnv(names), out double v) ? (double?)v : null; + + [global::System.Obsolete("Please use WithDefaults instead")] + public static global::Pulumi.InvokeOptions WithVersion(this global::Pulumi.InvokeOptions? options) + { + var dst = options ?? new global::Pulumi.InvokeOptions{}; + dst.Version = options?.Version ?? Version; + return dst; + } + + public static global::Pulumi.InvokeOptions WithDefaults(this global::Pulumi.InvokeOptions? src) + { + var dst = src ?? new global::Pulumi.InvokeOptions{}; + dst.Version = src?.Version ?? Version; + dst.PluginDownloadURL = src?.PluginDownloadURL ?? "https://github.com/SimCubeLtd/pulumi-onepassword/releases/download/v${VERSION}"; + return dst; + } + + private readonly static string version; + public static string Version => version; + + static Utilities() + { + var assembly = global::System.Reflection.IntrospectionExtensions.GetTypeInfo(typeof(Utilities)).Assembly; + using var stream = assembly.GetManifestResourceStream("Pulumi.Onepassword.version.txt"); + using var reader = new global::System.IO.StreamReader(stream ?? throw new global::System.NotSupportedException("Missing embedded version.txt file")); + version = reader.ReadToEnd().Trim(); + var parts = version.Split("\n"); + if (parts.Length == 2) + { + // The first part is the provider name. + version = parts[1].Trim(); + } + } + } + + internal sealed class OnepasswordResourceTypeAttribute : Pulumi.ResourceTypeAttribute + { + public OnepasswordResourceTypeAttribute(string type) : base(type, Utilities.Version) + { + } + } +} diff --git a/sdk/dotnet/logo.png b/sdk/dotnet/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..181f421e9156e1acb8f0c478a0f184a64b31bc6c GIT binary patch literal 7934 zcmVNNV?z!iDFG5ai9xnY=*#%Wqnkq`+%lx0p1W+WvA_5inJiGyb4gT-zu7M>N8eN1u_D^NM8}?H}fd`G`VY2&@eaUd zw+S~V;JFvC)J>(Q0J;cXW#^?b$i?e{pu4IqQ4`#PoLsy<)J?qu{7i=wfxb#wR3SnGia$0EEB;~&mjT>cCU3q!c>z_@SV09x0x_3E{MCj$N78UtD_r5< zb=lPO+$GeicumM$p62Hnr4h-$r@)mMwX8wk%2Mu~x_C``BFK%`nr?AKo3|B30#OU) zUH`cuf7o~qv{aTa#Z4HT;NO4Lz#wUZujOsf*VAr@Pffhve|~t(QTVn!PXy!}?#}k= z1Of*E`BE(a%~pJy`o=D*3r}@k*ra13j14XgUAFH#o1G>Xl-DkQ$5tI9F3L zM-f&P!PJ41U*80aSQD@Kd_97pnG6_tG^uyHna8FdZ72E7I0qSk*Bx^Q;lTx4)6G`I zn?)lJL89;h*f`y7qvSzeTjIR-5`P_oY+=n`!uSqb(+?qQ!WH;AjXr|GZkZb1VH1Xs zuTLR+!WB4$QD5v@xEjN_cqQUOhG(wiO|`M~S|&br!?3yZ8uBN`r4;kqFpTi){wWy7 zsCXYO9iGWz#N7**=qA7Oyc@F3gQZu&1wERfb;C2^*Zt^&&kxtZAV$Tjv-z>MF9mRB zAmb>RdIuPXF2PYSE(>)qgfa0x__tR_p{qu;scIuni;G_pqjGmld-%u^2M_e%C>X++ zcoDnjCO2`lszOH5F3Oep6l@RtNkK=z5XQty*mXu8QaUR`R*_{IqA?+u0u>H}AqtSQ zgPha@83p~4{5{_+Jx4H?HjwJN&VN@?W}h=ESFWzRr&`1RfFaC@x65v{xX@&|X=hW6 zsbFBG%iMjaPi+~S1TiLFzo|Mab71Y!K$)IgDAiVAKtEnXO_!l-z~%nhe;W&8hIiPy z!3#kkIhk@EGR~&z=d15>_NJTng_CpFsKP> zA8D5d;Nj73HuB*6DPP39tfnaoi%nYMJ-}nOge#;n!D5sO@NH=d2SZ3+3!1Lm@I*+P@0SkCmkJV1BH}52aSf(u=?8*L z_%<{>5D?TU{z$JR5RrFGJO&IKl1R(n0~joWh(?3wiQw$BpYLkA=Pj^!7mpWP>!yuT zr1uvjC=iS$VUi+2z>(oqe*Opa!|PcXoyw$Rj+l>#Lk?)H6coIyy;eYPz_0jpG?Dr& zu4_$yQ3Y6aHT-1|9xj^}>joUGvQVqRky2%diTFy8cuN4?H2J)rcsUGI_&FcZ+c2UO zzRZE5_^f*>JB}h$xu*(fC5xrR+^Z}kGO{n82r?OBuwt^91v8IsAs25Od~+0#DT^}L zBULkxZXp-%GiXNIlm{KHjgfaFk;S_@KtkGpM5Ey<^#(`cuGq=iTzYLT%VXu;BH(7E z1yVC1M7taQK-XuKg883+*`?Bg=p~JiV_Q}YN!W?dC>jwX*l3H-vAHuPYoqVJAy9rZ=0!WCF6yd&5?`i4mxPC;^%vnXKfvXOFB@Ds=g zPYE}^T^8cH6+{sJQaNZXVOxYO){|+ z>I-;sGWEvv0od$1bCfJ#R=6I;cHg&k)s-F>k6qz{Y~&hlWJq@sc`YFIt1EB#_>wM$7I5Zv$`A?d+Umr`rck#s?}e8F0KsJ_?g|F#sb zs|yXV1OiT^Sw55LX2__&L=*8tNGs|}b-~r!BR10o+J=_FvrV2nOX2|NwU4Hv^aFqC*Db#Sy--?NsBsy=rV z{9(_`69{n`dW?QQsjS*Qe<)1KAcWc;mefI_FIWVVZGz8VwjXc2z?Hl z*6yOC9D6HHOzyPDwMnmbTn_$qy<4W4!}8JJdcC#f!nXfA62kiX|1s6^?-)efD%gWu zmo9{Ta3tRbUbrpUT)4T9)kxgDH!w$;ki)z8IoWcZi!sXz@kTd#OVs^F@Zt-OYTCnA z=!Yp?gFjg3H{9*(^_8i}`SpkX&p68Y?j5iOU3>rbWavX!B6XFyu4A=%g*Pm!5CfS2 zk&%08x5WLMNQzQVW??VNWVD#6Ko=mQ<*PWT3Nu5FS``Br@^jMt)*@y8yqq6o@o}xT z3=t_f-c<&BM2fmXB=MGhTNg`CYv+Jbj0K{k2u?vSLHN$6a#O@<_Z7E7j68-4P-8KE z1*q#0?v0GDl5m#x86ijwO#iQLbtm8t`PoiYzb7cWO#5pJBSNZC<(DT@XvyNo>I z&Wn|TS+mffe^j@X>Jo3KHKImcA+mU-^5ANH8Z3aMUXJqkBs?Z0)sWmi3)9WAHOtos zDY`@0v767xuaC{u!#iFHR=knCMimv{OSgQ&fY=?F`1~zi_)~m^OH96 z5KyVi_&o%8>B8CD6TgQT#2y3EsxV20+a(G0U&1~%7}GC9a-`-jVQj3N-vk#cbD`b{ z=;sYa(?gEzs~axGHV%v}UP&J~|E+<^{FlOiZ{@_ROtitezl3Q&1Pa+?gI>AVU~nQ> z(^|hCr;OL6qXA47aKqK^8(;`cPWVE5f}0w9u<9@26cl=9b!O(okoi%V2Ws@L2AF~P zQ}uM5Ja;!8PY;(q`Ec1KGP8gytcMma5=C0vMS^qS`xEEqz%Wu(K#iA@%5nEY1C_!& zuHW@86N3l@N}oP^d#dAhgG5H(OIJQvOkBXc16G=!&ratR;pE!8zZ?Zah>JLZJC;CI zp(O}EJR@#DrdFn4+fj0))iNZ9CtTjTPGqs4m~Vq8V67#ENJelNt}V_cj#5VaCH%=; z7~yh&)xOzwXinVtN@i1vb6l=ay^)k~g+xt9q=e=wb+pqegxD_~%4W|&k@MeckTAPu z#LAE%Sl-0m$<6%EeEz^Nu&z9N!&3<7IE4aaIAN%2wxo3Av%_J{ctqNZDdIo zko1_X88HI77v=HWt|q?TL4S%l@{g0q{ZQ-Uoi5Jy!-(CJl+lJ4E=+P19+BKN?BDZ* zyB*K^pAbXWggZqkoyg*C=J3BXduHvW3l!~BkwphiAFPtnC#5bM@~`njX~{)>@)x(K zraCEywZf=ZnMC13S3aomM@Ef>xfpm5(B4b_J72RBv8DM3;y}g*BY%LHJ15bJHZ<^9 zV$&GdOBZ6*ZaGf{cMDdyE_*WAS>65m!OlOEyuNfzM0@u3JA;;mizxLSQIa>43D*Q zqG`npFD|8F=Rg4}4yhwVy6C+j9JrfA1AG*$i`Nv=eC}v1A8Xcj!&tmE7Vk2|AUI&} zG^Y$#!5(Yx-=260dW1|^oF;)6xh)%{IH+g%O#@M>SL^(zjFhW!un2#y_tf}P&xlvB zJtXRnL{a43uz~eqj@p`2C#wgegdQpH7J5p&DY*Oah7m>HbyEt^QDAf@Z9l?}ly?g~ zCEg%)SO$woeRl1q_0W&6AFlI~UxDqB@~|#6-9%4`S8$1}&DaH$SsLZA5AN$9mcoD1 zy~pk7xs*W&?c1;$Z;|4<-jV}JAtCR9EAqY_M?Xjt*`mHbJ}qT8i|#%;w7XBAA1-X> zy55Y~**o#36_P?0sRuTP!Fl|oIP4*C!mkf)JyyUwWsnB4HO=?L+8`x@3O!{@=tz0;C;0SBXcBKm3{s#jKejRqgUSK; zj&;+=i&WplWOw_jR6y=tJigFyU6-PWIJ9`ZXiHu%=rjv>Y-f`J$txB+T0)BVf;7Oh z#;04~jZd$>xDa_Lv}1UuZk}ttQiclEyV@zFD71Kyyn9r(Rbfvn>Ms1v0&H#}Y-pEX z1DxPD>j`H|RlTv~J&$!9@5>@z7e1=Yt%enFs9WgQGHJxo6lF9;EIhBvwy*nGk?knF z_TKqP2hn%~dGp7)c<-gs<<{x8M54jtCAsGs>>zKIvA6?{agYV+Am{by@ZD$8@^!9~pF$dADST| zFO_*g(s2h>5QQ(@f6tzPx$>|~UE=YZFf!mcYpbsNo8!NM?MDR}IG&3UZTEphZ*9fj zR=m7}l-y1bp?t5aHU-R!w^_cKVf#=!z*_a7End3tyMR_m|M(`)VpYu7{a)mJ(3GQBs95C3LP^>M0xP zf(Um@NveP|Neefi+-~94M!c@MoghDjm|A<+&R&8y97<$n0T-baGcd4gK=MeQJC*d1 z<9yT~UgIveuJ>81&L$p=vPyN=B7tyGA1xL|U{;;#M6DABVT&M>EPAY{U z{kRZXG_C^T>jor8Q@Bw?XA9ynQHKn8Otcm+ku@&_u$Vpwl0vvj9qX`+ zM(&pLPQk?Q)w=_s;9eMlB znn&-Utn{Hto6)z4mqsWhB3^{2{RsBM^O@j3PY+-DAoc?37k8%Qhs=wBLzsC4&xx+N zu6{+*1XD&H&mskn33#v#Evq)mpk>DXcCx7mz4uENOo22A1(RNI~eLt_vg!wtC z4T=(d0n%xn79^Db-)GH>synv+1K!D*iHj%bU2X7n+Bfu|;(-A_Se*MqHfGNJs0(A9 zgqFb)VaD{^Mqb_pn?!qkvBJ8mu@u*dCMQ{>!Y~Azwxce`OkF>Fr*##jZK+I?b)yQ2 zI#tNY1X5uj@MiSNU=LENy(@cL@k(1E*s>1|@SSMvFWhpT#+yO&#%wJfm=6B-`Oia` z^o81_;Dw5{TB3))P_kM!%lRS0l_K=JVx-55SBoHq^WF$0UafVK+nJ$o+!t*v5_6ux zmLk5u_Ul04(n6RAh7zxrI#_n1;ir~tA8}4(2*s1b^6Nmb64rt>^ys@wH0$iCdm064 zl*?47JDEC`X8MBGvK7WJ0tVlfqzeqR0xHe_3c3~F6QKx$V)i0l5cFhUMI5BPT@6=L z95avR_YcerY>Jm(sqkZ4k)|2$jZd$l#Z{;K7)MIKn{7Z0?oZ61%XxEwXoAIigo5Hf zi?<;yj4a+;j#fA1MR&IxO3NT6D$+f5QR5=WmFt{qj`~?eIm6)%2{hRb6?t~5r~LHT>kO}KhH3= zwxWzA?TqG+PvhD@+H1`Wi%c#YsL0uWDDE>e1xMZC7j8VvlrH)A;WkFB-W0TVnVY29 zLmZEZ$o;&M`+_YZHp2%l<(D8vZXS&0|C!(YBerJi!q7DGZ~%@DI(SE>7bt2O5#i`i z!I}B^$Kf|hwSR>=Ei(ZK9sLgwk;vk;>4m_ntd}GG1+f~Xjz;xII12xnzfRhA_}LH1 zJDWxxoC4f|4%QnSfhC2ghJ8GG$(EH`yL8Jf#yN~7)+B{JFNE;ya`x#I40<_c(iCuW zI#)gs#K;3W2Q{ggnM$~C6%2|R7q9H5ZMg9UV`GWe^Fr9hH^H#e2B90_w8mtdeRjT^ z-`SRmfS-(&Cp(?X-|$4(Xo`O5HQg3KsP&t1TRmgXu$6v0yJBpVdEukfjs`G;QF3GXFRxNUyF8LoRWLwPz-#Z;!8Fo-xTTaa z;ewldHX}ZChdtNREJ&Gl`)?5*d9TUij7Nqy;P^H>LU6C?6>%7Z>O# z`jlVzG8jVq5I7u-m>zKC4VqBpFYmx?M>QbX=qsD^%V%#-orVNR%(uZ8aB?YxwtuQm zJ4#NUzGk8ZEVbN%;~9`9kF-KW-QJ*y7>SM(2Np|7H6E{dB zqC{aS&&(cLxDffHiV!2zggZjgheWCm5_J_<7sNh^?CfSmt{{lN1gm6TA}2(AEv2IH zQ0rsoLX7mp!I)QB;6^jmH1izFA^p+uK!+G$+vS zuPvhIg{Ff3T6Mh>UxfSb{&JMV*k@o1qGgwyTIrKI#KE%)y6ijq1=%Ha9jqOuxw!@AIP6FntffdY3&Ysju!gw#RKA1-KJw7;8{ z*fwuw=sEFn$xSv!EPJaR3hiz1*zv9^*oCx)T)bIFstyETGxtTVnbpESSgg2giYk6$D)!e^y3qNT$i$INYMd3DPGx{wwn7QRwCAWt@$DJYSa~a zQoMpjl;~?K_vHm!`$d~<2?r;mSZTtMK7(G3xKNQlIsP*g6 zkn{Fg9tD`o=>AYo6U)Inb%=;K(eRfufa)5=$2aom@mg*xp1a7q zo3(fUng2wYXuirfVg#Zg{b4r_U7n4VXa3rczSsDVsGh=-CN#9t@0{zg=JKdKH#zTq zls@?oz;Twf!ehH^s=^p+czLdi_zuLR-_^tyR|fC~g#MYZCehZUkw-W2Tu0vBc)76H zIJvs25T|#YH`lyJ6#TKy!krzy@f*e(T{jTz(#N z+h>uBcOQ0yyzN#vrI7YT5t3}V{%0^JmpC8!C-qbvQb#x^E+Q&^ljwD~A8wudL+|gF o<>ch#d-e*gdg07*qoM6N<$f=pRTKL7v# literal 0 HcmV?d00001 diff --git a/sdk/dotnet/pulumi-plugin.json b/sdk/dotnet/pulumi-plugin.json new file mode 100644 index 0000000..5f19768 --- /dev/null +++ b/sdk/dotnet/pulumi-plugin.json @@ -0,0 +1,5 @@ +{ + "resource": true, + "name": "onepassword", + "server": "https://github.com/SimCubeLtd/pulumi-onepassword/releases/download/v${VERSION}" +} diff --git a/sdk/go.mod b/sdk/go.mod index bb6284f..25acca8 100644 --- a/sdk/go.mod +++ b/sdk/go.mod @@ -1,5 +1,5 @@ -module github.com/pulumi/pulumi-xyz/sdk +module github.com/SimCubeLtd/pulumi-onepassword/sdk go 1.17 -require github.com/pulumi/pulumi/sdk/v3 v3.33.1 +require github.com/pulumi/pulumi/sdk/v3 v3.33.1 \ No newline at end of file diff --git a/sdk/go/Pulumi.yaml b/sdk/go/Pulumi.yaml new file mode 100644 index 0000000..e69de29 diff --git a/sdk/go/onepassword/config/config.go b/sdk/go/onepassword/config/config.go new file mode 100644 index 0000000..4df24ed --- /dev/null +++ b/sdk/go/onepassword/config/config.go @@ -0,0 +1,20 @@ +// Code generated by the Pulumi Terraform Bridge (tfgen) Tool DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package config + +import ( + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi/config" +) + +// A valid token for your 1Password Connect API. Can also be sourced from OP_CONNECT_TOKEN. +func GetToken(ctx *pulumi.Context) string { + return config.Get(ctx, "onepassword:token") +} + +// The HTTP(S) URL where your 1Password Connect API can be found. Must be provided through the the OP_CONNECT_HOST +// environment variable if this attribute is not set. +func GetUrl(ctx *pulumi.Context) string { + return config.Get(ctx, "onepassword:url") +} diff --git a/sdk/go/onepassword/doc.go b/sdk/go/onepassword/doc.go new file mode 100644 index 0000000..bafb0d9 --- /dev/null +++ b/sdk/go/onepassword/doc.go @@ -0,0 +1,3 @@ +// A Pulumi package for creating and managing onepassword resources. +// +package onepassword diff --git a/sdk/go/onepassword/getItem.go b/sdk/go/onepassword/getItem.go new file mode 100644 index 0000000..faf68fb --- /dev/null +++ b/sdk/go/onepassword/getItem.go @@ -0,0 +1,203 @@ +// Code generated by the Pulumi Terraform Bridge (tfgen) Tool DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package onepassword + +import ( + "context" + "reflect" + + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// Use this data source to get details of an item by its vault uuid and either the title or the uuid of the item. +// +// ## Example Usage +// +// ```go +// package main +// +// import ( +// "github.com/SimCubeLtd/pulumi-onepassword/sdk/go/onepassword" +// "github.com/pulumi/pulumi-onepassword/sdk/go/onepassword" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := onepassword.GetItem(ctx, &GetItemArgs{ +// Vault: _var.Demo_vault, +// Uuid: pulumi.StringRef(onepassword_item.Demo_sections.Uuid), +// }, nil) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// ``` +func LookupItem(ctx *pulumi.Context, args *LookupItemArgs, opts ...pulumi.InvokeOption) (*LookupItemResult, error) { + opts = pkgInvokeDefaultOpts(opts) + var rv LookupItemResult + err := ctx.Invoke("onepassword:index/getItem:GetItem", args, &rv, opts...) + if err != nil { + return nil, err + } + return &rv, nil +} + +// A collection of arguments for invoking GetItem. +type LookupItemArgs struct { + // The title of the item to retrieve. This field will be populated with the title of the item if the item it looked up by its UUID. + Title *string `pulumi:"title"` + // The UUID of the item to retrieve. This field will be populated with the UUID of the item if the item it looked up by its title. + Uuid *string `pulumi:"uuid"` + // The UUID of the vault the item is in. + Vault string `pulumi:"vault"` +} + +// A collection of values returned by GetItem. +type LookupItemResult struct { + // The category of the item. One of ["login" "password" "database"] + Category string `pulumi:"category"` + // (Only applies to the database category) The name of the database. + Database string `pulumi:"database"` + // (Only applies to the database category) The address where the database can be found + Hostname string `pulumi:"hostname"` + Id string `pulumi:"id"` + // Password for this item. + Password string `pulumi:"password"` + // (Only applies to the database category) The port the database is listening on. + Port string `pulumi:"port"` + // A list of custom sections in an item + Sections []GetItemSection `pulumi:"sections"` + // An array of strings of the tags assigned to the item. + Tags []string `pulumi:"tags"` + // The title of the item to retrieve. This field will be populated with the title of the item if the item it looked up by its UUID. + Title string `pulumi:"title"` + // (Only applies to the database category) The type of database. One of ["db2" "filemaker" "msaccess" "mssql" "mysql" "oracle" "postgresql" "sqlite" "other"] + Type string `pulumi:"type"` + // The primary URL for the item. + Url string `pulumi:"url"` + // Username for this item. + Username string `pulumi:"username"` + // The UUID of the item to retrieve. This field will be populated with the UUID of the item if the item it looked up by its title. + Uuid string `pulumi:"uuid"` + // The UUID of the vault the item is in. + Vault string `pulumi:"vault"` +} + +func LookupItemOutput(ctx *pulumi.Context, args LookupItemOutputArgs, opts ...pulumi.InvokeOption) LookupItemResultOutput { + return pulumi.ToOutputWithContext(context.Background(), args). + ApplyT(func(v interface{}) (LookupItemResult, error) { + args := v.(LookupItemArgs) + r, err := LookupItem(ctx, &args, opts...) + var s LookupItemResult + if r != nil { + s = *r + } + return s, err + }).(LookupItemResultOutput) +} + +// A collection of arguments for invoking GetItem. +type LookupItemOutputArgs struct { + // The title of the item to retrieve. This field will be populated with the title of the item if the item it looked up by its UUID. + Title pulumi.StringPtrInput `pulumi:"title"` + // The UUID of the item to retrieve. This field will be populated with the UUID of the item if the item it looked up by its title. + Uuid pulumi.StringPtrInput `pulumi:"uuid"` + // The UUID of the vault the item is in. + Vault pulumi.StringInput `pulumi:"vault"` +} + +func (LookupItemOutputArgs) ElementType() reflect.Type { + return reflect.TypeOf((*LookupItemArgs)(nil)).Elem() +} + +// A collection of values returned by GetItem. +type LookupItemResultOutput struct{ *pulumi.OutputState } + +func (LookupItemResultOutput) ElementType() reflect.Type { + return reflect.TypeOf((*LookupItemResult)(nil)).Elem() +} + +func (o LookupItemResultOutput) ToLookupItemResultOutput() LookupItemResultOutput { + return o +} + +func (o LookupItemResultOutput) ToLookupItemResultOutputWithContext(ctx context.Context) LookupItemResultOutput { + return o +} + +// The category of the item. One of ["login" "password" "database"] +func (o LookupItemResultOutput) Category() pulumi.StringOutput { + return o.ApplyT(func(v LookupItemResult) string { return v.Category }).(pulumi.StringOutput) +} + +// (Only applies to the database category) The name of the database. +func (o LookupItemResultOutput) Database() pulumi.StringOutput { + return o.ApplyT(func(v LookupItemResult) string { return v.Database }).(pulumi.StringOutput) +} + +// (Only applies to the database category) The address where the database can be found +func (o LookupItemResultOutput) Hostname() pulumi.StringOutput { + return o.ApplyT(func(v LookupItemResult) string { return v.Hostname }).(pulumi.StringOutput) +} + +func (o LookupItemResultOutput) Id() pulumi.StringOutput { + return o.ApplyT(func(v LookupItemResult) string { return v.Id }).(pulumi.StringOutput) +} + +// Password for this item. +func (o LookupItemResultOutput) Password() pulumi.StringOutput { + return o.ApplyT(func(v LookupItemResult) string { return v.Password }).(pulumi.StringOutput) +} + +// (Only applies to the database category) The port the database is listening on. +func (o LookupItemResultOutput) Port() pulumi.StringOutput { + return o.ApplyT(func(v LookupItemResult) string { return v.Port }).(pulumi.StringOutput) +} + +// A list of custom sections in an item +func (o LookupItemResultOutput) Sections() GetItemSectionArrayOutput { + return o.ApplyT(func(v LookupItemResult) []GetItemSection { return v.Sections }).(GetItemSectionArrayOutput) +} + +// An array of strings of the tags assigned to the item. +func (o LookupItemResultOutput) Tags() pulumi.StringArrayOutput { + return o.ApplyT(func(v LookupItemResult) []string { return v.Tags }).(pulumi.StringArrayOutput) +} + +// The title of the item to retrieve. This field will be populated with the title of the item if the item it looked up by its UUID. +func (o LookupItemResultOutput) Title() pulumi.StringOutput { + return o.ApplyT(func(v LookupItemResult) string { return v.Title }).(pulumi.StringOutput) +} + +// (Only applies to the database category) The type of database. One of ["db2" "filemaker" "msaccess" "mssql" "mysql" "oracle" "postgresql" "sqlite" "other"] +func (o LookupItemResultOutput) Type() pulumi.StringOutput { + return o.ApplyT(func(v LookupItemResult) string { return v.Type }).(pulumi.StringOutput) +} + +// The primary URL for the item. +func (o LookupItemResultOutput) Url() pulumi.StringOutput { + return o.ApplyT(func(v LookupItemResult) string { return v.Url }).(pulumi.StringOutput) +} + +// Username for this item. +func (o LookupItemResultOutput) Username() pulumi.StringOutput { + return o.ApplyT(func(v LookupItemResult) string { return v.Username }).(pulumi.StringOutput) +} + +// The UUID of the item to retrieve. This field will be populated with the UUID of the item if the item it looked up by its title. +func (o LookupItemResultOutput) Uuid() pulumi.StringOutput { + return o.ApplyT(func(v LookupItemResult) string { return v.Uuid }).(pulumi.StringOutput) +} + +// The UUID of the vault the item is in. +func (o LookupItemResultOutput) Vault() pulumi.StringOutput { + return o.ApplyT(func(v LookupItemResult) string { return v.Vault }).(pulumi.StringOutput) +} + +func init() { + pulumi.RegisterOutputType(LookupItemResultOutput{}) +} diff --git a/sdk/go/onepassword/getVault.go b/sdk/go/onepassword/getVault.go new file mode 100644 index 0000000..ad8d75d --- /dev/null +++ b/sdk/go/onepassword/getVault.go @@ -0,0 +1,104 @@ +// Code generated by the Pulumi Terraform Bridge (tfgen) Tool DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package onepassword + +import ( + "context" + "reflect" + + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// Use this data source to get details of a vault by either its name or uuid. +func GetVault(ctx *pulumi.Context, args *GetVaultArgs, opts ...pulumi.InvokeOption) (*GetVaultResult, error) { + opts = pkgInvokeDefaultOpts(opts) + var rv GetVaultResult + err := ctx.Invoke("onepassword:index/getVault:GetVault", args, &rv, opts...) + if err != nil { + return nil, err + } + return &rv, nil +} + +// A collection of arguments for invoking GetVault. +type GetVaultArgs struct { + // The name of the vault to retrieve. This field will be populated with the name of the vault if the vault it looked up by its UUID. + Name *string `pulumi:"name"` + // The UUID of the vault to retrieve. This field will be populated with the UUID of the vault if the vault it looked up by its name. + Uuid *string `pulumi:"uuid"` +} + +// A collection of values returned by GetVault. +type GetVaultResult struct { + // The description of the vault. + Description string `pulumi:"description"` + Id string `pulumi:"id"` + // The name of the vault to retrieve. This field will be populated with the name of the vault if the vault it looked up by its UUID. + Name string `pulumi:"name"` + // The UUID of the vault to retrieve. This field will be populated with the UUID of the vault if the vault it looked up by its name. + Uuid string `pulumi:"uuid"` +} + +func GetVaultOutput(ctx *pulumi.Context, args GetVaultOutputArgs, opts ...pulumi.InvokeOption) GetVaultResultOutput { + return pulumi.ToOutputWithContext(context.Background(), args). + ApplyT(func(v interface{}) (GetVaultResult, error) { + args := v.(GetVaultArgs) + r, err := GetVault(ctx, &args, opts...) + var s GetVaultResult + if r != nil { + s = *r + } + return s, err + }).(GetVaultResultOutput) +} + +// A collection of arguments for invoking GetVault. +type GetVaultOutputArgs struct { + // The name of the vault to retrieve. This field will be populated with the name of the vault if the vault it looked up by its UUID. + Name pulumi.StringPtrInput `pulumi:"name"` + // The UUID of the vault to retrieve. This field will be populated with the UUID of the vault if the vault it looked up by its name. + Uuid pulumi.StringPtrInput `pulumi:"uuid"` +} + +func (GetVaultOutputArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetVaultArgs)(nil)).Elem() +} + +// A collection of values returned by GetVault. +type GetVaultResultOutput struct{ *pulumi.OutputState } + +func (GetVaultResultOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetVaultResult)(nil)).Elem() +} + +func (o GetVaultResultOutput) ToGetVaultResultOutput() GetVaultResultOutput { + return o +} + +func (o GetVaultResultOutput) ToGetVaultResultOutputWithContext(ctx context.Context) GetVaultResultOutput { + return o +} + +// The description of the vault. +func (o GetVaultResultOutput) Description() pulumi.StringOutput { + return o.ApplyT(func(v GetVaultResult) string { return v.Description }).(pulumi.StringOutput) +} + +func (o GetVaultResultOutput) Id() pulumi.StringOutput { + return o.ApplyT(func(v GetVaultResult) string { return v.Id }).(pulumi.StringOutput) +} + +// The name of the vault to retrieve. This field will be populated with the name of the vault if the vault it looked up by its UUID. +func (o GetVaultResultOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v GetVaultResult) string { return v.Name }).(pulumi.StringOutput) +} + +// The UUID of the vault to retrieve. This field will be populated with the UUID of the vault if the vault it looked up by its name. +func (o GetVaultResultOutput) Uuid() pulumi.StringOutput { + return o.ApplyT(func(v GetVaultResult) string { return v.Uuid }).(pulumi.StringOutput) +} + +func init() { + pulumi.RegisterOutputType(GetVaultResultOutput{}) +} diff --git a/sdk/go/onepassword/init.go b/sdk/go/onepassword/init.go new file mode 100644 index 0000000..e2e2bd6 --- /dev/null +++ b/sdk/go/onepassword/init.go @@ -0,0 +1,62 @@ +// Code generated by the Pulumi Terraform Bridge (tfgen) Tool DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package onepassword + +import ( + "fmt" + + "github.com/blang/semver" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +type module struct { + version semver.Version +} + +func (m *module) Version() semver.Version { + return m.version +} + +func (m *module) Construct(ctx *pulumi.Context, name, typ, urn string) (r pulumi.Resource, err error) { + switch typ { + case "onepassword:index/item:Item": + r = &Item{} + default: + return nil, fmt.Errorf("unknown resource type: %s", typ) + } + + err = ctx.RegisterResource(typ, name, nil, r, pulumi.URN_(urn)) + return +} + +type pkg struct { + version semver.Version +} + +func (p *pkg) Version() semver.Version { + return p.version +} + +func (p *pkg) ConstructProvider(ctx *pulumi.Context, name, typ, urn string) (pulumi.ProviderResource, error) { + if typ != "pulumi:providers:onepassword" { + return nil, fmt.Errorf("unknown provider type: %s", typ) + } + + r := &Provider{} + err := ctx.RegisterResource(typ, name, nil, r, pulumi.URN_(urn)) + return r, err +} + +func init() { + version, _ := PkgVersion() + pulumi.RegisterResourceModule( + "onepassword", + "index/item", + &module{version}, + ) + pulumi.RegisterResourcePackage( + "onepassword", + &pkg{version}, + ) +} diff --git a/sdk/go/onepassword/item.go b/sdk/go/onepassword/item.go new file mode 100644 index 0000000..1398eec --- /dev/null +++ b/sdk/go/onepassword/item.go @@ -0,0 +1,492 @@ +// Code generated by the Pulumi Terraform Bridge (tfgen) Tool DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package onepassword + +import ( + "context" + "reflect" + + "github.com/pkg/errors" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// A 1Password item. +// +// ## Example Usage +// +// ```go +// package main +// +// import ( +// "github.com/SimCubeLtd/pulumi-onepassword/sdk/go/onepassword" +// "github.com/pulumi/pulumi-onepassword/sdk/go/onepassword" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := onepassword.NewItem(ctx, "demoPassword", &onepassword.ItemArgs{ +// Vault: pulumi.Any(_var.Demo_vault), +// Title: pulumi.String("Demo Password Recipe"), +// Category: pulumi.String("password"), +// PasswordRecipe: &ItemPasswordRecipeArgs{ +// Length: pulumi.Int(40), +// Symbols: pulumi.Bool(false), +// }, +// }) +// if err != nil { +// return err +// } +// _, err = onepassword.NewItem(ctx, "demoLogin", &onepassword.ItemArgs{ +// Vault: pulumi.Any(_var.Demo_vault), +// Title: pulumi.String("Demo Terraform Login"), +// Category: pulumi.String("login"), +// Username: pulumi.String("test@example.com"), +// }) +// if err != nil { +// return err +// } +// _, err = onepassword.NewItem(ctx, "demoDb", &onepassword.ItemArgs{ +// Vault: pulumi.Any(_var.Demo_vault), +// Category: pulumi.String("database"), +// Type: pulumi.String("mysql"), +// Title: pulumi.String("Demo TF Database"), +// Username: pulumi.String("root"), +// Database: pulumi.String("Example MySQL Instance"), +// Hostname: pulumi.String("localhost"), +// Port: pulumi.String("3306"), +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// ``` +// +// ## Import +// +// # import an existing 1Password item +// +// ```sh +// $ pulumi import onepassword:index/item:Item myitem vaults//items/ +// ``` +type Item struct { + pulumi.CustomResourceState + + // The category of the item. One of ["login" "password" "database"] + Category pulumi.StringPtrOutput `pulumi:"category"` + // (Only applies to the database category) The name of the database. + Database pulumi.StringPtrOutput `pulumi:"database"` + // (Only applies to the database category) The address where the database can be found + Hostname pulumi.StringPtrOutput `pulumi:"hostname"` + // Password for this item. + Password pulumi.StringOutput `pulumi:"password"` + // Password for this item. + PasswordRecipe ItemPasswordRecipePtrOutput `pulumi:"passwordRecipe"` + // (Only applies to the database category) The port the database is listening on. + Port pulumi.StringPtrOutput `pulumi:"port"` + // A list of custom sections in an item + Sections ItemSectionArrayOutput `pulumi:"sections"` + // An array of strings of the tags assigned to the item. + Tags pulumi.StringArrayOutput `pulumi:"tags"` + // The title of the item. + Title pulumi.StringPtrOutput `pulumi:"title"` + // (Only applies to the database category) The type of database. One of ["db2" "filemaker" "msaccess" "mssql" "mysql" "oracle" "postgresql" "sqlite" "other"] + Type pulumi.StringPtrOutput `pulumi:"type"` + // The primary URL for the item. + Url pulumi.StringPtrOutput `pulumi:"url"` + // Username for this item. + Username pulumi.StringPtrOutput `pulumi:"username"` + // The UUID of the item. Item identifiers are unique within a specific vault. + Uuid pulumi.StringOutput `pulumi:"uuid"` + // The UUID of the vault the item is in. + Vault pulumi.StringOutput `pulumi:"vault"` +} + +// NewItem registers a new resource with the given unique name, arguments, and options. +func NewItem(ctx *pulumi.Context, + name string, args *ItemArgs, opts ...pulumi.ResourceOption) (*Item, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.Vault == nil { + return nil, errors.New("invalid value for required argument 'Vault'") + } + if args.Hostname != nil { + args.Hostname = pulumi.ToSecret(args.Hostname).(pulumi.StringPtrOutput) + } + if args.Password != nil { + args.Password = pulumi.ToSecret(args.Password).(pulumi.StringPtrOutput) + } + if args.Port != nil { + args.Port = pulumi.ToSecret(args.Port).(pulumi.StringPtrOutput) + } + if args.Username != nil { + args.Username = pulumi.ToSecret(args.Username).(pulumi.StringPtrOutput) + } + if args.Vault != nil { + args.Vault = pulumi.ToSecret(args.Vault).(pulumi.StringOutput) + } + secrets := pulumi.AdditionalSecretOutputs([]string{ + "hostname", + "password", + "port", + "username", + "vault", + }) + opts = append(opts, secrets) + opts = pkgResourceDefaultOpts(opts) + var resource Item + err := ctx.RegisterResource("onepassword:index/item:Item", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetItem gets an existing Item resource's state with the given name, ID, and optional +// state properties that are used to uniquely qualify the lookup (nil if not required). +func GetItem(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *ItemState, opts ...pulumi.ResourceOption) (*Item, error) { + var resource Item + err := ctx.ReadResource("onepassword:index/item:Item", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering Item resources. +type itemState struct { + // The category of the item. One of ["login" "password" "database"] + Category *string `pulumi:"category"` + // (Only applies to the database category) The name of the database. + Database *string `pulumi:"database"` + // (Only applies to the database category) The address where the database can be found + Hostname *string `pulumi:"hostname"` + // Password for this item. + Password *string `pulumi:"password"` + // Password for this item. + PasswordRecipe *ItemPasswordRecipe `pulumi:"passwordRecipe"` + // (Only applies to the database category) The port the database is listening on. + Port *string `pulumi:"port"` + // A list of custom sections in an item + Sections []ItemSection `pulumi:"sections"` + // An array of strings of the tags assigned to the item. + Tags []string `pulumi:"tags"` + // The title of the item. + Title *string `pulumi:"title"` + // (Only applies to the database category) The type of database. One of ["db2" "filemaker" "msaccess" "mssql" "mysql" "oracle" "postgresql" "sqlite" "other"] + Type *string `pulumi:"type"` + // The primary URL for the item. + Url *string `pulumi:"url"` + // Username for this item. + Username *string `pulumi:"username"` + // The UUID of the item. Item identifiers are unique within a specific vault. + Uuid *string `pulumi:"uuid"` + // The UUID of the vault the item is in. + Vault *string `pulumi:"vault"` +} + +type ItemState struct { + // The category of the item. One of ["login" "password" "database"] + Category pulumi.StringPtrInput + // (Only applies to the database category) The name of the database. + Database pulumi.StringPtrInput + // (Only applies to the database category) The address where the database can be found + Hostname pulumi.StringPtrInput + // Password for this item. + Password pulumi.StringPtrInput + // Password for this item. + PasswordRecipe ItemPasswordRecipePtrInput + // (Only applies to the database category) The port the database is listening on. + Port pulumi.StringPtrInput + // A list of custom sections in an item + Sections ItemSectionArrayInput + // An array of strings of the tags assigned to the item. + Tags pulumi.StringArrayInput + // The title of the item. + Title pulumi.StringPtrInput + // (Only applies to the database category) The type of database. One of ["db2" "filemaker" "msaccess" "mssql" "mysql" "oracle" "postgresql" "sqlite" "other"] + Type pulumi.StringPtrInput + // The primary URL for the item. + Url pulumi.StringPtrInput + // Username for this item. + Username pulumi.StringPtrInput + // The UUID of the item. Item identifiers are unique within a specific vault. + Uuid pulumi.StringPtrInput + // The UUID of the vault the item is in. + Vault pulumi.StringPtrInput +} + +func (ItemState) ElementType() reflect.Type { + return reflect.TypeOf((*itemState)(nil)).Elem() +} + +type itemArgs struct { + // The category of the item. One of ["login" "password" "database"] + Category *string `pulumi:"category"` + // (Only applies to the database category) The name of the database. + Database *string `pulumi:"database"` + // (Only applies to the database category) The address where the database can be found + Hostname *string `pulumi:"hostname"` + // Password for this item. + Password *string `pulumi:"password"` + // Password for this item. + PasswordRecipe *ItemPasswordRecipe `pulumi:"passwordRecipe"` + // (Only applies to the database category) The port the database is listening on. + Port *string `pulumi:"port"` + // A list of custom sections in an item + Sections []ItemSection `pulumi:"sections"` + // An array of strings of the tags assigned to the item. + Tags []string `pulumi:"tags"` + // The title of the item. + Title *string `pulumi:"title"` + // (Only applies to the database category) The type of database. One of ["db2" "filemaker" "msaccess" "mssql" "mysql" "oracle" "postgresql" "sqlite" "other"] + Type *string `pulumi:"type"` + // The primary URL for the item. + Url *string `pulumi:"url"` + // Username for this item. + Username *string `pulumi:"username"` + // The UUID of the vault the item is in. + Vault string `pulumi:"vault"` +} + +// The set of arguments for constructing a Item resource. +type ItemArgs struct { + // The category of the item. One of ["login" "password" "database"] + Category pulumi.StringPtrInput + // (Only applies to the database category) The name of the database. + Database pulumi.StringPtrInput + // (Only applies to the database category) The address where the database can be found + Hostname pulumi.StringPtrInput + // Password for this item. + Password pulumi.StringPtrInput + // Password for this item. + PasswordRecipe ItemPasswordRecipePtrInput + // (Only applies to the database category) The port the database is listening on. + Port pulumi.StringPtrInput + // A list of custom sections in an item + Sections ItemSectionArrayInput + // An array of strings of the tags assigned to the item. + Tags pulumi.StringArrayInput + // The title of the item. + Title pulumi.StringPtrInput + // (Only applies to the database category) The type of database. One of ["db2" "filemaker" "msaccess" "mssql" "mysql" "oracle" "postgresql" "sqlite" "other"] + Type pulumi.StringPtrInput + // The primary URL for the item. + Url pulumi.StringPtrInput + // Username for this item. + Username pulumi.StringPtrInput + // The UUID of the vault the item is in. + Vault pulumi.StringInput +} + +func (ItemArgs) ElementType() reflect.Type { + return reflect.TypeOf((*itemArgs)(nil)).Elem() +} + +type ItemInput interface { + pulumi.Input + + ToItemOutput() ItemOutput + ToItemOutputWithContext(ctx context.Context) ItemOutput +} + +func (*Item) ElementType() reflect.Type { + return reflect.TypeOf((**Item)(nil)).Elem() +} + +func (i *Item) ToItemOutput() ItemOutput { + return i.ToItemOutputWithContext(context.Background()) +} + +func (i *Item) ToItemOutputWithContext(ctx context.Context) ItemOutput { + return pulumi.ToOutputWithContext(ctx, i).(ItemOutput) +} + +// ItemArrayInput is an input type that accepts ItemArray and ItemArrayOutput values. +// You can construct a concrete instance of `ItemArrayInput` via: +// +// ItemArray{ ItemArgs{...} } +type ItemArrayInput interface { + pulumi.Input + + ToItemArrayOutput() ItemArrayOutput + ToItemArrayOutputWithContext(context.Context) ItemArrayOutput +} + +type ItemArray []ItemInput + +func (ItemArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*Item)(nil)).Elem() +} + +func (i ItemArray) ToItemArrayOutput() ItemArrayOutput { + return i.ToItemArrayOutputWithContext(context.Background()) +} + +func (i ItemArray) ToItemArrayOutputWithContext(ctx context.Context) ItemArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(ItemArrayOutput) +} + +// ItemMapInput is an input type that accepts ItemMap and ItemMapOutput values. +// You can construct a concrete instance of `ItemMapInput` via: +// +// ItemMap{ "key": ItemArgs{...} } +type ItemMapInput interface { + pulumi.Input + + ToItemMapOutput() ItemMapOutput + ToItemMapOutputWithContext(context.Context) ItemMapOutput +} + +type ItemMap map[string]ItemInput + +func (ItemMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*Item)(nil)).Elem() +} + +func (i ItemMap) ToItemMapOutput() ItemMapOutput { + return i.ToItemMapOutputWithContext(context.Background()) +} + +func (i ItemMap) ToItemMapOutputWithContext(ctx context.Context) ItemMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(ItemMapOutput) +} + +type ItemOutput struct{ *pulumi.OutputState } + +func (ItemOutput) ElementType() reflect.Type { + return reflect.TypeOf((**Item)(nil)).Elem() +} + +func (o ItemOutput) ToItemOutput() ItemOutput { + return o +} + +func (o ItemOutput) ToItemOutputWithContext(ctx context.Context) ItemOutput { + return o +} + +// The category of the item. One of ["login" "password" "database"] +func (o ItemOutput) Category() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Item) pulumi.StringPtrOutput { return v.Category }).(pulumi.StringPtrOutput) +} + +// (Only applies to the database category) The name of the database. +func (o ItemOutput) Database() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Item) pulumi.StringPtrOutput { return v.Database }).(pulumi.StringPtrOutput) +} + +// (Only applies to the database category) The address where the database can be found +func (o ItemOutput) Hostname() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Item) pulumi.StringPtrOutput { return v.Hostname }).(pulumi.StringPtrOutput) +} + +// Password for this item. +func (o ItemOutput) Password() pulumi.StringOutput { + return o.ApplyT(func(v *Item) pulumi.StringOutput { return v.Password }).(pulumi.StringOutput) +} + +// Password for this item. +func (o ItemOutput) PasswordRecipe() ItemPasswordRecipePtrOutput { + return o.ApplyT(func(v *Item) ItemPasswordRecipePtrOutput { return v.PasswordRecipe }).(ItemPasswordRecipePtrOutput) +} + +// (Only applies to the database category) The port the database is listening on. +func (o ItemOutput) Port() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Item) pulumi.StringPtrOutput { return v.Port }).(pulumi.StringPtrOutput) +} + +// A list of custom sections in an item +func (o ItemOutput) Sections() ItemSectionArrayOutput { + return o.ApplyT(func(v *Item) ItemSectionArrayOutput { return v.Sections }).(ItemSectionArrayOutput) +} + +// An array of strings of the tags assigned to the item. +func (o ItemOutput) Tags() pulumi.StringArrayOutput { + return o.ApplyT(func(v *Item) pulumi.StringArrayOutput { return v.Tags }).(pulumi.StringArrayOutput) +} + +// The title of the item. +func (o ItemOutput) Title() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Item) pulumi.StringPtrOutput { return v.Title }).(pulumi.StringPtrOutput) +} + +// (Only applies to the database category) The type of database. One of ["db2" "filemaker" "msaccess" "mssql" "mysql" "oracle" "postgresql" "sqlite" "other"] +func (o ItemOutput) Type() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Item) pulumi.StringPtrOutput { return v.Type }).(pulumi.StringPtrOutput) +} + +// The primary URL for the item. +func (o ItemOutput) Url() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Item) pulumi.StringPtrOutput { return v.Url }).(pulumi.StringPtrOutput) +} + +// Username for this item. +func (o ItemOutput) Username() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Item) pulumi.StringPtrOutput { return v.Username }).(pulumi.StringPtrOutput) +} + +// The UUID of the item. Item identifiers are unique within a specific vault. +func (o ItemOutput) Uuid() pulumi.StringOutput { + return o.ApplyT(func(v *Item) pulumi.StringOutput { return v.Uuid }).(pulumi.StringOutput) +} + +// The UUID of the vault the item is in. +func (o ItemOutput) Vault() pulumi.StringOutput { + return o.ApplyT(func(v *Item) pulumi.StringOutput { return v.Vault }).(pulumi.StringOutput) +} + +type ItemArrayOutput struct{ *pulumi.OutputState } + +func (ItemArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*Item)(nil)).Elem() +} + +func (o ItemArrayOutput) ToItemArrayOutput() ItemArrayOutput { + return o +} + +func (o ItemArrayOutput) ToItemArrayOutputWithContext(ctx context.Context) ItemArrayOutput { + return o +} + +func (o ItemArrayOutput) Index(i pulumi.IntInput) ItemOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *Item { + return vs[0].([]*Item)[vs[1].(int)] + }).(ItemOutput) +} + +type ItemMapOutput struct{ *pulumi.OutputState } + +func (ItemMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*Item)(nil)).Elem() +} + +func (o ItemMapOutput) ToItemMapOutput() ItemMapOutput { + return o +} + +func (o ItemMapOutput) ToItemMapOutputWithContext(ctx context.Context) ItemMapOutput { + return o +} + +func (o ItemMapOutput) MapIndex(k pulumi.StringInput) ItemOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *Item { + return vs[0].(map[string]*Item)[vs[1].(string)] + }).(ItemOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*ItemInput)(nil)).Elem(), &Item{}) + pulumi.RegisterInputType(reflect.TypeOf((*ItemArrayInput)(nil)).Elem(), ItemArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*ItemMapInput)(nil)).Elem(), ItemMap{}) + pulumi.RegisterOutputType(ItemOutput{}) + pulumi.RegisterOutputType(ItemArrayOutput{}) + pulumi.RegisterOutputType(ItemMapOutput{}) +} diff --git a/sdk/go/onepassword/provider.go b/sdk/go/onepassword/provider.go new file mode 100644 index 0000000..b468070 --- /dev/null +++ b/sdk/go/onepassword/provider.go @@ -0,0 +1,115 @@ +// Code generated by the Pulumi Terraform Bridge (tfgen) Tool DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package onepassword + +import ( + "context" + "reflect" + + "github.com/pkg/errors" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// The provider type for the onepassword package. By default, resources use package-wide configuration +// settings, however an explicit `Provider` instance may be created and passed during resource +// construction to achieve fine-grained programmatic control over provider settings. See the +// [documentation](https://www.pulumi.com/docs/reference/programming-model/#providers) for more information. +type Provider struct { + pulumi.ProviderResourceState + + // A valid token for your 1Password Connect API. Can also be sourced from OP_CONNECT_TOKEN. + Token pulumi.StringOutput `pulumi:"token"` + // The HTTP(S) URL where your 1Password Connect API can be found. Must be provided through the the OP_CONNECT_HOST + // environment variable if this attribute is not set. + Url pulumi.StringPtrOutput `pulumi:"url"` +} + +// NewProvider registers a new resource with the given unique name, arguments, and options. +func NewProvider(ctx *pulumi.Context, + name string, args *ProviderArgs, opts ...pulumi.ResourceOption) (*Provider, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.Token == nil { + return nil, errors.New("invalid value for required argument 'Token'") + } + opts = pkgResourceDefaultOpts(opts) + var resource Provider + err := ctx.RegisterResource("pulumi:providers:onepassword", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +type providerArgs struct { + // A valid token for your 1Password Connect API. Can also be sourced from OP_CONNECT_TOKEN. + Token string `pulumi:"token"` + // The HTTP(S) URL where your 1Password Connect API can be found. Must be provided through the the OP_CONNECT_HOST + // environment variable if this attribute is not set. + Url *string `pulumi:"url"` +} + +// The set of arguments for constructing a Provider resource. +type ProviderArgs struct { + // A valid token for your 1Password Connect API. Can also be sourced from OP_CONNECT_TOKEN. + Token pulumi.StringInput + // The HTTP(S) URL where your 1Password Connect API can be found. Must be provided through the the OP_CONNECT_HOST + // environment variable if this attribute is not set. + Url pulumi.StringPtrInput +} + +func (ProviderArgs) ElementType() reflect.Type { + return reflect.TypeOf((*providerArgs)(nil)).Elem() +} + +type ProviderInput interface { + pulumi.Input + + ToProviderOutput() ProviderOutput + ToProviderOutputWithContext(ctx context.Context) ProviderOutput +} + +func (*Provider) ElementType() reflect.Type { + return reflect.TypeOf((**Provider)(nil)).Elem() +} + +func (i *Provider) ToProviderOutput() ProviderOutput { + return i.ToProviderOutputWithContext(context.Background()) +} + +func (i *Provider) ToProviderOutputWithContext(ctx context.Context) ProviderOutput { + return pulumi.ToOutputWithContext(ctx, i).(ProviderOutput) +} + +type ProviderOutput struct{ *pulumi.OutputState } + +func (ProviderOutput) ElementType() reflect.Type { + return reflect.TypeOf((**Provider)(nil)).Elem() +} + +func (o ProviderOutput) ToProviderOutput() ProviderOutput { + return o +} + +func (o ProviderOutput) ToProviderOutputWithContext(ctx context.Context) ProviderOutput { + return o +} + +// A valid token for your 1Password Connect API. Can also be sourced from OP_CONNECT_TOKEN. +func (o ProviderOutput) Token() pulumi.StringOutput { + return o.ApplyT(func(v *Provider) pulumi.StringOutput { return v.Token }).(pulumi.StringOutput) +} + +// The HTTP(S) URL where your 1Password Connect API can be found. Must be provided through the the OP_CONNECT_HOST +// environment variable if this attribute is not set. +func (o ProviderOutput) Url() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Provider) pulumi.StringPtrOutput { return v.Url }).(pulumi.StringPtrOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*ProviderInput)(nil)).Elem(), &Provider{}) + pulumi.RegisterOutputType(ProviderOutput{}) +} diff --git a/sdk/go/onepassword/pulumi-plugin.json b/sdk/go/onepassword/pulumi-plugin.json new file mode 100644 index 0000000..5f19768 --- /dev/null +++ b/sdk/go/onepassword/pulumi-plugin.json @@ -0,0 +1,5 @@ +{ + "resource": true, + "name": "onepassword", + "server": "https://github.com/SimCubeLtd/pulumi-onepassword/releases/download/v${VERSION}" +} diff --git a/sdk/go/onepassword/pulumiTypes.go b/sdk/go/onepassword/pulumiTypes.go new file mode 100644 index 0000000..0374f09 --- /dev/null +++ b/sdk/go/onepassword/pulumiTypes.go @@ -0,0 +1,898 @@ +// Code generated by the Pulumi Terraform Bridge (tfgen) Tool DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package onepassword + +import ( + "context" + "reflect" + + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +type GetItemSection struct { + Fields []GetItemSectionField `pulumi:"fields"` + Id string `pulumi:"id"` + Label string `pulumi:"label"` +} + +// GetItemSectionInput is an input type that accepts GetItemSectionArgs and GetItemSectionOutput values. +// You can construct a concrete instance of `GetItemSectionInput` via: +// +// GetItemSectionArgs{...} +type GetItemSectionInput interface { + pulumi.Input + + ToGetItemSectionOutput() GetItemSectionOutput + ToGetItemSectionOutputWithContext(context.Context) GetItemSectionOutput +} + +type GetItemSectionArgs struct { + Fields GetItemSectionFieldArrayInput `pulumi:"fields"` + Id pulumi.StringInput `pulumi:"id"` + Label pulumi.StringInput `pulumi:"label"` +} + +func (GetItemSectionArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetItemSection)(nil)).Elem() +} + +func (i GetItemSectionArgs) ToGetItemSectionOutput() GetItemSectionOutput { + return i.ToGetItemSectionOutputWithContext(context.Background()) +} + +func (i GetItemSectionArgs) ToGetItemSectionOutputWithContext(ctx context.Context) GetItemSectionOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetItemSectionOutput) +} + +// GetItemSectionArrayInput is an input type that accepts GetItemSectionArray and GetItemSectionArrayOutput values. +// You can construct a concrete instance of `GetItemSectionArrayInput` via: +// +// GetItemSectionArray{ GetItemSectionArgs{...} } +type GetItemSectionArrayInput interface { + pulumi.Input + + ToGetItemSectionArrayOutput() GetItemSectionArrayOutput + ToGetItemSectionArrayOutputWithContext(context.Context) GetItemSectionArrayOutput +} + +type GetItemSectionArray []GetItemSectionInput + +func (GetItemSectionArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetItemSection)(nil)).Elem() +} + +func (i GetItemSectionArray) ToGetItemSectionArrayOutput() GetItemSectionArrayOutput { + return i.ToGetItemSectionArrayOutputWithContext(context.Background()) +} + +func (i GetItemSectionArray) ToGetItemSectionArrayOutputWithContext(ctx context.Context) GetItemSectionArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetItemSectionArrayOutput) +} + +type GetItemSectionOutput struct{ *pulumi.OutputState } + +func (GetItemSectionOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetItemSection)(nil)).Elem() +} + +func (o GetItemSectionOutput) ToGetItemSectionOutput() GetItemSectionOutput { + return o +} + +func (o GetItemSectionOutput) ToGetItemSectionOutputWithContext(ctx context.Context) GetItemSectionOutput { + return o +} + +func (o GetItemSectionOutput) Fields() GetItemSectionFieldArrayOutput { + return o.ApplyT(func(v GetItemSection) []GetItemSectionField { return v.Fields }).(GetItemSectionFieldArrayOutput) +} + +func (o GetItemSectionOutput) Id() pulumi.StringOutput { + return o.ApplyT(func(v GetItemSection) string { return v.Id }).(pulumi.StringOutput) +} + +func (o GetItemSectionOutput) Label() pulumi.StringOutput { + return o.ApplyT(func(v GetItemSection) string { return v.Label }).(pulumi.StringOutput) +} + +type GetItemSectionArrayOutput struct{ *pulumi.OutputState } + +func (GetItemSectionArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetItemSection)(nil)).Elem() +} + +func (o GetItemSectionArrayOutput) ToGetItemSectionArrayOutput() GetItemSectionArrayOutput { + return o +} + +func (o GetItemSectionArrayOutput) ToGetItemSectionArrayOutputWithContext(ctx context.Context) GetItemSectionArrayOutput { + return o +} + +func (o GetItemSectionArrayOutput) Index(i pulumi.IntInput) GetItemSectionOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetItemSection { + return vs[0].([]GetItemSection)[vs[1].(int)] + }).(GetItemSectionOutput) +} + +type GetItemSectionField struct { + Id string `pulumi:"id"` + Label string `pulumi:"label"` + Purpose string `pulumi:"purpose"` + // (Only applies to the database category) The type of database. One of ["db2" "filemaker" "msaccess" "mssql" "mysql" "oracle" "postgresql" "sqlite" "other"] + Type string `pulumi:"type"` + Value string `pulumi:"value"` +} + +// GetItemSectionFieldInput is an input type that accepts GetItemSectionFieldArgs and GetItemSectionFieldOutput values. +// You can construct a concrete instance of `GetItemSectionFieldInput` via: +// +// GetItemSectionFieldArgs{...} +type GetItemSectionFieldInput interface { + pulumi.Input + + ToGetItemSectionFieldOutput() GetItemSectionFieldOutput + ToGetItemSectionFieldOutputWithContext(context.Context) GetItemSectionFieldOutput +} + +type GetItemSectionFieldArgs struct { + Id pulumi.StringInput `pulumi:"id"` + Label pulumi.StringInput `pulumi:"label"` + Purpose pulumi.StringInput `pulumi:"purpose"` + // (Only applies to the database category) The type of database. One of ["db2" "filemaker" "msaccess" "mssql" "mysql" "oracle" "postgresql" "sqlite" "other"] + Type pulumi.StringInput `pulumi:"type"` + Value pulumi.StringInput `pulumi:"value"` +} + +func (GetItemSectionFieldArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetItemSectionField)(nil)).Elem() +} + +func (i GetItemSectionFieldArgs) ToGetItemSectionFieldOutput() GetItemSectionFieldOutput { + return i.ToGetItemSectionFieldOutputWithContext(context.Background()) +} + +func (i GetItemSectionFieldArgs) ToGetItemSectionFieldOutputWithContext(ctx context.Context) GetItemSectionFieldOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetItemSectionFieldOutput) +} + +// GetItemSectionFieldArrayInput is an input type that accepts GetItemSectionFieldArray and GetItemSectionFieldArrayOutput values. +// You can construct a concrete instance of `GetItemSectionFieldArrayInput` via: +// +// GetItemSectionFieldArray{ GetItemSectionFieldArgs{...} } +type GetItemSectionFieldArrayInput interface { + pulumi.Input + + ToGetItemSectionFieldArrayOutput() GetItemSectionFieldArrayOutput + ToGetItemSectionFieldArrayOutputWithContext(context.Context) GetItemSectionFieldArrayOutput +} + +type GetItemSectionFieldArray []GetItemSectionFieldInput + +func (GetItemSectionFieldArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetItemSectionField)(nil)).Elem() +} + +func (i GetItemSectionFieldArray) ToGetItemSectionFieldArrayOutput() GetItemSectionFieldArrayOutput { + return i.ToGetItemSectionFieldArrayOutputWithContext(context.Background()) +} + +func (i GetItemSectionFieldArray) ToGetItemSectionFieldArrayOutputWithContext(ctx context.Context) GetItemSectionFieldArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetItemSectionFieldArrayOutput) +} + +type GetItemSectionFieldOutput struct{ *pulumi.OutputState } + +func (GetItemSectionFieldOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetItemSectionField)(nil)).Elem() +} + +func (o GetItemSectionFieldOutput) ToGetItemSectionFieldOutput() GetItemSectionFieldOutput { + return o +} + +func (o GetItemSectionFieldOutput) ToGetItemSectionFieldOutputWithContext(ctx context.Context) GetItemSectionFieldOutput { + return o +} + +func (o GetItemSectionFieldOutput) Id() pulumi.StringOutput { + return o.ApplyT(func(v GetItemSectionField) string { return v.Id }).(pulumi.StringOutput) +} + +func (o GetItemSectionFieldOutput) Label() pulumi.StringOutput { + return o.ApplyT(func(v GetItemSectionField) string { return v.Label }).(pulumi.StringOutput) +} + +func (o GetItemSectionFieldOutput) Purpose() pulumi.StringOutput { + return o.ApplyT(func(v GetItemSectionField) string { return v.Purpose }).(pulumi.StringOutput) +} + +// (Only applies to the database category) The type of database. One of ["db2" "filemaker" "msaccess" "mssql" "mysql" "oracle" "postgresql" "sqlite" "other"] +func (o GetItemSectionFieldOutput) Type() pulumi.StringOutput { + return o.ApplyT(func(v GetItemSectionField) string { return v.Type }).(pulumi.StringOutput) +} + +func (o GetItemSectionFieldOutput) Value() pulumi.StringOutput { + return o.ApplyT(func(v GetItemSectionField) string { return v.Value }).(pulumi.StringOutput) +} + +type GetItemSectionFieldArrayOutput struct{ *pulumi.OutputState } + +func (GetItemSectionFieldArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetItemSectionField)(nil)).Elem() +} + +func (o GetItemSectionFieldArrayOutput) ToGetItemSectionFieldArrayOutput() GetItemSectionFieldArrayOutput { + return o +} + +func (o GetItemSectionFieldArrayOutput) ToGetItemSectionFieldArrayOutputWithContext(ctx context.Context) GetItemSectionFieldArrayOutput { + return o +} + +func (o GetItemSectionFieldArrayOutput) Index(i pulumi.IntInput) GetItemSectionFieldOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetItemSectionField { + return vs[0].([]GetItemSectionField)[vs[1].(int)] + }).(GetItemSectionFieldOutput) +} + +type ItemPasswordRecipe struct { + // Use digits [0-9] when generating the password. + Digits *bool `pulumi:"digits"` + // The length of the password to be generated. + Length *int `pulumi:"length"` + // Use letters [a-zA-Z] when generating the password. + Letters *bool `pulumi:"letters"` + // Use symbols [!@.-_*] when generating the password. + Symbols *bool `pulumi:"symbols"` +} + +// ItemPasswordRecipeInput is an input type that accepts ItemPasswordRecipeArgs and ItemPasswordRecipeOutput values. +// You can construct a concrete instance of `ItemPasswordRecipeInput` via: +// +// ItemPasswordRecipeArgs{...} +type ItemPasswordRecipeInput interface { + pulumi.Input + + ToItemPasswordRecipeOutput() ItemPasswordRecipeOutput + ToItemPasswordRecipeOutputWithContext(context.Context) ItemPasswordRecipeOutput +} + +type ItemPasswordRecipeArgs struct { + // Use digits [0-9] when generating the password. + Digits pulumi.BoolPtrInput `pulumi:"digits"` + // The length of the password to be generated. + Length pulumi.IntPtrInput `pulumi:"length"` + // Use letters [a-zA-Z] when generating the password. + Letters pulumi.BoolPtrInput `pulumi:"letters"` + // Use symbols [!@.-_*] when generating the password. + Symbols pulumi.BoolPtrInput `pulumi:"symbols"` +} + +func (ItemPasswordRecipeArgs) ElementType() reflect.Type { + return reflect.TypeOf((*ItemPasswordRecipe)(nil)).Elem() +} + +func (i ItemPasswordRecipeArgs) ToItemPasswordRecipeOutput() ItemPasswordRecipeOutput { + return i.ToItemPasswordRecipeOutputWithContext(context.Background()) +} + +func (i ItemPasswordRecipeArgs) ToItemPasswordRecipeOutputWithContext(ctx context.Context) ItemPasswordRecipeOutput { + return pulumi.ToOutputWithContext(ctx, i).(ItemPasswordRecipeOutput) +} + +func (i ItemPasswordRecipeArgs) ToItemPasswordRecipePtrOutput() ItemPasswordRecipePtrOutput { + return i.ToItemPasswordRecipePtrOutputWithContext(context.Background()) +} + +func (i ItemPasswordRecipeArgs) ToItemPasswordRecipePtrOutputWithContext(ctx context.Context) ItemPasswordRecipePtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(ItemPasswordRecipeOutput).ToItemPasswordRecipePtrOutputWithContext(ctx) +} + +// ItemPasswordRecipePtrInput is an input type that accepts ItemPasswordRecipeArgs, ItemPasswordRecipePtr and ItemPasswordRecipePtrOutput values. +// You can construct a concrete instance of `ItemPasswordRecipePtrInput` via: +// +// ItemPasswordRecipeArgs{...} +// +// or: +// +// nil +type ItemPasswordRecipePtrInput interface { + pulumi.Input + + ToItemPasswordRecipePtrOutput() ItemPasswordRecipePtrOutput + ToItemPasswordRecipePtrOutputWithContext(context.Context) ItemPasswordRecipePtrOutput +} + +type itemPasswordRecipePtrType ItemPasswordRecipeArgs + +func ItemPasswordRecipePtr(v *ItemPasswordRecipeArgs) ItemPasswordRecipePtrInput { + return (*itemPasswordRecipePtrType)(v) +} + +func (*itemPasswordRecipePtrType) ElementType() reflect.Type { + return reflect.TypeOf((**ItemPasswordRecipe)(nil)).Elem() +} + +func (i *itemPasswordRecipePtrType) ToItemPasswordRecipePtrOutput() ItemPasswordRecipePtrOutput { + return i.ToItemPasswordRecipePtrOutputWithContext(context.Background()) +} + +func (i *itemPasswordRecipePtrType) ToItemPasswordRecipePtrOutputWithContext(ctx context.Context) ItemPasswordRecipePtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(ItemPasswordRecipePtrOutput) +} + +type ItemPasswordRecipeOutput struct{ *pulumi.OutputState } + +func (ItemPasswordRecipeOutput) ElementType() reflect.Type { + return reflect.TypeOf((*ItemPasswordRecipe)(nil)).Elem() +} + +func (o ItemPasswordRecipeOutput) ToItemPasswordRecipeOutput() ItemPasswordRecipeOutput { + return o +} + +func (o ItemPasswordRecipeOutput) ToItemPasswordRecipeOutputWithContext(ctx context.Context) ItemPasswordRecipeOutput { + return o +} + +func (o ItemPasswordRecipeOutput) ToItemPasswordRecipePtrOutput() ItemPasswordRecipePtrOutput { + return o.ToItemPasswordRecipePtrOutputWithContext(context.Background()) +} + +func (o ItemPasswordRecipeOutput) ToItemPasswordRecipePtrOutputWithContext(ctx context.Context) ItemPasswordRecipePtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v ItemPasswordRecipe) *ItemPasswordRecipe { + return &v + }).(ItemPasswordRecipePtrOutput) +} + +// Use digits [0-9] when generating the password. +func (o ItemPasswordRecipeOutput) Digits() pulumi.BoolPtrOutput { + return o.ApplyT(func(v ItemPasswordRecipe) *bool { return v.Digits }).(pulumi.BoolPtrOutput) +} + +// The length of the password to be generated. +func (o ItemPasswordRecipeOutput) Length() pulumi.IntPtrOutput { + return o.ApplyT(func(v ItemPasswordRecipe) *int { return v.Length }).(pulumi.IntPtrOutput) +} + +// Use letters [a-zA-Z] when generating the password. +func (o ItemPasswordRecipeOutput) Letters() pulumi.BoolPtrOutput { + return o.ApplyT(func(v ItemPasswordRecipe) *bool { return v.Letters }).(pulumi.BoolPtrOutput) +} + +// Use symbols [!@.-_*] when generating the password. +func (o ItemPasswordRecipeOutput) Symbols() pulumi.BoolPtrOutput { + return o.ApplyT(func(v ItemPasswordRecipe) *bool { return v.Symbols }).(pulumi.BoolPtrOutput) +} + +type ItemPasswordRecipePtrOutput struct{ *pulumi.OutputState } + +func (ItemPasswordRecipePtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**ItemPasswordRecipe)(nil)).Elem() +} + +func (o ItemPasswordRecipePtrOutput) ToItemPasswordRecipePtrOutput() ItemPasswordRecipePtrOutput { + return o +} + +func (o ItemPasswordRecipePtrOutput) ToItemPasswordRecipePtrOutputWithContext(ctx context.Context) ItemPasswordRecipePtrOutput { + return o +} + +func (o ItemPasswordRecipePtrOutput) Elem() ItemPasswordRecipeOutput { + return o.ApplyT(func(v *ItemPasswordRecipe) ItemPasswordRecipe { + if v != nil { + return *v + } + var ret ItemPasswordRecipe + return ret + }).(ItemPasswordRecipeOutput) +} + +// Use digits [0-9] when generating the password. +func (o ItemPasswordRecipePtrOutput) Digits() pulumi.BoolPtrOutput { + return o.ApplyT(func(v *ItemPasswordRecipe) *bool { + if v == nil { + return nil + } + return v.Digits + }).(pulumi.BoolPtrOutput) +} + +// The length of the password to be generated. +func (o ItemPasswordRecipePtrOutput) Length() pulumi.IntPtrOutput { + return o.ApplyT(func(v *ItemPasswordRecipe) *int { + if v == nil { + return nil + } + return v.Length + }).(pulumi.IntPtrOutput) +} + +// Use letters [a-zA-Z] when generating the password. +func (o ItemPasswordRecipePtrOutput) Letters() pulumi.BoolPtrOutput { + return o.ApplyT(func(v *ItemPasswordRecipe) *bool { + if v == nil { + return nil + } + return v.Letters + }).(pulumi.BoolPtrOutput) +} + +// Use symbols [!@.-_*] when generating the password. +func (o ItemPasswordRecipePtrOutput) Symbols() pulumi.BoolPtrOutput { + return o.ApplyT(func(v *ItemPasswordRecipe) *bool { + if v == nil { + return nil + } + return v.Symbols + }).(pulumi.BoolPtrOutput) +} + +type ItemSection struct { + // A list of custom fields in the section. + Fields []ItemSectionField `pulumi:"fields"` + // A unique identifier for the section. + Id *string `pulumi:"id"` + // The label for the section. + Label string `pulumi:"label"` +} + +// ItemSectionInput is an input type that accepts ItemSectionArgs and ItemSectionOutput values. +// You can construct a concrete instance of `ItemSectionInput` via: +// +// ItemSectionArgs{...} +type ItemSectionInput interface { + pulumi.Input + + ToItemSectionOutput() ItemSectionOutput + ToItemSectionOutputWithContext(context.Context) ItemSectionOutput +} + +type ItemSectionArgs struct { + // A list of custom fields in the section. + Fields ItemSectionFieldArrayInput `pulumi:"fields"` + // A unique identifier for the section. + Id pulumi.StringPtrInput `pulumi:"id"` + // The label for the section. + Label pulumi.StringInput `pulumi:"label"` +} + +func (ItemSectionArgs) ElementType() reflect.Type { + return reflect.TypeOf((*ItemSection)(nil)).Elem() +} + +func (i ItemSectionArgs) ToItemSectionOutput() ItemSectionOutput { + return i.ToItemSectionOutputWithContext(context.Background()) +} + +func (i ItemSectionArgs) ToItemSectionOutputWithContext(ctx context.Context) ItemSectionOutput { + return pulumi.ToOutputWithContext(ctx, i).(ItemSectionOutput) +} + +// ItemSectionArrayInput is an input type that accepts ItemSectionArray and ItemSectionArrayOutput values. +// You can construct a concrete instance of `ItemSectionArrayInput` via: +// +// ItemSectionArray{ ItemSectionArgs{...} } +type ItemSectionArrayInput interface { + pulumi.Input + + ToItemSectionArrayOutput() ItemSectionArrayOutput + ToItemSectionArrayOutputWithContext(context.Context) ItemSectionArrayOutput +} + +type ItemSectionArray []ItemSectionInput + +func (ItemSectionArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]ItemSection)(nil)).Elem() +} + +func (i ItemSectionArray) ToItemSectionArrayOutput() ItemSectionArrayOutput { + return i.ToItemSectionArrayOutputWithContext(context.Background()) +} + +func (i ItemSectionArray) ToItemSectionArrayOutputWithContext(ctx context.Context) ItemSectionArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(ItemSectionArrayOutput) +} + +type ItemSectionOutput struct{ *pulumi.OutputState } + +func (ItemSectionOutput) ElementType() reflect.Type { + return reflect.TypeOf((*ItemSection)(nil)).Elem() +} + +func (o ItemSectionOutput) ToItemSectionOutput() ItemSectionOutput { + return o +} + +func (o ItemSectionOutput) ToItemSectionOutputWithContext(ctx context.Context) ItemSectionOutput { + return o +} + +// A list of custom fields in the section. +func (o ItemSectionOutput) Fields() ItemSectionFieldArrayOutput { + return o.ApplyT(func(v ItemSection) []ItemSectionField { return v.Fields }).(ItemSectionFieldArrayOutput) +} + +// A unique identifier for the section. +func (o ItemSectionOutput) Id() pulumi.StringPtrOutput { + return o.ApplyT(func(v ItemSection) *string { return v.Id }).(pulumi.StringPtrOutput) +} + +// The label for the section. +func (o ItemSectionOutput) Label() pulumi.StringOutput { + return o.ApplyT(func(v ItemSection) string { return v.Label }).(pulumi.StringOutput) +} + +type ItemSectionArrayOutput struct{ *pulumi.OutputState } + +func (ItemSectionArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]ItemSection)(nil)).Elem() +} + +func (o ItemSectionArrayOutput) ToItemSectionArrayOutput() ItemSectionArrayOutput { + return o +} + +func (o ItemSectionArrayOutput) ToItemSectionArrayOutputWithContext(ctx context.Context) ItemSectionArrayOutput { + return o +} + +func (o ItemSectionArrayOutput) Index(i pulumi.IntInput) ItemSectionOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) ItemSection { + return vs[0].([]ItemSection)[vs[1].(int)] + }).(ItemSectionOutput) +} + +type ItemSectionField struct { + Id *string `pulumi:"id"` + Label string `pulumi:"label"` + // Password for this item. + PasswordRecipe *ItemSectionFieldPasswordRecipe `pulumi:"passwordRecipe"` + Purpose *string `pulumi:"purpose"` + // (Only applies to the database category) The type of database. One of ["db2" "filemaker" "msaccess" "mssql" "mysql" "oracle" "postgresql" "sqlite" "other"] + Type *string `pulumi:"type"` + Value *string `pulumi:"value"` +} + +// ItemSectionFieldInput is an input type that accepts ItemSectionFieldArgs and ItemSectionFieldOutput values. +// You can construct a concrete instance of `ItemSectionFieldInput` via: +// +// ItemSectionFieldArgs{...} +type ItemSectionFieldInput interface { + pulumi.Input + + ToItemSectionFieldOutput() ItemSectionFieldOutput + ToItemSectionFieldOutputWithContext(context.Context) ItemSectionFieldOutput +} + +type ItemSectionFieldArgs struct { + Id pulumi.StringPtrInput `pulumi:"id"` + Label pulumi.StringInput `pulumi:"label"` + // Password for this item. + PasswordRecipe ItemSectionFieldPasswordRecipePtrInput `pulumi:"passwordRecipe"` + Purpose pulumi.StringPtrInput `pulumi:"purpose"` + // (Only applies to the database category) The type of database. One of ["db2" "filemaker" "msaccess" "mssql" "mysql" "oracle" "postgresql" "sqlite" "other"] + Type pulumi.StringPtrInput `pulumi:"type"` + Value pulumi.StringPtrInput `pulumi:"value"` +} + +func (ItemSectionFieldArgs) ElementType() reflect.Type { + return reflect.TypeOf((*ItemSectionField)(nil)).Elem() +} + +func (i ItemSectionFieldArgs) ToItemSectionFieldOutput() ItemSectionFieldOutput { + return i.ToItemSectionFieldOutputWithContext(context.Background()) +} + +func (i ItemSectionFieldArgs) ToItemSectionFieldOutputWithContext(ctx context.Context) ItemSectionFieldOutput { + return pulumi.ToOutputWithContext(ctx, i).(ItemSectionFieldOutput) +} + +// ItemSectionFieldArrayInput is an input type that accepts ItemSectionFieldArray and ItemSectionFieldArrayOutput values. +// You can construct a concrete instance of `ItemSectionFieldArrayInput` via: +// +// ItemSectionFieldArray{ ItemSectionFieldArgs{...} } +type ItemSectionFieldArrayInput interface { + pulumi.Input + + ToItemSectionFieldArrayOutput() ItemSectionFieldArrayOutput + ToItemSectionFieldArrayOutputWithContext(context.Context) ItemSectionFieldArrayOutput +} + +type ItemSectionFieldArray []ItemSectionFieldInput + +func (ItemSectionFieldArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]ItemSectionField)(nil)).Elem() +} + +func (i ItemSectionFieldArray) ToItemSectionFieldArrayOutput() ItemSectionFieldArrayOutput { + return i.ToItemSectionFieldArrayOutputWithContext(context.Background()) +} + +func (i ItemSectionFieldArray) ToItemSectionFieldArrayOutputWithContext(ctx context.Context) ItemSectionFieldArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(ItemSectionFieldArrayOutput) +} + +type ItemSectionFieldOutput struct{ *pulumi.OutputState } + +func (ItemSectionFieldOutput) ElementType() reflect.Type { + return reflect.TypeOf((*ItemSectionField)(nil)).Elem() +} + +func (o ItemSectionFieldOutput) ToItemSectionFieldOutput() ItemSectionFieldOutput { + return o +} + +func (o ItemSectionFieldOutput) ToItemSectionFieldOutputWithContext(ctx context.Context) ItemSectionFieldOutput { + return o +} + +func (o ItemSectionFieldOutput) Id() pulumi.StringPtrOutput { + return o.ApplyT(func(v ItemSectionField) *string { return v.Id }).(pulumi.StringPtrOutput) +} + +func (o ItemSectionFieldOutput) Label() pulumi.StringOutput { + return o.ApplyT(func(v ItemSectionField) string { return v.Label }).(pulumi.StringOutput) +} + +// Password for this item. +func (o ItemSectionFieldOutput) PasswordRecipe() ItemSectionFieldPasswordRecipePtrOutput { + return o.ApplyT(func(v ItemSectionField) *ItemSectionFieldPasswordRecipe { return v.PasswordRecipe }).(ItemSectionFieldPasswordRecipePtrOutput) +} + +func (o ItemSectionFieldOutput) Purpose() pulumi.StringPtrOutput { + return o.ApplyT(func(v ItemSectionField) *string { return v.Purpose }).(pulumi.StringPtrOutput) +} + +// (Only applies to the database category) The type of database. One of ["db2" "filemaker" "msaccess" "mssql" "mysql" "oracle" "postgresql" "sqlite" "other"] +func (o ItemSectionFieldOutput) Type() pulumi.StringPtrOutput { + return o.ApplyT(func(v ItemSectionField) *string { return v.Type }).(pulumi.StringPtrOutput) +} + +func (o ItemSectionFieldOutput) Value() pulumi.StringPtrOutput { + return o.ApplyT(func(v ItemSectionField) *string { return v.Value }).(pulumi.StringPtrOutput) +} + +type ItemSectionFieldArrayOutput struct{ *pulumi.OutputState } + +func (ItemSectionFieldArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]ItemSectionField)(nil)).Elem() +} + +func (o ItemSectionFieldArrayOutput) ToItemSectionFieldArrayOutput() ItemSectionFieldArrayOutput { + return o +} + +func (o ItemSectionFieldArrayOutput) ToItemSectionFieldArrayOutputWithContext(ctx context.Context) ItemSectionFieldArrayOutput { + return o +} + +func (o ItemSectionFieldArrayOutput) Index(i pulumi.IntInput) ItemSectionFieldOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) ItemSectionField { + return vs[0].([]ItemSectionField)[vs[1].(int)] + }).(ItemSectionFieldOutput) +} + +type ItemSectionFieldPasswordRecipe struct { + // Use digits [0-9] when generating the password. + Digits *bool `pulumi:"digits"` + // The length of the password to be generated. + Length *int `pulumi:"length"` + // Use letters [a-zA-Z] when generating the password. + Letters *bool `pulumi:"letters"` + // Use symbols [!@.-_*] when generating the password. + Symbols *bool `pulumi:"symbols"` +} + +// ItemSectionFieldPasswordRecipeInput is an input type that accepts ItemSectionFieldPasswordRecipeArgs and ItemSectionFieldPasswordRecipeOutput values. +// You can construct a concrete instance of `ItemSectionFieldPasswordRecipeInput` via: +// +// ItemSectionFieldPasswordRecipeArgs{...} +type ItemSectionFieldPasswordRecipeInput interface { + pulumi.Input + + ToItemSectionFieldPasswordRecipeOutput() ItemSectionFieldPasswordRecipeOutput + ToItemSectionFieldPasswordRecipeOutputWithContext(context.Context) ItemSectionFieldPasswordRecipeOutput +} + +type ItemSectionFieldPasswordRecipeArgs struct { + // Use digits [0-9] when generating the password. + Digits pulumi.BoolPtrInput `pulumi:"digits"` + // The length of the password to be generated. + Length pulumi.IntPtrInput `pulumi:"length"` + // Use letters [a-zA-Z] when generating the password. + Letters pulumi.BoolPtrInput `pulumi:"letters"` + // Use symbols [!@.-_*] when generating the password. + Symbols pulumi.BoolPtrInput `pulumi:"symbols"` +} + +func (ItemSectionFieldPasswordRecipeArgs) ElementType() reflect.Type { + return reflect.TypeOf((*ItemSectionFieldPasswordRecipe)(nil)).Elem() +} + +func (i ItemSectionFieldPasswordRecipeArgs) ToItemSectionFieldPasswordRecipeOutput() ItemSectionFieldPasswordRecipeOutput { + return i.ToItemSectionFieldPasswordRecipeOutputWithContext(context.Background()) +} + +func (i ItemSectionFieldPasswordRecipeArgs) ToItemSectionFieldPasswordRecipeOutputWithContext(ctx context.Context) ItemSectionFieldPasswordRecipeOutput { + return pulumi.ToOutputWithContext(ctx, i).(ItemSectionFieldPasswordRecipeOutput) +} + +func (i ItemSectionFieldPasswordRecipeArgs) ToItemSectionFieldPasswordRecipePtrOutput() ItemSectionFieldPasswordRecipePtrOutput { + return i.ToItemSectionFieldPasswordRecipePtrOutputWithContext(context.Background()) +} + +func (i ItemSectionFieldPasswordRecipeArgs) ToItemSectionFieldPasswordRecipePtrOutputWithContext(ctx context.Context) ItemSectionFieldPasswordRecipePtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(ItemSectionFieldPasswordRecipeOutput).ToItemSectionFieldPasswordRecipePtrOutputWithContext(ctx) +} + +// ItemSectionFieldPasswordRecipePtrInput is an input type that accepts ItemSectionFieldPasswordRecipeArgs, ItemSectionFieldPasswordRecipePtr and ItemSectionFieldPasswordRecipePtrOutput values. +// You can construct a concrete instance of `ItemSectionFieldPasswordRecipePtrInput` via: +// +// ItemSectionFieldPasswordRecipeArgs{...} +// +// or: +// +// nil +type ItemSectionFieldPasswordRecipePtrInput interface { + pulumi.Input + + ToItemSectionFieldPasswordRecipePtrOutput() ItemSectionFieldPasswordRecipePtrOutput + ToItemSectionFieldPasswordRecipePtrOutputWithContext(context.Context) ItemSectionFieldPasswordRecipePtrOutput +} + +type itemSectionFieldPasswordRecipePtrType ItemSectionFieldPasswordRecipeArgs + +func ItemSectionFieldPasswordRecipePtr(v *ItemSectionFieldPasswordRecipeArgs) ItemSectionFieldPasswordRecipePtrInput { + return (*itemSectionFieldPasswordRecipePtrType)(v) +} + +func (*itemSectionFieldPasswordRecipePtrType) ElementType() reflect.Type { + return reflect.TypeOf((**ItemSectionFieldPasswordRecipe)(nil)).Elem() +} + +func (i *itemSectionFieldPasswordRecipePtrType) ToItemSectionFieldPasswordRecipePtrOutput() ItemSectionFieldPasswordRecipePtrOutput { + return i.ToItemSectionFieldPasswordRecipePtrOutputWithContext(context.Background()) +} + +func (i *itemSectionFieldPasswordRecipePtrType) ToItemSectionFieldPasswordRecipePtrOutputWithContext(ctx context.Context) ItemSectionFieldPasswordRecipePtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(ItemSectionFieldPasswordRecipePtrOutput) +} + +type ItemSectionFieldPasswordRecipeOutput struct{ *pulumi.OutputState } + +func (ItemSectionFieldPasswordRecipeOutput) ElementType() reflect.Type { + return reflect.TypeOf((*ItemSectionFieldPasswordRecipe)(nil)).Elem() +} + +func (o ItemSectionFieldPasswordRecipeOutput) ToItemSectionFieldPasswordRecipeOutput() ItemSectionFieldPasswordRecipeOutput { + return o +} + +func (o ItemSectionFieldPasswordRecipeOutput) ToItemSectionFieldPasswordRecipeOutputWithContext(ctx context.Context) ItemSectionFieldPasswordRecipeOutput { + return o +} + +func (o ItemSectionFieldPasswordRecipeOutput) ToItemSectionFieldPasswordRecipePtrOutput() ItemSectionFieldPasswordRecipePtrOutput { + return o.ToItemSectionFieldPasswordRecipePtrOutputWithContext(context.Background()) +} + +func (o ItemSectionFieldPasswordRecipeOutput) ToItemSectionFieldPasswordRecipePtrOutputWithContext(ctx context.Context) ItemSectionFieldPasswordRecipePtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v ItemSectionFieldPasswordRecipe) *ItemSectionFieldPasswordRecipe { + return &v + }).(ItemSectionFieldPasswordRecipePtrOutput) +} + +// Use digits [0-9] when generating the password. +func (o ItemSectionFieldPasswordRecipeOutput) Digits() pulumi.BoolPtrOutput { + return o.ApplyT(func(v ItemSectionFieldPasswordRecipe) *bool { return v.Digits }).(pulumi.BoolPtrOutput) +} + +// The length of the password to be generated. +func (o ItemSectionFieldPasswordRecipeOutput) Length() pulumi.IntPtrOutput { + return o.ApplyT(func(v ItemSectionFieldPasswordRecipe) *int { return v.Length }).(pulumi.IntPtrOutput) +} + +// Use letters [a-zA-Z] when generating the password. +func (o ItemSectionFieldPasswordRecipeOutput) Letters() pulumi.BoolPtrOutput { + return o.ApplyT(func(v ItemSectionFieldPasswordRecipe) *bool { return v.Letters }).(pulumi.BoolPtrOutput) +} + +// Use symbols [!@.-_*] when generating the password. +func (o ItemSectionFieldPasswordRecipeOutput) Symbols() pulumi.BoolPtrOutput { + return o.ApplyT(func(v ItemSectionFieldPasswordRecipe) *bool { return v.Symbols }).(pulumi.BoolPtrOutput) +} + +type ItemSectionFieldPasswordRecipePtrOutput struct{ *pulumi.OutputState } + +func (ItemSectionFieldPasswordRecipePtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**ItemSectionFieldPasswordRecipe)(nil)).Elem() +} + +func (o ItemSectionFieldPasswordRecipePtrOutput) ToItemSectionFieldPasswordRecipePtrOutput() ItemSectionFieldPasswordRecipePtrOutput { + return o +} + +func (o ItemSectionFieldPasswordRecipePtrOutput) ToItemSectionFieldPasswordRecipePtrOutputWithContext(ctx context.Context) ItemSectionFieldPasswordRecipePtrOutput { + return o +} + +func (o ItemSectionFieldPasswordRecipePtrOutput) Elem() ItemSectionFieldPasswordRecipeOutput { + return o.ApplyT(func(v *ItemSectionFieldPasswordRecipe) ItemSectionFieldPasswordRecipe { + if v != nil { + return *v + } + var ret ItemSectionFieldPasswordRecipe + return ret + }).(ItemSectionFieldPasswordRecipeOutput) +} + +// Use digits [0-9] when generating the password. +func (o ItemSectionFieldPasswordRecipePtrOutput) Digits() pulumi.BoolPtrOutput { + return o.ApplyT(func(v *ItemSectionFieldPasswordRecipe) *bool { + if v == nil { + return nil + } + return v.Digits + }).(pulumi.BoolPtrOutput) +} + +// The length of the password to be generated. +func (o ItemSectionFieldPasswordRecipePtrOutput) Length() pulumi.IntPtrOutput { + return o.ApplyT(func(v *ItemSectionFieldPasswordRecipe) *int { + if v == nil { + return nil + } + return v.Length + }).(pulumi.IntPtrOutput) +} + +// Use letters [a-zA-Z] when generating the password. +func (o ItemSectionFieldPasswordRecipePtrOutput) Letters() pulumi.BoolPtrOutput { + return o.ApplyT(func(v *ItemSectionFieldPasswordRecipe) *bool { + if v == nil { + return nil + } + return v.Letters + }).(pulumi.BoolPtrOutput) +} + +// Use symbols [!@.-_*] when generating the password. +func (o ItemSectionFieldPasswordRecipePtrOutput) Symbols() pulumi.BoolPtrOutput { + return o.ApplyT(func(v *ItemSectionFieldPasswordRecipe) *bool { + if v == nil { + return nil + } + return v.Symbols + }).(pulumi.BoolPtrOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*GetItemSectionInput)(nil)).Elem(), GetItemSectionArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetItemSectionArrayInput)(nil)).Elem(), GetItemSectionArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetItemSectionFieldInput)(nil)).Elem(), GetItemSectionFieldArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetItemSectionFieldArrayInput)(nil)).Elem(), GetItemSectionFieldArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*ItemPasswordRecipeInput)(nil)).Elem(), ItemPasswordRecipeArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ItemPasswordRecipePtrInput)(nil)).Elem(), ItemPasswordRecipeArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ItemSectionInput)(nil)).Elem(), ItemSectionArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ItemSectionArrayInput)(nil)).Elem(), ItemSectionArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*ItemSectionFieldInput)(nil)).Elem(), ItemSectionFieldArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ItemSectionFieldArrayInput)(nil)).Elem(), ItemSectionFieldArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*ItemSectionFieldPasswordRecipeInput)(nil)).Elem(), ItemSectionFieldPasswordRecipeArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ItemSectionFieldPasswordRecipePtrInput)(nil)).Elem(), ItemSectionFieldPasswordRecipeArgs{}) + pulumi.RegisterOutputType(GetItemSectionOutput{}) + pulumi.RegisterOutputType(GetItemSectionArrayOutput{}) + pulumi.RegisterOutputType(GetItemSectionFieldOutput{}) + pulumi.RegisterOutputType(GetItemSectionFieldArrayOutput{}) + pulumi.RegisterOutputType(ItemPasswordRecipeOutput{}) + pulumi.RegisterOutputType(ItemPasswordRecipePtrOutput{}) + pulumi.RegisterOutputType(ItemSectionOutput{}) + pulumi.RegisterOutputType(ItemSectionArrayOutput{}) + pulumi.RegisterOutputType(ItemSectionFieldOutput{}) + pulumi.RegisterOutputType(ItemSectionFieldArrayOutput{}) + pulumi.RegisterOutputType(ItemSectionFieldPasswordRecipeOutput{}) + pulumi.RegisterOutputType(ItemSectionFieldPasswordRecipePtrOutput{}) +} diff --git a/sdk/go/onepassword/pulumiUtilities.go b/sdk/go/onepassword/pulumiUtilities.go new file mode 100644 index 0000000..371f1a1 --- /dev/null +++ b/sdk/go/onepassword/pulumiUtilities.go @@ -0,0 +1,101 @@ +// Code generated by the Pulumi Terraform Bridge (tfgen) Tool DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package onepassword + +import ( + "fmt" + "os" + "reflect" + "regexp" + "strconv" + "strings" + + "github.com/blang/semver" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +type envParser func(v string) interface{} + +func parseEnvBool(v string) interface{} { + b, err := strconv.ParseBool(v) + if err != nil { + return nil + } + return b +} + +func parseEnvInt(v string) interface{} { + i, err := strconv.ParseInt(v, 0, 0) + if err != nil { + return nil + } + return int(i) +} + +func parseEnvFloat(v string) interface{} { + f, err := strconv.ParseFloat(v, 64) + if err != nil { + return nil + } + return f +} + +func parseEnvStringArray(v string) interface{} { + var result pulumi.StringArray + for _, item := range strings.Split(v, ";") { + result = append(result, pulumi.String(item)) + } + return result +} + +func getEnvOrDefault(def interface{}, parser envParser, vars ...string) interface{} { + for _, v := range vars { + if value := os.Getenv(v); value != "" { + if parser != nil { + return parser(value) + } + return value + } + } + return def +} + +// PkgVersion uses reflection to determine the version of the current package. +// If a version cannot be determined, v1 will be assumed. The second return +// value is always nil. +func PkgVersion() (semver.Version, error) { + type sentinal struct{} + pkgPath := reflect.TypeOf(sentinal{}).PkgPath() + re := regexp.MustCompile("^.*/pulumi-onepassword/sdk(/v\\d+)?") + if match := re.FindStringSubmatch(pkgPath); match != nil { + vStr := match[1] + if len(vStr) == 0 { // If the version capture group was empty, default to v1. + return semver.Version{Major: 1}, nil + } + return semver.MustParse(fmt.Sprintf("%s.0.0", vStr[2:])), nil + } + return semver.Version{Major: 1}, nil +} + +// isZero is a null safe check for if a value is it's types zero value. +func isZero(v interface{}) bool { + if v == nil { + return true + } + return reflect.ValueOf(v).IsZero() +} + +// pkgResourceDefaultOpts provides package level defaults to pulumi.OptionResource. +func pkgResourceDefaultOpts(opts []pulumi.ResourceOption) []pulumi.ResourceOption { + defaults := []pulumi.ResourceOption{pulumi.PluginDownloadURL("https://github.com/SimCubeLtd/pulumi-onepassword/releases/download/v${VERSION}")} + + return append(defaults, opts...) +} + +// pkgInvokeDefaultOpts provides package level defaults to pulumi.OptionInvoke. +func pkgInvokeDefaultOpts(opts []pulumi.InvokeOption) []pulumi.InvokeOption { + defaults := []pulumi.InvokeOption{pulumi.PluginDownloadURL("https://github.com/SimCubeLtd/pulumi-onepassword/releases/download/v${VERSION}")} + + return append(defaults, opts...) +} diff --git a/sdk/nodejs/Pulumi.yaml b/sdk/nodejs/Pulumi.yaml new file mode 100644 index 0000000..e69de29 diff --git a/sdk/nodejs/README.md b/sdk/nodejs/README.md new file mode 100644 index 0000000..89602c0 --- /dev/null +++ b/sdk/nodejs/README.md @@ -0,0 +1,4 @@ +> This provider is a derived work of the [Terraform Provider](https://github.com/1Password/terraform-provider-onepassword) +> distributed under [MPL 2.0](https://www.mozilla.org/en-US/MPL/2.0/). If you encounter a bug or missing feature, +> first check the [`pulumi/pulumi-onepassword` repo](https://github.com/pulumi/pulumi-onepassword/issues); however, if that doesn't turn up anything, +> please consult the source [`1Password/terraform-provider-onepassword` repo](https://github.com/1Password/terraform-provider-onepassword/issues). diff --git a/sdk/nodejs/config/index.ts b/sdk/nodejs/config/index.ts new file mode 100644 index 0000000..ed497ed --- /dev/null +++ b/sdk/nodejs/config/index.ts @@ -0,0 +1,5 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +// Export members: +export * from "./vars"; diff --git a/sdk/nodejs/config/vars.ts b/sdk/nodejs/config/vars.ts new file mode 100644 index 0000000..9d44f04 --- /dev/null +++ b/sdk/nodejs/config/vars.ts @@ -0,0 +1,32 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as utilities from "../utilities"; + +declare var exports: any; +const __config = new pulumi.Config("onepassword"); + +/** + * A valid token for your 1Password Connect API. Can also be sourced from OP_CONNECT_TOKEN. + */ +export declare const token: string | undefined; +Object.defineProperty(exports, "token", { + get() { + return __config.get("token"); + }, + enumerable: true, +}); + +/** + * The HTTP(S) URL where your 1Password Connect API can be found. Must be provided through the the OP_CONNECT_HOST + * environment variable if this attribute is not set. + */ +export declare const url: string | undefined; +Object.defineProperty(exports, "url", { + get() { + return __config.get("url"); + }, + enumerable: true, +}); + diff --git a/sdk/nodejs/getItem.ts b/sdk/nodejs/getItem.ts new file mode 100644 index 0000000..7819e07 --- /dev/null +++ b/sdk/nodejs/getItem.ts @@ -0,0 +1,133 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import { input as inputs, output as outputs } from "./types"; +import * as utilities from "./utilities"; + +/** + * Use this data source to get details of an item by its vault uuid and either the title or the uuid of the item. + * + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as onepassword from "@pulumi/onepassword"; + * + * const example = onepassword.GetItem({ + * vault: _var.demo_vault, + * uuid: onepassword_item.demo_sections.uuid, + * }); + * ``` + */ +export function getItem(args: GetItemArgs, opts?: pulumi.InvokeOptions): Promise { + if (!opts) { + opts = {} + } + + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + return pulumi.runtime.invoke("onepassword:index/getItem:GetItem", { + "title": args.title, + "uuid": args.uuid, + "vault": args.vault, + }, opts); +} + +/** + * A collection of arguments for invoking GetItem. + */ +export interface GetItemArgs { + /** + * The title of the item to retrieve. This field will be populated with the title of the item if the item it looked up by its UUID. + */ + title?: string; + /** + * The UUID of the item to retrieve. This field will be populated with the UUID of the item if the item it looked up by its title. + */ + uuid?: string; + /** + * The UUID of the vault the item is in. + */ + vault: string; +} + +/** + * A collection of values returned by GetItem. + */ +export interface GetItemResult { + /** + * The category of the item. One of ["login" "password" "database"] + */ + readonly category: string; + /** + * (Only applies to the database category) The name of the database. + */ + readonly database: string; + /** + * (Only applies to the database category) The address where the database can be found + */ + readonly hostname: string; + readonly id: string; + /** + * Password for this item. + */ + readonly password: string; + /** + * (Only applies to the database category) The port the database is listening on. + */ + readonly port: string; + /** + * A list of custom sections in an item + */ + readonly sections: outputs.GetItemSection[]; + /** + * An array of strings of the tags assigned to the item. + */ + readonly tags: string[]; + /** + * The title of the item to retrieve. This field will be populated with the title of the item if the item it looked up by its UUID. + */ + readonly title: string; + /** + * (Only applies to the database category) The type of database. One of ["db2" "filemaker" "msaccess" "mssql" "mysql" "oracle" "postgresql" "sqlite" "other"] + */ + readonly type: string; + /** + * The primary URL for the item. + */ + readonly url: string; + /** + * Username for this item. + */ + readonly username: string; + /** + * The UUID of the item to retrieve. This field will be populated with the UUID of the item if the item it looked up by its title. + */ + readonly uuid: string; + /** + * The UUID of the vault the item is in. + */ + readonly vault: string; +} + +export function getItemOutput(args: GetItemOutputArgs, opts?: pulumi.InvokeOptions): pulumi.Output { + return pulumi.output(args).apply(a => getItem(a, opts)) +} + +/** + * A collection of arguments for invoking GetItem. + */ +export interface GetItemOutputArgs { + /** + * The title of the item to retrieve. This field will be populated with the title of the item if the item it looked up by its UUID. + */ + title?: pulumi.Input; + /** + * The UUID of the item to retrieve. This field will be populated with the UUID of the item if the item it looked up by its title. + */ + uuid?: pulumi.Input; + /** + * The UUID of the vault the item is in. + */ + vault: pulumi.Input; +} diff --git a/sdk/nodejs/getVault.ts b/sdk/nodejs/getVault.ts new file mode 100644 index 0000000..726a8b3 --- /dev/null +++ b/sdk/nodejs/getVault.ts @@ -0,0 +1,72 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as utilities from "./utilities"; + +/** + * Use this data source to get details of a vault by either its name or uuid. + */ +export function getVault(args?: GetVaultArgs, opts?: pulumi.InvokeOptions): Promise { + args = args || {}; + if (!opts) { + opts = {} + } + + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + return pulumi.runtime.invoke("onepassword:index/getVault:GetVault", { + "name": args.name, + "uuid": args.uuid, + }, opts); +} + +/** + * A collection of arguments for invoking GetVault. + */ +export interface GetVaultArgs { + /** + * The name of the vault to retrieve. This field will be populated with the name of the vault if the vault it looked up by its UUID. + */ + name?: string; + /** + * The UUID of the vault to retrieve. This field will be populated with the UUID of the vault if the vault it looked up by its name. + */ + uuid?: string; +} + +/** + * A collection of values returned by GetVault. + */ +export interface GetVaultResult { + /** + * The description of the vault. + */ + readonly description: string; + readonly id: string; + /** + * The name of the vault to retrieve. This field will be populated with the name of the vault if the vault it looked up by its UUID. + */ + readonly name: string; + /** + * The UUID of the vault to retrieve. This field will be populated with the UUID of the vault if the vault it looked up by its name. + */ + readonly uuid: string; +} + +export function getVaultOutput(args?: GetVaultOutputArgs, opts?: pulumi.InvokeOptions): pulumi.Output { + return pulumi.output(args).apply(a => getVault(a, opts)) +} + +/** + * A collection of arguments for invoking GetVault. + */ +export interface GetVaultOutputArgs { + /** + * The name of the vault to retrieve. This field will be populated with the name of the vault if the vault it looked up by its UUID. + */ + name?: pulumi.Input; + /** + * The UUID of the vault to retrieve. This field will be populated with the UUID of the vault if the vault it looked up by its name. + */ + uuid?: pulumi.Input; +} diff --git a/sdk/nodejs/index.ts b/sdk/nodejs/index.ts new file mode 100644 index 0000000..b8675df --- /dev/null +++ b/sdk/nodejs/index.ts @@ -0,0 +1,48 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as utilities from "./utilities"; + +// Export members: +export * from "./getItem"; +export * from "./getVault"; +export * from "./item"; +export * from "./provider"; + +// Export sub-modules: +import * as config from "./config"; +import * as types from "./types"; + +export { + config, + types, +}; + +// Import resources to register: +import { Item } from "./item"; + +const _module = { + version: utilities.getVersion(), + construct: (name: string, type: string, urn: string): pulumi.Resource => { + switch (type) { + case "onepassword:index/item:Item": + return new Item(name, undefined, { urn }) + default: + throw new Error(`unknown resource type ${type}`); + } + }, +}; +pulumi.runtime.registerResourceModule("onepassword", "index/item", _module) + +import { Provider } from "./provider"; + +pulumi.runtime.registerResourcePackage("onepassword", { + version: utilities.getVersion(), + constructProvider: (name: string, type: string, urn: string): pulumi.ProviderResource => { + if (type !== "pulumi:providers:onepassword") { + throw new Error(`unknown provider type ${type}`); + } + return new Provider(name, undefined, { urn }); + }, +}); diff --git a/sdk/nodejs/item.ts b/sdk/nodejs/item.ts new file mode 100644 index 0000000..362d487 --- /dev/null +++ b/sdk/nodejs/item.ts @@ -0,0 +1,309 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import { input as inputs, output as outputs } from "./types"; +import * as utilities from "./utilities"; + +/** + * A 1Password item. + * + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as pulumi_onepassword from "@SimCubeLtd/pulumi-onepassword"; + * + * const demoPassword = new onepassword.Item("demoPassword", { + * vault: _var.demo_vault, + * title: "Demo Password Recipe", + * category: "password", + * passwordRecipe: { + * length: 40, + * symbols: false, + * }, + * }); + * const demoLogin = new onepassword.Item("demoLogin", { + * vault: _var.demo_vault, + * title: "Demo Terraform Login", + * category: "login", + * username: "test@example.com", + * }); + * const demoDb = new onepassword.Item("demoDb", { + * vault: _var.demo_vault, + * category: "database", + * type: "mysql", + * title: "Demo TF Database", + * username: "root", + * database: "Example MySQL Instance", + * hostname: "localhost", + * port: "3306", + * }); + * ``` + * + * ## Import + * + * # import an existing 1Password item + * + * ```sh + * $ pulumi import onepassword:index/item:Item myitem vaults//items/ + * ``` + */ +export class Item extends pulumi.CustomResource { + /** + * Get an existing Item resource's state with the given name, ID, and optional extra + * properties used to qualify the lookup. + * + * @param name The _unique_ name of the resulting resource. + * @param id The _unique_ provider ID of the resource to lookup. + * @param state Any extra arguments used during the lookup. + * @param opts Optional settings to control the behavior of the CustomResource. + */ + public static get(name: string, id: pulumi.Input, state?: ItemState, opts?: pulumi.CustomResourceOptions): Item { + return new Item(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'onepassword:index/item:Item'; + + /** + * Returns true if the given object is an instance of Item. This is designed to work even + * when multiple copies of the Pulumi SDK have been loaded into the same process. + */ + public static isInstance(obj: any): obj is Item { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === Item.__pulumiType; + } + + /** + * The category of the item. One of ["login" "password" "database"] + */ + public readonly category!: pulumi.Output; + /** + * (Only applies to the database category) The name of the database. + */ + public readonly database!: pulumi.Output; + /** + * (Only applies to the database category) The address where the database can be found + */ + public readonly hostname!: pulumi.Output; + /** + * Password for this item. + */ + public readonly password!: pulumi.Output; + /** + * Password for this item. + */ + public readonly passwordRecipe!: pulumi.Output; + /** + * (Only applies to the database category) The port the database is listening on. + */ + public readonly port!: pulumi.Output; + /** + * A list of custom sections in an item + */ + public readonly sections!: pulumi.Output; + /** + * An array of strings of the tags assigned to the item. + */ + public readonly tags!: pulumi.Output; + /** + * The title of the item. + */ + public readonly title!: pulumi.Output; + /** + * (Only applies to the database category) The type of database. One of ["db2" "filemaker" "msaccess" "mssql" "mysql" "oracle" "postgresql" "sqlite" "other"] + */ + public readonly type!: pulumi.Output; + /** + * The primary URL for the item. + */ + public readonly url!: pulumi.Output; + /** + * Username for this item. + */ + public readonly username!: pulumi.Output; + /** + * The UUID of the item. Item identifiers are unique within a specific vault. + */ + public /*out*/ readonly uuid!: pulumi.Output; + /** + * The UUID of the vault the item is in. + */ + public readonly vault!: pulumi.Output; + + /** + * Create a Item resource with the given unique name, arguments, and options. + * + * @param name The _unique_ name of the resource. + * @param args The arguments to use to populate this resource's properties. + * @param opts A bag of options that control this resource's behavior. + */ + constructor(name: string, args: ItemArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: ItemArgs | ItemState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as ItemState | undefined; + resourceInputs["category"] = state ? state.category : undefined; + resourceInputs["database"] = state ? state.database : undefined; + resourceInputs["hostname"] = state ? state.hostname : undefined; + resourceInputs["password"] = state ? state.password : undefined; + resourceInputs["passwordRecipe"] = state ? state.passwordRecipe : undefined; + resourceInputs["port"] = state ? state.port : undefined; + resourceInputs["sections"] = state ? state.sections : undefined; + resourceInputs["tags"] = state ? state.tags : undefined; + resourceInputs["title"] = state ? state.title : undefined; + resourceInputs["type"] = state ? state.type : undefined; + resourceInputs["url"] = state ? state.url : undefined; + resourceInputs["username"] = state ? state.username : undefined; + resourceInputs["uuid"] = state ? state.uuid : undefined; + resourceInputs["vault"] = state ? state.vault : undefined; + } else { + const args = argsOrState as ItemArgs | undefined; + if ((!args || args.vault === undefined) && !opts.urn) { + throw new Error("Missing required property 'vault'"); + } + resourceInputs["category"] = args ? args.category : undefined; + resourceInputs["database"] = args ? args.database : undefined; + resourceInputs["hostname"] = args?.hostname ? pulumi.secret(args.hostname) : undefined; + resourceInputs["password"] = args?.password ? pulumi.secret(args.password) : undefined; + resourceInputs["passwordRecipe"] = args ? args.passwordRecipe : undefined; + resourceInputs["port"] = args?.port ? pulumi.secret(args.port) : undefined; + resourceInputs["sections"] = args ? args.sections : undefined; + resourceInputs["tags"] = args ? args.tags : undefined; + resourceInputs["title"] = args ? args.title : undefined; + resourceInputs["type"] = args ? args.type : undefined; + resourceInputs["url"] = args ? args.url : undefined; + resourceInputs["username"] = args?.username ? pulumi.secret(args.username) : undefined; + resourceInputs["vault"] = args?.vault ? pulumi.secret(args.vault) : undefined; + resourceInputs["uuid"] = undefined /*out*/; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + const secretOpts = { additionalSecretOutputs: ["hostname", "password", "port", "username", "vault"] }; + opts = pulumi.mergeOptions(opts, secretOpts); + super(Item.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering Item resources. + */ +export interface ItemState { + /** + * The category of the item. One of ["login" "password" "database"] + */ + category?: pulumi.Input; + /** + * (Only applies to the database category) The name of the database. + */ + database?: pulumi.Input; + /** + * (Only applies to the database category) The address where the database can be found + */ + hostname?: pulumi.Input; + /** + * Password for this item. + */ + password?: pulumi.Input; + /** + * Password for this item. + */ + passwordRecipe?: pulumi.Input; + /** + * (Only applies to the database category) The port the database is listening on. + */ + port?: pulumi.Input; + /** + * A list of custom sections in an item + */ + sections?: pulumi.Input[]>; + /** + * An array of strings of the tags assigned to the item. + */ + tags?: pulumi.Input[]>; + /** + * The title of the item. + */ + title?: pulumi.Input; + /** + * (Only applies to the database category) The type of database. One of ["db2" "filemaker" "msaccess" "mssql" "mysql" "oracle" "postgresql" "sqlite" "other"] + */ + type?: pulumi.Input; + /** + * The primary URL for the item. + */ + url?: pulumi.Input; + /** + * Username for this item. + */ + username?: pulumi.Input; + /** + * The UUID of the item. Item identifiers are unique within a specific vault. + */ + uuid?: pulumi.Input; + /** + * The UUID of the vault the item is in. + */ + vault?: pulumi.Input; +} + +/** + * The set of arguments for constructing a Item resource. + */ +export interface ItemArgs { + /** + * The category of the item. One of ["login" "password" "database"] + */ + category?: pulumi.Input; + /** + * (Only applies to the database category) The name of the database. + */ + database?: pulumi.Input; + /** + * (Only applies to the database category) The address where the database can be found + */ + hostname?: pulumi.Input; + /** + * Password for this item. + */ + password?: pulumi.Input; + /** + * Password for this item. + */ + passwordRecipe?: pulumi.Input; + /** + * (Only applies to the database category) The port the database is listening on. + */ + port?: pulumi.Input; + /** + * A list of custom sections in an item + */ + sections?: pulumi.Input[]>; + /** + * An array of strings of the tags assigned to the item. + */ + tags?: pulumi.Input[]>; + /** + * The title of the item. + */ + title?: pulumi.Input; + /** + * (Only applies to the database category) The type of database. One of ["db2" "filemaker" "msaccess" "mssql" "mysql" "oracle" "postgresql" "sqlite" "other"] + */ + type?: pulumi.Input; + /** + * The primary URL for the item. + */ + url?: pulumi.Input; + /** + * Username for this item. + */ + username?: pulumi.Input; + /** + * The UUID of the vault the item is in. + */ + vault: pulumi.Input; +} diff --git a/sdk/nodejs/package.json b/sdk/nodejs/package.json new file mode 100644 index 0000000..d727a01 --- /dev/null +++ b/sdk/nodejs/package.json @@ -0,0 +1,29 @@ +{ + "name": "@SimCubeLtd/pulumi-onepassword", + "version": "${VERSION}", + "description": "A Pulumi package for creating and managing onepassword resources.", + "keywords": [ + "pulumi", + "onepassword", + "category/cloud" + ], + "homepage": "https://github.com/SimCubeLtd/pulumi-onepassword", + "repository": "https://github.com/SimCubeLtd/pulumi-onepassword", + "license": "Apache-2.0", + "scripts": { + "build": "tsc", + "install": "node scripts/install-pulumi-plugin.js resource onepassword ${VERSION}" + }, + "dependencies": { + "@pulumi/pulumi": "^3.0.0" + }, + "devDependencies": { + "@types/mime": "^2.0.0", + "@types/node": "^10.0.0", + "typescript": "^4.3.5" + }, + "pulumi": { + "resource": true, + "pluginDownloadURL": "https://github.com/SimCubeLtd/pulumi-onepassword/releases/download/v${VERSION}" + } +} diff --git a/sdk/nodejs/provider.ts b/sdk/nodejs/provider.ts new file mode 100644 index 0000000..4bec0cf --- /dev/null +++ b/sdk/nodejs/provider.ts @@ -0,0 +1,73 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as utilities from "./utilities"; + +/** + * The provider type for the onepassword package. By default, resources use package-wide configuration + * settings, however an explicit `Provider` instance may be created and passed during resource + * construction to achieve fine-grained programmatic control over provider settings. See the + * [documentation](https://www.pulumi.com/docs/reference/programming-model/#providers) for more information. + */ +export class Provider extends pulumi.ProviderResource { + /** @internal */ + public static readonly __pulumiType = 'onepassword'; + + /** + * Returns true if the given object is an instance of Provider. This is designed to work even + * when multiple copies of the Pulumi SDK have been loaded into the same process. + */ + public static isInstance(obj: any): obj is Provider { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === Provider.__pulumiType; + } + + /** + * A valid token for your 1Password Connect API. Can also be sourced from OP_CONNECT_TOKEN. + */ + public readonly token!: pulumi.Output; + /** + * The HTTP(S) URL where your 1Password Connect API can be found. Must be provided through the the OP_CONNECT_HOST + * environment variable if this attribute is not set. + */ + public readonly url!: pulumi.Output; + + /** + * Create a Provider resource with the given unique name, arguments, and options. + * + * @param name The _unique_ name of the resource. + * @param args The arguments to use to populate this resource's properties. + * @param opts A bag of options that control this resource's behavior. + */ + constructor(name: string, args: ProviderArgs, opts?: pulumi.ResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + { + if ((!args || args.token === undefined) && !opts.urn) { + throw new Error("Missing required property 'token'"); + } + resourceInputs["token"] = args ? args.token : undefined; + resourceInputs["url"] = args ? args.url : undefined; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + super(Provider.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * The set of arguments for constructing a Provider resource. + */ +export interface ProviderArgs { + /** + * A valid token for your 1Password Connect API. Can also be sourced from OP_CONNECT_TOKEN. + */ + token: pulumi.Input; + /** + * The HTTP(S) URL where your 1Password Connect API can be found. Must be provided through the the OP_CONNECT_HOST + * environment variable if this attribute is not set. + */ + url?: pulumi.Input; +} diff --git a/sdk/nodejs/scripts/install-pulumi-plugin.js b/sdk/nodejs/scripts/install-pulumi-plugin.js new file mode 100644 index 0000000..dde692e --- /dev/null +++ b/sdk/nodejs/scripts/install-pulumi-plugin.js @@ -0,0 +1,26 @@ +"use strict"; +var childProcess = require("child_process"); + +var args = process.argv.slice(2); + +if (args.indexOf("${VERSION}") !== -1) { + process.exit(0); +} + +var res = childProcess.spawnSync("pulumi", ["plugin", "install", "--server", "https://github.com/SimCubeLtd/pulumi-onepassword/releases/download/v${VERSION}"].concat(args), { + stdio: ["ignore", "inherit", "inherit"] +}); + +if (res.error && res.error.code === "ENOENT") { + console.error("\nThere was an error installing the resource provider plugin. " + + "It looks like `pulumi` is not installed on your system. " + + "Please visit https://pulumi.com/ to install the Pulumi CLI.\n" + + "You may try manually installing the plugin by running " + + "`pulumi plugin install " + args.join(" ") + "`"); +} else if (res.error || res.status !== 0) { + console.error("\nThere was an error installing the resource provider plugin. " + + "You may try to manually installing the plugin by running " + + "`pulumi plugin install " + args.join(" ") + "`"); +} + +process.exit(0); diff --git a/sdk/nodejs/tsconfig.json b/sdk/nodejs/tsconfig.json new file mode 100644 index 0000000..d4f1632 --- /dev/null +++ b/sdk/nodejs/tsconfig.json @@ -0,0 +1,28 @@ +{ + "compilerOptions": { + "outDir": "bin", + "target": "es2016", + "module": "commonjs", + "moduleResolution": "node", + "declaration": true, + "sourceMap": true, + "stripInternal": true, + "experimentalDecorators": true, + "noFallthroughCasesInSwitch": true, + "forceConsistentCasingInFileNames": true, + "strict": true + }, + "files": [ + "config/index.ts", + "config/vars.ts", + "getItem.ts", + "getVault.ts", + "index.ts", + "item.ts", + "provider.ts", + "types/index.ts", + "types/input.ts", + "types/output.ts", + "utilities.ts" + ] +} diff --git a/sdk/nodejs/types/index.ts b/sdk/nodejs/types/index.ts new file mode 100644 index 0000000..a6057c6 --- /dev/null +++ b/sdk/nodejs/types/index.ts @@ -0,0 +1,11 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +// Export sub-modules: +import * as input from "./input"; +import * as output from "./output"; + +export { + input, + output, +}; diff --git a/sdk/nodejs/types/input.ts b/sdk/nodejs/types/input.ts new file mode 100644 index 0000000..6c49570 --- /dev/null +++ b/sdk/nodejs/types/input.ts @@ -0,0 +1,73 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import { input as inputs, output as outputs } from "../types"; + +export interface ItemPasswordRecipe { + /** + * Use digits [0-9] when generating the password. + */ + digits?: pulumi.Input; + /** + * The length of the password to be generated. + */ + length?: pulumi.Input; + /** + * Use letters [a-zA-Z] when generating the password. + */ + letters?: pulumi.Input; + /** + * Use symbols [!@.-_*] when generating the password. + */ + symbols?: pulumi.Input; +} + +export interface ItemSection { + /** + * A list of custom fields in the section. + */ + fields?: pulumi.Input[]>; + /** + * A unique identifier for the section. + */ + id?: pulumi.Input; + /** + * The label for the section. + */ + label: pulumi.Input; +} + +export interface ItemSectionField { + id?: pulumi.Input; + label: pulumi.Input; + /** + * Password for this item. + */ + passwordRecipe?: pulumi.Input; + purpose?: pulumi.Input; + /** + * (Only applies to the database category) The type of database. One of ["db2" "filemaker" "msaccess" "mssql" "mysql" "oracle" "postgresql" "sqlite" "other"] + */ + type?: pulumi.Input; + value?: pulumi.Input; +} + +export interface ItemSectionFieldPasswordRecipe { + /** + * Use digits [0-9] when generating the password. + */ + digits?: pulumi.Input; + /** + * The length of the password to be generated. + */ + length?: pulumi.Input; + /** + * Use letters [a-zA-Z] when generating the password. + */ + letters?: pulumi.Input; + /** + * Use symbols [!@.-_*] when generating the password. + */ + symbols?: pulumi.Input; +} diff --git a/sdk/nodejs/types/output.ts b/sdk/nodejs/types/output.ts new file mode 100644 index 0000000..3b268b6 --- /dev/null +++ b/sdk/nodejs/types/output.ts @@ -0,0 +1,91 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import { input as inputs, output as outputs } from "../types"; + +export interface GetItemSection { + fields: outputs.GetItemSectionField[]; + id: string; + label: string; +} + +export interface GetItemSectionField { + id: string; + label: string; + purpose: string; + /** + * (Only applies to the database category) The type of database. One of ["db2" "filemaker" "msaccess" "mssql" "mysql" "oracle" "postgresql" "sqlite" "other"] + */ + type: string; + value: string; +} + +export interface ItemPasswordRecipe { + /** + * Use digits [0-9] when generating the password. + */ + digits?: boolean; + /** + * The length of the password to be generated. + */ + length?: number; + /** + * Use letters [a-zA-Z] when generating the password. + */ + letters?: boolean; + /** + * Use symbols [!@.-_*] when generating the password. + */ + symbols?: boolean; +} + +export interface ItemSection { + /** + * A list of custom fields in the section. + */ + fields?: outputs.ItemSectionField[]; + /** + * A unique identifier for the section. + */ + id: string; + /** + * The label for the section. + */ + label: string; +} + +export interface ItemSectionField { + id: string; + label: string; + /** + * Password for this item. + */ + passwordRecipe?: outputs.ItemSectionFieldPasswordRecipe; + purpose?: string; + /** + * (Only applies to the database category) The type of database. One of ["db2" "filemaker" "msaccess" "mssql" "mysql" "oracle" "postgresql" "sqlite" "other"] + */ + type?: string; + value: string; +} + +export interface ItemSectionFieldPasswordRecipe { + /** + * Use digits [0-9] when generating the password. + */ + digits?: boolean; + /** + * The length of the password to be generated. + */ + length?: number; + /** + * Use letters [a-zA-Z] when generating the password. + */ + letters?: boolean; + /** + * Use symbols [!@.-_*] when generating the password. + */ + symbols?: boolean; +} + diff --git a/sdk/nodejs/utilities.ts b/sdk/nodejs/utilities.ts new file mode 100644 index 0000000..8802413 --- /dev/null +++ b/sdk/nodejs/utilities.ts @@ -0,0 +1,54 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + + +export function getEnv(...vars: string[]): string | undefined { + for (const v of vars) { + const value = process.env[v]; + if (value) { + return value; + } + } + return undefined; +} + +export function getEnvBoolean(...vars: string[]): boolean | undefined { + const s = getEnv(...vars); + if (s !== undefined) { + // NOTE: these values are taken from https://golang.org/src/strconv/atob.go?s=351:391#L1, which is what + // Terraform uses internally when parsing boolean values. + if (["1", "t", "T", "true", "TRUE", "True"].find(v => v === s) !== undefined) { + return true; + } + if (["0", "f", "F", "false", "FALSE", "False"].find(v => v === s) !== undefined) { + return false; + } + } + return undefined; +} + +export function getEnvNumber(...vars: string[]): number | undefined { + const s = getEnv(...vars); + if (s !== undefined) { + const f = parseFloat(s); + if (!isNaN(f)) { + return f; + } + } + return undefined; +} + +export function getVersion(): string { + let version = require('./package.json').version; + // Node allows for the version to be prefixed by a "v", while semver doesn't. + // If there is a v, strip it off. + if (version.indexOf('v') === 0) { + version = version.slice(1); + } + return version; +} + +/** @internal */ +export function resourceOptsDefaults(): any { + return { version: getVersion(), pluginDownloadURL: "https://github.com/SimCubeLtd/pulumi-onepassword/releases/download/v${VERSION}" }; +} diff --git a/sdk/python/Pulumi.yaml b/sdk/python/Pulumi.yaml new file mode 100644 index 0000000..e69de29 diff --git a/sdk/python/README.md b/sdk/python/README.md new file mode 100644 index 0000000..7d9f5f0 --- /dev/null +++ b/sdk/python/README.md @@ -0,0 +1,56 @@ +# 1Password Provider +https://1password.com/ + +  + +The 1Password resource provider for Pulumi lets you use 1Password resources in your Infrastructure as Code deployments. + + +## Installing + +This package is available in C#, TypeScript, Python and Go + +### .NET + +To use from .NET, install using `dotnet add package`: + +```bash +dotnet add package Pulumi.Onepassword +``` + +### Node.js (Java/TypeScript) + +```bash +npm install @SimCubeLtd/pulumi-onepassword +``` + +or `yarn`: + +```bash +yarn add @SimCubeLtd/pulumi-onepassword +``` + +### Python + +To use from Python, install using `pip`: + +```bash +pip install simcubeltd_pulumi_onepassword +``` + +### Go + +To use from Go, use `go get` to grab the latest version of the library: + +```bash +go get github.com/SimCubeLtd/pulumi-onepassword/sdk/go/onepassword +``` + +## Configuration + +The following configuration entries are available: + +| **Key** | **Value** | +|-------------------|:-----------------------------------------------------| +| onepassword:token | The access token for your 1Password Connect server | +| onepassword:url | URL where your 1Password Connect API is being served | \ No newline at end of file diff --git a/sdk/python/setup.py b/sdk/python/setup.py new file mode 100644 index 0000000..5651071 --- /dev/null +++ b/sdk/python/setup.py @@ -0,0 +1,66 @@ +# coding=utf-8 +# *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +# *** Do not edit by hand unless you're certain you know what you are doing! *** + +import errno +from setuptools import setup, find_packages +from setuptools.command.install import install +from subprocess import check_call + + +VERSION = "0.0.0" +PLUGIN_VERSION = "0.0.0" + +class InstallPluginCommand(install): + def run(self): + install.run(self) + try: + check_call(['pulumi', 'plugin', 'install', 'resource', 'onepassword', PLUGIN_VERSION, '--server', 'https://github.com/SimCubeLtd/pulumi-onepassword/releases/download/v${VERSION}']) + except OSError as error: + if error.errno == errno.ENOENT: + print(f""" + There was an error installing the onepassword resource provider plugin. + It looks like `pulumi` is not installed on your system. + Please visit https://pulumi.com/ to install the Pulumi CLI. + You may try manually installing the plugin by running + `pulumi plugin install resource onepassword {PLUGIN_VERSION}` + """) + else: + raise + + +def readme(): + try: + with open('README.md', encoding='utf-8') as f: + return f.read() + except FileNotFoundError: + return "onepassword Pulumi Package - Development Version" + + +setup(name='simcubeltd_pulumi_onepassword', + version=VERSION, + description="A Pulumi package for creating and managing onepassword resources.", + long_description=readme(), + long_description_content_type='text/markdown', + cmdclass={ + 'install': InstallPluginCommand, + }, + keywords='pulumi onepassword category/cloud', + url='https://github.com/SimCubeLtd/pulumi-onepassword', + project_urls={ + 'Repository': 'https://github.com/SimCubeLtd/pulumi-onepassword' + }, + license='Apache-2.0', + packages=find_packages(), + package_data={ + 'simcubeltd_pulumi_onepassword': [ + 'py.typed', + 'pulumi-plugin.json', + ] + }, + install_requires=[ + 'parver>=0.2.1', + 'pulumi>=3.0.0,<4.0.0', + 'semver>=2.8.1' + ], + zip_safe=False) diff --git a/sdk/python/simcubeltd_pulumi_onepassword/README.md b/sdk/python/simcubeltd_pulumi_onepassword/README.md new file mode 100644 index 0000000..345d2c8 --- /dev/null +++ b/sdk/python/simcubeltd_pulumi_onepassword/README.md @@ -0,0 +1,4 @@ +> This provider is a derived work of the [Terraform Provider](https://github.com/1Password/terraform-provider-onepassword) +> distributed under [MPL 2.0](https://www.mozilla.org/en-US/MPL/2.0/). If you encounter a bug or missing feature, +> first check the [`pulumi/pulumi-onepassword` repo](https://github.com/pulumi/pulumi-onepassword/issues); however, if that doesn't turn up anything, +> please consult the source [`1Password/terraform-provider-onepassword` repo](https://github.com/1Password/terraform-provider-onepassword/issues). \ No newline at end of file diff --git a/sdk/python/simcubeltd_pulumi_onepassword/__init__.py b/sdk/python/simcubeltd_pulumi_onepassword/__init__.py new file mode 100644 index 0000000..edc4d81 --- /dev/null +++ b/sdk/python/simcubeltd_pulumi_onepassword/__init__.py @@ -0,0 +1,45 @@ +# coding=utf-8 +# *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +# *** Do not edit by hand unless you're certain you know what you are doing! *** + +from . import _utilities +import typing +# Export this package's modules as members: +from .get_item import * +from .get_vault import * +from .item import * +from .provider import * +from ._inputs import * +from . import outputs + +# Make subpackages available: +if typing.TYPE_CHECKING: + import simcubeltd_pulumi_onepassword.config as __config + config = __config +else: + config = _utilities.lazy_import('simcubeltd_pulumi_onepassword.config') + +_utilities.register( + resource_modules=""" +[ + { + "pkg": "onepassword", + "mod": "index/item", + "fqn": "simcubeltd_pulumi_onepassword", + "classes": { + "onepassword:index/item:Item": "Item" + } + } +] +""", + resource_packages=""" +[ + { + "pkg": "onepassword", + "token": "pulumi:providers:onepassword", + "fqn": "simcubeltd_pulumi_onepassword", + "class": "Provider" + } +] +""" +) diff --git a/sdk/python/simcubeltd_pulumi_onepassword/_inputs.py b/sdk/python/simcubeltd_pulumi_onepassword/_inputs.py new file mode 100644 index 0000000..8423bac --- /dev/null +++ b/sdk/python/simcubeltd_pulumi_onepassword/_inputs.py @@ -0,0 +1,299 @@ +# coding=utf-8 +# *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +# *** Do not edit by hand unless you're certain you know what you are doing! *** + +import warnings +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +from . import _utilities + +__all__ = [ + 'ItemPasswordRecipeArgs', + 'ItemSectionArgs', + 'ItemSectionFieldArgs', + 'ItemSectionFieldPasswordRecipeArgs', +] + +@pulumi.input_type +class ItemPasswordRecipeArgs: + def __init__(__self__, *, + digits: Optional[pulumi.Input[bool]] = None, + length: Optional[pulumi.Input[int]] = None, + letters: Optional[pulumi.Input[bool]] = None, + symbols: Optional[pulumi.Input[bool]] = None): + """ + :param pulumi.Input[bool] digits: Use digits [0-9] when generating the password. + :param pulumi.Input[int] length: The length of the password to be generated. + :param pulumi.Input[bool] letters: Use letters [a-zA-Z] when generating the password. + :param pulumi.Input[bool] symbols: Use symbols [!@.-_*] when generating the password. + """ + if digits is not None: + pulumi.set(__self__, "digits", digits) + if length is not None: + pulumi.set(__self__, "length", length) + if letters is not None: + pulumi.set(__self__, "letters", letters) + if symbols is not None: + pulumi.set(__self__, "symbols", symbols) + + @property + @pulumi.getter + def digits(self) -> Optional[pulumi.Input[bool]]: + """ + Use digits [0-9] when generating the password. + """ + return pulumi.get(self, "digits") + + @digits.setter + def digits(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "digits", value) + + @property + @pulumi.getter + def length(self) -> Optional[pulumi.Input[int]]: + """ + The length of the password to be generated. + """ + return pulumi.get(self, "length") + + @length.setter + def length(self, value: Optional[pulumi.Input[int]]): + pulumi.set(self, "length", value) + + @property + @pulumi.getter + def letters(self) -> Optional[pulumi.Input[bool]]: + """ + Use letters [a-zA-Z] when generating the password. + """ + return pulumi.get(self, "letters") + + @letters.setter + def letters(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "letters", value) + + @property + @pulumi.getter + def symbols(self) -> Optional[pulumi.Input[bool]]: + """ + Use symbols [!@.-_*] when generating the password. + """ + return pulumi.get(self, "symbols") + + @symbols.setter + def symbols(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "symbols", value) + + +@pulumi.input_type +class ItemSectionArgs: + def __init__(__self__, *, + label: pulumi.Input[str], + fields: Optional[pulumi.Input[Sequence[pulumi.Input['ItemSectionFieldArgs']]]] = None, + id: Optional[pulumi.Input[str]] = None): + """ + :param pulumi.Input[str] label: The label for the section. + :param pulumi.Input[Sequence[pulumi.Input['ItemSectionFieldArgs']]] fields: A list of custom fields in the section. + :param pulumi.Input[str] id: A unique identifier for the section. + """ + pulumi.set(__self__, "label", label) + if fields is not None: + pulumi.set(__self__, "fields", fields) + if id is not None: + pulumi.set(__self__, "id", id) + + @property + @pulumi.getter + def label(self) -> pulumi.Input[str]: + """ + The label for the section. + """ + return pulumi.get(self, "label") + + @label.setter + def label(self, value: pulumi.Input[str]): + pulumi.set(self, "label", value) + + @property + @pulumi.getter + def fields(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ItemSectionFieldArgs']]]]: + """ + A list of custom fields in the section. + """ + return pulumi.get(self, "fields") + + @fields.setter + def fields(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ItemSectionFieldArgs']]]]): + pulumi.set(self, "fields", value) + + @property + @pulumi.getter + def id(self) -> Optional[pulumi.Input[str]]: + """ + A unique identifier for the section. + """ + return pulumi.get(self, "id") + + @id.setter + def id(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "id", value) + + +@pulumi.input_type +class ItemSectionFieldArgs: + def __init__(__self__, *, + label: pulumi.Input[str], + id: Optional[pulumi.Input[str]] = None, + password_recipe: Optional[pulumi.Input['ItemSectionFieldPasswordRecipeArgs']] = None, + purpose: Optional[pulumi.Input[str]] = None, + type: Optional[pulumi.Input[str]] = None, + value: Optional[pulumi.Input[str]] = None): + """ + :param pulumi.Input['ItemSectionFieldPasswordRecipeArgs'] password_recipe: Password for this item. + :param pulumi.Input[str] type: (Only applies to the database category) The type of database. One of ["db2" "filemaker" "msaccess" "mssql" "mysql" "oracle" "postgresql" "sqlite" "other"] + """ + pulumi.set(__self__, "label", label) + if id is not None: + pulumi.set(__self__, "id", id) + if password_recipe is not None: + pulumi.set(__self__, "password_recipe", password_recipe) + if purpose is not None: + pulumi.set(__self__, "purpose", purpose) + if type is not None: + pulumi.set(__self__, "type", type) + if value is not None: + pulumi.set(__self__, "value", value) + + @property + @pulumi.getter + def label(self) -> pulumi.Input[str]: + return pulumi.get(self, "label") + + @label.setter + def label(self, value: pulumi.Input[str]): + pulumi.set(self, "label", value) + + @property + @pulumi.getter + def id(self) -> Optional[pulumi.Input[str]]: + return pulumi.get(self, "id") + + @id.setter + def id(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "id", value) + + @property + @pulumi.getter(name="passwordRecipe") + def password_recipe(self) -> Optional[pulumi.Input['ItemSectionFieldPasswordRecipeArgs']]: + """ + Password for this item. + """ + return pulumi.get(self, "password_recipe") + + @password_recipe.setter + def password_recipe(self, value: Optional[pulumi.Input['ItemSectionFieldPasswordRecipeArgs']]): + pulumi.set(self, "password_recipe", value) + + @property + @pulumi.getter + def purpose(self) -> Optional[pulumi.Input[str]]: + return pulumi.get(self, "purpose") + + @purpose.setter + def purpose(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "purpose", value) + + @property + @pulumi.getter + def type(self) -> Optional[pulumi.Input[str]]: + """ + (Only applies to the database category) The type of database. One of ["db2" "filemaker" "msaccess" "mssql" "mysql" "oracle" "postgresql" "sqlite" "other"] + """ + return pulumi.get(self, "type") + + @type.setter + def type(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "type", value) + + @property + @pulumi.getter + def value(self) -> Optional[pulumi.Input[str]]: + return pulumi.get(self, "value") + + @value.setter + def value(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "value", value) + + +@pulumi.input_type +class ItemSectionFieldPasswordRecipeArgs: + def __init__(__self__, *, + digits: Optional[pulumi.Input[bool]] = None, + length: Optional[pulumi.Input[int]] = None, + letters: Optional[pulumi.Input[bool]] = None, + symbols: Optional[pulumi.Input[bool]] = None): + """ + :param pulumi.Input[bool] digits: Use digits [0-9] when generating the password. + :param pulumi.Input[int] length: The length of the password to be generated. + :param pulumi.Input[bool] letters: Use letters [a-zA-Z] when generating the password. + :param pulumi.Input[bool] symbols: Use symbols [!@.-_*] when generating the password. + """ + if digits is not None: + pulumi.set(__self__, "digits", digits) + if length is not None: + pulumi.set(__self__, "length", length) + if letters is not None: + pulumi.set(__self__, "letters", letters) + if symbols is not None: + pulumi.set(__self__, "symbols", symbols) + + @property + @pulumi.getter + def digits(self) -> Optional[pulumi.Input[bool]]: + """ + Use digits [0-9] when generating the password. + """ + return pulumi.get(self, "digits") + + @digits.setter + def digits(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "digits", value) + + @property + @pulumi.getter + def length(self) -> Optional[pulumi.Input[int]]: + """ + The length of the password to be generated. + """ + return pulumi.get(self, "length") + + @length.setter + def length(self, value: Optional[pulumi.Input[int]]): + pulumi.set(self, "length", value) + + @property + @pulumi.getter + def letters(self) -> Optional[pulumi.Input[bool]]: + """ + Use letters [a-zA-Z] when generating the password. + """ + return pulumi.get(self, "letters") + + @letters.setter + def letters(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "letters", value) + + @property + @pulumi.getter + def symbols(self) -> Optional[pulumi.Input[bool]]: + """ + Use symbols [!@.-_*] when generating the password. + """ + return pulumi.get(self, "symbols") + + @symbols.setter + def symbols(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "symbols", value) + + diff --git a/sdk/python/simcubeltd_pulumi_onepassword/_utilities.py b/sdk/python/simcubeltd_pulumi_onepassword/_utilities.py new file mode 100644 index 0000000..6a9353d --- /dev/null +++ b/sdk/python/simcubeltd_pulumi_onepassword/_utilities.py @@ -0,0 +1,239 @@ +# coding=utf-8 +# *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +# *** Do not edit by hand unless you're certain you know what you are doing! *** + + +import importlib.util +import inspect +import json +import os +import pkg_resources +import sys +import typing + +import pulumi +import pulumi.runtime + +from semver import VersionInfo as SemverVersion +from parver import Version as PEP440Version + + +def get_env(*args): + for v in args: + value = os.getenv(v) + if value is not None: + return value + return None + + +def get_env_bool(*args): + str = get_env(*args) + if str is not None: + # NOTE: these values are taken from https://golang.org/src/strconv/atob.go?s=351:391#L1, which is what + # Terraform uses internally when parsing boolean values. + if str in ["1", "t", "T", "true", "TRUE", "True"]: + return True + if str in ["0", "f", "F", "false", "FALSE", "False"]: + return False + return None + + +def get_env_int(*args): + str = get_env(*args) + if str is not None: + try: + return int(str) + except: + return None + return None + + +def get_env_float(*args): + str = get_env(*args) + if str is not None: + try: + return float(str) + except: + return None + return None + + +def _get_semver_version(): + # __name__ is set to the fully-qualified name of the current module, In our case, it will be + # ._utilities. is the module we want to query the version for. + root_package, *rest = __name__.split('.') + + # pkg_resources uses setuptools to inspect the set of installed packages. We use it here to ask + # for the currently installed version of the root package (i.e. us) and get its version. + + # Unfortunately, PEP440 and semver differ slightly in incompatible ways. The Pulumi engine expects + # to receive a valid semver string when receiving requests from the language host, so it's our + # responsibility as the library to convert our own PEP440 version into a valid semver string. + + pep440_version_string = pkg_resources.require(root_package)[0].version + pep440_version = PEP440Version.parse(pep440_version_string) + (major, minor, patch) = pep440_version.release + prerelease = None + if pep440_version.pre_tag == 'a': + prerelease = f"alpha.{pep440_version.pre}" + elif pep440_version.pre_tag == 'b': + prerelease = f"beta.{pep440_version.pre}" + elif pep440_version.pre_tag == 'rc': + prerelease = f"rc.{pep440_version.pre}" + elif pep440_version.dev is not None: + prerelease = f"dev.{pep440_version.dev}" + + # The only significant difference between PEP440 and semver as it pertains to us is that PEP440 has explicit support + # for dev builds, while semver encodes them as "prerelease" versions. In order to bridge between the two, we convert + # our dev build version into a prerelease tag. This matches what all of our other packages do when constructing + # their own semver string. + return SemverVersion(major=major, minor=minor, patch=patch, prerelease=prerelease) + + +# Determine the version once and cache the value, which measurably improves program performance. +_version = _get_semver_version() +_version_str = str(_version) + + +def get_version(): + return _version_str + + +def get_resource_args_opts(resource_args_type, resource_options_type, *args, **kwargs): + """ + Return the resource args and options given the *args and **kwargs of a resource's + __init__ method. + """ + + resource_args, opts = None, None + + # If the first item is the resource args type, save it and remove it from the args list. + if args and isinstance(args[0], resource_args_type): + resource_args, args = args[0], args[1:] + + # Now look at the first item in the args list again. + # If the first item is the resource options class, save it. + if args and isinstance(args[0], resource_options_type): + opts = args[0] + + # If resource_args is None, see if "args" is in kwargs, and, if so, if it's typed as the + # the resource args type. + if resource_args is None: + a = kwargs.get("args") + if isinstance(a, resource_args_type): + resource_args = a + + # If opts is None, look it up in kwargs. + if opts is None: + opts = kwargs.get("opts") + + return resource_args, opts + + +# Temporary: just use pulumi._utils.lazy_import once everyone upgrades. +def lazy_import(fullname): + + import pulumi._utils as u + f = getattr(u, 'lazy_import', None) + if f is None: + f = _lazy_import_temp + + return f(fullname) + + +# Copied from pulumi._utils.lazy_import, see comments there. +def _lazy_import_temp(fullname): + m = sys.modules.get(fullname, None) + if m is not None: + return m + + spec = importlib.util.find_spec(fullname) + + m = sys.modules.get(fullname, None) + if m is not None: + return m + + loader = importlib.util.LazyLoader(spec.loader) + spec.loader = loader + module = importlib.util.module_from_spec(spec) + + m = sys.modules.get(fullname, None) + if m is not None: + return m + + sys.modules[fullname] = module + loader.exec_module(module) + return module + + +class Package(pulumi.runtime.ResourcePackage): + def __init__(self, pkg_info): + super().__init__() + self.pkg_info = pkg_info + + def version(self): + return _version + + def construct_provider(self, name: str, typ: str, urn: str) -> pulumi.ProviderResource: + if typ != self.pkg_info['token']: + raise Exception(f"unknown provider type {typ}") + Provider = getattr(lazy_import(self.pkg_info['fqn']), self.pkg_info['class']) + return Provider(name, pulumi.ResourceOptions(urn=urn)) + + +class Module(pulumi.runtime.ResourceModule): + def __init__(self, mod_info): + super().__init__() + self.mod_info = mod_info + + def version(self): + return _version + + def construct(self, name: str, typ: str, urn: str) -> pulumi.Resource: + class_name = self.mod_info['classes'].get(typ, None) + + if class_name is None: + raise Exception(f"unknown resource type {typ}") + + TheClass = getattr(lazy_import(self.mod_info['fqn']), class_name) + return TheClass(name, pulumi.ResourceOptions(urn=urn)) + + +def register(resource_modules, resource_packages): + resource_modules = json.loads(resource_modules) + resource_packages = json.loads(resource_packages) + + for pkg_info in resource_packages: + pulumi.runtime.register_resource_package(pkg_info['pkg'], Package(pkg_info)) + + for mod_info in resource_modules: + pulumi.runtime.register_resource_module( + mod_info['pkg'], + mod_info['mod'], + Module(mod_info)) + + +_F = typing.TypeVar('_F', bound=typing.Callable[..., typing.Any]) + + +def lift_output_func(func: typing.Any) -> typing.Callable[[_F], _F]: + """Decorator internally used on {fn}_output lifted function versions + to implement them automatically from the un-lifted function.""" + + func_sig = inspect.signature(func) + + def lifted_func(*args, opts=None, **kwargs): + bound_args = func_sig.bind(*args, **kwargs) + # Convert tuple to list, see pulumi/pulumi#8172 + args_list = list(bound_args.args) + return pulumi.Output.from_input({ + 'args': args_list, + 'kwargs': bound_args.kwargs + }).apply(lambda resolved_args: func(*resolved_args['args'], + opts=opts, + **resolved_args['kwargs'])) + + return (lambda _: lifted_func) + +def get_plugin_download_url(): + return "https://github.com/SimCubeLtd/pulumi-onepassword/releases/download/v${VERSION}" diff --git a/sdk/python/simcubeltd_pulumi_onepassword/config/__init__.py b/sdk/python/simcubeltd_pulumi_onepassword/config/__init__.py new file mode 100644 index 0000000..18853fc --- /dev/null +++ b/sdk/python/simcubeltd_pulumi_onepassword/config/__init__.py @@ -0,0 +1,8 @@ +# coding=utf-8 +# *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +# *** Do not edit by hand unless you're certain you know what you are doing! *** + +import sys +from .vars import _ExportableConfig + +sys.modules[__name__].__class__ = _ExportableConfig diff --git a/sdk/python/simcubeltd_pulumi_onepassword/config/__init__.pyi b/sdk/python/simcubeltd_pulumi_onepassword/config/__init__.pyi new file mode 100644 index 0000000..c128924 --- /dev/null +++ b/sdk/python/simcubeltd_pulumi_onepassword/config/__init__.pyi @@ -0,0 +1,21 @@ +# coding=utf-8 +# *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +# *** Do not edit by hand unless you're certain you know what you are doing! *** + +import warnings +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +from .. import _utilities + +token: Optional[str] +""" +A valid token for your 1Password Connect API. Can also be sourced from OP_CONNECT_TOKEN. +""" + +url: Optional[str] +""" +The HTTP(S) URL where your 1Password Connect API can be found. Must be provided through the the OP_CONNECT_HOST +environment variable if this attribute is not set. +""" + diff --git a/sdk/python/simcubeltd_pulumi_onepassword/config/vars.py b/sdk/python/simcubeltd_pulumi_onepassword/config/vars.py new file mode 100644 index 0000000..c4a5340 --- /dev/null +++ b/sdk/python/simcubeltd_pulumi_onepassword/config/vars.py @@ -0,0 +1,31 @@ +# coding=utf-8 +# *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +# *** Do not edit by hand unless you're certain you know what you are doing! *** + +import warnings +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +from .. import _utilities + +import types + +__config__ = pulumi.Config('onepassword') + + +class _ExportableConfig(types.ModuleType): + @property + def token(self) -> Optional[str]: + """ + A valid token for your 1Password Connect API. Can also be sourced from OP_CONNECT_TOKEN. + """ + return __config__.get('token') + + @property + def url(self) -> Optional[str]: + """ + The HTTP(S) URL where your 1Password Connect API can be found. Must be provided through the the OP_CONNECT_HOST + environment variable if this attribute is not set. + """ + return __config__.get('url') + diff --git a/sdk/python/simcubeltd_pulumi_onepassword/get_item.py b/sdk/python/simcubeltd_pulumi_onepassword/get_item.py new file mode 100644 index 0000000..4b37dc4 --- /dev/null +++ b/sdk/python/simcubeltd_pulumi_onepassword/get_item.py @@ -0,0 +1,274 @@ +# coding=utf-8 +# *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +# *** Do not edit by hand unless you're certain you know what you are doing! *** + +import warnings +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +from . import _utilities +from . import outputs + +__all__ = [ + 'GetItemResult', + 'AwaitableGetItemResult', + 'get_item', + 'get_item_output', +] + +@pulumi.output_type +class GetItemResult: + """ + A collection of values returned by GetItem. + """ + def __init__(__self__, category=None, database=None, hostname=None, id=None, password=None, port=None, sections=None, tags=None, title=None, type=None, url=None, username=None, uuid=None, vault=None): + if category and not isinstance(category, str): + raise TypeError("Expected argument 'category' to be a str") + pulumi.set(__self__, "category", category) + if database and not isinstance(database, str): + raise TypeError("Expected argument 'database' to be a str") + pulumi.set(__self__, "database", database) + if hostname and not isinstance(hostname, str): + raise TypeError("Expected argument 'hostname' to be a str") + pulumi.set(__self__, "hostname", hostname) + if id and not isinstance(id, str): + raise TypeError("Expected argument 'id' to be a str") + pulumi.set(__self__, "id", id) + if password and not isinstance(password, str): + raise TypeError("Expected argument 'password' to be a str") + pulumi.set(__self__, "password", password) + if port and not isinstance(port, str): + raise TypeError("Expected argument 'port' to be a str") + pulumi.set(__self__, "port", port) + if sections and not isinstance(sections, list): + raise TypeError("Expected argument 'sections' to be a list") + pulumi.set(__self__, "sections", sections) + if tags and not isinstance(tags, list): + raise TypeError("Expected argument 'tags' to be a list") + pulumi.set(__self__, "tags", tags) + if title and not isinstance(title, str): + raise TypeError("Expected argument 'title' to be a str") + pulumi.set(__self__, "title", title) + if type and not isinstance(type, str): + raise TypeError("Expected argument 'type' to be a str") + pulumi.set(__self__, "type", type) + if url and not isinstance(url, str): + raise TypeError("Expected argument 'url' to be a str") + pulumi.set(__self__, "url", url) + if username and not isinstance(username, str): + raise TypeError("Expected argument 'username' to be a str") + pulumi.set(__self__, "username", username) + if uuid and not isinstance(uuid, str): + raise TypeError("Expected argument 'uuid' to be a str") + pulumi.set(__self__, "uuid", uuid) + if vault and not isinstance(vault, str): + raise TypeError("Expected argument 'vault' to be a str") + pulumi.set(__self__, "vault", vault) + + @property + @pulumi.getter + def category(self) -> str: + """ + The category of the item. One of ["login" "password" "database"] + """ + return pulumi.get(self, "category") + + @property + @pulumi.getter + def database(self) -> str: + """ + (Only applies to the database category) The name of the database. + """ + return pulumi.get(self, "database") + + @property + @pulumi.getter + def hostname(self) -> str: + """ + (Only applies to the database category) The address where the database can be found + """ + return pulumi.get(self, "hostname") + + @property + @pulumi.getter + def id(self) -> str: + return pulumi.get(self, "id") + + @property + @pulumi.getter + def password(self) -> str: + """ + Password for this item. + """ + return pulumi.get(self, "password") + + @property + @pulumi.getter + def port(self) -> str: + """ + (Only applies to the database category) The port the database is listening on. + """ + return pulumi.get(self, "port") + + @property + @pulumi.getter + def sections(self) -> Sequence['outputs.GetItemSectionResult']: + """ + A list of custom sections in an item + """ + return pulumi.get(self, "sections") + + @property + @pulumi.getter + def tags(self) -> Sequence[str]: + """ + An array of strings of the tags assigned to the item. + """ + return pulumi.get(self, "tags") + + @property + @pulumi.getter + def title(self) -> str: + """ + The title of the item to retrieve. This field will be populated with the title of the item if the item it looked up by its UUID. + """ + return pulumi.get(self, "title") + + @property + @pulumi.getter + def type(self) -> str: + """ + (Only applies to the database category) The type of database. One of ["db2" "filemaker" "msaccess" "mssql" "mysql" "oracle" "postgresql" "sqlite" "other"] + """ + return pulumi.get(self, "type") + + @property + @pulumi.getter + def url(self) -> str: + """ + The primary URL for the item. + """ + return pulumi.get(self, "url") + + @property + @pulumi.getter + def username(self) -> str: + """ + Username for this item. + """ + return pulumi.get(self, "username") + + @property + @pulumi.getter + def uuid(self) -> str: + """ + The UUID of the item to retrieve. This field will be populated with the UUID of the item if the item it looked up by its title. + """ + return pulumi.get(self, "uuid") + + @property + @pulumi.getter + def vault(self) -> str: + """ + The UUID of the vault the item is in. + """ + return pulumi.get(self, "vault") + + +class AwaitableGetItemResult(GetItemResult): + # pylint: disable=using-constant-test + def __await__(self): + if False: + yield self + return GetItemResult( + category=self.category, + database=self.database, + hostname=self.hostname, + id=self.id, + password=self.password, + port=self.port, + sections=self.sections, + tags=self.tags, + title=self.title, + type=self.type, + url=self.url, + username=self.username, + uuid=self.uuid, + vault=self.vault) + + +def get_item(title: Optional[str] = None, + uuid: Optional[str] = None, + vault: Optional[str] = None, + opts: Optional[pulumi.InvokeOptions] = None) -> AwaitableGetItemResult: + """ + Use this data source to get details of an item by its vault uuid and either the title or the uuid of the item. + + ## Example Usage + + ```python + import pulumi + import pulumi_onepassword as onepassword + + example = onepassword.get_item(vault=var["demo_vault"], + uuid=onepassword_item["demo_sections"]["uuid"]) + ``` + + + :param str title: The title of the item to retrieve. This field will be populated with the title of the item if the item it looked up by its UUID. + :param str uuid: The UUID of the item to retrieve. This field will be populated with the UUID of the item if the item it looked up by its title. + :param str vault: The UUID of the vault the item is in. + """ + __args__ = dict() + __args__['title'] = title + __args__['uuid'] = uuid + __args__['vault'] = vault + if opts is None: + opts = pulumi.InvokeOptions() + if opts.version is None: + opts.version = _utilities.get_version() + if opts.plugin_download_url is None: + opts.plugin_download_url = _utilities.get_plugin_download_url() + __ret__ = pulumi.runtime.invoke('onepassword:index/getItem:GetItem', __args__, opts=opts, typ=GetItemResult).value + + return AwaitableGetItemResult( + category=__ret__.category, + database=__ret__.database, + hostname=__ret__.hostname, + id=__ret__.id, + password=__ret__.password, + port=__ret__.port, + sections=__ret__.sections, + tags=__ret__.tags, + title=__ret__.title, + type=__ret__.type, + url=__ret__.url, + username=__ret__.username, + uuid=__ret__.uuid, + vault=__ret__.vault) + + +@_utilities.lift_output_func(get_item) +def get_item_output(title: Optional[pulumi.Input[Optional[str]]] = None, + uuid: Optional[pulumi.Input[Optional[str]]] = None, + vault: Optional[pulumi.Input[str]] = None, + opts: Optional[pulumi.InvokeOptions] = None) -> pulumi.Output[GetItemResult]: + """ + Use this data source to get details of an item by its vault uuid and either the title or the uuid of the item. + + ## Example Usage + + ```python + import pulumi + import pulumi_onepassword as onepassword + + example = onepassword.get_item(vault=var["demo_vault"], + uuid=onepassword_item["demo_sections"]["uuid"]) + ``` + + + :param str title: The title of the item to retrieve. This field will be populated with the title of the item if the item it looked up by its UUID. + :param str uuid: The UUID of the item to retrieve. This field will be populated with the UUID of the item if the item it looked up by its title. + :param str vault: The UUID of the vault the item is in. + """ + ... diff --git a/sdk/python/simcubeltd_pulumi_onepassword/get_vault.py b/sdk/python/simcubeltd_pulumi_onepassword/get_vault.py new file mode 100644 index 0000000..bd80c7d --- /dev/null +++ b/sdk/python/simcubeltd_pulumi_onepassword/get_vault.py @@ -0,0 +1,118 @@ +# coding=utf-8 +# *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +# *** Do not edit by hand unless you're certain you know what you are doing! *** + +import warnings +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +from . import _utilities + +__all__ = [ + 'GetVaultResult', + 'AwaitableGetVaultResult', + 'get_vault', + 'get_vault_output', +] + +@pulumi.output_type +class GetVaultResult: + """ + A collection of values returned by GetVault. + """ + def __init__(__self__, description=None, id=None, name=None, uuid=None): + if description and not isinstance(description, str): + raise TypeError("Expected argument 'description' to be a str") + pulumi.set(__self__, "description", description) + if id and not isinstance(id, str): + raise TypeError("Expected argument 'id' to be a str") + pulumi.set(__self__, "id", id) + if name and not isinstance(name, str): + raise TypeError("Expected argument 'name' to be a str") + pulumi.set(__self__, "name", name) + if uuid and not isinstance(uuid, str): + raise TypeError("Expected argument 'uuid' to be a str") + pulumi.set(__self__, "uuid", uuid) + + @property + @pulumi.getter + def description(self) -> str: + """ + The description of the vault. + """ + return pulumi.get(self, "description") + + @property + @pulumi.getter + def id(self) -> str: + return pulumi.get(self, "id") + + @property + @pulumi.getter + def name(self) -> str: + """ + The name of the vault to retrieve. This field will be populated with the name of the vault if the vault it looked up by its UUID. + """ + return pulumi.get(self, "name") + + @property + @pulumi.getter + def uuid(self) -> str: + """ + The UUID of the vault to retrieve. This field will be populated with the UUID of the vault if the vault it looked up by its name. + """ + return pulumi.get(self, "uuid") + + +class AwaitableGetVaultResult(GetVaultResult): + # pylint: disable=using-constant-test + def __await__(self): + if False: + yield self + return GetVaultResult( + description=self.description, + id=self.id, + name=self.name, + uuid=self.uuid) + + +def get_vault(name: Optional[str] = None, + uuid: Optional[str] = None, + opts: Optional[pulumi.InvokeOptions] = None) -> AwaitableGetVaultResult: + """ + Use this data source to get details of a vault by either its name or uuid. + + + :param str name: The name of the vault to retrieve. This field will be populated with the name of the vault if the vault it looked up by its UUID. + :param str uuid: The UUID of the vault to retrieve. This field will be populated with the UUID of the vault if the vault it looked up by its name. + """ + __args__ = dict() + __args__['name'] = name + __args__['uuid'] = uuid + if opts is None: + opts = pulumi.InvokeOptions() + if opts.version is None: + opts.version = _utilities.get_version() + if opts.plugin_download_url is None: + opts.plugin_download_url = _utilities.get_plugin_download_url() + __ret__ = pulumi.runtime.invoke('onepassword:index/getVault:GetVault', __args__, opts=opts, typ=GetVaultResult).value + + return AwaitableGetVaultResult( + description=__ret__.description, + id=__ret__.id, + name=__ret__.name, + uuid=__ret__.uuid) + + +@_utilities.lift_output_func(get_vault) +def get_vault_output(name: Optional[pulumi.Input[Optional[str]]] = None, + uuid: Optional[pulumi.Input[Optional[str]]] = None, + opts: Optional[pulumi.InvokeOptions] = None) -> pulumi.Output[GetVaultResult]: + """ + Use this data source to get details of a vault by either its name or uuid. + + + :param str name: The name of the vault to retrieve. This field will be populated with the name of the vault if the vault it looked up by its UUID. + :param str uuid: The UUID of the vault to retrieve. This field will be populated with the UUID of the vault if the vault it looked up by its name. + """ + ... diff --git a/sdk/python/simcubeltd_pulumi_onepassword/item.py b/sdk/python/simcubeltd_pulumi_onepassword/item.py new file mode 100644 index 0000000..8d02e1c --- /dev/null +++ b/sdk/python/simcubeltd_pulumi_onepassword/item.py @@ -0,0 +1,822 @@ +# coding=utf-8 +# *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +# *** Do not edit by hand unless you're certain you know what you are doing! *** + +import warnings +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +from . import _utilities +from . import outputs +from ._inputs import * + +__all__ = ['ItemArgs', 'Item'] + +@pulumi.input_type +class ItemArgs: + def __init__(__self__, *, + vault: pulumi.Input[str], + category: Optional[pulumi.Input[str]] = None, + database: Optional[pulumi.Input[str]] = None, + hostname: Optional[pulumi.Input[str]] = None, + password: Optional[pulumi.Input[str]] = None, + password_recipe: Optional[pulumi.Input['ItemPasswordRecipeArgs']] = None, + port: Optional[pulumi.Input[str]] = None, + sections: Optional[pulumi.Input[Sequence[pulumi.Input['ItemSectionArgs']]]] = None, + tags: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, + title: Optional[pulumi.Input[str]] = None, + type: Optional[pulumi.Input[str]] = None, + url: Optional[pulumi.Input[str]] = None, + username: Optional[pulumi.Input[str]] = None): + """ + The set of arguments for constructing a Item resource. + :param pulumi.Input[str] vault: The UUID of the vault the item is in. + :param pulumi.Input[str] category: The category of the item. One of ["login" "password" "database"] + :param pulumi.Input[str] database: (Only applies to the database category) The name of the database. + :param pulumi.Input[str] hostname: (Only applies to the database category) The address where the database can be found + :param pulumi.Input[str] password: Password for this item. + :param pulumi.Input['ItemPasswordRecipeArgs'] password_recipe: Password for this item. + :param pulumi.Input[str] port: (Only applies to the database category) The port the database is listening on. + :param pulumi.Input[Sequence[pulumi.Input['ItemSectionArgs']]] sections: A list of custom sections in an item + :param pulumi.Input[Sequence[pulumi.Input[str]]] tags: An array of strings of the tags assigned to the item. + :param pulumi.Input[str] title: The title of the item. + :param pulumi.Input[str] type: (Only applies to the database category) The type of database. One of ["db2" "filemaker" "msaccess" "mssql" "mysql" "oracle" "postgresql" "sqlite" "other"] + :param pulumi.Input[str] url: The primary URL for the item. + :param pulumi.Input[str] username: Username for this item. + """ + pulumi.set(__self__, "vault", vault) + if category is not None: + pulumi.set(__self__, "category", category) + if database is not None: + pulumi.set(__self__, "database", database) + if hostname is not None: + pulumi.set(__self__, "hostname", hostname) + if password is not None: + pulumi.set(__self__, "password", password) + if password_recipe is not None: + pulumi.set(__self__, "password_recipe", password_recipe) + if port is not None: + pulumi.set(__self__, "port", port) + if sections is not None: + pulumi.set(__self__, "sections", sections) + if tags is not None: + pulumi.set(__self__, "tags", tags) + if title is not None: + pulumi.set(__self__, "title", title) + if type is not None: + pulumi.set(__self__, "type", type) + if url is not None: + pulumi.set(__self__, "url", url) + if username is not None: + pulumi.set(__self__, "username", username) + + @property + @pulumi.getter + def vault(self) -> pulumi.Input[str]: + """ + The UUID of the vault the item is in. + """ + return pulumi.get(self, "vault") + + @vault.setter + def vault(self, value: pulumi.Input[str]): + pulumi.set(self, "vault", value) + + @property + @pulumi.getter + def category(self) -> Optional[pulumi.Input[str]]: + """ + The category of the item. One of ["login" "password" "database"] + """ + return pulumi.get(self, "category") + + @category.setter + def category(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "category", value) + + @property + @pulumi.getter + def database(self) -> Optional[pulumi.Input[str]]: + """ + (Only applies to the database category) The name of the database. + """ + return pulumi.get(self, "database") + + @database.setter + def database(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "database", value) + + @property + @pulumi.getter + def hostname(self) -> Optional[pulumi.Input[str]]: + """ + (Only applies to the database category) The address where the database can be found + """ + return pulumi.get(self, "hostname") + + @hostname.setter + def hostname(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "hostname", value) + + @property + @pulumi.getter + def password(self) -> Optional[pulumi.Input[str]]: + """ + Password for this item. + """ + return pulumi.get(self, "password") + + @password.setter + def password(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "password", value) + + @property + @pulumi.getter(name="passwordRecipe") + def password_recipe(self) -> Optional[pulumi.Input['ItemPasswordRecipeArgs']]: + """ + Password for this item. + """ + return pulumi.get(self, "password_recipe") + + @password_recipe.setter + def password_recipe(self, value: Optional[pulumi.Input['ItemPasswordRecipeArgs']]): + pulumi.set(self, "password_recipe", value) + + @property + @pulumi.getter + def port(self) -> Optional[pulumi.Input[str]]: + """ + (Only applies to the database category) The port the database is listening on. + """ + return pulumi.get(self, "port") + + @port.setter + def port(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "port", value) + + @property + @pulumi.getter + def sections(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ItemSectionArgs']]]]: + """ + A list of custom sections in an item + """ + return pulumi.get(self, "sections") + + @sections.setter + def sections(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ItemSectionArgs']]]]): + pulumi.set(self, "sections", value) + + @property + @pulumi.getter + def tags(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]: + """ + An array of strings of the tags assigned to the item. + """ + return pulumi.get(self, "tags") + + @tags.setter + def tags(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]): + pulumi.set(self, "tags", value) + + @property + @pulumi.getter + def title(self) -> Optional[pulumi.Input[str]]: + """ + The title of the item. + """ + return pulumi.get(self, "title") + + @title.setter + def title(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "title", value) + + @property + @pulumi.getter + def type(self) -> Optional[pulumi.Input[str]]: + """ + (Only applies to the database category) The type of database. One of ["db2" "filemaker" "msaccess" "mssql" "mysql" "oracle" "postgresql" "sqlite" "other"] + """ + return pulumi.get(self, "type") + + @type.setter + def type(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "type", value) + + @property + @pulumi.getter + def url(self) -> Optional[pulumi.Input[str]]: + """ + The primary URL for the item. + """ + return pulumi.get(self, "url") + + @url.setter + def url(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "url", value) + + @property + @pulumi.getter + def username(self) -> Optional[pulumi.Input[str]]: + """ + Username for this item. + """ + return pulumi.get(self, "username") + + @username.setter + def username(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "username", value) + + +@pulumi.input_type +class _ItemState: + def __init__(__self__, *, + category: Optional[pulumi.Input[str]] = None, + database: Optional[pulumi.Input[str]] = None, + hostname: Optional[pulumi.Input[str]] = None, + password: Optional[pulumi.Input[str]] = None, + password_recipe: Optional[pulumi.Input['ItemPasswordRecipeArgs']] = None, + port: Optional[pulumi.Input[str]] = None, + sections: Optional[pulumi.Input[Sequence[pulumi.Input['ItemSectionArgs']]]] = None, + tags: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, + title: Optional[pulumi.Input[str]] = None, + type: Optional[pulumi.Input[str]] = None, + url: Optional[pulumi.Input[str]] = None, + username: Optional[pulumi.Input[str]] = None, + uuid: Optional[pulumi.Input[str]] = None, + vault: Optional[pulumi.Input[str]] = None): + """ + Input properties used for looking up and filtering Item resources. + :param pulumi.Input[str] category: The category of the item. One of ["login" "password" "database"] + :param pulumi.Input[str] database: (Only applies to the database category) The name of the database. + :param pulumi.Input[str] hostname: (Only applies to the database category) The address where the database can be found + :param pulumi.Input[str] password: Password for this item. + :param pulumi.Input['ItemPasswordRecipeArgs'] password_recipe: Password for this item. + :param pulumi.Input[str] port: (Only applies to the database category) The port the database is listening on. + :param pulumi.Input[Sequence[pulumi.Input['ItemSectionArgs']]] sections: A list of custom sections in an item + :param pulumi.Input[Sequence[pulumi.Input[str]]] tags: An array of strings of the tags assigned to the item. + :param pulumi.Input[str] title: The title of the item. + :param pulumi.Input[str] type: (Only applies to the database category) The type of database. One of ["db2" "filemaker" "msaccess" "mssql" "mysql" "oracle" "postgresql" "sqlite" "other"] + :param pulumi.Input[str] url: The primary URL for the item. + :param pulumi.Input[str] username: Username for this item. + :param pulumi.Input[str] uuid: The UUID of the item. Item identifiers are unique within a specific vault. + :param pulumi.Input[str] vault: The UUID of the vault the item is in. + """ + if category is not None: + pulumi.set(__self__, "category", category) + if database is not None: + pulumi.set(__self__, "database", database) + if hostname is not None: + pulumi.set(__self__, "hostname", hostname) + if password is not None: + pulumi.set(__self__, "password", password) + if password_recipe is not None: + pulumi.set(__self__, "password_recipe", password_recipe) + if port is not None: + pulumi.set(__self__, "port", port) + if sections is not None: + pulumi.set(__self__, "sections", sections) + if tags is not None: + pulumi.set(__self__, "tags", tags) + if title is not None: + pulumi.set(__self__, "title", title) + if type is not None: + pulumi.set(__self__, "type", type) + if url is not None: + pulumi.set(__self__, "url", url) + if username is not None: + pulumi.set(__self__, "username", username) + if uuid is not None: + pulumi.set(__self__, "uuid", uuid) + if vault is not None: + pulumi.set(__self__, "vault", vault) + + @property + @pulumi.getter + def category(self) -> Optional[pulumi.Input[str]]: + """ + The category of the item. One of ["login" "password" "database"] + """ + return pulumi.get(self, "category") + + @category.setter + def category(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "category", value) + + @property + @pulumi.getter + def database(self) -> Optional[pulumi.Input[str]]: + """ + (Only applies to the database category) The name of the database. + """ + return pulumi.get(self, "database") + + @database.setter + def database(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "database", value) + + @property + @pulumi.getter + def hostname(self) -> Optional[pulumi.Input[str]]: + """ + (Only applies to the database category) The address where the database can be found + """ + return pulumi.get(self, "hostname") + + @hostname.setter + def hostname(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "hostname", value) + + @property + @pulumi.getter + def password(self) -> Optional[pulumi.Input[str]]: + """ + Password for this item. + """ + return pulumi.get(self, "password") + + @password.setter + def password(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "password", value) + + @property + @pulumi.getter(name="passwordRecipe") + def password_recipe(self) -> Optional[pulumi.Input['ItemPasswordRecipeArgs']]: + """ + Password for this item. + """ + return pulumi.get(self, "password_recipe") + + @password_recipe.setter + def password_recipe(self, value: Optional[pulumi.Input['ItemPasswordRecipeArgs']]): + pulumi.set(self, "password_recipe", value) + + @property + @pulumi.getter + def port(self) -> Optional[pulumi.Input[str]]: + """ + (Only applies to the database category) The port the database is listening on. + """ + return pulumi.get(self, "port") + + @port.setter + def port(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "port", value) + + @property + @pulumi.getter + def sections(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ItemSectionArgs']]]]: + """ + A list of custom sections in an item + """ + return pulumi.get(self, "sections") + + @sections.setter + def sections(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ItemSectionArgs']]]]): + pulumi.set(self, "sections", value) + + @property + @pulumi.getter + def tags(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]: + """ + An array of strings of the tags assigned to the item. + """ + return pulumi.get(self, "tags") + + @tags.setter + def tags(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]): + pulumi.set(self, "tags", value) + + @property + @pulumi.getter + def title(self) -> Optional[pulumi.Input[str]]: + """ + The title of the item. + """ + return pulumi.get(self, "title") + + @title.setter + def title(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "title", value) + + @property + @pulumi.getter + def type(self) -> Optional[pulumi.Input[str]]: + """ + (Only applies to the database category) The type of database. One of ["db2" "filemaker" "msaccess" "mssql" "mysql" "oracle" "postgresql" "sqlite" "other"] + """ + return pulumi.get(self, "type") + + @type.setter + def type(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "type", value) + + @property + @pulumi.getter + def url(self) -> Optional[pulumi.Input[str]]: + """ + The primary URL for the item. + """ + return pulumi.get(self, "url") + + @url.setter + def url(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "url", value) + + @property + @pulumi.getter + def username(self) -> Optional[pulumi.Input[str]]: + """ + Username for this item. + """ + return pulumi.get(self, "username") + + @username.setter + def username(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "username", value) + + @property + @pulumi.getter + def uuid(self) -> Optional[pulumi.Input[str]]: + """ + The UUID of the item. Item identifiers are unique within a specific vault. + """ + return pulumi.get(self, "uuid") + + @uuid.setter + def uuid(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "uuid", value) + + @property + @pulumi.getter + def vault(self) -> Optional[pulumi.Input[str]]: + """ + The UUID of the vault the item is in. + """ + return pulumi.get(self, "vault") + + @vault.setter + def vault(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "vault", value) + + +class Item(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + category: Optional[pulumi.Input[str]] = None, + database: Optional[pulumi.Input[str]] = None, + hostname: Optional[pulumi.Input[str]] = None, + password: Optional[pulumi.Input[str]] = None, + password_recipe: Optional[pulumi.Input[pulumi.InputType['ItemPasswordRecipeArgs']]] = None, + port: Optional[pulumi.Input[str]] = None, + sections: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ItemSectionArgs']]]]] = None, + tags: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, + title: Optional[pulumi.Input[str]] = None, + type: Optional[pulumi.Input[str]] = None, + url: Optional[pulumi.Input[str]] = None, + username: Optional[pulumi.Input[str]] = None, + vault: Optional[pulumi.Input[str]] = None, + __props__=None): + """ + A 1Password item. + + ## Example Usage + + ```python + import pulumi + import simcubeltd_pulumi_onepassword as onepassword + + demo_password = onepassword.Item("demoPassword", + vault=var["demo_vault"], + title="Demo Password Recipe", + category="password", + password_recipe=onepassword.ItemPasswordRecipeArgs( + length=40, + symbols=False, + )) + demo_login = onepassword.Item("demoLogin", + vault=var["demo_vault"], + title="Demo Terraform Login", + category="login", + username="test@example.com") + demo_db = onepassword.Item("demoDb", + vault=var["demo_vault"], + category="database", + type="mysql", + title="Demo TF Database", + username="root", + database="Example MySQL Instance", + hostname="localhost", + port="3306") + ``` + + ## Import + + # import an existing 1Password item + + ```sh + $ pulumi import onepassword:index/item:Item myitem vaults//items/ + ``` + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[str] category: The category of the item. One of ["login" "password" "database"] + :param pulumi.Input[str] database: (Only applies to the database category) The name of the database. + :param pulumi.Input[str] hostname: (Only applies to the database category) The address where the database can be found + :param pulumi.Input[str] password: Password for this item. + :param pulumi.Input[pulumi.InputType['ItemPasswordRecipeArgs']] password_recipe: Password for this item. + :param pulumi.Input[str] port: (Only applies to the database category) The port the database is listening on. + :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ItemSectionArgs']]]] sections: A list of custom sections in an item + :param pulumi.Input[Sequence[pulumi.Input[str]]] tags: An array of strings of the tags assigned to the item. + :param pulumi.Input[str] title: The title of the item. + :param pulumi.Input[str] type: (Only applies to the database category) The type of database. One of ["db2" "filemaker" "msaccess" "mssql" "mysql" "oracle" "postgresql" "sqlite" "other"] + :param pulumi.Input[str] url: The primary URL for the item. + :param pulumi.Input[str] username: Username for this item. + :param pulumi.Input[str] vault: The UUID of the vault the item is in. + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: ItemArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + A 1Password item. + + ## Example Usage + + ```python + import pulumi + import simcubeltd_pulumi_onepassword as onepassword + + demo_password = onepassword.Item("demoPassword", + vault=var["demo_vault"], + title="Demo Password Recipe", + category="password", + password_recipe=onepassword.ItemPasswordRecipeArgs( + length=40, + symbols=False, + )) + demo_login = onepassword.Item("demoLogin", + vault=var["demo_vault"], + title="Demo Terraform Login", + category="login", + username="test@example.com") + demo_db = onepassword.Item("demoDb", + vault=var["demo_vault"], + category="database", + type="mysql", + title="Demo TF Database", + username="root", + database="Example MySQL Instance", + hostname="localhost", + port="3306") + ``` + + ## Import + + # import an existing 1Password item + + ```sh + $ pulumi import onepassword:index/item:Item myitem vaults//items/ + ``` + + :param str resource_name: The name of the resource. + :param ItemArgs args: The arguments to use to populate this resource's properties. + :param pulumi.ResourceOptions opts: Options for the resource. + """ + ... + def __init__(__self__, resource_name: str, *args, **kwargs): + resource_args, opts = _utilities.get_resource_args_opts(ItemArgs, pulumi.ResourceOptions, *args, **kwargs) + if resource_args is not None: + __self__._internal_init(resource_name, opts, **resource_args.__dict__) + else: + __self__._internal_init(resource_name, *args, **kwargs) + + def _internal_init(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + category: Optional[pulumi.Input[str]] = None, + database: Optional[pulumi.Input[str]] = None, + hostname: Optional[pulumi.Input[str]] = None, + password: Optional[pulumi.Input[str]] = None, + password_recipe: Optional[pulumi.Input[pulumi.InputType['ItemPasswordRecipeArgs']]] = None, + port: Optional[pulumi.Input[str]] = None, + sections: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ItemSectionArgs']]]]] = None, + tags: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, + title: Optional[pulumi.Input[str]] = None, + type: Optional[pulumi.Input[str]] = None, + url: Optional[pulumi.Input[str]] = None, + username: Optional[pulumi.Input[str]] = None, + vault: Optional[pulumi.Input[str]] = None, + __props__=None): + if opts is None: + opts = pulumi.ResourceOptions() + if not isinstance(opts, pulumi.ResourceOptions): + raise TypeError('Expected resource options to be a ResourceOptions instance') + if opts.version is None: + opts.version = _utilities.get_version() + if opts.plugin_download_url is None: + opts.plugin_download_url = _utilities.get_plugin_download_url() + if opts.id is None: + if __props__ is not None: + raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource') + __props__ = ItemArgs.__new__(ItemArgs) + + __props__.__dict__["category"] = category + __props__.__dict__["database"] = database + __props__.__dict__["hostname"] = None if hostname is None else pulumi.Output.secret(hostname) + __props__.__dict__["password"] = None if password is None else pulumi.Output.secret(password) + __props__.__dict__["password_recipe"] = password_recipe + __props__.__dict__["port"] = None if port is None else pulumi.Output.secret(port) + __props__.__dict__["sections"] = sections + __props__.__dict__["tags"] = tags + __props__.__dict__["title"] = title + __props__.__dict__["type"] = type + __props__.__dict__["url"] = url + __props__.__dict__["username"] = None if username is None else pulumi.Output.secret(username) + if vault is None and not opts.urn: + raise TypeError("Missing required property 'vault'") + __props__.__dict__["vault"] = None if vault is None else pulumi.Output.secret(vault) + __props__.__dict__["uuid"] = None + secret_opts = pulumi.ResourceOptions(additional_secret_outputs=["hostname", "password", "port", "username", "vault"]) + opts = pulumi.ResourceOptions.merge(opts, secret_opts) + super(Item, __self__).__init__( + 'onepassword:index/item:Item', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + category: Optional[pulumi.Input[str]] = None, + database: Optional[pulumi.Input[str]] = None, + hostname: Optional[pulumi.Input[str]] = None, + password: Optional[pulumi.Input[str]] = None, + password_recipe: Optional[pulumi.Input[pulumi.InputType['ItemPasswordRecipeArgs']]] = None, + port: Optional[pulumi.Input[str]] = None, + sections: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ItemSectionArgs']]]]] = None, + tags: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, + title: Optional[pulumi.Input[str]] = None, + type: Optional[pulumi.Input[str]] = None, + url: Optional[pulumi.Input[str]] = None, + username: Optional[pulumi.Input[str]] = None, + uuid: Optional[pulumi.Input[str]] = None, + vault: Optional[pulumi.Input[str]] = None) -> 'Item': + """ + Get an existing Item resource's state with the given name, id, and optional extra + properties used to qualify the lookup. + + :param str resource_name: The unique name of the resulting resource. + :param pulumi.Input[str] id: The unique provider ID of the resource to lookup. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[str] category: The category of the item. One of ["login" "password" "database"] + :param pulumi.Input[str] database: (Only applies to the database category) The name of the database. + :param pulumi.Input[str] hostname: (Only applies to the database category) The address where the database can be found + :param pulumi.Input[str] password: Password for this item. + :param pulumi.Input[pulumi.InputType['ItemPasswordRecipeArgs']] password_recipe: Password for this item. + :param pulumi.Input[str] port: (Only applies to the database category) The port the database is listening on. + :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ItemSectionArgs']]]] sections: A list of custom sections in an item + :param pulumi.Input[Sequence[pulumi.Input[str]]] tags: An array of strings of the tags assigned to the item. + :param pulumi.Input[str] title: The title of the item. + :param pulumi.Input[str] type: (Only applies to the database category) The type of database. One of ["db2" "filemaker" "msaccess" "mssql" "mysql" "oracle" "postgresql" "sqlite" "other"] + :param pulumi.Input[str] url: The primary URL for the item. + :param pulumi.Input[str] username: Username for this item. + :param pulumi.Input[str] uuid: The UUID of the item. Item identifiers are unique within a specific vault. + :param pulumi.Input[str] vault: The UUID of the vault the item is in. + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _ItemState.__new__(_ItemState) + + __props__.__dict__["category"] = category + __props__.__dict__["database"] = database + __props__.__dict__["hostname"] = hostname + __props__.__dict__["password"] = password + __props__.__dict__["password_recipe"] = password_recipe + __props__.__dict__["port"] = port + __props__.__dict__["sections"] = sections + __props__.__dict__["tags"] = tags + __props__.__dict__["title"] = title + __props__.__dict__["type"] = type + __props__.__dict__["url"] = url + __props__.__dict__["username"] = username + __props__.__dict__["uuid"] = uuid + __props__.__dict__["vault"] = vault + return Item(resource_name, opts=opts, __props__=__props__) + + @property + @pulumi.getter + def category(self) -> pulumi.Output[Optional[str]]: + """ + The category of the item. One of ["login" "password" "database"] + """ + return pulumi.get(self, "category") + + @property + @pulumi.getter + def database(self) -> pulumi.Output[Optional[str]]: + """ + (Only applies to the database category) The name of the database. + """ + return pulumi.get(self, "database") + + @property + @pulumi.getter + def hostname(self) -> pulumi.Output[Optional[str]]: + """ + (Only applies to the database category) The address where the database can be found + """ + return pulumi.get(self, "hostname") + + @property + @pulumi.getter + def password(self) -> pulumi.Output[str]: + """ + Password for this item. + """ + return pulumi.get(self, "password") + + @property + @pulumi.getter(name="passwordRecipe") + def password_recipe(self) -> pulumi.Output[Optional['outputs.ItemPasswordRecipe']]: + """ + Password for this item. + """ + return pulumi.get(self, "password_recipe") + + @property + @pulumi.getter + def port(self) -> pulumi.Output[Optional[str]]: + """ + (Only applies to the database category) The port the database is listening on. + """ + return pulumi.get(self, "port") + + @property + @pulumi.getter + def sections(self) -> pulumi.Output[Optional[Sequence['outputs.ItemSection']]]: + """ + A list of custom sections in an item + """ + return pulumi.get(self, "sections") + + @property + @pulumi.getter + def tags(self) -> pulumi.Output[Optional[Sequence[str]]]: + """ + An array of strings of the tags assigned to the item. + """ + return pulumi.get(self, "tags") + + @property + @pulumi.getter + def title(self) -> pulumi.Output[Optional[str]]: + """ + The title of the item. + """ + return pulumi.get(self, "title") + + @property + @pulumi.getter + def type(self) -> pulumi.Output[Optional[str]]: + """ + (Only applies to the database category) The type of database. One of ["db2" "filemaker" "msaccess" "mssql" "mysql" "oracle" "postgresql" "sqlite" "other"] + """ + return pulumi.get(self, "type") + + @property + @pulumi.getter + def url(self) -> pulumi.Output[Optional[str]]: + """ + The primary URL for the item. + """ + return pulumi.get(self, "url") + + @property + @pulumi.getter + def username(self) -> pulumi.Output[Optional[str]]: + """ + Username for this item. + """ + return pulumi.get(self, "username") + + @property + @pulumi.getter + def uuid(self) -> pulumi.Output[str]: + """ + The UUID of the item. Item identifiers are unique within a specific vault. + """ + return pulumi.get(self, "uuid") + + @property + @pulumi.getter + def vault(self) -> pulumi.Output[str]: + """ + The UUID of the vault the item is in. + """ + return pulumi.get(self, "vault") + diff --git a/sdk/python/simcubeltd_pulumi_onepassword/outputs.py b/sdk/python/simcubeltd_pulumi_onepassword/outputs.py new file mode 100644 index 0000000..a424dd5 --- /dev/null +++ b/sdk/python/simcubeltd_pulumi_onepassword/outputs.py @@ -0,0 +1,323 @@ +# coding=utf-8 +# *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +# *** Do not edit by hand unless you're certain you know what you are doing! *** + +import warnings +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +from . import _utilities +from . import outputs + +__all__ = [ + 'GetItemSectionResult', + 'GetItemSectionFieldResult', + 'ItemPasswordRecipe', + 'ItemSection', + 'ItemSectionField', + 'ItemSectionFieldPasswordRecipe', +] + +@pulumi.output_type +class GetItemSectionResult(dict): + def __init__(__self__, *, + fields: Sequence['outputs.GetItemSectionFieldResult'], + id: str, + label: str): + pulumi.set(__self__, "fields", fields) + pulumi.set(__self__, "id", id) + pulumi.set(__self__, "label", label) + + @property + @pulumi.getter + def fields(self) -> Sequence['outputs.GetItemSectionFieldResult']: + return pulumi.get(self, "fields") + + @property + @pulumi.getter + def id(self) -> str: + return pulumi.get(self, "id") + + @property + @pulumi.getter + def label(self) -> str: + return pulumi.get(self, "label") + + +@pulumi.output_type +class GetItemSectionFieldResult(dict): + def __init__(__self__, *, + id: str, + label: str, + purpose: str, + type: str, + value: str): + """ + :param str type: (Only applies to the database category) The type of database. One of ["db2" "filemaker" "msaccess" "mssql" "mysql" "oracle" "postgresql" "sqlite" "other"] + """ + pulumi.set(__self__, "id", id) + pulumi.set(__self__, "label", label) + pulumi.set(__self__, "purpose", purpose) + pulumi.set(__self__, "type", type) + pulumi.set(__self__, "value", value) + + @property + @pulumi.getter + def id(self) -> str: + return pulumi.get(self, "id") + + @property + @pulumi.getter + def label(self) -> str: + return pulumi.get(self, "label") + + @property + @pulumi.getter + def purpose(self) -> str: + return pulumi.get(self, "purpose") + + @property + @pulumi.getter + def type(self) -> str: + """ + (Only applies to the database category) The type of database. One of ["db2" "filemaker" "msaccess" "mssql" "mysql" "oracle" "postgresql" "sqlite" "other"] + """ + return pulumi.get(self, "type") + + @property + @pulumi.getter + def value(self) -> str: + return pulumi.get(self, "value") + + +@pulumi.output_type +class ItemPasswordRecipe(dict): + def __init__(__self__, *, + digits: Optional[bool] = None, + length: Optional[int] = None, + letters: Optional[bool] = None, + symbols: Optional[bool] = None): + """ + :param bool digits: Use digits [0-9] when generating the password. + :param int length: The length of the password to be generated. + :param bool letters: Use letters [a-zA-Z] when generating the password. + :param bool symbols: Use symbols [!@.-_*] when generating the password. + """ + if digits is not None: + pulumi.set(__self__, "digits", digits) + if length is not None: + pulumi.set(__self__, "length", length) + if letters is not None: + pulumi.set(__self__, "letters", letters) + if symbols is not None: + pulumi.set(__self__, "symbols", symbols) + + @property + @pulumi.getter + def digits(self) -> Optional[bool]: + """ + Use digits [0-9] when generating the password. + """ + return pulumi.get(self, "digits") + + @property + @pulumi.getter + def length(self) -> Optional[int]: + """ + The length of the password to be generated. + """ + return pulumi.get(self, "length") + + @property + @pulumi.getter + def letters(self) -> Optional[bool]: + """ + Use letters [a-zA-Z] when generating the password. + """ + return pulumi.get(self, "letters") + + @property + @pulumi.getter + def symbols(self) -> Optional[bool]: + """ + Use symbols [!@.-_*] when generating the password. + """ + return pulumi.get(self, "symbols") + + +@pulumi.output_type +class ItemSection(dict): + def __init__(__self__, *, + label: str, + fields: Optional[Sequence['outputs.ItemSectionField']] = None, + id: Optional[str] = None): + """ + :param str label: The label for the section. + :param Sequence['ItemSectionFieldArgs'] fields: A list of custom fields in the section. + :param str id: A unique identifier for the section. + """ + pulumi.set(__self__, "label", label) + if fields is not None: + pulumi.set(__self__, "fields", fields) + if id is not None: + pulumi.set(__self__, "id", id) + + @property + @pulumi.getter + def label(self) -> str: + """ + The label for the section. + """ + return pulumi.get(self, "label") + + @property + @pulumi.getter + def fields(self) -> Optional[Sequence['outputs.ItemSectionField']]: + """ + A list of custom fields in the section. + """ + return pulumi.get(self, "fields") + + @property + @pulumi.getter + def id(self) -> Optional[str]: + """ + A unique identifier for the section. + """ + return pulumi.get(self, "id") + + +@pulumi.output_type +class ItemSectionField(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "passwordRecipe": + suggest = "password_recipe" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in ItemSectionField. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + ItemSectionField.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + ItemSectionField.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + label: str, + id: Optional[str] = None, + password_recipe: Optional['outputs.ItemSectionFieldPasswordRecipe'] = None, + purpose: Optional[str] = None, + type: Optional[str] = None, + value: Optional[str] = None): + """ + :param 'ItemSectionFieldPasswordRecipeArgs' password_recipe: Password for this item. + :param str type: (Only applies to the database category) The type of database. One of ["db2" "filemaker" "msaccess" "mssql" "mysql" "oracle" "postgresql" "sqlite" "other"] + """ + pulumi.set(__self__, "label", label) + if id is not None: + pulumi.set(__self__, "id", id) + if password_recipe is not None: + pulumi.set(__self__, "password_recipe", password_recipe) + if purpose is not None: + pulumi.set(__self__, "purpose", purpose) + if type is not None: + pulumi.set(__self__, "type", type) + if value is not None: + pulumi.set(__self__, "value", value) + + @property + @pulumi.getter + def label(self) -> str: + return pulumi.get(self, "label") + + @property + @pulumi.getter + def id(self) -> Optional[str]: + return pulumi.get(self, "id") + + @property + @pulumi.getter(name="passwordRecipe") + def password_recipe(self) -> Optional['outputs.ItemSectionFieldPasswordRecipe']: + """ + Password for this item. + """ + return pulumi.get(self, "password_recipe") + + @property + @pulumi.getter + def purpose(self) -> Optional[str]: + return pulumi.get(self, "purpose") + + @property + @pulumi.getter + def type(self) -> Optional[str]: + """ + (Only applies to the database category) The type of database. One of ["db2" "filemaker" "msaccess" "mssql" "mysql" "oracle" "postgresql" "sqlite" "other"] + """ + return pulumi.get(self, "type") + + @property + @pulumi.getter + def value(self) -> Optional[str]: + return pulumi.get(self, "value") + + +@pulumi.output_type +class ItemSectionFieldPasswordRecipe(dict): + def __init__(__self__, *, + digits: Optional[bool] = None, + length: Optional[int] = None, + letters: Optional[bool] = None, + symbols: Optional[bool] = None): + """ + :param bool digits: Use digits [0-9] when generating the password. + :param int length: The length of the password to be generated. + :param bool letters: Use letters [a-zA-Z] when generating the password. + :param bool symbols: Use symbols [!@.-_*] when generating the password. + """ + if digits is not None: + pulumi.set(__self__, "digits", digits) + if length is not None: + pulumi.set(__self__, "length", length) + if letters is not None: + pulumi.set(__self__, "letters", letters) + if symbols is not None: + pulumi.set(__self__, "symbols", symbols) + + @property + @pulumi.getter + def digits(self) -> Optional[bool]: + """ + Use digits [0-9] when generating the password. + """ + return pulumi.get(self, "digits") + + @property + @pulumi.getter + def length(self) -> Optional[int]: + """ + The length of the password to be generated. + """ + return pulumi.get(self, "length") + + @property + @pulumi.getter + def letters(self) -> Optional[bool]: + """ + Use letters [a-zA-Z] when generating the password. + """ + return pulumi.get(self, "letters") + + @property + @pulumi.getter + def symbols(self) -> Optional[bool]: + """ + Use symbols [!@.-_*] when generating the password. + """ + return pulumi.get(self, "symbols") + + diff --git a/sdk/python/simcubeltd_pulumi_onepassword/provider.py b/sdk/python/simcubeltd_pulumi_onepassword/provider.py new file mode 100644 index 0000000..6aeaebb --- /dev/null +++ b/sdk/python/simcubeltd_pulumi_onepassword/provider.py @@ -0,0 +1,143 @@ +# coding=utf-8 +# *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +# *** Do not edit by hand unless you're certain you know what you are doing! *** + +import warnings +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +from . import _utilities + +__all__ = ['ProviderArgs', 'Provider'] + +@pulumi.input_type +class ProviderArgs: + def __init__(__self__, *, + token: pulumi.Input[str], + url: Optional[pulumi.Input[str]] = None): + """ + The set of arguments for constructing a Provider resource. + :param pulumi.Input[str] token: A valid token for your 1Password Connect API. Can also be sourced from OP_CONNECT_TOKEN. + :param pulumi.Input[str] url: The HTTP(S) URL where your 1Password Connect API can be found. Must be provided through the the OP_CONNECT_HOST + environment variable if this attribute is not set. + """ + pulumi.set(__self__, "token", token) + if url is not None: + pulumi.set(__self__, "url", url) + + @property + @pulumi.getter + def token(self) -> pulumi.Input[str]: + """ + A valid token for your 1Password Connect API. Can also be sourced from OP_CONNECT_TOKEN. + """ + return pulumi.get(self, "token") + + @token.setter + def token(self, value: pulumi.Input[str]): + pulumi.set(self, "token", value) + + @property + @pulumi.getter + def url(self) -> Optional[pulumi.Input[str]]: + """ + The HTTP(S) URL where your 1Password Connect API can be found. Must be provided through the the OP_CONNECT_HOST + environment variable if this attribute is not set. + """ + return pulumi.get(self, "url") + + @url.setter + def url(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "url", value) + + +class Provider(pulumi.ProviderResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + token: Optional[pulumi.Input[str]] = None, + url: Optional[pulumi.Input[str]] = None, + __props__=None): + """ + The provider type for the onepassword package. By default, resources use package-wide configuration + settings, however an explicit `Provider` instance may be created and passed during resource + construction to achieve fine-grained programmatic control over provider settings. See the + [documentation](https://www.pulumi.com/docs/reference/programming-model/#providers) for more information. + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[str] token: A valid token for your 1Password Connect API. Can also be sourced from OP_CONNECT_TOKEN. + :param pulumi.Input[str] url: The HTTP(S) URL where your 1Password Connect API can be found. Must be provided through the the OP_CONNECT_HOST + environment variable if this attribute is not set. + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: ProviderArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + The provider type for the onepassword package. By default, resources use package-wide configuration + settings, however an explicit `Provider` instance may be created and passed during resource + construction to achieve fine-grained programmatic control over provider settings. See the + [documentation](https://www.pulumi.com/docs/reference/programming-model/#providers) for more information. + + :param str resource_name: The name of the resource. + :param ProviderArgs args: The arguments to use to populate this resource's properties. + :param pulumi.ResourceOptions opts: Options for the resource. + """ + ... + def __init__(__self__, resource_name: str, *args, **kwargs): + resource_args, opts = _utilities.get_resource_args_opts(ProviderArgs, pulumi.ResourceOptions, *args, **kwargs) + if resource_args is not None: + __self__._internal_init(resource_name, opts, **resource_args.__dict__) + else: + __self__._internal_init(resource_name, *args, **kwargs) + + def _internal_init(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + token: Optional[pulumi.Input[str]] = None, + url: Optional[pulumi.Input[str]] = None, + __props__=None): + if opts is None: + opts = pulumi.ResourceOptions() + if not isinstance(opts, pulumi.ResourceOptions): + raise TypeError('Expected resource options to be a ResourceOptions instance') + if opts.version is None: + opts.version = _utilities.get_version() + if opts.plugin_download_url is None: + opts.plugin_download_url = _utilities.get_plugin_download_url() + if opts.id is None: + if __props__ is not None: + raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource') + __props__ = ProviderArgs.__new__(ProviderArgs) + + if token is None and not opts.urn: + raise TypeError("Missing required property 'token'") + __props__.__dict__["token"] = token + __props__.__dict__["url"] = url + super(Provider, __self__).__init__( + 'onepassword', + resource_name, + __props__, + opts) + + @property + @pulumi.getter + def token(self) -> pulumi.Output[str]: + """ + A valid token for your 1Password Connect API. Can also be sourced from OP_CONNECT_TOKEN. + """ + return pulumi.get(self, "token") + + @property + @pulumi.getter + def url(self) -> pulumi.Output[Optional[str]]: + """ + The HTTP(S) URL where your 1Password Connect API can be found. Must be provided through the the OP_CONNECT_HOST + environment variable if this attribute is not set. + """ + return pulumi.get(self, "url") + diff --git a/sdk/python/simcubeltd_pulumi_onepassword/pulumi-plugin.json b/sdk/python/simcubeltd_pulumi_onepassword/pulumi-plugin.json new file mode 100644 index 0000000..5f19768 --- /dev/null +++ b/sdk/python/simcubeltd_pulumi_onepassword/pulumi-plugin.json @@ -0,0 +1,5 @@ +{ + "resource": true, + "name": "onepassword", + "server": "https://github.com/SimCubeLtd/pulumi-onepassword/releases/download/v${VERSION}" +} diff --git a/sdk/python/simcubeltd_pulumi_onepassword/py.typed b/sdk/python/simcubeltd_pulumi_onepassword/py.typed new file mode 100644 index 0000000..e69de29