From 6c092da2e13cea1290a93b845dbd301e1264098c Mon Sep 17 00:00:00 2001 From: Bob Lee Date: Thu, 14 Mar 2024 12:28:33 -0400 Subject: [PATCH] Update to work with Twingate terraform provider --- Makefile | 13 +- README.md | 32 +- deployment-templates/.goreleaser.yml | 6 +- docs/_index.md | 9 + docs/installation-configuration.md | 36 + examples/go.mod | 2 +- .../.gitignore | 0 .../cmd/pulumi-resource-twingate/Pulumi.yaml | 0 .../bridge-metadata.json | 357 ++ .../generate.go | 0 .../main.go | 6 +- .../cmd/pulumi-resource-twingate/schema.json | 1756 ++++++++ .../pulumi-resource-xyz/bridge-metadata.json | 1 - .../main.go | 6 +- provider/go.mod | 231 +- provider/go.sum | 3620 +++++++++++++++++ provider/resources.go | 72 +- sdk/dotnet/Config/Config.cs | 92 + sdk/dotnet/Config/README.md | 1 + sdk/dotnet/GetTwingateConnector.cs | 137 + sdk/dotnet/GetTwingateConnectors.cs | 129 + sdk/dotnet/GetTwingateGroup.cs | 144 + sdk/dotnet/GetTwingateGroups.cs | 192 + sdk/dotnet/GetTwingateRemoteNetwork.cs | 142 + sdk/dotnet/GetTwingateRemoteNetworks.cs | 129 + sdk/dotnet/GetTwingateResource.cs | 168 + sdk/dotnet/GetTwingateResources.cs | 154 + sdk/dotnet/GetTwingateSecurityPolicies.cs | 118 + sdk/dotnet/GetTwingateSecurityPolicy.cs | 135 + sdk/dotnet/GetTwingateServiceAccounts.cs | 154 + sdk/dotnet/GetTwingateUser.cs | 158 + sdk/dotnet/GetTwingateUsers.cs | 118 + .../Inputs/GetTwingateConnectorsConnector.cs | 44 + .../GetTwingateConnectorsConnectorArgs.cs | 44 + sdk/dotnet/Inputs/GetTwingateGroupsGroup.cs | 50 + .../Inputs/GetTwingateGroupsGroupArgs.cs | 50 + .../GetTwingateRemoteNetworksRemoteNetwork.cs | 38 + ...TwingateRemoteNetworksRemoteNetworkArgs.cs | 38 + .../Inputs/GetTwingateResourceProtocol.cs | 42 + .../Inputs/GetTwingateResourceProtocolArgs.cs | 42 + .../Inputs/GetTwingateResourceProtocolTcp.cs | 38 + .../GetTwingateResourceProtocolTcpArgs.cs | 38 + .../Inputs/GetTwingateResourceProtocolUdp.cs | 38 + .../GetTwingateResourceProtocolUdpArgs.cs | 38 + .../Inputs/GetTwingateResourcesResource.cs | 56 + .../GetTwingateResourcesResourceArgs.cs | 56 + .../GetTwingateResourcesResourceProtocol.cs | 42 + ...etTwingateResourcesResourceProtocolArgs.cs | 42 + ...GetTwingateResourcesResourceProtocolTcp.cs | 38 + ...wingateResourcesResourceProtocolTcpArgs.cs | 38 + ...GetTwingateResourcesResourceProtocolUdp.cs | 38 + ...wingateResourcesResourceProtocolUdpArgs.cs | 38 + ...tTwingateSecurityPoliciesSecurityPolicy.cs | 32 + ...ngateSecurityPoliciesSecurityPolicyArgs.cs | 32 + ...etTwingateServiceAccountsServiceAccount.cs | 56 + ...ingateServiceAccountsServiceAccountArgs.cs | 56 + sdk/dotnet/Inputs/GetTwingateUsersUser.cs | 62 + sdk/dotnet/Inputs/GetTwingateUsersUserArgs.cs | 62 + .../Inputs/TwingateResourceAccessArgs.cs | 44 + .../Inputs/TwingateResourceAccessGetArgs.cs | 44 + .../Inputs/TwingateResourceProtocolsArgs.cs | 32 + .../TwingateResourceProtocolsGetArgs.cs | 32 + .../TwingateResourceProtocolsTcpArgs.cs | 38 + .../TwingateResourceProtocolsTcpGetArgs.cs | 38 + .../TwingateResourceProtocolsUdpArgs.cs | 38 + .../TwingateResourceProtocolsUdpGetArgs.cs | 38 + .../GetTwingateConnectorsConnectorResult.cs | 49 + .../Outputs/GetTwingateGroupsGroupResult.cs | 56 + ...ingateRemoteNetworksRemoteNetworkResult.cs | 42 + .../GetTwingateResourceProtocolResult.cs | 36 + .../GetTwingateResourceProtocolTcpResult.cs | 35 + .../GetTwingateResourceProtocolUdpResult.cs | 35 + ...TwingateResourcesResourceProtocolResult.cs | 36 + ...ngateResourcesResourceProtocolTcpResult.cs | 35 + ...ngateResourcesResourceProtocolUdpResult.cs | 35 + .../GetTwingateResourcesResourceResult.cs | 56 + ...ateSecurityPoliciesSecurityPolicyResult.cs | 35 + ...gateServiceAccountsServiceAccountResult.cs | 49 + .../Outputs/GetTwingateUsersUserResult.cs | 70 + sdk/dotnet/Outputs/TwingateResourceAccess.cs | 35 + .../Outputs/TwingateResourceProtocols.cs | 36 + .../Outputs/TwingateResourceProtocolsTcp.cs | 35 + .../Outputs/TwingateResourceProtocolsUdp.cs | 35 + sdk/dotnet/Provider.cs | 126 + sdk/dotnet/Pulumi.Twingate.csproj | 60 + sdk/dotnet/Pulumi.yaml | 0 sdk/dotnet/README.md | 1 + sdk/dotnet/TwingateConnector.cs | 157 + sdk/dotnet/TwingateConnectorTokens.cs | 199 + sdk/dotnet/TwingateGroup.cs | 185 + sdk/dotnet/TwingateRemoteNetwork.cs | 134 + sdk/dotnet/TwingateResource.cs | 301 ++ sdk/dotnet/TwingateServiceAccount.cs | 110 + sdk/dotnet/TwingateServiceAccountKey.cs | 159 + sdk/dotnet/TwingateUser.cs | 219 + sdk/dotnet/Utilities.cs | 83 + sdk/dotnet/logo.png | Bin 0 -> 7934 bytes sdk/dotnet/pulumi-plugin.json | 4 + sdk/go.mod | 2 +- sdk/go/Pulumi.yaml | 0 sdk/go/twingate/config/config.go | 43 + sdk/go/twingate/doc.go | 2 + sdk/go/twingate/getTwingateConnector.go | 129 + sdk/go/twingate/getTwingateConnectors.go | 113 + sdk/go/twingate/getTwingateGroup.go | 136 + sdk/go/twingate/getTwingateGroups.go | 148 + sdk/go/twingate/getTwingateRemoteNetwork.go | 126 + sdk/go/twingate/getTwingateRemoteNetworks.go | 115 + sdk/go/twingate/getTwingateResource.go | 140 + sdk/go/twingate/getTwingateResources.go | 126 + .../twingate/getTwingateSecurityPolicies.go | 111 + sdk/go/twingate/getTwingateSecurityPolicy.go | 119 + sdk/go/twingate/getTwingateServiceAccounts.go | 128 + sdk/go/twingate/getTwingateUser.go | 154 + sdk/go/twingate/getTwingateUsers.go | 109 + sdk/go/twingate/init.go | 115 + sdk/go/twingate/internal/pulumiUtilities.go | 184 + sdk/go/twingate/internal/pulumiVersion.go | 11 + sdk/go/twingate/provider.go | 154 + sdk/go/twingate/pulumi-plugin.json | 4 + sdk/go/twingate/pulumiTypes.go | 2254 ++++++++++ sdk/go/twingate/twingateConnector.go | 287 ++ sdk/go/twingate/twingateConnectorTokens.go | 297 ++ sdk/go/twingate/twingateGroup.go | 298 ++ sdk/go/twingate/twingateRemoteNetwork.go | 262 ++ sdk/go/twingate/twingateResource.go | 416 ++ sdk/go/twingate/twingateServiceAccount.go | 239 ++ sdk/go/twingate/twingateServiceAccountKey.go | 279 ++ sdk/go/twingate/twingateUser.go | 335 ++ sdk/nodejs/Pulumi.yaml | 0 sdk/nodejs/README.md | 4 + sdk/nodejs/config/index.ts | 5 + sdk/nodejs/config/vars.ts | 70 + sdk/nodejs/getTwingateConnector.ts | 86 + sdk/nodejs/getTwingateConnectors.ts | 77 + sdk/nodejs/getTwingateGroup.ts | 90 + sdk/nodejs/getTwingateGroups.ts | 120 + sdk/nodejs/getTwingateRemoteNetwork.ts | 92 + sdk/nodejs/getTwingateRemoteNetworks.ts | 77 + sdk/nodejs/getTwingateResource.ts | 101 + sdk/nodejs/getTwingateResources.ts | 93 + sdk/nodejs/getTwingateSecurityPolicies.ts | 68 + sdk/nodejs/getTwingateSecurityPolicy.ts | 88 + sdk/nodejs/getTwingateServiceAccounts.ts | 94 + sdk/nodejs/getTwingateUser.ts | 100 + sdk/nodejs/getTwingateUsers.ts | 68 + sdk/nodejs/index.ts | 169 + sdk/nodejs/package.json | 28 + sdk/nodejs/provider.ts | 99 + sdk/nodejs/tsconfig.json | 46 + sdk/nodejs/twingateConnector.ts | 131 + sdk/nodejs/twingateConnectorTokens.ts | 134 + sdk/nodejs/twingateGroup.ts | 144 + sdk/nodejs/twingateRemoteNetwork.ts | 113 + sdk/nodejs/twingateResource.ts | 245 ++ sdk/nodejs/twingateServiceAccount.ts | 93 + sdk/nodejs/twingateServiceAccountKey.ts | 123 + sdk/nodejs/twingateUser.ts | 182 + sdk/nodejs/types/index.ts | 13 + sdk/nodejs/types/input.ts | 458 +++ sdk/nodejs/types/output.ts | 254 ++ sdk/nodejs/utilities.ts | 95 + sdk/python/Pulumi.yaml | 0 sdk/python/README.md | 458 +++ sdk/python/pulumi_twingate/README.md | 4 + sdk/python/pulumi_twingate/__init__.py | 119 + sdk/python/pulumi_twingate/_inputs.py | 937 +++++ sdk/python/pulumi_twingate/_utilities.py | 291 ++ sdk/python/pulumi_twingate/config/__init__.py | 8 + .../pulumi_twingate/config/__init__.pyi | 42 + sdk/python/pulumi_twingate/config/vars.py | 58 + .../pulumi_twingate/get_twingate_connector.py | 130 + .../get_twingate_connectors.py | 106 + .../pulumi_twingate/get_twingate_group.py | 143 + .../pulumi_twingate/get_twingate_groups.py | 160 + .../get_twingate_remote_network.py | 122 + .../get_twingate_remote_networks.py | 106 + .../pulumi_twingate/get_twingate_resource.py | 150 + .../pulumi_twingate/get_twingate_resources.py | 124 + .../get_twingate_security_policies.py | 97 + .../get_twingate_security_policy.py | 109 + .../get_twingate_service_accounts.py | 124 + .../pulumi_twingate/get_twingate_user.py | 172 + .../pulumi_twingate/get_twingate_users.py | 97 + sdk/python/pulumi_twingate/outputs.py | 759 ++++ sdk/python/pulumi_twingate/provider.py | 226 + sdk/python/pulumi_twingate/pulumi-plugin.json | 4 + sdk/python/pulumi_twingate/py.typed | 0 .../pulumi_twingate/twingate_connector.py | 272 ++ .../twingate_connector_tokens.py | 273 ++ sdk/python/pulumi_twingate/twingate_group.py | 323 ++ .../twingate_remote_network.py | 222 + .../pulumi_twingate/twingate_resource.py | 606 +++ .../twingate_service_account.py | 163 + .../twingate_service_account_key.py | 243 ++ sdk/python/pulumi_twingate/twingate_user.py | 437 ++ sdk/python/setup.py | 44 + 197 files changed, 29476 insertions(+), 67 deletions(-) create mode 100644 docs/_index.md create mode 100644 docs/installation-configuration.md rename provider/cmd/{pulumi-resource-xyz => pulumi-resource-twingate}/.gitignore (100%) create mode 100644 provider/cmd/pulumi-resource-twingate/Pulumi.yaml create mode 100644 provider/cmd/pulumi-resource-twingate/bridge-metadata.json rename provider/cmd/{pulumi-resource-xyz => pulumi-resource-twingate}/generate.go (100%) rename provider/cmd/{pulumi-resource-xyz => pulumi-resource-twingate}/main.go (81%) create mode 100644 provider/cmd/pulumi-resource-twingate/schema.json delete mode 100644 provider/cmd/pulumi-resource-xyz/bridge-metadata.json rename provider/cmd/{pulumi-tfgen-xyz => pulumi-tfgen-twingate}/main.go (80%) 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/GetTwingateConnector.cs create mode 100644 sdk/dotnet/GetTwingateConnectors.cs create mode 100644 sdk/dotnet/GetTwingateGroup.cs create mode 100644 sdk/dotnet/GetTwingateGroups.cs create mode 100644 sdk/dotnet/GetTwingateRemoteNetwork.cs create mode 100644 sdk/dotnet/GetTwingateRemoteNetworks.cs create mode 100644 sdk/dotnet/GetTwingateResource.cs create mode 100644 sdk/dotnet/GetTwingateResources.cs create mode 100644 sdk/dotnet/GetTwingateSecurityPolicies.cs create mode 100644 sdk/dotnet/GetTwingateSecurityPolicy.cs create mode 100644 sdk/dotnet/GetTwingateServiceAccounts.cs create mode 100644 sdk/dotnet/GetTwingateUser.cs create mode 100644 sdk/dotnet/GetTwingateUsers.cs create mode 100644 sdk/dotnet/Inputs/GetTwingateConnectorsConnector.cs create mode 100644 sdk/dotnet/Inputs/GetTwingateConnectorsConnectorArgs.cs create mode 100644 sdk/dotnet/Inputs/GetTwingateGroupsGroup.cs create mode 100644 sdk/dotnet/Inputs/GetTwingateGroupsGroupArgs.cs create mode 100644 sdk/dotnet/Inputs/GetTwingateRemoteNetworksRemoteNetwork.cs create mode 100644 sdk/dotnet/Inputs/GetTwingateRemoteNetworksRemoteNetworkArgs.cs create mode 100644 sdk/dotnet/Inputs/GetTwingateResourceProtocol.cs create mode 100644 sdk/dotnet/Inputs/GetTwingateResourceProtocolArgs.cs create mode 100644 sdk/dotnet/Inputs/GetTwingateResourceProtocolTcp.cs create mode 100644 sdk/dotnet/Inputs/GetTwingateResourceProtocolTcpArgs.cs create mode 100644 sdk/dotnet/Inputs/GetTwingateResourceProtocolUdp.cs create mode 100644 sdk/dotnet/Inputs/GetTwingateResourceProtocolUdpArgs.cs create mode 100644 sdk/dotnet/Inputs/GetTwingateResourcesResource.cs create mode 100644 sdk/dotnet/Inputs/GetTwingateResourcesResourceArgs.cs create mode 100644 sdk/dotnet/Inputs/GetTwingateResourcesResourceProtocol.cs create mode 100644 sdk/dotnet/Inputs/GetTwingateResourcesResourceProtocolArgs.cs create mode 100644 sdk/dotnet/Inputs/GetTwingateResourcesResourceProtocolTcp.cs create mode 100644 sdk/dotnet/Inputs/GetTwingateResourcesResourceProtocolTcpArgs.cs create mode 100644 sdk/dotnet/Inputs/GetTwingateResourcesResourceProtocolUdp.cs create mode 100644 sdk/dotnet/Inputs/GetTwingateResourcesResourceProtocolUdpArgs.cs create mode 100644 sdk/dotnet/Inputs/GetTwingateSecurityPoliciesSecurityPolicy.cs create mode 100644 sdk/dotnet/Inputs/GetTwingateSecurityPoliciesSecurityPolicyArgs.cs create mode 100644 sdk/dotnet/Inputs/GetTwingateServiceAccountsServiceAccount.cs create mode 100644 sdk/dotnet/Inputs/GetTwingateServiceAccountsServiceAccountArgs.cs create mode 100644 sdk/dotnet/Inputs/GetTwingateUsersUser.cs create mode 100644 sdk/dotnet/Inputs/GetTwingateUsersUserArgs.cs create mode 100644 sdk/dotnet/Inputs/TwingateResourceAccessArgs.cs create mode 100644 sdk/dotnet/Inputs/TwingateResourceAccessGetArgs.cs create mode 100644 sdk/dotnet/Inputs/TwingateResourceProtocolsArgs.cs create mode 100644 sdk/dotnet/Inputs/TwingateResourceProtocolsGetArgs.cs create mode 100644 sdk/dotnet/Inputs/TwingateResourceProtocolsTcpArgs.cs create mode 100644 sdk/dotnet/Inputs/TwingateResourceProtocolsTcpGetArgs.cs create mode 100644 sdk/dotnet/Inputs/TwingateResourceProtocolsUdpArgs.cs create mode 100644 sdk/dotnet/Inputs/TwingateResourceProtocolsUdpGetArgs.cs create mode 100644 sdk/dotnet/Outputs/GetTwingateConnectorsConnectorResult.cs create mode 100644 sdk/dotnet/Outputs/GetTwingateGroupsGroupResult.cs create mode 100644 sdk/dotnet/Outputs/GetTwingateRemoteNetworksRemoteNetworkResult.cs create mode 100644 sdk/dotnet/Outputs/GetTwingateResourceProtocolResult.cs create mode 100644 sdk/dotnet/Outputs/GetTwingateResourceProtocolTcpResult.cs create mode 100644 sdk/dotnet/Outputs/GetTwingateResourceProtocolUdpResult.cs create mode 100644 sdk/dotnet/Outputs/GetTwingateResourcesResourceProtocolResult.cs create mode 100644 sdk/dotnet/Outputs/GetTwingateResourcesResourceProtocolTcpResult.cs create mode 100644 sdk/dotnet/Outputs/GetTwingateResourcesResourceProtocolUdpResult.cs create mode 100644 sdk/dotnet/Outputs/GetTwingateResourcesResourceResult.cs create mode 100644 sdk/dotnet/Outputs/GetTwingateSecurityPoliciesSecurityPolicyResult.cs create mode 100644 sdk/dotnet/Outputs/GetTwingateServiceAccountsServiceAccountResult.cs create mode 100644 sdk/dotnet/Outputs/GetTwingateUsersUserResult.cs create mode 100644 sdk/dotnet/Outputs/TwingateResourceAccess.cs create mode 100644 sdk/dotnet/Outputs/TwingateResourceProtocols.cs create mode 100644 sdk/dotnet/Outputs/TwingateResourceProtocolsTcp.cs create mode 100644 sdk/dotnet/Outputs/TwingateResourceProtocolsUdp.cs create mode 100644 sdk/dotnet/Provider.cs create mode 100644 sdk/dotnet/Pulumi.Twingate.csproj create mode 100644 sdk/dotnet/Pulumi.yaml create mode 100644 sdk/dotnet/README.md create mode 100644 sdk/dotnet/TwingateConnector.cs create mode 100644 sdk/dotnet/TwingateConnectorTokens.cs create mode 100644 sdk/dotnet/TwingateGroup.cs create mode 100644 sdk/dotnet/TwingateRemoteNetwork.cs create mode 100644 sdk/dotnet/TwingateResource.cs create mode 100644 sdk/dotnet/TwingateServiceAccount.cs create mode 100644 sdk/dotnet/TwingateServiceAccountKey.cs create mode 100644 sdk/dotnet/TwingateUser.cs 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/twingate/config/config.go create mode 100644 sdk/go/twingate/doc.go create mode 100644 sdk/go/twingate/getTwingateConnector.go create mode 100644 sdk/go/twingate/getTwingateConnectors.go create mode 100644 sdk/go/twingate/getTwingateGroup.go create mode 100644 sdk/go/twingate/getTwingateGroups.go create mode 100644 sdk/go/twingate/getTwingateRemoteNetwork.go create mode 100644 sdk/go/twingate/getTwingateRemoteNetworks.go create mode 100644 sdk/go/twingate/getTwingateResource.go create mode 100644 sdk/go/twingate/getTwingateResources.go create mode 100644 sdk/go/twingate/getTwingateSecurityPolicies.go create mode 100644 sdk/go/twingate/getTwingateSecurityPolicy.go create mode 100644 sdk/go/twingate/getTwingateServiceAccounts.go create mode 100644 sdk/go/twingate/getTwingateUser.go create mode 100644 sdk/go/twingate/getTwingateUsers.go create mode 100644 sdk/go/twingate/init.go create mode 100644 sdk/go/twingate/internal/pulumiUtilities.go create mode 100644 sdk/go/twingate/internal/pulumiVersion.go create mode 100644 sdk/go/twingate/provider.go create mode 100644 sdk/go/twingate/pulumi-plugin.json create mode 100644 sdk/go/twingate/pulumiTypes.go create mode 100644 sdk/go/twingate/twingateConnector.go create mode 100644 sdk/go/twingate/twingateConnectorTokens.go create mode 100644 sdk/go/twingate/twingateGroup.go create mode 100644 sdk/go/twingate/twingateRemoteNetwork.go create mode 100644 sdk/go/twingate/twingateResource.go create mode 100644 sdk/go/twingate/twingateServiceAccount.go create mode 100644 sdk/go/twingate/twingateServiceAccountKey.go create mode 100644 sdk/go/twingate/twingateUser.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/getTwingateConnector.ts create mode 100644 sdk/nodejs/getTwingateConnectors.ts create mode 100644 sdk/nodejs/getTwingateGroup.ts create mode 100644 sdk/nodejs/getTwingateGroups.ts create mode 100644 sdk/nodejs/getTwingateRemoteNetwork.ts create mode 100644 sdk/nodejs/getTwingateRemoteNetworks.ts create mode 100644 sdk/nodejs/getTwingateResource.ts create mode 100644 sdk/nodejs/getTwingateResources.ts create mode 100644 sdk/nodejs/getTwingateSecurityPolicies.ts create mode 100644 sdk/nodejs/getTwingateSecurityPolicy.ts create mode 100644 sdk/nodejs/getTwingateServiceAccounts.ts create mode 100644 sdk/nodejs/getTwingateUser.ts create mode 100644 sdk/nodejs/getTwingateUsers.ts create mode 100644 sdk/nodejs/index.ts create mode 100644 sdk/nodejs/package.json create mode 100644 sdk/nodejs/provider.ts create mode 100644 sdk/nodejs/tsconfig.json create mode 100644 sdk/nodejs/twingateConnector.ts create mode 100644 sdk/nodejs/twingateConnectorTokens.ts create mode 100644 sdk/nodejs/twingateGroup.ts create mode 100644 sdk/nodejs/twingateRemoteNetwork.ts create mode 100644 sdk/nodejs/twingateResource.ts create mode 100644 sdk/nodejs/twingateServiceAccount.ts create mode 100644 sdk/nodejs/twingateServiceAccountKey.ts create mode 100644 sdk/nodejs/twingateUser.ts 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/pulumi_twingate/README.md create mode 100644 sdk/python/pulumi_twingate/__init__.py create mode 100644 sdk/python/pulumi_twingate/_inputs.py create mode 100644 sdk/python/pulumi_twingate/_utilities.py create mode 100644 sdk/python/pulumi_twingate/config/__init__.py create mode 100644 sdk/python/pulumi_twingate/config/__init__.pyi create mode 100644 sdk/python/pulumi_twingate/config/vars.py create mode 100644 sdk/python/pulumi_twingate/get_twingate_connector.py create mode 100644 sdk/python/pulumi_twingate/get_twingate_connectors.py create mode 100644 sdk/python/pulumi_twingate/get_twingate_group.py create mode 100644 sdk/python/pulumi_twingate/get_twingate_groups.py create mode 100644 sdk/python/pulumi_twingate/get_twingate_remote_network.py create mode 100644 sdk/python/pulumi_twingate/get_twingate_remote_networks.py create mode 100644 sdk/python/pulumi_twingate/get_twingate_resource.py create mode 100644 sdk/python/pulumi_twingate/get_twingate_resources.py create mode 100644 sdk/python/pulumi_twingate/get_twingate_security_policies.py create mode 100644 sdk/python/pulumi_twingate/get_twingate_security_policy.py create mode 100644 sdk/python/pulumi_twingate/get_twingate_service_accounts.py create mode 100644 sdk/python/pulumi_twingate/get_twingate_user.py create mode 100644 sdk/python/pulumi_twingate/get_twingate_users.py create mode 100644 sdk/python/pulumi_twingate/outputs.py create mode 100644 sdk/python/pulumi_twingate/provider.py create mode 100644 sdk/python/pulumi_twingate/pulumi-plugin.json create mode 100644 sdk/python/pulumi_twingate/py.typed create mode 100644 sdk/python/pulumi_twingate/twingate_connector.py create mode 100644 sdk/python/pulumi_twingate/twingate_connector_tokens.py create mode 100644 sdk/python/pulumi_twingate/twingate_group.py create mode 100644 sdk/python/pulumi_twingate/twingate_remote_network.py create mode 100644 sdk/python/pulumi_twingate/twingate_resource.py create mode 100644 sdk/python/pulumi_twingate/twingate_service_account.py create mode 100644 sdk/python/pulumi_twingate/twingate_service_account_key.py create mode 100644 sdk/python/pulumi_twingate/twingate_user.py create mode 100644 sdk/python/setup.py diff --git a/Makefile b/Makefile index 706fd51..b68b09c 100644 --- a/Makefile +++ b/Makefile @@ -1,8 +1,8 @@ -PROJECT_NAME := xyz Package +PROJECT_NAME := twingate Package SHELL := /bin/bash -PACK := xyz -ORG := pulumi +PACK := twingate +ORG := Twingate 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/pulumi/pulumi-twingate,${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/pulumi/pulumi-twingate,${REPOSITORY},g' provider/go.mod; \ find ./ ! -path './.git/*' -type f -exec sed -i '' 's/[x]yz/${NAME}/g' {} \; &> /dev/null; \ fi @@ -91,6 +91,9 @@ build_go:: install_plugins tfgen # build the go sdk lint_provider:: provider # lint the provider code cd provider && golangci-lint run -c ../.golangci.yml +tidy:: # call go mod tidy in relevant directories + find ./provider -name go.mod -execdir go mod tidy \; + cleanup:: # cleans up the temporary directory rm -r $(WORKING_DIR)/bin rm -f provider/cmd/${PROVIDER}/schema.go diff --git a/README.md b/README.md index a38f41b..7436fc1 100644 --- a/README.md +++ b/README.md @@ -54,7 +54,7 @@ From the templated repository: 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. + - find and replace all instances of the boilerplate `twingate` with the `NAME` of your provider. Note for third-party providers: - Make sure to set the correct GitHub organization/username in all files referencing your provider as a dependency: @@ -359,7 +359,7 @@ before: hooks: - make tfgen builds: -- binary: pulumi-resource-xyz +- binary: pulumi-resource-twingate dir: provider goarch: - amd64 @@ -370,8 +370,8 @@ builds: - linux ignore: [] ldflags: - - -X github.com/pulumi/pulumi-xyz/provider/pkg/version.Version={{.Tag}} - main: ./cmd/pulumi-resource-xyz/ + - -X github.com/pulumi/pulumi-twingate/provider/pkg/version.Version={{.Tag}} + main: ./cmd/pulumi-resource-twingate/ sort: asc use: git release: @@ -396,18 +396,18 @@ dist ├── artifacts.json ├── config.yaml ├── metadata.json -├── pulumi-xyz_darwin_amd64_v1 -│ └── pulumi-resource-xyz -├── pulumi-xyz_darwin_arm64 -│ └── pulumi-resource-xyz -├── pulumi-xyz_linux_amd64_v1 -│ └── pulumi-resource-xyz -├── pulumi-xyz_linux_arm64 -│ └── pulumi-resource-xyz -├── pulumi-xyz_windows_amd64_v1 -│ └── pulumi-resource-xyz.exe -└── pulumi-xyz_windows_arm64 - └── pulumi-resource-xyz.exe +├── pulumi-twingate_darwin_amd64_v1 +│ └── pulumi-resource-twingate +├── pulumi-twingate_darwin_arm64 +│ └── pulumi-resource-twingate +├── pulumi-twingate_linux_amd64_v1 +│ └── pulumi-resource-twingate +├── pulumi-twingate_linux_arm64 +│ └── pulumi-resource-twingate +├── pulumi-twingate_windows_amd64_v1 +│ └── pulumi-resource-twingate.exe +└── pulumi-twingate_windows_arm64 + └── pulumi-resource-twingate.exe ``` Any of the provider binaries can be used to target the correct machine architecture diff --git a/deployment-templates/.goreleaser.yml b/deployment-templates/.goreleaser.yml index 9097c9a..d607fc8 100644 --- a/deployment-templates/.goreleaser.yml +++ b/deployment-templates/.goreleaser.yml @@ -5,7 +5,7 @@ before: hooks: - make tfgen builds: - - binary: pulumi-resource-xyz + - binary: pulumi-resource-twingate dir: provider env: - CGO_ENABLED=0 @@ -18,8 +18,8 @@ builds: - 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/your-org-name/pulumi-twingate/provider/pkg/version.Version={{.Tag }} + main: ./cmd/pulumi-resource-twingate/ changelog: skip: true release: diff --git a/docs/_index.md b/docs/_index.md new file mode 100644 index 0000000..7ab47f1 --- /dev/null +++ b/docs/_index.md @@ -0,0 +1,9 @@ +--- +title: Twingate +meta_desc: Provides an overview of the Twingate Provider for Pulumi. +layout: overview +--- + +The Twingate provider for Pulumi can be used to provision any of the cloud resources available in Twingate. + +The Twingate provider must be configured with credentials to deploy and update resources in Twingate. diff --git a/docs/installation-configuration.md b/docs/installation-configuration.md new file mode 100644 index 0000000..f515356 --- /dev/null +++ b/docs/installation-configuration.md @@ -0,0 +1,36 @@ +--- +title: Twingate Installation & Configuration +meta_desc: Information on how to install the Twingate provider. +layout: installation +--- + +## Installation + +The Pulumi Twingate provider is available as a package in all Pulumi languages: + +* JavaScript/TypeScript: [`@pulumiverse/twingate`](https://www.npmjs.com/package/@pulumiverse/twingate) +* Python: [`pulumiverse_twingate`](https://pypi.org/project/pulumiverse_twingate/) +* Go: [`github.com/pulumiverse/pulumi-twingate/sdk/go/twingate`](https://pkg.go.dev/github.com/pulumiverse/pulumi-twingate/sdk/go/twingate) +* .NET: [`Pulumiverse.Twingate`](https://www.nuget.org/packages/Pulumiverse.Twingate) + + +## Configuration + +> Note: +> Replace the following **sample content**, with the configuration options +> of the wrapped Terraform provider and remove this note. + +The following configuration points are available for the `twingate` provider: + +- `twingate:apiKey` (environment: `twingate_API_KEY`) - the API key for `twingate` +- `twingate:region` (environment: `twingate_REGION`) - the region in which to deploy resources + +### Provider Binary + +The Twingate provider binary is a third party binary. It can be installed using the `pulumi plugin` command. + +```bash +pulumi plugin install resource twingate +``` + +Replace the version string `` with your desired version. diff --git a/examples/go.mod b/examples/go.mod index 48988cb..1d03bd8 100644 --- a/examples/go.mod +++ b/examples/go.mod @@ -1,3 +1,3 @@ -module github.com/pulumi/pulumi-xyz/examples +module github.com/Twingate/pulumi-twingate/examples go 1.21 diff --git a/provider/cmd/pulumi-resource-xyz/.gitignore b/provider/cmd/pulumi-resource-twingate/.gitignore similarity index 100% rename from provider/cmd/pulumi-resource-xyz/.gitignore rename to provider/cmd/pulumi-resource-twingate/.gitignore diff --git a/provider/cmd/pulumi-resource-twingate/Pulumi.yaml b/provider/cmd/pulumi-resource-twingate/Pulumi.yaml new file mode 100644 index 0000000..e69de29 diff --git a/provider/cmd/pulumi-resource-twingate/bridge-metadata.json b/provider/cmd/pulumi-resource-twingate/bridge-metadata.json new file mode 100644 index 0000000..bfc6578 --- /dev/null +++ b/provider/cmd/pulumi-resource-twingate/bridge-metadata.json @@ -0,0 +1,357 @@ +{ + "auto-aliasing": { + "resources": { + "twingate_connector": { + "current": "twingate:index/twingateConnector:TwingateConnector" + }, + "twingate_connector_tokens": { + "current": "twingate:index/twingateConnectorTokens:TwingateConnectorTokens" + }, + "twingate_group": { + "current": "twingate:index/twingateGroup:TwingateGroup", + "fields": { + "user_ids": { + "maxItemsOne": false + } + } + }, + "twingate_remote_network": { + "current": "twingate:index/twingateRemoteNetwork:TwingateRemoteNetwork" + }, + "twingate_resource": { + "current": "twingate:index/twingateResource:TwingateResource", + "fields": { + "access": { + "maxItemsOne": true, + "elem": { + "fields": { + "group_ids": { + "maxItemsOne": false + }, + "service_account_ids": { + "maxItemsOne": false + } + } + } + }, + "protocols": { + "maxItemsOne": true, + "elem": { + "fields": { + "tcp": { + "maxItemsOne": true, + "elem": { + "fields": { + "ports": { + "maxItemsOne": false + } + } + } + }, + "udp": { + "maxItemsOne": true, + "elem": { + "fields": { + "ports": { + "maxItemsOne": false + } + } + } + } + } + } + } + } + }, + "twingate_service_account": { + "current": "twingate:index/twingateServiceAccount:TwingateServiceAccount" + }, + "twingate_service_account_key": { + "current": "twingate:index/twingateServiceAccountKey:TwingateServiceAccountKey" + }, + "twingate_user": { + "current": "twingate:index/twingateUser:TwingateUser" + } + }, + "datasources": { + "twingate_connector": { + "current": "twingate:index/getTwingateConnector:getTwingateConnector" + }, + "twingate_connectors": { + "current": "twingate:index/getTwingateConnectors:getTwingateConnectors", + "fields": { + "connectors": { + "maxItemsOne": false + } + } + }, + "twingate_group": { + "current": "twingate:index/getTwingateGroup:getTwingateGroup" + }, + "twingate_groups": { + "current": "twingate:index/getTwingateGroups:getTwingateGroups", + "fields": { + "groups": { + "maxItemsOne": false + } + } + }, + "twingate_remote_network": { + "current": "twingate:index/getTwingateRemoteNetwork:getTwingateRemoteNetwork" + }, + "twingate_remote_networks": { + "current": "twingate:index/getTwingateRemoteNetworks:getTwingateRemoteNetworks", + "fields": { + "remote_networks": { + "maxItemsOne": false + } + } + }, + "twingate_resource": { + "current": "twingate:index/getTwingateResource:getTwingateResource", + "fields": { + "protocols": { + "maxItemsOne": false, + "elem": { + "fields": { + "tcp": { + "maxItemsOne": false, + "elem": { + "fields": { + "ports": { + "maxItemsOne": false + } + } + } + }, + "udp": { + "maxItemsOne": false, + "elem": { + "fields": { + "ports": { + "maxItemsOne": false + } + } + } + } + } + } + } + } + }, + "twingate_resources": { + "current": "twingate:index/getTwingateResources:getTwingateResources", + "fields": { + "resources": { + "maxItemsOne": false, + "elem": { + "fields": { + "protocols": { + "maxItemsOne": false, + "elem": { + "fields": { + "tcp": { + "maxItemsOne": false, + "elem": { + "fields": { + "ports": { + "maxItemsOne": false + } + } + } + }, + "udp": { + "maxItemsOne": false, + "elem": { + "fields": { + "ports": { + "maxItemsOne": false + } + } + } + } + } + } + } + } + } + } + } + }, + "twingate_security_policies": { + "current": "twingate:index/getTwingateSecurityPolicies:getTwingateSecurityPolicies", + "fields": { + "security_policies": { + "maxItemsOne": false + } + } + }, + "twingate_security_policy": { + "current": "twingate:index/getTwingateSecurityPolicy:getTwingateSecurityPolicy" + }, + "twingate_service_accounts": { + "current": "twingate:index/getTwingateServiceAccounts:getTwingateServiceAccounts", + "fields": { + "service_accounts": { + "maxItemsOne": false, + "elem": { + "fields": { + "key_ids": { + "maxItemsOne": false + }, + "resource_ids": { + "maxItemsOne": false + } + } + } + } + } + }, + "twingate_user": { + "current": "twingate:index/getTwingateUser:getTwingateUser" + }, + "twingate_users": { + "current": "twingate:index/getTwingateUsers:getTwingateUsers", + "fields": { + "users": { + "maxItemsOne": false + } + } + } + } + }, + "auto-settings": {}, + "renames": { + "resources": { + "twingate:index/twingateConnector:TwingateConnector": "twingate_connector", + "twingate:index/twingateConnectorTokens:TwingateConnectorTokens": "twingate_connector_tokens", + "twingate:index/twingateGroup:TwingateGroup": "twingate_group", + "twingate:index/twingateRemoteNetwork:TwingateRemoteNetwork": "twingate_remote_network", + "twingate:index/twingateResource:TwingateResource": "twingate_resource", + "twingate:index/twingateServiceAccount:TwingateServiceAccount": "twingate_service_account", + "twingate:index/twingateServiceAccountKey:TwingateServiceAccountKey": "twingate_service_account_key", + "twingate:index/twingateUser:TwingateUser": "twingate_user" + }, + "functions": { + "twingate:index/getTwingateConnector:getTwingateConnector": "twingate_connector", + "twingate:index/getTwingateConnectors:getTwingateConnectors": "twingate_connectors", + "twingate:index/getTwingateGroup:getTwingateGroup": "twingate_group", + "twingate:index/getTwingateGroups:getTwingateGroups": "twingate_groups", + "twingate:index/getTwingateRemoteNetwork:getTwingateRemoteNetwork": "twingate_remote_network", + "twingate:index/getTwingateRemoteNetworks:getTwingateRemoteNetworks": "twingate_remote_networks", + "twingate:index/getTwingateResource:getTwingateResource": "twingate_resource", + "twingate:index/getTwingateResources:getTwingateResources": "twingate_resources", + "twingate:index/getTwingateSecurityPolicies:getTwingateSecurityPolicies": "twingate_security_policies", + "twingate:index/getTwingateSecurityPolicy:getTwingateSecurityPolicy": "twingate_security_policy", + "twingate:index/getTwingateServiceAccounts:getTwingateServiceAccounts": "twingate_service_accounts", + "twingate:index/getTwingateUser:getTwingateUser": "twingate_user", + "twingate:index/getTwingateUsers:getTwingateUsers": "twingate_users" + }, + "renamedProperties": { + "twingate:index/TwingateResourceAccess:TwingateResourceAccess": { + "groupIds": "group_ids", + "serviceAccountIds": "service_account_ids" + }, + "twingate:index/TwingateResourceProtocols:TwingateResourceProtocols": { + "allowIcmp": "allow_icmp" + }, + "twingate:index/getTwingateConnector:getTwingateConnector": { + "remoteNetworkId": "remote_network_id", + "statusUpdatesEnabled": "status_updates_enabled" + }, + "twingate:index/getTwingateConnectorsConnector:getTwingateConnectorsConnector": { + "remoteNetworkId": "remote_network_id", + "statusUpdatesEnabled": "status_updates_enabled" + }, + "twingate:index/getTwingateGroup:getTwingateGroup": { + "isActive": "is_active", + "securityPolicyId": "security_policy_id" + }, + "twingate:index/getTwingateGroups:getTwingateGroups": { + "isActive": "is_active" + }, + "twingate:index/getTwingateGroupsGroup:getTwingateGroupsGroup": { + "isActive": "is_active", + "securityPolicyId": "security_policy_id" + }, + "twingate:index/getTwingateRemoteNetworks:getTwingateRemoteNetworks": { + "remoteNetworks": "remote_networks" + }, + "twingate:index/getTwingateResource:getTwingateResource": { + "remoteNetworkId": "remote_network_id" + }, + "twingate:index/getTwingateResourceProtocol:getTwingateResourceProtocol": { + "allowIcmp": "allow_icmp", + "tcps": "tcp", + "udps": "udp" + }, + "twingate:index/getTwingateResourcesResource:getTwingateResourcesResource": { + "remoteNetworkId": "remote_network_id" + }, + "twingate:index/getTwingateResourcesResourceProtocol:getTwingateResourcesResourceProtocol": { + "allowIcmp": "allow_icmp", + "tcps": "tcp", + "udps": "udp" + }, + "twingate:index/getTwingateSecurityPolicies:getTwingateSecurityPolicies": { + "securityPolicies": "security_policies" + }, + "twingate:index/getTwingateServiceAccounts:getTwingateServiceAccounts": { + "serviceAccounts": "service_accounts" + }, + "twingate:index/getTwingateServiceAccountsServiceAccount:getTwingateServiceAccountsServiceAccount": { + "keyIds": "key_ids", + "resourceIds": "resource_ids" + }, + "twingate:index/getTwingateUser:getTwingateUser": { + "firstName": "first_name", + "isAdmin": "is_admin", + "lastName": "last_name" + }, + "twingate:index/getTwingateUsersUser:getTwingateUsersUser": { + "firstName": "first_name", + "isAdmin": "is_admin", + "lastName": "last_name" + }, + "twingate:index/twingateConnector:TwingateConnector": { + "remoteNetworkId": "remote_network_id", + "statusUpdatesEnabled": "status_updates_enabled" + }, + "twingate:index/twingateConnectorTokens:TwingateConnectorTokens": { + "accessToken": "access_token", + "connectorId": "connector_id", + "refreshToken": "refresh_token" + }, + "twingate:index/twingateGroup:TwingateGroup": { + "isAuthoritative": "is_authoritative", + "securityPolicyId": "security_policy_id", + "userIds": "user_ids" + }, + "twingate:index/twingateResource:TwingateResource": { + "isAuthoritative": "is_authoritative", + "isBrowserShortcutEnabled": "is_browser_shortcut_enabled", + "isVisible": "is_visible", + "remoteNetworkId": "remote_network_id" + }, + "twingate:index/twingateServiceAccountKey:TwingateServiceAccountKey": { + "serviceAccountId": "service_account_id" + }, + "twingate:index/twingateUser:TwingateUser": { + "firstName": "first_name", + "isActive": "is_active", + "lastName": "last_name", + "sendInvite": "send_invite" + }, + "twingate:index:Provider": { + "apiToken": "api_token", + "httpMaxRetry": "http_max_retry", + "httpTimeout": "http_timeout" + } + }, + "renamedConfigProperties": { + "apiToken": "api_token", + "httpMaxRetry": "http_max_retry", + "httpTimeout": "http_timeout" + } + } +} \ No newline at end of file diff --git a/provider/cmd/pulumi-resource-xyz/generate.go b/provider/cmd/pulumi-resource-twingate/generate.go similarity index 100% rename from provider/cmd/pulumi-resource-xyz/generate.go rename to provider/cmd/pulumi-resource-twingate/generate.go diff --git a/provider/cmd/pulumi-resource-xyz/main.go b/provider/cmd/pulumi-resource-twingate/main.go similarity index 81% rename from provider/cmd/pulumi-resource-xyz/main.go rename to provider/cmd/pulumi-resource-twingate/main.go index aeed3da..8de9dea 100644 --- a/provider/cmd/pulumi-resource-xyz/main.go +++ b/provider/cmd/pulumi-resource-twingate/main.go @@ -19,9 +19,9 @@ package main import ( _ "embed" + twingate "github.com/Twingate/pulumi-twingate/provider" + "github.com/Twingate/pulumi-twingate/provider/pkg/version" "github.com/pulumi/pulumi-terraform-bridge/v3/pkg/tfbridge" - xyz "github.com/pulumi/pulumi-xyz/provider" - "github.com/pulumi/pulumi-xyz/provider/pkg/version" ) //go:embed schema-embed.json @@ -29,5 +29,5 @@ var pulumiSchema []byte func main() { // Modify the path to point to the new provider - tfbridge.Main("xyz", version.Version, xyz.Provider(), pulumiSchema) + tfbridge.Main("twingate", version.Version, twingate.Provider(), pulumiSchema) } diff --git a/provider/cmd/pulumi-resource-twingate/schema.json b/provider/cmd/pulumi-resource-twingate/schema.json new file mode 100644 index 0000000..9805b6c --- /dev/null +++ b/provider/cmd/pulumi-resource-twingate/schema.json @@ -0,0 +1,1756 @@ +{ + "name": "twingate", + "displayName": "Twingate", + "description": "A Pulumi package for creating and managing twingate cloud resources.", + "keywords": [ + "pulumi", + "twingate", + "category/infrastructure" + ], + "homepage": "https://www.twingate.com", + "license": "Apache-2.0", + "attribution": "This Pulumi package is based on the [`twingate` Terraform Provider](https://github.com/Twingate/terraform-provider-twingate).", + "repository": "https://github.com/Twingate/pulumi-twingate", + "publisher": "Twingate", + "meta": { + "moduleFormat": "(.*)(?:/[^/]*)" + }, + "language": { + "csharp": { + "packageReferences": { + "Pulumi": "3.*" + }, + "compatibility": "tfbridge20" + }, + "go": { + "importBasePath": "github.com/Twingate/pulumi-twingate/sdk/go/twingate", + "generateResourceContainerTypes": true, + "generateExtraInputTypes": true + }, + "nodejs": { + "packageDescription": "A Pulumi package for creating and managing twingate cloud resources.", + "readme": "\u003e This provider is a derived work of the [Terraform Provider](https://github.com/Twingate/terraform-provider-twingate)\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-twingate` repo](https://github.com/Twingate/pulumi-twingate/issues); however, if that doesn't turn up anything,\n\u003e please consult the source [`terraform-provider-twingate` repo](https://github.com/Twingate/terraform-provider-twingate/issues).", + "dependencies": { + "@pulumi/pulumi": "^3.0.0" + }, + "devDependencies": { + "@types/mime": "^2.0.0", + "@types/node": "^10.0.0" + }, + "compatibility": "tfbridge20", + "disableUnionOutputTypes": true + }, + "python": { + "requires": { + "pulumi": "\u003e=3.0.0,\u003c4.0.0" + }, + "readme": "\u003e This provider is a derived work of the [Terraform Provider](https://github.com/Twingate/terraform-provider-twingate)\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-twingate` repo](https://github.com/Twingate/pulumi-twingate/issues); however, if that doesn't turn up anything,\n\u003e please consult the source [`terraform-provider-twingate` repo](https://github.com/Twingate/terraform-provider-twingate/issues).", + "compatibility": "tfbridge20", + "pyproject": {} + } + }, + "config": { + "variables": { + "apiToken": { + "type": "string", + "description": "The access key for API operations. You can retrieve this from the Twingate Admin Console\n([documentation](https://docs.twingate.com/docs/api-overview)). Alternatively, this can be specified using the\nTWINGATE_API_TOKEN environment variable.\n", + "secret": true + }, + "httpMaxRetry": { + "type": "integer", + "description": "Specifies a retry limit for the http requests made. The default value is 10. Alternatively, this can be specified using\nthe TWINGATE_HTTP_MAX_RETRY environment variable\n" + }, + "httpTimeout": { + "type": "integer", + "description": "Specifies a time limit in seconds for the http requests made. The default value is 10 seconds. Alternatively, this can\nbe specified using the TWINGATE_HTTP_TIMEOUT environment variable\n" + }, + "network": { + "type": "string", + "description": "Your Twingate network ID for API operations. You can find it in the Admin Console URL, for example:\n`autoco.twingate.com`, where `autoco` is your network ID Alternatively, this can be specified using the TWINGATE_NETWORK\nenvironment variable.\n" + }, + "url": { + "type": "string", + "description": "The default is 'twingate.com' This is optional and shouldn't be changed under normal circumstances.\n" + } + } + }, + "types": { + "twingate:index/TwingateResourceAccess:TwingateResourceAccess": { + "properties": { + "groupIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of Group IDs that will have permission to access the Resource.\n" + }, + "serviceAccountIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of Service Account IDs that will have permission to access the Resource.\n" + } + }, + "type": "object" + }, + "twingate:index/TwingateResourceProtocols:TwingateResourceProtocols": { + "properties": { + "allowIcmp": { + "type": "boolean", + "description": "Whether to allow ICMP (ping) traffic\n" + }, + "tcp": { + "$ref": "#/types/twingate:index/TwingateResourceProtocolsTcp:TwingateResourceProtocolsTcp" + }, + "udp": { + "$ref": "#/types/twingate:index/TwingateResourceProtocolsUdp:TwingateResourceProtocolsUdp" + } + }, + "type": "object", + "required": [ + "tcp", + "udp" + ] + }, + "twingate:index/TwingateResourceProtocolsTcp:TwingateResourceProtocolsTcp": { + "properties": { + "policy": { + "type": "string", + "description": "Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL`\n" + }, + "ports": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port\n" + } + }, + "type": "object", + "required": [ + "policy" + ] + }, + "twingate:index/TwingateResourceProtocolsUdp:TwingateResourceProtocolsUdp": { + "properties": { + "policy": { + "type": "string", + "description": "Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL`\n" + }, + "ports": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port\n" + } + }, + "type": "object", + "required": [ + "policy" + ] + }, + "twingate:index/getTwingateConnectorsConnector:getTwingateConnectorsConnector": { + "properties": { + "id": { + "type": "string", + "description": "The ID of the Connector.\n" + }, + "name": { + "type": "string", + "description": "The Name of the Connector.\n" + }, + "remoteNetworkId": { + "type": "string", + "description": "The ID of the Remote Network attached to the Connector.\n" + }, + "statusUpdatesEnabled": { + "type": "boolean", + "description": "Determines whether status notifications are enabled for the Connector.\n" + } + }, + "type": "object", + "required": [ + "id", + "name", + "remoteNetworkId", + "statusUpdatesEnabled" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, + "twingate:index/getTwingateGroupsGroup:getTwingateGroupsGroup": { + "properties": { + "id": { + "type": "string", + "description": "The ID of the Group\n" + }, + "isActive": { + "type": "boolean", + "description": "Indicates if the Group is active\n" + }, + "name": { + "type": "string", + "description": "The name of the Group\n" + }, + "securityPolicyId": { + "type": "string", + "description": "The Security Policy assigned to the Group.\n" + }, + "type": { + "type": "string", + "description": "The type of the Group\n" + } + }, + "type": "object", + "required": [ + "id", + "isActive", + "name", + "securityPolicyId", + "type" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, + "twingate:index/getTwingateRemoteNetworksRemoteNetwork:getTwingateRemoteNetworksRemoteNetwork": { + "properties": { + "id": { + "type": "string", + "description": "The ID of the Remote Network\n" + }, + "location": { + "type": "string", + "description": "The location of the Remote Network. Must be one of the following: AWS, AZURE, GOOGLE*CLOUD, ON*PREMISE, OTHER.\n" + }, + "name": { + "type": "string", + "description": "The name of the Remote Network\n" + } + }, + "type": "object", + "required": [ + "id", + "location", + "name" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, + "twingate:index/getTwingateResourceProtocol:getTwingateResourceProtocol": { + "properties": { + "allowIcmp": { + "type": "boolean", + "description": "Whether to allow ICMP (ping) traffic\n" + }, + "tcps": { + "type": "array", + "items": { + "$ref": "#/types/twingate:index/getTwingateResourceProtocolTcp:getTwingateResourceProtocolTcp" + } + }, + "udps": { + "type": "array", + "items": { + "$ref": "#/types/twingate:index/getTwingateResourceProtocolUdp:getTwingateResourceProtocolUdp" + } + } + }, + "type": "object", + "required": [ + "allowIcmp" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, + "twingate:index/getTwingateResourceProtocolTcp:getTwingateResourceProtocolTcp": { + "properties": { + "policy": { + "type": "string", + "description": "Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL`\n" + }, + "ports": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port\n" + } + }, + "type": "object", + "required": [ + "policy", + "ports" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, + "twingate:index/getTwingateResourceProtocolUdp:getTwingateResourceProtocolUdp": { + "properties": { + "policy": { + "type": "string", + "description": "Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL`\n" + }, + "ports": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port\n" + } + }, + "type": "object", + "required": [ + "policy", + "ports" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, + "twingate:index/getTwingateResourcesResource:getTwingateResourcesResource": { + "properties": { + "address": { + "type": "string", + "description": "The Resource's IP/CIDR or FQDN/DNS zone\n" + }, + "id": { + "type": "string", + "description": "The id of the Resource\n" + }, + "name": { + "type": "string", + "description": "The name of the Resource\n" + }, + "protocols": { + "type": "array", + "items": { + "$ref": "#/types/twingate:index/getTwingateResourcesResourceProtocol:getTwingateResourcesResourceProtocol" + }, + "description": "Restrict access to certain protocols and ports. By default or when this argument is not defined, there is no restriction, and all protocols and ports are allowed.\n" + }, + "remoteNetworkId": { + "type": "string", + "description": "Remote Network ID where the Resource lives\n" + } + }, + "type": "object", + "required": [ + "address", + "id", + "name", + "remoteNetworkId" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, + "twingate:index/getTwingateResourcesResourceProtocol:getTwingateResourcesResourceProtocol": { + "properties": { + "allowIcmp": { + "type": "boolean", + "description": "Whether to allow ICMP (ping) traffic\n" + }, + "tcps": { + "type": "array", + "items": { + "$ref": "#/types/twingate:index/getTwingateResourcesResourceProtocolTcp:getTwingateResourcesResourceProtocolTcp" + } + }, + "udps": { + "type": "array", + "items": { + "$ref": "#/types/twingate:index/getTwingateResourcesResourceProtocolUdp:getTwingateResourcesResourceProtocolUdp" + } + } + }, + "type": "object", + "required": [ + "allowIcmp" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, + "twingate:index/getTwingateResourcesResourceProtocolTcp:getTwingateResourcesResourceProtocolTcp": { + "properties": { + "policy": { + "type": "string", + "description": "Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL`\n" + }, + "ports": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port\n" + } + }, + "type": "object", + "required": [ + "policy", + "ports" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, + "twingate:index/getTwingateResourcesResourceProtocolUdp:getTwingateResourcesResourceProtocolUdp": { + "properties": { + "policy": { + "type": "string", + "description": "Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL`\n" + }, + "ports": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port\n" + } + }, + "type": "object", + "required": [ + "policy", + "ports" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, + "twingate:index/getTwingateSecurityPoliciesSecurityPolicy:getTwingateSecurityPoliciesSecurityPolicy": { + "properties": { + "id": { + "type": "string", + "description": "Return a matching Security Policy by its ID. The ID for the Security Policy can be obtained from the Admin API or the URL string in the Admin Console.\n" + }, + "name": { + "type": "string", + "description": "Return a Security Policy that exactly matches this name.\n" + } + }, + "type": "object", + "required": [ + "id", + "name" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, + "twingate:index/getTwingateServiceAccountsServiceAccount:getTwingateServiceAccountsServiceAccount": { + "properties": { + "id": { + "type": "string", + "description": "ID of the Service Account resource\n" + }, + "keyIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of twingate*service*account_key IDs that are assigned to the Service Account.\n" + }, + "name": { + "type": "string", + "description": "Name of the Service Account\n" + }, + "resourceIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of twingate.TwingateResource IDs that the Service Account is assigned to.\n" + } + }, + "type": "object", + "required": [ + "id", + "keyIds", + "name", + "resourceIds" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, + "twingate:index/getTwingateUsersUser:getTwingateUsersUser": { + "properties": { + "email": { + "type": "string", + "description": "The email address of the User\n" + }, + "firstName": { + "type": "string", + "description": "The first name of the User\n" + }, + "id": { + "type": "string", + "description": "The ID of the User\n" + }, + "isAdmin": { + "type": "boolean", + "description": "Indicates whether the User is an admin\n", + "deprecationMessage": "This read-only Boolean value will be deprecated in a future release. You may use the `role` value instead." + }, + "lastName": { + "type": "string", + "description": "The last name of the User\n" + }, + "role": { + "type": "string", + "description": "Indicates the User's role. Either ADMIN, DEVOPS, SUPPORT, or MEMBER.\n" + }, + "type": { + "type": "string", + "description": "Indicates the User's type. Either MANUAL or SYNCED.\n" + } + }, + "type": "object", + "required": [ + "email", + "firstName", + "id", + "isAdmin", + "lastName", + "role", + "type" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + } + }, + "provider": { + "description": "The provider type for the twingate 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": { + "apiToken": { + "type": "string", + "description": "The access key for API operations. You can retrieve this from the Twingate Admin Console\n([documentation](https://docs.twingate.com/docs/api-overview)). Alternatively, this can be specified using the\nTWINGATE_API_TOKEN environment variable.\n", + "secret": true + }, + "httpMaxRetry": { + "type": "integer", + "description": "Specifies a retry limit for the http requests made. The default value is 10. Alternatively, this can be specified using\nthe TWINGATE_HTTP_MAX_RETRY environment variable\n" + }, + "httpTimeout": { + "type": "integer", + "description": "Specifies a time limit in seconds for the http requests made. The default value is 10 seconds. Alternatively, this can\nbe specified using the TWINGATE_HTTP_TIMEOUT environment variable\n" + }, + "network": { + "type": "string", + "description": "Your Twingate network ID for API operations. You can find it in the Admin Console URL, for example:\n`autoco.twingate.com`, where `autoco` is your network ID Alternatively, this can be specified using the TWINGATE_NETWORK\nenvironment variable.\n" + }, + "url": { + "type": "string", + "description": "The default is 'twingate.com' This is optional and shouldn't be changed under normal circumstances.\n" + } + }, + "inputProperties": { + "apiToken": { + "type": "string", + "description": "The access key for API operations. You can retrieve this from the Twingate Admin Console\n([documentation](https://docs.twingate.com/docs/api-overview)). Alternatively, this can be specified using the\nTWINGATE_API_TOKEN environment variable.\n", + "secret": true + }, + "httpMaxRetry": { + "type": "integer", + "description": "Specifies a retry limit for the http requests made. The default value is 10. Alternatively, this can be specified using\nthe TWINGATE_HTTP_MAX_RETRY environment variable\n" + }, + "httpTimeout": { + "type": "integer", + "description": "Specifies a time limit in seconds for the http requests made. The default value is 10 seconds. Alternatively, this can\nbe specified using the TWINGATE_HTTP_TIMEOUT environment variable\n" + }, + "network": { + "type": "string", + "description": "Your Twingate network ID for API operations. You can find it in the Admin Console URL, for example:\n`autoco.twingate.com`, where `autoco` is your network ID Alternatively, this can be specified using the TWINGATE_NETWORK\nenvironment variable.\n" + }, + "url": { + "type": "string", + "description": "The default is 'twingate.com' This is optional and shouldn't be changed under normal circumstances.\n" + } + } + }, + "resources": { + "twingate:index/twingateConnector:TwingateConnector": { + "description": "Connectors provide connectivity to Remote Networks. This resource type will create the Connector in the Twingate Admin Console, but in order to successfully deploy it, you must also generate Connector tokens that authenticate the Connector with Twingate. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/understanding-access-nodes).\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as twingate from \"@pulumi/twingate\";\n\nconst awsNetwork = new twingate.TwingateRemoteNetwork(\"awsNetwork\", {});\nconst awsConnector = new twingate.TwingateConnector(\"awsConnector\", {remoteNetworkId: awsNetwork.id});\n```\n```python\nimport pulumi\nimport pulumi_twingate as twingate\n\naws_network = twingate.TwingateRemoteNetwork(\"awsNetwork\")\naws_connector = twingate.TwingateConnector(\"awsConnector\", remote_network_id=aws_network.id)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Twingate = Pulumi.Twingate;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var awsNetwork = new Twingate.TwingateRemoteNetwork(\"awsNetwork\");\n\n var awsConnector = new Twingate.TwingateConnector(\"awsConnector\", new()\n {\n RemoteNetworkId = awsNetwork.Id,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/Twingate/pulumi-twingate/sdk/go/twingate\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tawsNetwork, err := twingate.NewTwingateRemoteNetwork(ctx, \"awsNetwork\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = twingate.NewTwingateConnector(ctx, \"awsConnector\", \u0026twingate.TwingateConnectorArgs{\n\t\t\tRemoteNetworkId: awsNetwork.ID(),\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 com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.twingate.TwingateRemoteNetwork;\nimport com.pulumi.twingate.TwingateConnector;\nimport com.pulumi.twingate.TwingateConnectorArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\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 awsNetwork = new TwingateRemoteNetwork(\"awsNetwork\");\n\n var awsConnector = new TwingateConnector(\"awsConnector\", TwingateConnectorArgs.builder() \n .remoteNetworkId(awsNetwork.id())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n awsNetwork:\n type: twingate:TwingateRemoteNetwork\n awsConnector:\n type: twingate:TwingateConnector\n properties:\n remoteNetworkId: ${awsNetwork.id}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\n\n\n```sh\n $ pulumi import twingate:index/twingateConnector:TwingateConnector aws_connector Q29ubmVjdG9yOjI2NzM=\n```\n\n ", + "properties": { + "name": { + "type": "string", + "description": "Name of the Connector, if not provided one will be generated.\n" + }, + "remoteNetworkId": { + "type": "string", + "description": "The ID of the Remote Network the Connector is attached to.\n" + }, + "statusUpdatesEnabled": { + "type": "boolean", + "description": "Determines whether status notifications are enabled for the Connector.\n" + } + }, + "required": [ + "name", + "remoteNetworkId", + "statusUpdatesEnabled" + ], + "inputProperties": { + "name": { + "type": "string", + "description": "Name of the Connector, if not provided one will be generated.\n" + }, + "remoteNetworkId": { + "type": "string", + "description": "The ID of the Remote Network the Connector is attached to.\n", + "willReplaceOnChanges": true + }, + "statusUpdatesEnabled": { + "type": "boolean", + "description": "Determines whether status notifications are enabled for the Connector.\n" + } + }, + "requiredInputs": [ + "remoteNetworkId" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering TwingateConnector resources.\n", + "properties": { + "name": { + "type": "string", + "description": "Name of the Connector, if not provided one will be generated.\n" + }, + "remoteNetworkId": { + "type": "string", + "description": "The ID of the Remote Network the Connector is attached to.\n", + "willReplaceOnChanges": true + }, + "statusUpdatesEnabled": { + "type": "boolean", + "description": "Determines whether status notifications are enabled for the Connector.\n" + } + }, + "type": "object" + } + }, + "twingate:index/twingateConnectorTokens:TwingateConnectorTokens": { + "description": "This resource type will generate tokens for a Connector, which are needed to successfully provision one on your network. The Connector itself has its own resource type and must be created before you can provision tokens.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as twingate from \"@pulumi/twingate\";\n\nconst awsNetwork = new twingate.TwingateRemoteNetwork(\"awsNetwork\", {});\nconst awsConnector = new twingate.TwingateConnector(\"awsConnector\", {remoteNetworkId: awsNetwork.id});\nconst awsConnectorTokens = new twingate.TwingateConnectorTokens(\"awsConnectorTokens\", {connectorId: awsConnector.id});\n```\n```python\nimport pulumi\nimport pulumi_twingate as twingate\n\naws_network = twingate.TwingateRemoteNetwork(\"awsNetwork\")\naws_connector = twingate.TwingateConnector(\"awsConnector\", remote_network_id=aws_network.id)\naws_connector_tokens = twingate.TwingateConnectorTokens(\"awsConnectorTokens\", connector_id=aws_connector.id)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Twingate = Pulumi.Twingate;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var awsNetwork = new Twingate.TwingateRemoteNetwork(\"awsNetwork\");\n\n var awsConnector = new Twingate.TwingateConnector(\"awsConnector\", new()\n {\n RemoteNetworkId = awsNetwork.Id,\n });\n\n var awsConnectorTokens = new Twingate.TwingateConnectorTokens(\"awsConnectorTokens\", new()\n {\n ConnectorId = awsConnector.Id,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/Twingate/pulumi-twingate/sdk/go/twingate\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tawsNetwork, err := twingate.NewTwingateRemoteNetwork(ctx, \"awsNetwork\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tawsConnector, err := twingate.NewTwingateConnector(ctx, \"awsConnector\", \u0026twingate.TwingateConnectorArgs{\n\t\t\tRemoteNetworkId: awsNetwork.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = twingate.NewTwingateConnectorTokens(ctx, \"awsConnectorTokens\", \u0026twingate.TwingateConnectorTokensArgs{\n\t\t\tConnectorId: awsConnector.ID(),\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 com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.twingate.TwingateRemoteNetwork;\nimport com.pulumi.twingate.TwingateConnector;\nimport com.pulumi.twingate.TwingateConnectorArgs;\nimport com.pulumi.twingate.TwingateConnectorTokens;\nimport com.pulumi.twingate.TwingateConnectorTokensArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\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 awsNetwork = new TwingateRemoteNetwork(\"awsNetwork\");\n\n var awsConnector = new TwingateConnector(\"awsConnector\", TwingateConnectorArgs.builder() \n .remoteNetworkId(awsNetwork.id())\n .build());\n\n var awsConnectorTokens = new TwingateConnectorTokens(\"awsConnectorTokens\", TwingateConnectorTokensArgs.builder() \n .connectorId(awsConnector.id())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n awsNetwork:\n type: twingate:TwingateRemoteNetwork\n awsConnector:\n type: twingate:TwingateConnector\n properties:\n remoteNetworkId: ${awsNetwork.id}\n awsConnectorTokens:\n type: twingate:TwingateConnectorTokens\n properties:\n connectorId: ${awsConnector.id}\n```\n{{% /example %}}\n{{% /examples %}}", + "properties": { + "accessToken": { + "type": "string", + "description": "The Access Token of the parent Connector\n", + "secret": true + }, + "connectorId": { + "type": "string", + "description": "The ID of the parent Connector\n" + }, + "keepers": { + "type": "object", + "additionalProperties": { + "$ref": "pulumi.json#/Any" + }, + "description": "Arbitrary map of values that, when changed, will trigger recreation of resource. Use this to automatically rotate Connector tokens on a schedule.\n" + }, + "refreshToken": { + "type": "string", + "description": "The Refresh Token of the parent Connector\n", + "secret": true + } + }, + "required": [ + "accessToken", + "connectorId", + "refreshToken" + ], + "inputProperties": { + "connectorId": { + "type": "string", + "description": "The ID of the parent Connector\n", + "willReplaceOnChanges": true + }, + "keepers": { + "type": "object", + "additionalProperties": { + "$ref": "pulumi.json#/Any" + }, + "description": "Arbitrary map of values that, when changed, will trigger recreation of resource. Use this to automatically rotate Connector tokens on a schedule.\n", + "willReplaceOnChanges": true + } + }, + "requiredInputs": [ + "connectorId" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering TwingateConnectorTokens resources.\n", + "properties": { + "accessToken": { + "type": "string", + "description": "The Access Token of the parent Connector\n", + "secret": true + }, + "connectorId": { + "type": "string", + "description": "The ID of the parent Connector\n", + "willReplaceOnChanges": true + }, + "keepers": { + "type": "object", + "additionalProperties": { + "$ref": "pulumi.json#/Any" + }, + "description": "Arbitrary map of values that, when changed, will trigger recreation of resource. Use this to automatically rotate Connector tokens on a schedule.\n", + "willReplaceOnChanges": true + }, + "refreshToken": { + "type": "string", + "description": "The Refresh Token of the parent Connector\n", + "secret": true + } + }, + "type": "object" + } + }, + "twingate:index/twingateGroup:TwingateGroup": { + "description": "Groups are how users are authorized to access Resources. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/groups).\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as twingate from \"@pulumi/twingate\";\n\nconst aws = new twingate.TwingateGroup(\"aws\", {});\n```\n```python\nimport pulumi\nimport pulumi_twingate as twingate\n\naws = twingate.TwingateGroup(\"aws\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Twingate = Pulumi.Twingate;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var aws = new Twingate.TwingateGroup(\"aws\");\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/Twingate/pulumi-twingate/sdk/go/twingate\"\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 := twingate.NewTwingateGroup(ctx, \"aws\", 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 com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.twingate.TwingateGroup;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\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 aws = new TwingateGroup(\"aws\");\n\n }\n}\n```\n```yaml\nresources:\n aws:\n type: twingate:TwingateGroup\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\n\n\n```sh\n $ pulumi import twingate:index/twingateGroup:TwingateGroup aws R3JvdXA6MzQ4OTE=\n```\n\n ", + "properties": { + "isAuthoritative": { + "type": "boolean", + "description": "Determines whether User assignments to this Group will override any existing assignments. Default is `true`. If set to\n`false`, assignments made outside of Terraform will be ignored.\n" + }, + "name": { + "type": "string", + "description": "The name of the group\n" + }, + "securityPolicyId": { + "type": "string", + "description": "Defines which Security Policy applies to this Group. The Security Policy ID can be obtained from the `twingate.getTwingateSecurityPolicy` and `twingate.getTwingateSecurityPolicies` data sources.\n" + }, + "userIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of User IDs that have permission to access the Group.\n" + } + }, + "required": [ + "isAuthoritative", + "name", + "securityPolicyId" + ], + "inputProperties": { + "isAuthoritative": { + "type": "boolean", + "description": "Determines whether User assignments to this Group will override any existing assignments. Default is `true`. If set to\n`false`, assignments made outside of Terraform will be ignored.\n" + }, + "name": { + "type": "string", + "description": "The name of the group\n" + }, + "securityPolicyId": { + "type": "string", + "description": "Defines which Security Policy applies to this Group. The Security Policy ID can be obtained from the `twingate.getTwingateSecurityPolicy` and `twingate.getTwingateSecurityPolicies` data sources.\n" + }, + "userIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of User IDs that have permission to access the Group.\n" + } + }, + "stateInputs": { + "description": "Input properties used for looking up and filtering TwingateGroup resources.\n", + "properties": { + "isAuthoritative": { + "type": "boolean", + "description": "Determines whether User assignments to this Group will override any existing assignments. Default is `true`. If set to\n`false`, assignments made outside of Terraform will be ignored.\n" + }, + "name": { + "type": "string", + "description": "The name of the group\n" + }, + "securityPolicyId": { + "type": "string", + "description": "Defines which Security Policy applies to this Group. The Security Policy ID can be obtained from the `twingate.getTwingateSecurityPolicy` and `twingate.getTwingateSecurityPolicies` data sources.\n" + }, + "userIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of User IDs that have permission to access the Group.\n" + } + }, + "type": "object" + } + }, + "twingate:index/twingateRemoteNetwork:TwingateRemoteNetwork": { + "description": "A Remote Network represents a single private network in Twingate that can have one or more Connectors and Resources assigned to it. You must create a Remote Network before creating Resources and Connectors that belong to it. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/remote-networks).\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as twingate from \"@pulumi/twingate\";\n\nconst awsNetwork = new twingate.TwingateRemoteNetwork(\"awsNetwork\", {});\n```\n```python\nimport pulumi\nimport pulumi_twingate as twingate\n\naws_network = twingate.TwingateRemoteNetwork(\"awsNetwork\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Twingate = Pulumi.Twingate;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var awsNetwork = new Twingate.TwingateRemoteNetwork(\"awsNetwork\");\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/Twingate/pulumi-twingate/sdk/go/twingate\"\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 := twingate.NewTwingateRemoteNetwork(ctx, \"awsNetwork\", 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 com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.twingate.TwingateRemoteNetwork;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\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 awsNetwork = new TwingateRemoteNetwork(\"awsNetwork\");\n\n }\n}\n```\n```yaml\nresources:\n awsNetwork:\n type: twingate:TwingateRemoteNetwork\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\n\n\n```sh\n $ pulumi import twingate:index/twingateRemoteNetwork:TwingateRemoteNetwork network UmVtb3RlTmV0d29zaipgMKIkNg==\n```\n\n ", + "properties": { + "location": { + "type": "string", + "description": "The location of the Remote Network. Must be one of the following: AWS, AZURE, GOOGLE*CLOUD, ON*PREMISE, OTHER.\n" + }, + "name": { + "type": "string", + "description": "The name of the Remote Network\n" + } + }, + "required": [ + "name" + ], + "inputProperties": { + "location": { + "type": "string", + "description": "The location of the Remote Network. Must be one of the following: AWS, AZURE, GOOGLE*CLOUD, ON*PREMISE, OTHER.\n" + }, + "name": { + "type": "string", + "description": "The name of the Remote Network\n" + } + }, + "stateInputs": { + "description": "Input properties used for looking up and filtering TwingateRemoteNetwork resources.\n", + "properties": { + "location": { + "type": "string", + "description": "The location of the Remote Network. Must be one of the following: AWS, AZURE, GOOGLE*CLOUD, ON*PREMISE, OTHER.\n" + }, + "name": { + "type": "string", + "description": "The name of the Remote Network\n" + } + }, + "type": "object" + } + }, + "twingate:index/twingateResource:TwingateResource": { + "description": "Resources in Twingate represent servers on the private network that clients can connect to. Resources can be defined by IP, CIDR range, FQDN, or DNS zone. For more information, see the Twingate [documentation](https://docs.twingate.com/docs/resources-and-access-nodes).\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as twingate from \"@pulumi/twingate\";\n\nconst awsNetwork = new twingate.TwingateRemoteNetwork(\"awsNetwork\", {});\nconst aws = new twingate.TwingateGroup(\"aws\", {});\nconst githubActionsProd = new twingate.TwingateServiceAccount(\"githubActionsProd\", {});\nconst resource = new twingate.TwingateResource(\"resource\", {\n address: \"internal.int\",\n remoteNetworkId: awsNetwork.id,\n protocols: {\n allowIcmp: true,\n tcp: {\n policy: \"RESTRICTED\",\n ports: [\n \"80\",\n \"82-83\",\n ],\n },\n udp: {\n policy: \"ALLOW_ALL\",\n },\n },\n access: {\n groupIds: [aws.id],\n serviceAccountIds: [githubActionsProd.id],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_twingate as twingate\n\naws_network = twingate.TwingateRemoteNetwork(\"awsNetwork\")\naws = twingate.TwingateGroup(\"aws\")\ngithub_actions_prod = twingate.TwingateServiceAccount(\"githubActionsProd\")\nresource = twingate.TwingateResource(\"resource\",\n address=\"internal.int\",\n remote_network_id=aws_network.id,\n protocols=twingate.TwingateResourceProtocolsArgs(\n allow_icmp=True,\n tcp=twingate.TwingateResourceProtocolsTcpArgs(\n policy=\"RESTRICTED\",\n ports=[\n \"80\",\n \"82-83\",\n ],\n ),\n udp=twingate.TwingateResourceProtocolsUdpArgs(\n policy=\"ALLOW_ALL\",\n ),\n ),\n access=twingate.TwingateResourceAccessArgs(\n group_ids=[aws.id],\n service_account_ids=[github_actions_prod.id],\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Twingate = Pulumi.Twingate;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var awsNetwork = new Twingate.TwingateRemoteNetwork(\"awsNetwork\");\n\n var aws = new Twingate.TwingateGroup(\"aws\");\n\n var githubActionsProd = new Twingate.TwingateServiceAccount(\"githubActionsProd\");\n\n var resource = new Twingate.TwingateResource(\"resource\", new()\n {\n Address = \"internal.int\",\n RemoteNetworkId = awsNetwork.Id,\n Protocols = new Twingate.Inputs.TwingateResourceProtocolsArgs\n {\n AllowIcmp = true,\n Tcp = new Twingate.Inputs.TwingateResourceProtocolsTcpArgs\n {\n Policy = \"RESTRICTED\",\n Ports = new[]\n {\n \"80\",\n \"82-83\",\n },\n },\n Udp = new Twingate.Inputs.TwingateResourceProtocolsUdpArgs\n {\n Policy = \"ALLOW_ALL\",\n },\n },\n Access = new Twingate.Inputs.TwingateResourceAccessArgs\n {\n GroupIds = new[]\n {\n aws.Id,\n },\n ServiceAccountIds = new[]\n {\n githubActionsProd.Id,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/Twingate/pulumi-twingate/sdk/go/twingate\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tawsNetwork, err := twingate.NewTwingateRemoteNetwork(ctx, \"awsNetwork\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\taws, err := twingate.NewTwingateGroup(ctx, \"aws\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tgithubActionsProd, err := twingate.NewTwingateServiceAccount(ctx, \"githubActionsProd\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = twingate.NewTwingateResource(ctx, \"resource\", \u0026twingate.TwingateResourceArgs{\n\t\t\tAddress: pulumi.String(\"internal.int\"),\n\t\t\tRemoteNetworkId: awsNetwork.ID(),\n\t\t\tProtocols: \u0026twingate.TwingateResourceProtocolsArgs{\n\t\t\t\tAllowIcmp: pulumi.Bool(true),\n\t\t\t\tTcp: \u0026twingate.TwingateResourceProtocolsTcpArgs{\n\t\t\t\t\tPolicy: pulumi.String(\"RESTRICTED\"),\n\t\t\t\t\tPorts: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"80\"),\n\t\t\t\t\t\tpulumi.String(\"82-83\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tUdp: \u0026twingate.TwingateResourceProtocolsUdpArgs{\n\t\t\t\t\tPolicy: pulumi.String(\"ALLOW_ALL\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tAccess: \u0026twingate.TwingateResourceAccessArgs{\n\t\t\t\tGroupIds: pulumi.StringArray{\n\t\t\t\t\taws.ID(),\n\t\t\t\t},\n\t\t\t\tServiceAccountIds: pulumi.StringArray{\n\t\t\t\t\tgithubActionsProd.ID(),\n\t\t\t\t},\n\t\t\t},\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 com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.twingate.TwingateRemoteNetwork;\nimport com.pulumi.twingate.TwingateGroup;\nimport com.pulumi.twingate.TwingateServiceAccount;\nimport com.pulumi.twingate.TwingateResource;\nimport com.pulumi.twingate.TwingateResourceArgs;\nimport com.pulumi.twingate.inputs.TwingateResourceProtocolsArgs;\nimport com.pulumi.twingate.inputs.TwingateResourceProtocolsTcpArgs;\nimport com.pulumi.twingate.inputs.TwingateResourceProtocolsUdpArgs;\nimport com.pulumi.twingate.inputs.TwingateResourceAccessArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\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 awsNetwork = new TwingateRemoteNetwork(\"awsNetwork\");\n\n var aws = new TwingateGroup(\"aws\");\n\n var githubActionsProd = new TwingateServiceAccount(\"githubActionsProd\");\n\n var resource = new TwingateResource(\"resource\", TwingateResourceArgs.builder() \n .address(\"internal.int\")\n .remoteNetworkId(awsNetwork.id())\n .protocols(TwingateResourceProtocolsArgs.builder()\n .allowIcmp(true)\n .tcp(TwingateResourceProtocolsTcpArgs.builder()\n .policy(\"RESTRICTED\")\n .ports( \n \"80\",\n \"82-83\")\n .build())\n .udp(TwingateResourceProtocolsUdpArgs.builder()\n .policy(\"ALLOW_ALL\")\n .build())\n .build())\n .access(TwingateResourceAccessArgs.builder()\n .groupIds(aws.id())\n .serviceAccountIds(githubActionsProd.id())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n awsNetwork:\n type: twingate:TwingateRemoteNetwork\n aws:\n type: twingate:TwingateGroup\n githubActionsProd:\n type: twingate:TwingateServiceAccount\n resource:\n type: twingate:TwingateResource\n properties:\n address: internal.int\n remoteNetworkId: ${awsNetwork.id}\n protocols:\n allowIcmp: true\n tcp:\n policy: RESTRICTED\n ports:\n - '80'\n - 82-83\n udp:\n policy: ALLOW_ALL\n access:\n groupIds:\n - ${aws.id}\n serviceAccountIds:\n - ${githubActionsProd.id}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\n\n\n```sh\n $ pulumi import twingate:index/twingateResource:TwingateResource resource UmVzb3VyY2U6MzQwNDQ3\n```\n\n ", + "properties": { + "access": { + "$ref": "#/types/twingate:index/TwingateResourceAccess:TwingateResourceAccess", + "description": "Restrict access to certain groups or service accounts\n" + }, + "address": { + "type": "string", + "description": "The Resource's IP/CIDR or FQDN/DNS zone\n" + }, + "alias": { + "type": "string", + "description": "Set a DNS alias address for the Resource. Must be a DNS-valid name string.\n" + }, + "isAuthoritative": { + "type": "boolean", + "description": "Determines whether assignments in the access block will override any existing assignments. Default is `true`. If set to\n`false`, assignments made outside of Terraform will be ignored.\n" + }, + "isBrowserShortcutEnabled": { + "type": "boolean", + "description": "Controls whether an \"Open in Browser\" shortcut will be shown for this Resource in the Twingate Client.\n" + }, + "isVisible": { + "type": "boolean", + "description": "Controls whether this Resource will be visible in the main Resource list in the Twingate Client.\n" + }, + "name": { + "type": "string", + "description": "The name of the Resource\n" + }, + "protocols": { + "$ref": "#/types/twingate:index/TwingateResourceProtocols:TwingateResourceProtocols", + "description": "Restrict access to certain protocols and ports. By default or when this argument is not defined, there is no restriction, and all protocols and ports are allowed.\n" + }, + "remoteNetworkId": { + "type": "string", + "description": "Remote Network ID where the Resource lives\n" + } + }, + "required": [ + "address", + "isAuthoritative", + "isBrowserShortcutEnabled", + "isVisible", + "name", + "remoteNetworkId" + ], + "inputProperties": { + "access": { + "$ref": "#/types/twingate:index/TwingateResourceAccess:TwingateResourceAccess", + "description": "Restrict access to certain groups or service accounts\n" + }, + "address": { + "type": "string", + "description": "The Resource's IP/CIDR or FQDN/DNS zone\n" + }, + "alias": { + "type": "string", + "description": "Set a DNS alias address for the Resource. Must be a DNS-valid name string.\n" + }, + "isAuthoritative": { + "type": "boolean", + "description": "Determines whether assignments in the access block will override any existing assignments. Default is `true`. If set to\n`false`, assignments made outside of Terraform will be ignored.\n" + }, + "isBrowserShortcutEnabled": { + "type": "boolean", + "description": "Controls whether an \"Open in Browser\" shortcut will be shown for this Resource in the Twingate Client.\n" + }, + "isVisible": { + "type": "boolean", + "description": "Controls whether this Resource will be visible in the main Resource list in the Twingate Client.\n" + }, + "name": { + "type": "string", + "description": "The name of the Resource\n" + }, + "protocols": { + "$ref": "#/types/twingate:index/TwingateResourceProtocols:TwingateResourceProtocols", + "description": "Restrict access to certain protocols and ports. By default or when this argument is not defined, there is no restriction, and all protocols and ports are allowed.\n" + }, + "remoteNetworkId": { + "type": "string", + "description": "Remote Network ID where the Resource lives\n" + } + }, + "requiredInputs": [ + "address", + "remoteNetworkId" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering TwingateResource resources.\n", + "properties": { + "access": { + "$ref": "#/types/twingate:index/TwingateResourceAccess:TwingateResourceAccess", + "description": "Restrict access to certain groups or service accounts\n" + }, + "address": { + "type": "string", + "description": "The Resource's IP/CIDR or FQDN/DNS zone\n" + }, + "alias": { + "type": "string", + "description": "Set a DNS alias address for the Resource. Must be a DNS-valid name string.\n" + }, + "isAuthoritative": { + "type": "boolean", + "description": "Determines whether assignments in the access block will override any existing assignments. Default is `true`. If set to\n`false`, assignments made outside of Terraform will be ignored.\n" + }, + "isBrowserShortcutEnabled": { + "type": "boolean", + "description": "Controls whether an \"Open in Browser\" shortcut will be shown for this Resource in the Twingate Client.\n" + }, + "isVisible": { + "type": "boolean", + "description": "Controls whether this Resource will be visible in the main Resource list in the Twingate Client.\n" + }, + "name": { + "type": "string", + "description": "The name of the Resource\n" + }, + "protocols": { + "$ref": "#/types/twingate:index/TwingateResourceProtocols:TwingateResourceProtocols", + "description": "Restrict access to certain protocols and ports. By default or when this argument is not defined, there is no restriction, and all protocols and ports are allowed.\n" + }, + "remoteNetworkId": { + "type": "string", + "description": "Remote Network ID where the Resource lives\n" + } + }, + "type": "object" + } + }, + "twingate:index/twingateServiceAccount:TwingateServiceAccount": { + "description": "Service Accounts offer a way to provide programmatic, centrally-controlled, and consistent access controls.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as twingate from \"@pulumi/twingate\";\n\nconst githubActionsProd = new twingate.TwingateServiceAccount(\"githubActionsProd\", {});\n```\n```python\nimport pulumi\nimport pulumi_twingate as twingate\n\ngithub_actions_prod = twingate.TwingateServiceAccount(\"githubActionsProd\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Twingate = Pulumi.Twingate;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var githubActionsProd = new Twingate.TwingateServiceAccount(\"githubActionsProd\");\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/Twingate/pulumi-twingate/sdk/go/twingate\"\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 := twingate.NewTwingateServiceAccount(ctx, \"githubActionsProd\", 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 com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.twingate.TwingateServiceAccount;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\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 githubActionsProd = new TwingateServiceAccount(\"githubActionsProd\");\n\n }\n}\n```\n```yaml\nresources:\n githubActionsProd:\n type: twingate:TwingateServiceAccount\n```\n{{% /example %}}\n{{% /examples %}}", + "properties": { + "name": { + "type": "string", + "description": "The name of the Service Account in Twingate\n" + } + }, + "required": [ + "name" + ], + "inputProperties": { + "name": { + "type": "string", + "description": "The name of the Service Account in Twingate\n" + } + }, + "stateInputs": { + "description": "Input properties used for looking up and filtering TwingateServiceAccount resources.\n", + "properties": { + "name": { + "type": "string", + "description": "The name of the Service Account in Twingate\n" + } + }, + "type": "object" + } + }, + "twingate:index/twingateServiceAccountKey:TwingateServiceAccountKey": { + "description": "A Service Key authorizes access to all Resources assigned to a Service Account.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as twingate from \"@pulumi/twingate\";\n\nconst githubActionsProd = new twingate.TwingateServiceAccount(\"githubActionsProd\", {});\nconst githubKey = new twingate.TwingateServiceAccountKey(\"githubKey\", {serviceAccountId: githubActionsProd.id});\n```\n```python\nimport pulumi\nimport pulumi_twingate as twingate\n\ngithub_actions_prod = twingate.TwingateServiceAccount(\"githubActionsProd\")\ngithub_key = twingate.TwingateServiceAccountKey(\"githubKey\", service_account_id=github_actions_prod.id)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Twingate = Pulumi.Twingate;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var githubActionsProd = new Twingate.TwingateServiceAccount(\"githubActionsProd\");\n\n var githubKey = new Twingate.TwingateServiceAccountKey(\"githubKey\", new()\n {\n ServiceAccountId = githubActionsProd.Id,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/Twingate/pulumi-twingate/sdk/go/twingate\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tgithubActionsProd, err := twingate.NewTwingateServiceAccount(ctx, \"githubActionsProd\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = twingate.NewTwingateServiceAccountKey(ctx, \"githubKey\", \u0026twingate.TwingateServiceAccountKeyArgs{\n\t\t\tServiceAccountId: githubActionsProd.ID(),\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 com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.twingate.TwingateServiceAccount;\nimport com.pulumi.twingate.TwingateServiceAccountKey;\nimport com.pulumi.twingate.TwingateServiceAccountKeyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\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 githubActionsProd = new TwingateServiceAccount(\"githubActionsProd\");\n\n var githubKey = new TwingateServiceAccountKey(\"githubKey\", TwingateServiceAccountKeyArgs.builder() \n .serviceAccountId(githubActionsProd.id())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n githubActionsProd:\n type: twingate:TwingateServiceAccount\n githubKey:\n type: twingate:TwingateServiceAccountKey\n properties:\n serviceAccountId: ${githubActionsProd.id}\n```\n{{% /example %}}\n{{% /examples %}}", + "properties": { + "name": { + "type": "string", + "description": "The name of the Service Key\n" + }, + "serviceAccountId": { + "type": "string", + "description": "The id of the Service Account\n" + }, + "token": { + "type": "string", + "description": "Autogenerated Service Key token. Used to configure a Twingate Client running in headless mode.\n", + "secret": true + } + }, + "required": [ + "name", + "serviceAccountId", + "token" + ], + "inputProperties": { + "name": { + "type": "string", + "description": "The name of the Service Key\n" + }, + "serviceAccountId": { + "type": "string", + "description": "The id of the Service Account\n" + } + }, + "requiredInputs": [ + "serviceAccountId" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering TwingateServiceAccountKey resources.\n", + "properties": { + "name": { + "type": "string", + "description": "The name of the Service Key\n" + }, + "serviceAccountId": { + "type": "string", + "description": "The id of the Service Account\n" + }, + "token": { + "type": "string", + "description": "Autogenerated Service Key token. Used to configure a Twingate Client running in headless mode.\n", + "secret": true + } + }, + "type": "object" + } + }, + "twingate:index/twingateUser:TwingateUser": { + "description": "Users provides different levels of write capabilities across the Twingate Admin Console. For more information, see Twingate's [documentation](https://www.twingate.com/docs/users).\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as twingate from \"@pulumi/twingate\";\n\nconst user = new twingate.TwingateUser(\"user\", {\n email: \"sample@company.com\",\n firstName: \"Twin\",\n lastName: \"Gate\",\n role: \"DEVOPS\",\n sendInvite: true,\n});\n```\n```python\nimport pulumi\nimport pulumi_twingate as twingate\n\nuser = twingate.TwingateUser(\"user\",\n email=\"sample@company.com\",\n first_name=\"Twin\",\n last_name=\"Gate\",\n role=\"DEVOPS\",\n send_invite=True)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Twingate = Pulumi.Twingate;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var user = new Twingate.TwingateUser(\"user\", new()\n {\n Email = \"sample@company.com\",\n FirstName = \"Twin\",\n LastName = \"Gate\",\n Role = \"DEVOPS\",\n SendInvite = true,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/Twingate/pulumi-twingate/sdk/go/twingate\"\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 := twingate.NewTwingateUser(ctx, \"user\", \u0026twingate.TwingateUserArgs{\n\t\t\tEmail: pulumi.String(\"sample@company.com\"),\n\t\t\tFirstName: pulumi.String(\"Twin\"),\n\t\t\tLastName: pulumi.String(\"Gate\"),\n\t\t\tRole: pulumi.String(\"DEVOPS\"),\n\t\t\tSendInvite: pulumi.Bool(true),\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 com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.twingate.TwingateUser;\nimport com.pulumi.twingate.TwingateUserArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\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 user = new TwingateUser(\"user\", TwingateUserArgs.builder() \n .email(\"sample@company.com\")\n .firstName(\"Twin\")\n .lastName(\"Gate\")\n .role(\"DEVOPS\")\n .sendInvite(true)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n user:\n type: twingate:TwingateUser\n properties:\n email: sample@company.com\n firstName: Twin\n lastName: Gate\n role: DEVOPS\n sendInvite: true\n```\n{{% /example %}}\n{{% /examples %}}", + "properties": { + "email": { + "type": "string", + "description": "The User's email address\n" + }, + "firstName": { + "type": "string", + "description": "The User's first name\n" + }, + "isActive": { + "type": "boolean", + "description": "Determines whether the User is active or not. Inactive users will be not able to sign in.\n" + }, + "lastName": { + "type": "string", + "description": "The User's last name\n" + }, + "role": { + "type": "string", + "description": "Determines the User's role. Either ADMIN, DEVOPS, SUPPORT or MEMBER.\n" + }, + "sendInvite": { + "type": "boolean", + "description": "Determines whether to send an email invitation to the User. True by default.\n" + }, + "type": { + "type": "string", + "description": "Indicates the User's type. Either MANUAL or SYNCED.\n" + } + }, + "required": [ + "email", + "firstName", + "isActive", + "lastName", + "role", + "sendInvite", + "type" + ], + "inputProperties": { + "email": { + "type": "string", + "description": "The User's email address\n", + "willReplaceOnChanges": true + }, + "firstName": { + "type": "string", + "description": "The User's first name\n" + }, + "isActive": { + "type": "boolean", + "description": "Determines whether the User is active or not. Inactive users will be not able to sign in.\n" + }, + "lastName": { + "type": "string", + "description": "The User's last name\n" + }, + "role": { + "type": "string", + "description": "Determines the User's role. Either ADMIN, DEVOPS, SUPPORT or MEMBER.\n" + }, + "sendInvite": { + "type": "boolean", + "description": "Determines whether to send an email invitation to the User. True by default.\n" + } + }, + "requiredInputs": [ + "email" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering TwingateUser resources.\n", + "properties": { + "email": { + "type": "string", + "description": "The User's email address\n", + "willReplaceOnChanges": true + }, + "firstName": { + "type": "string", + "description": "The User's first name\n" + }, + "isActive": { + "type": "boolean", + "description": "Determines whether the User is active or not. Inactive users will be not able to sign in.\n" + }, + "lastName": { + "type": "string", + "description": "The User's last name\n" + }, + "role": { + "type": "string", + "description": "Determines the User's role. Either ADMIN, DEVOPS, SUPPORT or MEMBER.\n" + }, + "sendInvite": { + "type": "boolean", + "description": "Determines whether to send an email invitation to the User. True by default.\n" + }, + "type": { + "type": "string", + "description": "Indicates the User's type. Either MANUAL or SYNCED.\n" + } + }, + "type": "object" + } + } + }, + "functions": { + "twingate:index/getTwingateConnector:getTwingateConnector": { + "description": "Connectors provide connectivity to Remote Networks. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/understanding-access-nodes).\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as twingate from \"@pulumi/twingate\";\n\nconst foo = twingate.getTwingateConnector({\n id: \"\u003cyour connector's id\u003e\",\n});\n```\n```python\nimport pulumi\nimport pulumi_twingate as twingate\n\nfoo = twingate.get_twingate_connector(id=\"\u003cyour connector's id\u003e\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Twingate = Pulumi.Twingate;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var foo = Twingate.GetTwingateConnector.Invoke(new()\n {\n Id = \"\u003cyour connector's id\u003e\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/Twingate/pulumi-twingate/sdk/go/twingate\"\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 := twingate.LookupTwingateConnector(ctx, \u0026twingate.LookupTwingateConnectorArgs{\n\t\t\tId: \"\u003cyour connector's id\u003e\",\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 com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.twingate.TwingateFunctions;\nimport com.pulumi.twingate.inputs.GetTwingateConnectorArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\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 foo = TwingateFunctions.getTwingateConnector(GetTwingateConnectorArgs.builder()\n .id(\"\u003cyour connector's id\u003e\")\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n foo:\n fn::invoke:\n Function: twingate:getTwingateConnector\n Arguments:\n id: \u003cyour connector's id\u003e\n```\n{{% /example %}}\n{{% /examples %}}", + "inputs": { + "description": "A collection of arguments for invoking getTwingateConnector.\n", + "properties": { + "id": { + "type": "string", + "description": "The ID of the Connector. The ID for the Connector can be obtained from the Admin API or the URL string in the Admin Console.\n" + } + }, + "type": "object", + "required": [ + "id" + ] + }, + "outputs": { + "description": "A collection of values returned by getTwingateConnector.\n", + "properties": { + "id": { + "type": "string", + "description": "The ID of the Connector. The ID for the Connector can be obtained from the Admin API or the URL string in the Admin Console.\n" + }, + "name": { + "type": "string", + "description": "The name of the Connector.\n" + }, + "remoteNetworkId": { + "type": "string", + "description": "The ID of the Remote Network the Connector is attached to.\n" + }, + "statusUpdatesEnabled": { + "type": "boolean", + "description": "Determines whether status notifications are enabled for the Connector.\n" + } + }, + "type": "object", + "required": [ + "id", + "name", + "remoteNetworkId", + "statusUpdatesEnabled" + ] + } + }, + "twingate:index/getTwingateConnectors:getTwingateConnectors": { + "description": "Connectors provide connectivity to Remote Networks. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/understanding-access-nodes).\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as twingate from \"@pulumi/twingate\";\n\nconst all = twingate.getTwingateConnectors({});\n```\n```python\nimport pulumi\nimport pulumi_twingate as twingate\n\nall = twingate.get_twingate_connectors()\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Twingate = Pulumi.Twingate;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var all = Twingate.GetTwingateConnectors.Invoke();\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/Twingate/pulumi-twingate/sdk/go/twingate\"\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 := twingate.GetTwingateConnectors(ctx, nil, 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 com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.twingate.TwingateFunctions;\nimport com.pulumi.twingate.inputs.GetTwingateConnectorsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\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 all = TwingateFunctions.getTwingateConnectors();\n\n }\n}\n```\n```yaml\nvariables:\n all:\n fn::invoke:\n Function: twingate:getTwingateConnectors\n Arguments: {}\n```\n{{% /example %}}\n{{% /examples %}}", + "inputs": { + "description": "A collection of arguments for invoking getTwingateConnectors.\n", + "properties": { + "connectors": { + "type": "array", + "items": { + "$ref": "#/types/twingate:index/getTwingateConnectorsConnector:getTwingateConnectorsConnector" + }, + "description": "List of Connectors\n" + } + }, + "type": "object" + }, + "outputs": { + "description": "A collection of values returned by getTwingateConnectors.\n", + "properties": { + "connectors": { + "type": "array", + "items": { + "$ref": "#/types/twingate:index/getTwingateConnectorsConnector:getTwingateConnectorsConnector" + }, + "description": "List of Connectors\n" + }, + "id": { + "type": "string", + "description": "The provider-assigned unique ID for this managed resource.\n" + } + }, + "type": "object", + "required": [ + "id" + ] + } + }, + "twingate:index/getTwingateGroup:getTwingateGroup": { + "description": "Groups are how users are authorized to access Resources. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/groups).\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as twingate from \"@pulumi/twingate\";\n\nconst foo = twingate.getTwingateGroup({\n id: \"\u003cyour group's id\u003e\",\n});\n```\n```python\nimport pulumi\nimport pulumi_twingate as twingate\n\nfoo = twingate.get_twingate_group(id=\"\u003cyour group's id\u003e\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Twingate = Pulumi.Twingate;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var foo = Twingate.GetTwingateGroup.Invoke(new()\n {\n Id = \"\u003cyour group's id\u003e\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/Twingate/pulumi-twingate/sdk/go/twingate\"\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 := twingate.LookupTwingateGroup(ctx, \u0026twingate.LookupTwingateGroupArgs{\n\t\t\tId: \"\u003cyour group's id\u003e\",\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 com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.twingate.TwingateFunctions;\nimport com.pulumi.twingate.inputs.GetTwingateGroupArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\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 foo = TwingateFunctions.getTwingateGroup(GetTwingateGroupArgs.builder()\n .id(\"\u003cyour group's id\u003e\")\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n foo:\n fn::invoke:\n Function: twingate:getTwingateGroup\n Arguments:\n id: \u003cyour group's id\u003e\n```\n{{% /example %}}\n{{% /examples %}}", + "inputs": { + "description": "A collection of arguments for invoking getTwingateGroup.\n", + "properties": { + "id": { + "type": "string", + "description": "The ID of the Group. The ID for the Group can be obtained from the Admin API or the URL string in the Admin Console.\n" + } + }, + "type": "object", + "required": [ + "id" + ] + }, + "outputs": { + "description": "A collection of values returned by getTwingateGroup.\n", + "properties": { + "id": { + "type": "string", + "description": "The ID of the Group. The ID for the Group can be obtained from the Admin API or the URL string in the Admin Console.\n" + }, + "isActive": { + "type": "boolean", + "description": "Indicates if the Group is active\n" + }, + "name": { + "type": "string", + "description": "The name of the Group\n" + }, + "securityPolicyId": { + "type": "string", + "description": "The Security Policy assigned to the Group.\n" + }, + "type": { + "type": "string", + "description": "The type of the Group\n" + } + }, + "type": "object", + "required": [ + "id", + "isActive", + "name", + "securityPolicyId", + "type" + ] + } + }, + "twingate:index/getTwingateGroups:getTwingateGroups": { + "description": "Groups are how users are authorized to access Resources. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/groups).\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as twingate from \"@pulumi/twingate\";\n\nconst foo = twingate.getTwingateGroups({\n name: \"\u003cyour group's name\u003e\",\n});\n```\n```python\nimport pulumi\nimport pulumi_twingate as twingate\n\nfoo = twingate.get_twingate_groups(name=\"\u003cyour group's name\u003e\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Twingate = Pulumi.Twingate;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var foo = Twingate.GetTwingateGroups.Invoke(new()\n {\n Name = \"\u003cyour group's name\u003e\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/Twingate/pulumi-twingate/sdk/go/twingate\"\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 := twingate.GetTwingateGroups(ctx, \u0026twingate.GetTwingateGroupsArgs{\n\t\t\tName: pulumi.StringRef(\"\u003cyour group's name\u003e\"),\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 com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.twingate.TwingateFunctions;\nimport com.pulumi.twingate.inputs.GetTwingateGroupsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\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 foo = TwingateFunctions.getTwingateGroups(GetTwingateGroupsArgs.builder()\n .name(\"\u003cyour group's name\u003e\")\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n foo:\n fn::invoke:\n Function: twingate:getTwingateGroups\n Arguments:\n name: \u003cyour group's name\u003e\n```\n{{% /example %}}\n{{% /examples %}}", + "inputs": { + "description": "A collection of arguments for invoking getTwingateGroups.\n", + "properties": { + "groups": { + "type": "array", + "items": { + "$ref": "#/types/twingate:index/getTwingateGroupsGroup:getTwingateGroupsGroup" + }, + "description": "List of Groups\n" + }, + "isActive": { + "type": "boolean", + "description": "Indicates if the Group is active\n" + }, + "name": { + "type": "string", + "description": "The name of the Group\n" + }, + "type": { + "type": "string", + "description": "The type of the Group\n" + } + }, + "type": "object" + }, + "outputs": { + "description": "A collection of values returned by getTwingateGroups.\n", + "properties": { + "groups": { + "type": "array", + "items": { + "$ref": "#/types/twingate:index/getTwingateGroupsGroup:getTwingateGroupsGroup" + }, + "description": "List of Groups\n" + }, + "id": { + "type": "string", + "description": "The provider-assigned unique ID for this managed resource.\n" + }, + "isActive": { + "type": "boolean", + "description": "Returns only Groups matching the specified state.\n" + }, + "name": { + "type": "string", + "description": "Returns only Groups that exactly match this name.\n" + }, + "type": { + "type": "string", + "description": "Returns only Groups of the specified type (valid: `MANUAL`, `SYNCED`, `SYSTEM`).\n" + } + }, + "type": "object", + "required": [ + "id" + ] + } + }, + "twingate:index/getTwingateRemoteNetwork:getTwingateRemoteNetwork": { + "description": "A Remote Network represents a single private network in Twingate that can have one or more Connectors and Resources assigned to it. You must create a Remote Network before creating Resources and Connectors that belong to it. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/remote-networks).\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as twingate from \"@pulumi/twingate\";\n\nconst foo = twingate.getTwingateRemoteNetwork({\n name: \"\u003cyour network's name\u003e\",\n});\n```\n```python\nimport pulumi\nimport pulumi_twingate as twingate\n\nfoo = twingate.get_twingate_remote_network(name=\"\u003cyour network's name\u003e\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Twingate = Pulumi.Twingate;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var foo = Twingate.GetTwingateRemoteNetwork.Invoke(new()\n {\n Name = \"\u003cyour network's name\u003e\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/Twingate/pulumi-twingate/sdk/go/twingate\"\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 := twingate.LookupTwingateRemoteNetwork(ctx, \u0026twingate.LookupTwingateRemoteNetworkArgs{\n\t\t\tName: pulumi.StringRef(\"\u003cyour network's name\u003e\"),\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 com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.twingate.TwingateFunctions;\nimport com.pulumi.twingate.inputs.GetTwingateRemoteNetworkArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\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 foo = TwingateFunctions.getTwingateRemoteNetwork(GetTwingateRemoteNetworkArgs.builder()\n .name(\"\u003cyour network's name\u003e\")\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n foo:\n fn::invoke:\n Function: twingate:getTwingateRemoteNetwork\n Arguments:\n name: \u003cyour network's name\u003e\n```\n{{% /example %}}\n{{% /examples %}}", + "inputs": { + "description": "A collection of arguments for invoking getTwingateRemoteNetwork.\n", + "properties": { + "id": { + "type": "string", + "description": "The ID of the Remote Network\n" + }, + "name": { + "type": "string", + "description": "The name of the Remote Network\n" + } + }, + "type": "object" + }, + "outputs": { + "description": "A collection of values returned by getTwingateRemoteNetwork.\n", + "properties": { + "id": { + "type": "string", + "description": "The ID of the Remote Network\n" + }, + "location": { + "type": "string", + "description": "The location of the Remote Network. Must be one of the following: AWS, AZURE, GOOGLE*CLOUD, ON*PREMISE, OTHER.\n" + }, + "name": { + "type": "string", + "description": "The name of the Remote Network\n" + } + }, + "type": "object", + "required": [ + "location" + ] + } + }, + "twingate:index/getTwingateRemoteNetworks:getTwingateRemoteNetworks": { + "description": "A Remote Network represents a single private network in Twingate that can have one or more Connectors and Resources assigned to it. You must create a Remote Network before creating Resources and Connectors that belong to it. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/remote-networks).\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as twingate from \"@pulumi/twingate\";\n\nconst all = twingate.getTwingateRemoteNetworks({});\n```\n```python\nimport pulumi\nimport pulumi_twingate as twingate\n\nall = twingate.get_twingate_remote_networks()\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Twingate = Pulumi.Twingate;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var all = Twingate.GetTwingateRemoteNetworks.Invoke();\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/Twingate/pulumi-twingate/sdk/go/twingate\"\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 := twingate.GetTwingateRemoteNetworks(ctx, nil, 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 com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.twingate.TwingateFunctions;\nimport com.pulumi.twingate.inputs.GetTwingateRemoteNetworksArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\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 all = TwingateFunctions.getTwingateRemoteNetworks();\n\n }\n}\n```\n```yaml\nvariables:\n all:\n fn::invoke:\n Function: twingate:getTwingateRemoteNetworks\n Arguments: {}\n```\n{{% /example %}}\n{{% /examples %}}", + "inputs": { + "description": "A collection of arguments for invoking getTwingateRemoteNetworks.\n", + "properties": { + "remoteNetworks": { + "type": "array", + "items": { + "$ref": "#/types/twingate:index/getTwingateRemoteNetworksRemoteNetwork:getTwingateRemoteNetworksRemoteNetwork" + }, + "description": "List of Remote Networks\n" + } + }, + "type": "object" + }, + "outputs": { + "description": "A collection of values returned by getTwingateRemoteNetworks.\n", + "properties": { + "id": { + "type": "string", + "description": "The provider-assigned unique ID for this managed resource.\n" + }, + "remoteNetworks": { + "type": "array", + "items": { + "$ref": "#/types/twingate:index/getTwingateRemoteNetworksRemoteNetwork:getTwingateRemoteNetworksRemoteNetwork" + }, + "description": "List of Remote Networks\n" + } + }, + "type": "object", + "required": [ + "id" + ] + } + }, + "twingate:index/getTwingateResource:getTwingateResource": { + "description": "Resources in Twingate represent any network destination address that you wish to provide private access to for users authorized via the Twingate Client application. Resources can be defined by either IP or DNS address, and all private DNS addresses will be automatically resolved with no client configuration changes. For more information, see the Twingate [documentation](https://docs.twingate.com/docs/resources-and-access-nodes).\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as twingate from \"@pulumi/twingate\";\n\nconst foo = twingate.getTwingateResource({\n id: \"\u003cyour resource's id\u003e\",\n});\n```\n```python\nimport pulumi\nimport pulumi_twingate as twingate\n\nfoo = twingate.get_twingate_resource(id=\"\u003cyour resource's id\u003e\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Twingate = Pulumi.Twingate;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var foo = Twingate.GetTwingateResource.Invoke(new()\n {\n Id = \"\u003cyour resource's id\u003e\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/Twingate/pulumi-twingate/sdk/go/twingate\"\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 := twingate.LookupTwingateResource(ctx, \u0026twingate.LookupTwingateResourceArgs{\n\t\t\tId: \"\u003cyour resource's id\u003e\",\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 com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.twingate.TwingateFunctions;\nimport com.pulumi.twingate.inputs.GetTwingateResourceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\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 foo = TwingateFunctions.getTwingateResource(GetTwingateResourceArgs.builder()\n .id(\"\u003cyour resource's id\u003e\")\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n foo:\n fn::invoke:\n Function: twingate:getTwingateResource\n Arguments:\n id: \u003cyour resource's id\u003e\n```\n{{% /example %}}\n{{% /examples %}}", + "inputs": { + "description": "A collection of arguments for invoking getTwingateResource.\n", + "properties": { + "id": { + "type": "string", + "description": "The ID of the Resource. The ID for the Resource can be obtained from the Admin API or the URL string in the Admin Console.\n" + }, + "protocols": { + "type": "array", + "items": { + "$ref": "#/types/twingate:index/getTwingateResourceProtocol:getTwingateResourceProtocol" + }, + "description": "By default (when this argument is not defined) no restriction is applied, and all protocols and ports are allowed.\n" + } + }, + "type": "object", + "required": [ + "id" + ] + }, + "outputs": { + "description": "A collection of values returned by getTwingateResource.\n", + "properties": { + "address": { + "type": "string", + "description": "The Resource's address, which may be an IP address, CIDR range, or DNS address\n" + }, + "id": { + "type": "string", + "description": "The ID of the Resource. The ID for the Resource can be obtained from the Admin API or the URL string in the Admin Console.\n" + }, + "name": { + "type": "string", + "description": "The name of the Resource\n" + }, + "protocols": { + "type": "array", + "items": { + "$ref": "#/types/twingate:index/getTwingateResourceProtocol:getTwingateResourceProtocol" + }, + "description": "By default (when this argument is not defined) no restriction is applied, and all protocols and ports are allowed.\n" + }, + "remoteNetworkId": { + "type": "string", + "description": "The Remote Network ID that the Resource is associated with. Resources may only be associated with a single Remote Network.\n" + } + }, + "type": "object", + "required": [ + "address", + "id", + "name", + "remoteNetworkId" + ] + } + }, + "twingate:index/getTwingateResources:getTwingateResources": { + "description": "Resources in Twingate represent servers on the private network that clients can connect to. Resources can be defined by IP, CIDR range, FQDN, or DNS zone. For more information, see the Twingate [documentation](https://docs.twingate.com/docs/resources-and-access-nodes).\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as twingate from \"@pulumi/twingate\";\n\nconst foo = twingate.getTwingateResources({\n name: \"\u003cyour resource's name\u003e\",\n});\n```\n```python\nimport pulumi\nimport pulumi_twingate as twingate\n\nfoo = twingate.get_twingate_resources(name=\"\u003cyour resource's name\u003e\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Twingate = Pulumi.Twingate;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var foo = Twingate.GetTwingateResources.Invoke(new()\n {\n Name = \"\u003cyour resource's name\u003e\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/Twingate/pulumi-twingate/sdk/go/twingate\"\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 := twingate.GetTwingateResources(ctx, \u0026twingate.GetTwingateResourcesArgs{\n\t\t\tName: \"\u003cyour resource's name\u003e\",\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 com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.twingate.TwingateFunctions;\nimport com.pulumi.twingate.inputs.GetTwingateResourcesArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\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 foo = TwingateFunctions.getTwingateResources(GetTwingateResourcesArgs.builder()\n .name(\"\u003cyour resource's name\u003e\")\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n foo:\n fn::invoke:\n Function: twingate:getTwingateResources\n Arguments:\n name: \u003cyour resource's name\u003e\n```\n{{% /example %}}\n{{% /examples %}}", + "inputs": { + "description": "A collection of arguments for invoking getTwingateResources.\n", + "properties": { + "name": { + "type": "string", + "description": "The name of the Resource\n" + }, + "resources": { + "type": "array", + "items": { + "$ref": "#/types/twingate:index/getTwingateResourcesResource:getTwingateResourcesResource" + }, + "description": "List of Resources\n" + } + }, + "type": "object", + "required": [ + "name" + ] + }, + "outputs": { + "description": "A collection of values returned by getTwingateResources.\n", + "properties": { + "id": { + "type": "string", + "description": "The provider-assigned unique ID for this managed resource.\n" + }, + "name": { + "type": "string", + "description": "The name of the Resource\n" + }, + "resources": { + "type": "array", + "items": { + "$ref": "#/types/twingate:index/getTwingateResourcesResource:getTwingateResourcesResource" + }, + "description": "List of Resources\n" + } + }, + "type": "object", + "required": [ + "name", + "id" + ] + } + }, + "twingate:index/getTwingateSecurityPolicies:getTwingateSecurityPolicies": { + "description": "Security Policies are defined in the Twingate Admin Console and determine user and device authentication requirements for Resources.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as twingate from \"@pulumi/twingate\";\n\nconst all = twingate.getTwingateSecurityPolicies({});\n```\n```python\nimport pulumi\nimport pulumi_twingate as twingate\n\nall = twingate.get_twingate_security_policies()\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Twingate = Pulumi.Twingate;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var all = Twingate.GetTwingateSecurityPolicies.Invoke();\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/Twingate/pulumi-twingate/sdk/go/twingate\"\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 := twingate.GetTwingateSecurityPolicies(ctx, nil, 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 com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.twingate.TwingateFunctions;\nimport com.pulumi.twingate.inputs.GetTwingateSecurityPoliciesArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\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 all = TwingateFunctions.getTwingateSecurityPolicies();\n\n }\n}\n```\n```yaml\nvariables:\n all:\n fn::invoke:\n Function: twingate:getTwingateSecurityPolicies\n Arguments: {}\n```\n{{% /example %}}\n{{% /examples %}}", + "inputs": { + "description": "A collection of arguments for invoking getTwingateSecurityPolicies.\n", + "properties": { + "securityPolicies": { + "type": "array", + "items": { + "$ref": "#/types/twingate:index/getTwingateSecurityPoliciesSecurityPolicy:getTwingateSecurityPoliciesSecurityPolicy" + } + } + }, + "type": "object" + }, + "outputs": { + "description": "A collection of values returned by getTwingateSecurityPolicies.\n", + "properties": { + "id": { + "type": "string", + "description": "The provider-assigned unique ID for this managed resource.\n" + }, + "securityPolicies": { + "type": "array", + "items": { + "$ref": "#/types/twingate:index/getTwingateSecurityPoliciesSecurityPolicy:getTwingateSecurityPoliciesSecurityPolicy" + } + } + }, + "type": "object", + "required": [ + "id" + ] + } + }, + "twingate:index/getTwingateSecurityPolicy:getTwingateSecurityPolicy": { + "description": "Security Policies are defined in the Twingate Admin Console and determine user and device authentication requirements for Resources.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as twingate from \"@pulumi/twingate\";\n\nconst foo = twingate.getTwingateSecurityPolicy({\n name: \"\u003cyour security policy name\u003e\",\n});\n```\n```python\nimport pulumi\nimport pulumi_twingate as twingate\n\nfoo = twingate.get_twingate_security_policy(name=\"\u003cyour security policy name\u003e\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Twingate = Pulumi.Twingate;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var foo = Twingate.GetTwingateSecurityPolicy.Invoke(new()\n {\n Name = \"\u003cyour security policy name\u003e\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/Twingate/pulumi-twingate/sdk/go/twingate\"\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 := twingate.GetTwingateSecurityPolicy(ctx, \u0026twingate.GetTwingateSecurityPolicyArgs{\n\t\t\tName: pulumi.StringRef(\"\u003cyour security policy name\u003e\"),\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 com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.twingate.TwingateFunctions;\nimport com.pulumi.twingate.inputs.GetTwingateSecurityPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\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 foo = TwingateFunctions.getTwingateSecurityPolicy(GetTwingateSecurityPolicyArgs.builder()\n .name(\"\u003cyour security policy name\u003e\")\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n foo:\n fn::invoke:\n Function: twingate:getTwingateSecurityPolicy\n Arguments:\n name: \u003cyour security policy name\u003e\n```\n{{% /example %}}\n{{% /examples %}}", + "inputs": { + "description": "A collection of arguments for invoking getTwingateSecurityPolicy.\n", + "properties": { + "id": { + "type": "string", + "description": "Return a Security Policy by its ID. The ID for the Security Policy can be obtained from the Admin API or the URL string in the Admin Console.\n" + }, + "name": { + "type": "string", + "description": "Return a Security Policy that exactly matches this name.\n" + } + }, + "type": "object" + }, + "outputs": { + "description": "A collection of values returned by getTwingateSecurityPolicy.\n", + "properties": { + "id": { + "type": "string", + "description": "Return a Security Policy by its ID. The ID for the Security Policy can be obtained from the Admin API or the URL string in the Admin Console.\n" + }, + "name": { + "type": "string", + "description": "Return a Security Policy that exactly matches this name.\n" + } + }, + "type": "object" + } + }, + "twingate:index/getTwingateServiceAccounts:getTwingateServiceAccounts": { + "description": "Service Accounts offer a way to provide programmatic, centrally-controlled, and consistent access controls.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as twingate from \"@pulumi/twingate\";\n\nconst foo = twingate.getTwingateServiceAccounts({\n name: \"\u003cyour service account's name\u003e\",\n});\n```\n```python\nimport pulumi\nimport pulumi_twingate as twingate\n\nfoo = twingate.get_twingate_service_accounts(name=\"\u003cyour service account's name\u003e\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Twingate = Pulumi.Twingate;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var foo = Twingate.GetTwingateServiceAccounts.Invoke(new()\n {\n Name = \"\u003cyour service account's name\u003e\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/Twingate/pulumi-twingate/sdk/go/twingate\"\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 := twingate.GetTwingateServiceAccounts(ctx, \u0026twingate.GetTwingateServiceAccountsArgs{\n\t\t\tName: pulumi.StringRef(\"\u003cyour service account's name\u003e\"),\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 com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.twingate.TwingateFunctions;\nimport com.pulumi.twingate.inputs.GetTwingateServiceAccountsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\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 foo = TwingateFunctions.getTwingateServiceAccounts(GetTwingateServiceAccountsArgs.builder()\n .name(\"\u003cyour service account's name\u003e\")\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n foo:\n fn::invoke:\n Function: twingate:getTwingateServiceAccounts\n Arguments:\n name: \u003cyour service account's name\u003e\n```\n{{% /example %}}\n{{% /examples %}}", + "inputs": { + "description": "A collection of arguments for invoking getTwingateServiceAccounts.\n", + "properties": { + "name": { + "type": "string", + "description": "Name of the Service Account\n" + }, + "serviceAccounts": { + "type": "array", + "items": { + "$ref": "#/types/twingate:index/getTwingateServiceAccountsServiceAccount:getTwingateServiceAccountsServiceAccount" + }, + "description": "List of Service Accounts\n" + } + }, + "type": "object" + }, + "outputs": { + "description": "A collection of values returned by getTwingateServiceAccounts.\n", + "properties": { + "id": { + "type": "string", + "description": "The provider-assigned unique ID for this managed resource.\n" + }, + "name": { + "type": "string", + "description": "Filter results by the name of the Service Account.\n" + }, + "serviceAccounts": { + "type": "array", + "items": { + "$ref": "#/types/twingate:index/getTwingateServiceAccountsServiceAccount:getTwingateServiceAccountsServiceAccount" + }, + "description": "List of Service Accounts\n" + } + }, + "type": "object", + "required": [ + "id" + ] + } + }, + "twingate:index/getTwingateUser:getTwingateUser": { + "description": "Users in Twingate can be given access to Twingate Resources and may either be added manually or automatically synchronized with a 3rd party identity provider. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/users).\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as twingate from \"@pulumi/twingate\";\n\nconst foo = twingate.getTwingateUser({\n id: \"\u003cyour user's id\u003e\",\n});\n```\n```python\nimport pulumi\nimport pulumi_twingate as twingate\n\nfoo = twingate.get_twingate_user(id=\"\u003cyour user's id\u003e\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Twingate = Pulumi.Twingate;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var foo = Twingate.GetTwingateUser.Invoke(new()\n {\n Id = \"\u003cyour user's id\u003e\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/Twingate/pulumi-twingate/sdk/go/twingate\"\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 := twingate.LookupTwingateUser(ctx, \u0026twingate.LookupTwingateUserArgs{\n\t\t\tId: \"\u003cyour user's id\u003e\",\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 com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.twingate.TwingateFunctions;\nimport com.pulumi.twingate.inputs.GetTwingateUserArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\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 foo = TwingateFunctions.getTwingateUser(GetTwingateUserArgs.builder()\n .id(\"\u003cyour user's id\u003e\")\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n foo:\n fn::invoke:\n Function: twingate:getTwingateUser\n Arguments:\n id: \u003cyour user's id\u003e\n```\n{{% /example %}}\n{{% /examples %}}", + "inputs": { + "description": "A collection of arguments for invoking getTwingateUser.\n", + "properties": { + "id": { + "type": "string", + "description": "The ID of the User. The ID for the User can be obtained from the Admin API or the URL string in the Admin Console.\n" + } + }, + "type": "object", + "required": [ + "id" + ] + }, + "outputs": { + "description": "A collection of values returned by getTwingateUser.\n", + "properties": { + "email": { + "type": "string", + "description": "The email address of the User\n" + }, + "firstName": { + "type": "string", + "description": "The first name of the User\n" + }, + "id": { + "type": "string", + "description": "The ID of the User. The ID for the User can be obtained from the Admin API or the URL string in the Admin Console.\n" + }, + "isAdmin": { + "type": "boolean", + "description": "Indicates whether the User is an admin\n", + "deprecationMessage": "This read-only Boolean value will be deprecated in a future release. You may use the `role` value instead." + }, + "lastName": { + "type": "string", + "description": "The last name of the User\n" + }, + "role": { + "type": "string", + "description": "Indicates the User's role. Either ADMIN, DEVOPS, SUPPORT, or MEMBER\n" + }, + "type": { + "type": "string", + "description": "Indicates the User's type. Either MANUAL or SYNCED.\n" + } + }, + "type": "object", + "required": [ + "email", + "firstName", + "id", + "isAdmin", + "lastName", + "role", + "type" + ] + } + }, + "twingate:index/getTwingateUsers:getTwingateUsers": { + "description": "Users in Twingate can be given access to Twingate Resources and may either be added manually or automatically synchronized with a 3rd party identity provider. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/users).\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as twingate from \"@pulumi/twingate\";\n\nconst all = twingate.getTwingateUsers({});\n```\n```python\nimport pulumi\nimport pulumi_twingate as twingate\n\nall = twingate.get_twingate_users()\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Twingate = Pulumi.Twingate;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var all = Twingate.GetTwingateUsers.Invoke();\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/Twingate/pulumi-twingate/sdk/go/twingate\"\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 := twingate.GetTwingateUsers(ctx, nil, 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 com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.twingate.TwingateFunctions;\nimport com.pulumi.twingate.inputs.GetTwingateUsersArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\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 all = TwingateFunctions.getTwingateUsers();\n\n }\n}\n```\n```yaml\nvariables:\n all:\n fn::invoke:\n Function: twingate:getTwingateUsers\n Arguments: {}\n```\n{{% /example %}}\n{{% /examples %}}", + "inputs": { + "description": "A collection of arguments for invoking getTwingateUsers.\n", + "properties": { + "users": { + "type": "array", + "items": { + "$ref": "#/types/twingate:index/getTwingateUsersUser:getTwingateUsersUser" + } + } + }, + "type": "object" + }, + "outputs": { + "description": "A collection of values returned by getTwingateUsers.\n", + "properties": { + "id": { + "type": "string", + "description": "The provider-assigned unique ID for this managed resource.\n" + }, + "users": { + "type": "array", + "items": { + "$ref": "#/types/twingate:index/getTwingateUsersUser:getTwingateUsersUser" + } + } + }, + "type": "object", + "required": [ + "id" + ] + } + } + } +} \ No newline at end of file diff --git a/provider/cmd/pulumi-resource-xyz/bridge-metadata.json b/provider/cmd/pulumi-resource-xyz/bridge-metadata.json deleted file mode 100644 index 0967ef4..0000000 --- a/provider/cmd/pulumi-resource-xyz/bridge-metadata.json +++ /dev/null @@ -1 +0,0 @@ -{} diff --git a/provider/cmd/pulumi-tfgen-xyz/main.go b/provider/cmd/pulumi-tfgen-twingate/main.go similarity index 80% rename from provider/cmd/pulumi-tfgen-xyz/main.go rename to provider/cmd/pulumi-tfgen-twingate/main.go index 76648ce..a80cff7 100644 --- a/provider/cmd/pulumi-tfgen-xyz/main.go +++ b/provider/cmd/pulumi-tfgen-twingate/main.go @@ -15,12 +15,12 @@ package main import ( + twingate "github.com/Twingate/pulumi-twingate/provider" + "github.com/Twingate/pulumi-twingate/provider/pkg/version" "github.com/pulumi/pulumi-terraform-bridge/v3/pkg/tfgen" - xyz "github.com/pulumi/pulumi-xyz/provider" - "github.com/pulumi/pulumi-xyz/provider/pkg/version" ) func main() { // Modify the path to point to the new provider - tfgen.Main("xyz", version.Version, xyz.Provider()) + tfgen.Main("twingate", version.Version, twingate.Provider()) } diff --git a/provider/go.mod b/provider/go.mod index 7b02eb5..02acd73 100644 --- a/provider/go.mod +++ b/provider/go.mod @@ -1,10 +1,239 @@ -module github.com/pulumi/pulumi-xyz/provider +module github.com/Twingate/pulumi-twingate/provider go 1.21 replace github.com/hashicorp/terraform-plugin-sdk/v2 => github.com/pulumi/terraform-plugin-sdk/v2 v2.0.0-20230912190043-e6d96b3b8f7e require ( + github.com/Twingate/terraform-provider-twingate v1.2.1 github.com/pulumi/pulumi-terraform-bridge/v3 v3.69.0 github.com/pulumi/pulumi/sdk/v3 v3.98.0 ) + +require ( + cloud.google.com/go v0.110.4 // indirect + cloud.google.com/go/compute v1.20.1 // indirect + cloud.google.com/go/compute/metadata v0.2.3 // indirect + cloud.google.com/go/iam v1.1.1 // indirect + cloud.google.com/go/kms v1.12.1 // indirect + cloud.google.com/go/logging v1.7.0 // indirect + cloud.google.com/go/longrunning v0.5.1 // indirect + cloud.google.com/go/storage v1.30.1 // indirect + dario.cat/mergo v1.0.0 // indirect + github.com/Azure/azure-sdk-for-go v66.0.0+incompatible // indirect + github.com/Azure/go-autorest v14.2.0+incompatible // indirect + github.com/Azure/go-autorest/autorest v0.11.28 // indirect + github.com/Azure/go-autorest/autorest/adal v0.9.21 // indirect + github.com/Azure/go-autorest/autorest/azure/auth v0.5.11 // indirect + github.com/Azure/go-autorest/autorest/azure/cli v0.4.6 // 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/BurntSushi/toml v1.2.1 // indirect + github.com/Masterminds/goutils v1.1.1 // indirect + github.com/Masterminds/semver v1.5.0 // indirect + github.com/Masterminds/semver/v3 v3.1.1 // indirect + github.com/Masterminds/sprig/v3 v3.2.2 // indirect + github.com/Microsoft/go-winio v0.6.1 // indirect + github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 // indirect + github.com/acomagu/bufpipe v1.0.4 // indirect + github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da // indirect + github.com/agext/levenshtein v1.2.3 // indirect + github.com/apparentlymart/go-cidr v1.1.0 // indirect + github.com/apparentlymart/go-textseg/v15 v15.0.0 // indirect + github.com/armon/go-metrics v0.4.0 // indirect + github.com/armon/go-radix v1.0.0 // indirect + github.com/atotto/clipboard v0.1.4 // indirect + github.com/aws/aws-sdk-go v1.44.298 // indirect + github.com/aws/aws-sdk-go-v2 v1.17.3 // indirect + github.com/aws/aws-sdk-go-v2/config v1.15.15 // indirect + github.com/aws/aws-sdk-go-v2/credentials v1.12.10 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.9 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.27 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.21 // indirect + github.com/aws/aws-sdk-go-v2/internal/ini v1.3.16 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.9 // indirect + github.com/aws/aws-sdk-go-v2/service/kms v1.18.1 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.11.13 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.16.10 // indirect + github.com/aws/smithy-go v1.13.5 // indirect + github.com/aymanbagabas/go-osc52/v2 v2.0.1 // 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/charmbracelet/bubbles v0.16.1 // indirect + github.com/charmbracelet/bubbletea v0.24.2 // indirect + github.com/charmbracelet/lipgloss v0.7.1 // indirect + github.com/cheggaaa/pb v1.0.29 // indirect + github.com/cloudflare/circl v1.3.3 // indirect + github.com/containerd/console v1.0.4-0.20230313162750-1ae8d489ac81 // indirect + github.com/cyphar/filepath-securejoin v0.2.4 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/deckarep/golang-set/v2 v2.5.0 // indirect + github.com/dimchansky/utfbom v1.1.1 // indirect + github.com/djherbis/times v1.5.0 // indirect + github.com/edsrzf/mmap-go v1.1.0 // indirect + github.com/emirpasic/gods v1.18.1 // indirect + github.com/ettle/strcase v0.1.1 // indirect + github.com/fatih/color v1.15.0 // indirect + github.com/gedex/inflector v0.0.0-20170307190818-16278e9db813 // indirect + github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect + github.com/go-git/go-billy/v5 v5.5.0 // indirect + github.com/go-git/go-git/v5 v5.9.0 // 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.4.2 // indirect + github.com/golang/glog v1.1.0 // indirect + github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect + github.com/golang/protobuf v1.5.3 // indirect + github.com/golang/snappy v0.0.4 // indirect + github.com/google/go-cmp v0.5.9 // indirect + github.com/google/go-querystring v1.1.0 // indirect + github.com/google/s2a-go v0.1.4 // 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/enterprise-certificate-proxy v0.2.3 // indirect + github.com/googleapis/gax-go/v2 v2.11.0 // indirect + github.com/gorilla/mux v1.8.0 // 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.7.1 // indirect + github.com/hashicorp/go-hclog v1.5.0 // indirect + github.com/hashicorp/go-immutable-radix v1.3.1 // indirect + github.com/hashicorp/go-multierror v1.1.1 // indirect + github.com/hashicorp/go-plugin v1.5.1 // indirect + github.com/hashicorp/go-retryablehttp v0.7.4 // indirect + github.com/hashicorp/go-rootcerts v1.0.2 // indirect + github.com/hashicorp/go-safetemp v1.0.0 // indirect + github.com/hashicorp/go-secure-stdlib/mlock v0.1.2 // indirect + github.com/hashicorp/go-secure-stdlib/parseutil v0.1.6 // indirect + github.com/hashicorp/go-secure-stdlib/strutil v0.1.2 // indirect + github.com/hashicorp/go-sockaddr v1.0.2 // indirect + github.com/hashicorp/go-uuid v1.0.3 // indirect + github.com/hashicorp/go-version v1.6.0 // indirect + github.com/hashicorp/golang-lru v0.5.4 // indirect + github.com/hashicorp/hcl v1.0.0 // indirect + github.com/hashicorp/hcl/v2 v2.18.0 // 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.19.0 // indirect + github.com/hashicorp/terraform-plugin-log v0.9.0 // indirect + github.com/hashicorp/terraform-plugin-sdk/v2 v2.29.0 // indirect + github.com/hashicorp/terraform-svchost v0.1.1 // indirect + github.com/hashicorp/vault/api v1.8.2 // indirect + github.com/hashicorp/vault/sdk v0.6.1 // indirect + github.com/hashicorp/yamux v0.1.1 // indirect + github.com/hasura/go-graphql-client v0.10.0 // indirect + github.com/huandu/xstrings v1.3.2 // indirect + github.com/iancoleman/strcase v0.3.0 // indirect + github.com/imdario/mergo v0.3.15 // indirect + github.com/inconshreveable/mousetrap v1.1.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/kevinburke/ssh_config v1.2.0 // indirect + github.com/klauspost/compress v1.16.7 // indirect + github.com/lucasb-eyer/go-colorful v1.2.0 // indirect + github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-isatty v0.0.19 // indirect + github.com/mattn/go-localereader v0.0.1 // indirect + github.com/mattn/go-runewidth v0.0.15 // indirect + github.com/mitchellh/cli v1.1.5 // 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.5.0 // indirect + github.com/mitchellh/reflectwalk v1.0.2 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 // indirect + github.com/muesli/cancelreader v0.2.2 // indirect + github.com/muesli/reflow v0.3.0 // indirect + github.com/muesli/termenv v0.15.2 // indirect + github.com/natefinch/atomic v1.0.1 // indirect + github.com/oklog/run v1.1.0 // indirect + github.com/opentracing/basictracer-go v1.1.0 // indirect + github.com/opentracing/opentracing-go v1.2.0 // indirect + github.com/pgavlin/fx v0.1.6 // indirect + github.com/pgavlin/goldmark v1.1.33-0.20200616210433-b5eb04559386 // indirect + github.com/pierrec/lz4 v2.6.1+incompatible // indirect + github.com/pjbgf/sha1cd v0.3.0 // 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.3 // indirect + github.com/pulumi/appdash v0.0.0-20231130102222-75f619a67231 // indirect + github.com/pulumi/esc v0.6.1 // indirect + github.com/pulumi/pulumi-java/pkg v0.9.8 // indirect + github.com/pulumi/pulumi-terraform-bridge/x/muxer v0.0.4 // indirect + github.com/pulumi/pulumi-yaml v1.4.3 // indirect + github.com/pulumi/pulumi/pkg/v3 v3.98.0 // indirect + github.com/pulumi/schema-tools v0.1.2 // indirect + github.com/pulumi/terraform-diff-reader v0.0.2 // indirect + github.com/rivo/uniseg v0.4.4 // indirect + github.com/rogpeppe/go-internal v1.11.0 // 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/segmentio/asm v1.1.3 // indirect + github.com/segmentio/encoding v0.3.5 // indirect + github.com/sergi/go-diff v1.3.1 // indirect + github.com/shopspring/decimal v1.3.1 // indirect + github.com/skeema/knownhosts v1.2.0 // indirect + github.com/spf13/afero v1.9.5 // indirect + github.com/spf13/cast v1.5.0 // indirect + github.com/spf13/cobra v1.7.0 // indirect + github.com/spf13/pflag v1.0.5 // indirect + github.com/stretchr/testify v1.8.4 // 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.10 // indirect + github.com/vmihailenco/msgpack v4.0.4+incompatible // indirect + github.com/vmihailenco/msgpack/v5 v5.3.5 // indirect + github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect + github.com/xanzy/ssh-agent v0.3.3 // 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.14.0 // indirect + go.opencensus.io v0.24.0 // indirect + go.uber.org/atomic v1.9.0 // indirect + gocloud.dev v0.27.0 // indirect + gocloud.dev/secrets/hashivault v0.27.0 // indirect + golang.org/x/crypto v0.17.0 // indirect + golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa // indirect + golang.org/x/mod v0.14.0 // indirect + golang.org/x/net v0.18.0 // indirect + golang.org/x/oauth2 v0.8.0 // indirect + golang.org/x/sync v0.5.0 // indirect + golang.org/x/sys v0.15.0 // indirect + golang.org/x/term v0.15.0 // indirect + golang.org/x/text v0.14.0 // indirect + golang.org/x/time v0.3.0 // indirect + golang.org/x/tools v0.15.0 // indirect + golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect + google.golang.org/api v0.126.0 // indirect + google.golang.org/appengine v1.6.7 // indirect + google.golang.org/genproto v0.0.0-20230726155614-23370e0ffb3e // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20230706204954-ccb25ca9f130 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20230706204954-ccb25ca9f130 // indirect + google.golang.org/grpc v1.57.1 // indirect + google.golang.org/protobuf v1.31.0 // indirect + gopkg.in/square/go-jose.v2 v2.6.0 // indirect + gopkg.in/warnings.v0 v0.1.2 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect + lukechampine.com/frand v1.4.2 // indirect + nhooyr.io/websocket v1.8.7 // indirect +) diff --git a/provider/go.sum b/provider/go.sum new file mode 100644 index 0000000..f57fdbd --- /dev/null +++ b/provider/go.sum @@ -0,0 +1,3620 @@ +bazil.org/fuse v0.0.0-20160811212531-371fbbdaa898/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8= +bazil.org/fuse v0.0.0-20200407214033-5883e5a4b512/go.mod h1:FbcW6z/2VytnFDhZfumh8Ss8zxHE6qpMP5sHTRe0EaM= +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.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.44.3/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.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= +cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= +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.1/go.mod h1:fs4QogzfH5n2pBXBP9vRiU+eCny7lD2vmFZy79Iuw1U= +cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= +cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= +cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= +cloud.google.com/go v0.103.0/go.mod h1:vwLx1nqLrzLX/fpwSMOXmFIqBOyHsvHbnAdbGSJ+mKk= +cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= +cloud.google.com/go v0.105.0/go.mod h1:PrLgOJNe5nfE9UMxKxgXj4mD3voiP+YQ6gdt6KMFOKM= +cloud.google.com/go v0.107.0/go.mod h1:wpc2eNrD7hXUTy8EKS10jkxpZBjASrORK7goS+3YX2I= +cloud.google.com/go v0.110.0/go.mod h1:SJnCLqQ0FCFGSZMUNUf84MV3Aia54kn7pi8st7tMzaY= +cloud.google.com/go v0.110.4 h1:1JYyxKMN9hd5dR2MYTPWkGUgcoxVVhg0LKNKEo0qvmk= +cloud.google.com/go v0.110.4/go.mod h1:+EYjdK8e5RME/VY/qLCAtuyALQ9q67dvuum8i+H5xsI= +cloud.google.com/go/accessapproval v1.4.0/go.mod h1:zybIuC3KpDOvotz59lFe5qxRZx6C75OtwbisN56xYB4= +cloud.google.com/go/accessapproval v1.5.0/go.mod h1:HFy3tuiGvMdcd/u+Cu5b9NkO1pEICJ46IR82PoUdplw= +cloud.google.com/go/accessapproval v1.6.0/go.mod h1:R0EiYnwV5fsRFiKZkPHr6mwyk2wxUJ30nL4j2pcFY2E= +cloud.google.com/go/accesscontextmanager v1.3.0/go.mod h1:TgCBehyr5gNMz7ZaH9xubp+CE8dkrszb4oK9CWyvD4o= +cloud.google.com/go/accesscontextmanager v1.4.0/go.mod h1:/Kjh7BBu/Gh83sv+K60vN9QE5NJcd80sU33vIe2IFPE= +cloud.google.com/go/accesscontextmanager v1.6.0/go.mod h1:8XCvZWfYw3K/ji0iVnp+6pu7huxoQTLmxAbVjbloTtM= +cloud.google.com/go/accesscontextmanager v1.7.0/go.mod h1:CEGLewx8dwa33aDAZQujl7Dx+uYhS0eay198wB/VumQ= +cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= +cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= +cloud.google.com/go/aiplatform v1.27.0/go.mod h1:Bvxqtl40l0WImSb04d0hXFU7gDOiq9jQmorivIiWcKg= +cloud.google.com/go/aiplatform v1.35.0/go.mod h1:7MFT/vCaOyZT/4IIFfxH4ErVg/4ku6lKv3w0+tFTgXQ= +cloud.google.com/go/aiplatform v1.36.1/go.mod h1:WTm12vJRPARNvJ+v6P52RDHCNe4AhvjcIZ/9/RRHy/k= +cloud.google.com/go/aiplatform v1.37.0/go.mod h1:IU2Cv29Lv9oCn/9LkFiiuKfwrRTq+QQMbW+hPCxJGZw= +cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= +cloud.google.com/go/analytics v0.12.0/go.mod h1:gkfj9h6XRf9+TS4bmuhPEShsh3hH8PAZzm/41OOhQd4= +cloud.google.com/go/analytics v0.17.0/go.mod h1:WXFa3WSym4IZ+JiKmavYdJwGG/CvpqiqczmL59bTD9M= +cloud.google.com/go/analytics v0.18.0/go.mod h1:ZkeHGQlcIPkw0R/GW+boWHhCOR43xz9RN/jn7WcqfIE= +cloud.google.com/go/analytics v0.19.0/go.mod h1:k8liqf5/HCnOUkbawNtrWWc+UAzyDlW89doe8TtoDsE= +cloud.google.com/go/apigateway v1.3.0/go.mod h1:89Z8Bhpmxu6AmUxuVRg/ECRGReEdiP3vQtk4Z1J9rJk= +cloud.google.com/go/apigateway v1.4.0/go.mod h1:pHVY9MKGaH9PQ3pJ4YLzoj6U5FUDeDFBllIz7WmzJoc= +cloud.google.com/go/apigateway v1.5.0/go.mod h1:GpnZR3Q4rR7LVu5951qfXPJCHquZt02jf7xQx7kpqN8= +cloud.google.com/go/apigeeconnect v1.3.0/go.mod h1:G/AwXFAKo0gIXkPTVfZDd2qA1TxBXJ3MgMRBQkIi9jc= +cloud.google.com/go/apigeeconnect v1.4.0/go.mod h1:kV4NwOKqjvt2JYR0AoIWo2QGfoRtn/pkS3QlHp0Ni04= +cloud.google.com/go/apigeeconnect v1.5.0/go.mod h1:KFaCqvBRU6idyhSNyn3vlHXc8VMDJdRmwDF6JyFRqZ8= +cloud.google.com/go/apigeeregistry v0.4.0/go.mod h1:EUG4PGcsZvxOXAdyEghIdXwAEi/4MEaoqLMLDMIwKXY= +cloud.google.com/go/apigeeregistry v0.5.0/go.mod h1:YR5+s0BVNZfVOUkMa5pAR2xGd0A473vA5M7j247o1wM= +cloud.google.com/go/apigeeregistry v0.6.0/go.mod h1:BFNzW7yQVLZ3yj0TKcwzb8n25CFBri51GVGOEUcgQsc= +cloud.google.com/go/apikeys v0.4.0/go.mod h1:XATS/yqZbaBK0HOssf+ALHp8jAlNHUgyfprvNcBIszU= +cloud.google.com/go/apikeys v0.5.0/go.mod h1:5aQfwY4D+ewMMWScd3hm2en3hCj+BROlyrt3ytS7KLI= +cloud.google.com/go/apikeys v0.6.0/go.mod h1:kbpXu5upyiAlGkKrJgQl8A0rKNNJ7dQ377pdroRSSi8= +cloud.google.com/go/appengine v1.4.0/go.mod h1:CS2NhuBuDXM9f+qscZ6V86m1MIIqPj3WC/UoEuR1Sno= +cloud.google.com/go/appengine v1.5.0/go.mod h1:TfasSozdkFI0zeoxW3PTBLiNqRmzraodCWatWI9Dmak= +cloud.google.com/go/appengine v1.6.0/go.mod h1:hg6i0J/BD2cKmDJbaFSYHFyZkgBEfQrDg/X0V5fJn84= +cloud.google.com/go/appengine v1.7.0/go.mod h1:eZqpbHFCqRGa2aCdope7eC0SWLV1j0neb/QnMJVWx6A= +cloud.google.com/go/appengine v1.7.1/go.mod h1:IHLToyb/3fKutRysUlFO0BPt5j7RiQ45nrzEJmKTo6E= +cloud.google.com/go/area120 v0.5.0/go.mod h1:DE/n4mp+iqVyvxHN41Vf1CR602GiHQjFPusMFW6bGR4= +cloud.google.com/go/area120 v0.6.0/go.mod h1:39yFJqWVgm0UZqWTOdqkLhjoC7uFfgXRC8g/ZegeAh0= +cloud.google.com/go/area120 v0.7.0/go.mod h1:a3+8EUD1SX5RUcCs3MY5YasiO1z6yLiNLRiFrykbynY= +cloud.google.com/go/area120 v0.7.1/go.mod h1:j84i4E1RboTWjKtZVWXPqvK5VHQFJRF2c1Nm69pWm9k= +cloud.google.com/go/artifactregistry v1.6.0/go.mod h1:IYt0oBPSAGYj/kprzsBjZ/4LnG/zOcHyFHjWPCi6SAQ= +cloud.google.com/go/artifactregistry v1.7.0/go.mod h1:mqTOFOnGZx8EtSqK/ZWcsm/4U8B77rbcLP6ruDU2Ixk= +cloud.google.com/go/artifactregistry v1.8.0/go.mod h1:w3GQXkJX8hiKN0v+at4b0qotwijQbYUqF2GWkZzAhC0= +cloud.google.com/go/artifactregistry v1.9.0/go.mod h1:2K2RqvA2CYvAeARHRkLDhMDJ3OXy26h3XW+3/Jh2uYc= +cloud.google.com/go/artifactregistry v1.11.1/go.mod h1:lLYghw+Itq9SONbCa1YWBoWs1nOucMH0pwXN1rOBZFI= +cloud.google.com/go/artifactregistry v1.11.2/go.mod h1:nLZns771ZGAwVLzTX/7Al6R9ehma4WUEhZGWV6CeQNQ= +cloud.google.com/go/artifactregistry v1.12.0/go.mod h1:o6P3MIvtzTOnmvGagO9v/rOjjA0HmhJ+/6KAXrmYDCI= +cloud.google.com/go/artifactregistry v1.13.0/go.mod h1:uy/LNfoOIivepGhooAUpL1i30Hgee3Cu0l4VTWHUC08= +cloud.google.com/go/asset v1.5.0/go.mod h1:5mfs8UvcM5wHhqtSv8J1CtxxaQq3AdBxxQi2jGW/K4o= +cloud.google.com/go/asset v1.7.0/go.mod h1:YbENsRK4+xTiL+Ofoj5Ckf+O17kJtgp3Y3nn4uzZz5s= +cloud.google.com/go/asset v1.8.0/go.mod h1:mUNGKhiqIdbr8X7KNayoYvyc4HbbFO9URsjbytpUaW0= +cloud.google.com/go/asset v1.9.0/go.mod h1:83MOE6jEJBMqFKadM9NLRcs80Gdw76qGuHn8m3h8oHQ= +cloud.google.com/go/asset v1.10.0/go.mod h1:pLz7uokL80qKhzKr4xXGvBQXnzHn5evJAEAtZiIb0wY= +cloud.google.com/go/asset v1.11.1/go.mod h1:fSwLhbRvC9p9CXQHJ3BgFeQNM4c9x10lqlrdEUYXlJo= +cloud.google.com/go/asset v1.12.0/go.mod h1:h9/sFOa4eDIyKmH6QMpm4eUK3pDojWnUhTgJlk762Hg= +cloud.google.com/go/asset v1.13.0/go.mod h1:WQAMyYek/b7NBpYq/K4KJWcRqzoalEsxz/t/dTk4THw= +cloud.google.com/go/assuredworkloads v1.5.0/go.mod h1:n8HOZ6pff6re5KYfBXcFvSViQjDwxFkAkmUFffJRbbY= +cloud.google.com/go/assuredworkloads v1.6.0/go.mod h1:yo2YOk37Yc89Rsd5QMVECvjaMKymF9OP+QXWlKXUkXw= +cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVoYoxeLBoj4XkKYscNI= +cloud.google.com/go/assuredworkloads v1.8.0/go.mod h1:AsX2cqyNCOvEQC8RMPnoc0yEarXQk6WEKkxYfL6kGIo= +cloud.google.com/go/assuredworkloads v1.9.0/go.mod h1:kFuI1P78bplYtT77Tb1hi0FMxM0vVpRC7VVoJC3ZoT0= +cloud.google.com/go/assuredworkloads v1.10.0/go.mod h1:kwdUQuXcedVdsIaKgKTp9t0UJkE5+PAVNhdQm4ZVq2E= +cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0= +cloud.google.com/go/automl v1.6.0/go.mod h1:ugf8a6Fx+zP0D59WLhqgTDsQI9w07o64uf/Is3Nh5p8= +cloud.google.com/go/automl v1.7.0/go.mod h1:RL9MYCCsJEOmt0Wf3z9uzG0a7adTT1fe+aObgSpkCt8= +cloud.google.com/go/automl v1.8.0/go.mod h1:xWx7G/aPEe/NP+qzYXktoBSDfjO+vnKMGgsApGJJquM= +cloud.google.com/go/automl v1.12.0/go.mod h1:tWDcHDp86aMIuHmyvjuKeeHEGq76lD7ZqfGLN6B0NuU= +cloud.google.com/go/baremetalsolution v0.3.0/go.mod h1:XOrocE+pvK1xFfleEnShBlNAXf+j5blPPxrhjKgnIFc= +cloud.google.com/go/baremetalsolution v0.4.0/go.mod h1:BymplhAadOO/eBa7KewQ0Ppg4A4Wplbn+PsFKRLo0uI= +cloud.google.com/go/baremetalsolution v0.5.0/go.mod h1:dXGxEkmR9BMwxhzBhV0AioD0ULBmuLZI8CdwalUxuss= +cloud.google.com/go/batch v0.3.0/go.mod h1:TR18ZoAekj1GuirsUsR1ZTKN3FC/4UDnScjT8NXImFE= +cloud.google.com/go/batch v0.4.0/go.mod h1:WZkHnP43R/QCGQsZ+0JyG4i79ranE2u8xvjq/9+STPE= +cloud.google.com/go/batch v0.7.0/go.mod h1:vLZN95s6teRUqRQ4s3RLDsH8PvboqBK+rn1oevL159g= +cloud.google.com/go/beyondcorp v0.2.0/go.mod h1:TB7Bd+EEtcw9PCPQhCJtJGjk/7TC6ckmnSFS+xwTfm4= +cloud.google.com/go/beyondcorp v0.3.0/go.mod h1:E5U5lcrcXMsCuoDNyGrpyTm/hn7ne941Jz2vmksAxW8= +cloud.google.com/go/beyondcorp v0.4.0/go.mod h1:3ApA0mbhHx6YImmuubf5pyW8srKnCEPON32/5hj+RmM= +cloud.google.com/go/beyondcorp v0.5.0/go.mod h1:uFqj9X+dSfrheVp7ssLTaRHd2EHqSL4QZmH4e8WXGGU= +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/bigquery v1.42.0/go.mod h1:8dRTJxhtG+vwBKzE5OseQn/hiydoQN3EedCaOdYmxRA= +cloud.google.com/go/bigquery v1.43.0/go.mod h1:ZMQcXHsl+xmU1z36G2jNGZmKp9zNY5BUua5wDgmNCfw= +cloud.google.com/go/bigquery v1.44.0/go.mod h1:0Y33VqXTEsbamHJvJHdFmtqHvMIY28aK1+dFsvaChGc= +cloud.google.com/go/bigquery v1.47.0/go.mod h1:sA9XOgy0A8vQK9+MWhEQTY6Tix87M/ZurWFIxmF9I/E= +cloud.google.com/go/bigquery v1.48.0/go.mod h1:QAwSz+ipNgfL5jxiaK7weyOhzdoAy1zFm0Nf1fysJac= +cloud.google.com/go/bigquery v1.49.0/go.mod h1:Sv8hMmTFFYBlt/ftw2uN6dFdQPzBlREY9yBh7Oy7/4Q= +cloud.google.com/go/bigquery v1.50.0/go.mod h1:YrleYEh2pSEbgTBZYMJ5SuSr0ML3ypjRB1zgf7pvQLU= +cloud.google.com/go/billing v1.4.0/go.mod h1:g9IdKBEFlItS8bTtlrZdVLWSSdSyFUZKXNS02zKMOZY= +cloud.google.com/go/billing v1.5.0/go.mod h1:mztb1tBc3QekhjSgmpf/CV4LzWXLzCArwpLmP2Gm88s= +cloud.google.com/go/billing v1.6.0/go.mod h1:WoXzguj+BeHXPbKfNWkqVtDdzORazmCjraY+vrxcyvI= +cloud.google.com/go/billing v1.7.0/go.mod h1:q457N3Hbj9lYwwRbnlD7vUpyjq6u5U1RAOArInEiD5Y= +cloud.google.com/go/billing v1.12.0/go.mod h1:yKrZio/eu+okO/2McZEbch17O5CB5NpZhhXG6Z766ss= +cloud.google.com/go/billing v1.13.0/go.mod h1:7kB2W9Xf98hP9Sr12KfECgfGclsH3CQR0R08tnRlRbc= +cloud.google.com/go/binaryauthorization v1.1.0/go.mod h1:xwnoWu3Y84jbuHa0zd526MJYmtnVXn0syOjaJgy4+dM= +cloud.google.com/go/binaryauthorization v1.2.0/go.mod h1:86WKkJHtRcv5ViNABtYMhhNWRrD1Vpi//uKEy7aYEfI= +cloud.google.com/go/binaryauthorization v1.3.0/go.mod h1:lRZbKgjDIIQvzYQS1p99A7/U1JqvqeZg0wiI5tp6tg0= +cloud.google.com/go/binaryauthorization v1.4.0/go.mod h1:tsSPQrBd77VLplV70GUhBf/Zm3FsKmgSqgm4UmiDItk= +cloud.google.com/go/binaryauthorization v1.5.0/go.mod h1:OSe4OU1nN/VswXKRBmciKpo9LulY41gch5c68htf3/Q= +cloud.google.com/go/certificatemanager v1.3.0/go.mod h1:n6twGDvcUBFu9uBgt4eYvvf3sQ6My8jADcOVwHmzadg= +cloud.google.com/go/certificatemanager v1.4.0/go.mod h1:vowpercVFyqs8ABSmrdV+GiFf2H/ch3KyudYQEMM590= +cloud.google.com/go/certificatemanager v1.6.0/go.mod h1:3Hh64rCKjRAX8dXgRAyOcY5vQ/fE1sh8o+Mdd6KPgY8= +cloud.google.com/go/channel v1.8.0/go.mod h1:W5SwCXDJsq/rg3tn3oG0LOxpAo6IMxNa09ngphpSlnk= +cloud.google.com/go/channel v1.9.0/go.mod h1:jcu05W0my9Vx4mt3/rEHpfxc9eKi9XwsdDL8yBMbKUk= +cloud.google.com/go/channel v1.11.0/go.mod h1:IdtI0uWGqhEeatSB62VOoJ8FSUhJ9/+iGkJVqp74CGE= +cloud.google.com/go/channel v1.12.0/go.mod h1:VkxCGKASi4Cq7TbXxlaBezonAYpp1GCnKMY6tnMQnLU= +cloud.google.com/go/cloudbuild v1.3.0/go.mod h1:WequR4ULxlqvMsjDEEEFnOG5ZSRSgWOywXYDb1vPE6U= +cloud.google.com/go/cloudbuild v1.4.0/go.mod h1:5Qwa40LHiOXmz3386FrjrYM93rM/hdRr7b53sySrTqA= +cloud.google.com/go/cloudbuild v1.6.0/go.mod h1:UIbc/w9QCbH12xX+ezUsgblrWv+Cv4Tw83GiSMHOn9M= +cloud.google.com/go/cloudbuild v1.7.0/go.mod h1:zb5tWh2XI6lR9zQmsm1VRA+7OCuve5d8S+zJUul8KTg= +cloud.google.com/go/cloudbuild v1.9.0/go.mod h1:qK1d7s4QlO0VwfYn5YuClDGg2hfmLZEb4wQGAbIgL1s= +cloud.google.com/go/clouddms v1.3.0/go.mod h1:oK6XsCDdW4Ib3jCCBugx+gVjevp2TMXFtgxvPSee3OM= +cloud.google.com/go/clouddms v1.4.0/go.mod h1:Eh7sUGCC+aKry14O1NRljhjyrr0NFC0G2cjwX0cByRk= +cloud.google.com/go/clouddms v1.5.0/go.mod h1:QSxQnhikCLUw13iAbffF2CZxAER3xDGNHjsTAkQJcQA= +cloud.google.com/go/cloudtasks v1.5.0/go.mod h1:fD92REy1x5woxkKEkLdvavGnPJGEn8Uic9nWuLzqCpY= +cloud.google.com/go/cloudtasks v1.6.0/go.mod h1:C6Io+sxuke9/KNRkbQpihnW93SWDU3uXt92nu85HkYI= +cloud.google.com/go/cloudtasks v1.7.0/go.mod h1:ImsfdYWwlWNJbdgPIIGJWC+gemEGTBK/SunNQQNCAb4= +cloud.google.com/go/cloudtasks v1.8.0/go.mod h1:gQXUIwCSOI4yPVK7DgTVFiiP0ZW/eQkydWzwVMdHxrI= +cloud.google.com/go/cloudtasks v1.9.0/go.mod h1:w+EyLsVkLWHcOaqNEyvcKAsWp9p29dL6uL9Nst1cI7Y= +cloud.google.com/go/cloudtasks v1.10.0/go.mod h1:NDSoTLkZ3+vExFEWu2UJV1arUyzVDAiZtdWcsUyNwBs= +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/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= +cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz/FMzPu0s= +cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= +cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= +cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= +cloud.google.com/go/compute v1.12.0/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x/6PIIOocU= +cloud.google.com/go/compute v1.12.1/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x/6PIIOocU= +cloud.google.com/go/compute v1.13.0/go.mod h1:5aPTS0cUNMIc1CE546K+Th6weJUNQErARyZtRXDJ8GE= +cloud.google.com/go/compute v1.14.0/go.mod h1:YfLtxrj9sU4Yxv+sXzZkyPjEyPBZfXHUvjxega5vAdo= +cloud.google.com/go/compute v1.15.1/go.mod h1:bjjoF/NtFUrkD/urWfdHaKuOPDR5nWIs63rR+SXhcpA= +cloud.google.com/go/compute v1.18.0/go.mod h1:1X7yHxec2Ga+Ss6jPyjxRxpu2uu7PLgsOVXvgU0yacs= +cloud.google.com/go/compute v1.19.0/go.mod h1:rikpw2y+UMidAe9tISo04EHNOIf42RLYF/q8Bs93scU= +cloud.google.com/go/compute v1.19.1/go.mod h1:6ylj3a05WF8leseCdIf77NK0g1ey+nj5IKd5/kvShxE= +cloud.google.com/go/compute v1.20.1 h1:6aKEtlUiwEpJzM001l0yFkpXmUVXaN8W+fbkb2AZNbg= +cloud.google.com/go/compute v1.20.1/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= +cloud.google.com/go/compute/metadata v0.1.0/go.mod h1:Z1VN+bulIf6bt4P/C37K4DyZYZEXYonfTBHHFPO/4UU= +cloud.google.com/go/compute/metadata v0.2.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= +cloud.google.com/go/compute/metadata v0.2.1/go.mod h1:jgHgmJd2RKBGzXqF5LR2EZMGxBkeanZ9wwa75XHJgOM= +cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= +cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= +cloud.google.com/go/contactcenterinsights v1.3.0/go.mod h1:Eu2oemoePuEFc/xKFPjbTuPSj0fYJcPls9TFlPNnHHY= +cloud.google.com/go/contactcenterinsights v1.4.0/go.mod h1:L2YzkGbPsv+vMQMCADxJoT9YiTTnSEd6fEvCeHTYVck= +cloud.google.com/go/contactcenterinsights v1.6.0/go.mod h1:IIDlT6CLcDoyv79kDv8iWxMSTZhLxSCofVV5W6YFM/w= +cloud.google.com/go/container v1.6.0/go.mod h1:Xazp7GjJSeUYo688S+6J5V+n/t+G5sKBTFkKNudGRxg= +cloud.google.com/go/container v1.7.0/go.mod h1:Dp5AHtmothHGX3DwwIHPgq45Y8KmNsgN3amoYfxVkLo= +cloud.google.com/go/container v1.13.1/go.mod h1:6wgbMPeQRw9rSnKBCAJXnds3Pzj03C4JHamr8asWKy4= +cloud.google.com/go/container v1.14.0/go.mod h1:3AoJMPhHfLDxLvrlVWaK57IXzaPnLaZq63WX59aQBfM= +cloud.google.com/go/container v1.15.0/go.mod h1:ft+9S0WGjAyjDggg5S06DXj+fHJICWg8L7isCQe9pQA= +cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= +cloud.google.com/go/containeranalysis v0.6.0/go.mod h1:HEJoiEIu+lEXM+k7+qLCci0h33lX3ZqoYFdmPcoO7s4= +cloud.google.com/go/containeranalysis v0.7.0/go.mod h1:9aUL+/vZ55P2CXfuZjS4UjQ9AgXoSw8Ts6lemfmxBxI= +cloud.google.com/go/containeranalysis v0.9.0/go.mod h1:orbOANbwk5Ejoom+s+DUCTTJ7IBdBQJDcSylAx/on9s= +cloud.google.com/go/datacatalog v1.3.0/go.mod h1:g9svFY6tuR+j+hrTw3J2dNcmI0dzmSiyOzm8kpLq0a0= +cloud.google.com/go/datacatalog v1.5.0/go.mod h1:M7GPLNQeLfWqeIm3iuiruhPzkt65+Bx8dAKvScX8jvs= +cloud.google.com/go/datacatalog v1.6.0/go.mod h1:+aEyF8JKg+uXcIdAmmaMUmZ3q1b/lKLtXCmXdnc0lbc= +cloud.google.com/go/datacatalog v1.7.0/go.mod h1:9mEl4AuDYWw81UGc41HonIHH7/sn52H0/tc8f8ZbZIE= +cloud.google.com/go/datacatalog v1.8.0/go.mod h1:KYuoVOv9BM8EYz/4eMFxrr4DUKhGIOXxZoKYF5wdISM= +cloud.google.com/go/datacatalog v1.8.1/go.mod h1:RJ58z4rMp3gvETA465Vg+ag8BGgBdnRPEMMSTr5Uv+M= +cloud.google.com/go/datacatalog v1.12.0/go.mod h1:CWae8rFkfp6LzLumKOnmVh4+Zle4A3NXLzVJ1d1mRm0= +cloud.google.com/go/datacatalog v1.13.0/go.mod h1:E4Rj9a5ZtAxcQJlEBTLgMTphfP11/lNaAshpoBgemX8= +cloud.google.com/go/dataflow v0.6.0/go.mod h1:9QwV89cGoxjjSR9/r7eFDqqjtvbKxAK2BaYU6PVk9UM= +cloud.google.com/go/dataflow v0.7.0/go.mod h1:PX526vb4ijFMesO1o202EaUmouZKBpjHsTlCtB4parQ= +cloud.google.com/go/dataflow v0.8.0/go.mod h1:Rcf5YgTKPtQyYz8bLYhFoIV/vP39eL7fWNcSOyFfLJE= +cloud.google.com/go/dataform v0.3.0/go.mod h1:cj8uNliRlHpa6L3yVhDOBrUXH+BPAO1+KFMQQNSThKo= +cloud.google.com/go/dataform v0.4.0/go.mod h1:fwV6Y4Ty2yIFL89huYlEkwUPtS7YZinZbzzj5S9FzCE= +cloud.google.com/go/dataform v0.5.0/go.mod h1:GFUYRe8IBa2hcomWplodVmUx/iTL0FrsauObOM3Ipr0= +cloud.google.com/go/dataform v0.6.0/go.mod h1:QPflImQy33e29VuapFdf19oPbE4aYTJxr31OAPV+ulA= +cloud.google.com/go/dataform v0.7.0/go.mod h1:7NulqnVozfHvWUBpMDfKMUESr+85aJsC/2O0o3jWPDE= +cloud.google.com/go/datafusion v1.4.0/go.mod h1:1Zb6VN+W6ALo85cXnM1IKiPw+yQMKMhB9TsTSRDo/38= +cloud.google.com/go/datafusion v1.5.0/go.mod h1:Kz+l1FGHB0J+4XF2fud96WMmRiq/wj8N9u007vyXZ2w= +cloud.google.com/go/datafusion v1.6.0/go.mod h1:WBsMF8F1RhSXvVM8rCV3AeyWVxcC2xY6vith3iw3S+8= +cloud.google.com/go/datalabeling v0.5.0/go.mod h1:TGcJ0G2NzcsXSE/97yWjIZO0bXj0KbVlINXMG9ud42I= +cloud.google.com/go/datalabeling v0.6.0/go.mod h1:WqdISuk/+WIGeMkpw/1q7bK/tFEZxsrFJOJdY2bXvTQ= +cloud.google.com/go/datalabeling v0.7.0/go.mod h1:WPQb1y08RJbmpM3ww0CSUAGweL0SxByuW2E+FU+wXcM= +cloud.google.com/go/dataplex v1.3.0/go.mod h1:hQuRtDg+fCiFgC8j0zV222HvzFQdRd+SVX8gdmFcZzA= +cloud.google.com/go/dataplex v1.4.0/go.mod h1:X51GfLXEMVJ6UN47ESVqvlsRplbLhcsAt0kZCCKsU0A= +cloud.google.com/go/dataplex v1.5.2/go.mod h1:cVMgQHsmfRoI5KFYq4JtIBEUbYwc3c7tXmIDhRmNNVQ= +cloud.google.com/go/dataplex v1.6.0/go.mod h1:bMsomC/aEJOSpHXdFKFGQ1b0TDPIeL28nJObeO1ppRs= +cloud.google.com/go/dataproc v1.7.0/go.mod h1:CKAlMjII9H90RXaMpSxQ8EU6dQx6iAYNPcYPOkSbi8s= +cloud.google.com/go/dataproc v1.8.0/go.mod h1:5OW+zNAH0pMpw14JVrPONsxMQYMBqJuzORhIBfBn9uI= +cloud.google.com/go/dataproc v1.12.0/go.mod h1:zrF3aX0uV3ikkMz6z4uBbIKyhRITnxvr4i3IjKsKrw4= +cloud.google.com/go/dataqna v0.5.0/go.mod h1:90Hyk596ft3zUQ8NkFfvICSIfHFh1Bc7C4cK3vbhkeo= +cloud.google.com/go/dataqna v0.6.0/go.mod h1:1lqNpM7rqNLVgWBJyk5NF6Uen2PHym0jtVJonplVsDA= +cloud.google.com/go/dataqna v0.7.0/go.mod h1:Lx9OcIIeqCrw1a6KdO3/5KMP1wAmTc0slZWwP12Qq3c= +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/datastore v1.10.0/go.mod h1:PC5UzAmDEkAmkfaknstTYbNpgE49HAgW2J1gcgUfmdM= +cloud.google.com/go/datastore v1.11.0/go.mod h1:TvGxBIHCS50u8jzG+AW/ppf87v1of8nwzFNgEZU1D3c= +cloud.google.com/go/datastream v1.2.0/go.mod h1:i/uTP8/fZwgATHS/XFu0TcNUhuA0twZxxQ3EyCUQMwo= +cloud.google.com/go/datastream v1.3.0/go.mod h1:cqlOX8xlyYF/uxhiKn6Hbv6WjwPPuI9W2M9SAXwaLLQ= +cloud.google.com/go/datastream v1.4.0/go.mod h1:h9dpzScPhDTs5noEMQVWP8Wx8AFBRyS0s8KWPx/9r0g= +cloud.google.com/go/datastream v1.5.0/go.mod h1:6TZMMNPwjUqZHBKPQ1wwXpb0d5VDVPl2/XoS5yi88q4= +cloud.google.com/go/datastream v1.6.0/go.mod h1:6LQSuswqLa7S4rPAOZFVjHIG3wJIjZcZrw8JDEDJuIs= +cloud.google.com/go/datastream v1.7.0/go.mod h1:uxVRMm2elUSPuh65IbZpzJNMbuzkcvu5CjMqVIUHrww= +cloud.google.com/go/deploy v1.4.0/go.mod h1:5Xghikd4VrmMLNaF6FiRFDlHb59VM59YoDQnOUdsH/c= +cloud.google.com/go/deploy v1.5.0/go.mod h1:ffgdD0B89tToyW/U/D2eL0jN2+IEV/3EMuXHA0l4r+s= +cloud.google.com/go/deploy v1.6.0/go.mod h1:f9PTHehG/DjCom3QH0cntOVRm93uGBDt2vKzAPwpXQI= +cloud.google.com/go/deploy v1.8.0/go.mod h1:z3myEJnA/2wnB4sgjqdMfgxCA0EqC3RBTNcVPs93mtQ= +cloud.google.com/go/dialogflow v1.15.0/go.mod h1:HbHDWs33WOGJgn6rfzBW1Kv807BE3O1+xGbn59zZWI4= +cloud.google.com/go/dialogflow v1.16.1/go.mod h1:po6LlzGfK+smoSmTBnbkIZY2w8ffjz/RcGSS+sh1el0= +cloud.google.com/go/dialogflow v1.17.0/go.mod h1:YNP09C/kXA1aZdBgC/VtXX74G/TKn7XVCcVumTflA+8= +cloud.google.com/go/dialogflow v1.18.0/go.mod h1:trO7Zu5YdyEuR+BhSNOqJezyFQ3aUzz0njv7sMx/iek= +cloud.google.com/go/dialogflow v1.19.0/go.mod h1:JVmlG1TwykZDtxtTXujec4tQ+D8SBFMoosgy+6Gn0s0= +cloud.google.com/go/dialogflow v1.29.0/go.mod h1:b+2bzMe+k1s9V+F2jbJwpHPzrnIyHihAdRFMtn2WXuM= +cloud.google.com/go/dialogflow v1.31.0/go.mod h1:cuoUccuL1Z+HADhyIA7dci3N5zUssgpBJmCzI6fNRB4= +cloud.google.com/go/dialogflow v1.32.0/go.mod h1:jG9TRJl8CKrDhMEcvfcfFkkpp8ZhgPz3sBGmAUYJ2qE= +cloud.google.com/go/dlp v1.6.0/go.mod h1:9eyB2xIhpU0sVwUixfBubDoRwP+GjeUoxxeueZmqvmM= +cloud.google.com/go/dlp v1.7.0/go.mod h1:68ak9vCiMBjbasxeVD17hVPxDEck+ExiHavX8kiHG+Q= +cloud.google.com/go/dlp v1.9.0/go.mod h1:qdgmqgTyReTz5/YNSSuueR8pl7hO0o9bQ39ZhtgkWp4= +cloud.google.com/go/documentai v1.7.0/go.mod h1:lJvftZB5NRiFSX4moiye1SMxHx0Bc3x1+p9e/RfXYiU= +cloud.google.com/go/documentai v1.8.0/go.mod h1:xGHNEB7CtsnySCNrCFdCyyMz44RhFEEX2Q7UD0c5IhU= +cloud.google.com/go/documentai v1.9.0/go.mod h1:FS5485S8R00U10GhgBC0aNGrJxBP8ZVpEeJ7PQDZd6k= +cloud.google.com/go/documentai v1.10.0/go.mod h1:vod47hKQIPeCfN2QS/jULIvQTugbmdc0ZvxxfQY1bg4= +cloud.google.com/go/documentai v1.16.0/go.mod h1:o0o0DLTEZ+YnJZ+J4wNfTxmDVyrkzFvttBXXtYRMHkM= +cloud.google.com/go/documentai v1.18.0/go.mod h1:F6CK6iUH8J81FehpskRmhLq/3VlwQvb7TvwOceQ2tbs= +cloud.google.com/go/domains v0.6.0/go.mod h1:T9Rz3GasrpYk6mEGHh4rymIhjlnIuB4ofT1wTxDeT4Y= +cloud.google.com/go/domains v0.7.0/go.mod h1:PtZeqS1xjnXuRPKE/88Iru/LdfoRyEHYA9nFQf4UKpg= +cloud.google.com/go/domains v0.8.0/go.mod h1:M9i3MMDzGFXsydri9/vW+EWz9sWb4I6WyHqdlAk0idE= +cloud.google.com/go/edgecontainer v0.1.0/go.mod h1:WgkZ9tp10bFxqO8BLPqv2LlfmQF1X8lZqwW4r1BTajk= +cloud.google.com/go/edgecontainer v0.2.0/go.mod h1:RTmLijy+lGpQ7BXuTDa4C4ssxyXT34NIuHIgKuP4s5w= +cloud.google.com/go/edgecontainer v0.3.0/go.mod h1:FLDpP4nykgwwIfcLt6zInhprzw0lEi2P1fjO6Ie0qbc= +cloud.google.com/go/edgecontainer v1.0.0/go.mod h1:cttArqZpBB2q58W/upSG++ooo6EsblxDIolxa3jSjbY= +cloud.google.com/go/errorreporting v0.3.0/go.mod h1:xsP2yaAp+OAW4OIm60An2bbLpqIhKXdWR/tawvl7QzU= +cloud.google.com/go/essentialcontacts v1.3.0/go.mod h1:r+OnHa5jfj90qIfZDO/VztSFqbQan7HV75p8sA+mdGI= +cloud.google.com/go/essentialcontacts v1.4.0/go.mod h1:8tRldvHYsmnBCHdFpvU+GL75oWiBKl80BiqlFh9tp+8= +cloud.google.com/go/essentialcontacts v1.5.0/go.mod h1:ay29Z4zODTuwliK7SnX8E86aUF2CTzdNtvv42niCX0M= +cloud.google.com/go/eventarc v1.7.0/go.mod h1:6ctpF3zTnaQCxUjHUdcfgcA1A2T309+omHZth7gDfmc= +cloud.google.com/go/eventarc v1.8.0/go.mod h1:imbzxkyAU4ubfsaKYdQg04WS1NvncblHEup4kvF+4gw= +cloud.google.com/go/eventarc v1.10.0/go.mod h1:u3R35tmZ9HvswGRBnF48IlYgYeBcPUCjkr4BTdem2Kw= +cloud.google.com/go/eventarc v1.11.0/go.mod h1:PyUjsUKPWoRBCHeOxZd/lbOOjahV41icXyUY5kSTvVY= +cloud.google.com/go/filestore v1.3.0/go.mod h1:+qbvHGvXU1HaKX2nD0WEPo92TP/8AQuCVEBXNY9z0+w= +cloud.google.com/go/filestore v1.4.0/go.mod h1:PaG5oDfo9r224f8OYXURtAsY+Fbyq/bLYoINEK8XQAI= +cloud.google.com/go/filestore v1.5.0/go.mod h1:FqBXDWBp4YLHqRnVGveOkHDf8svj9r5+mUDLupOWEDs= +cloud.google.com/go/filestore v1.6.0/go.mod h1:di5unNuss/qfZTw2U9nhFqo8/ZDSc466dre85Kydllg= +cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= +cloud.google.com/go/firestore v1.6.1/go.mod h1:asNXNOzBdyVQmEU+ggO8UPodTkEVFW5Qx+rwHnAz+EY= +cloud.google.com/go/firestore v1.9.0/go.mod h1:HMkjKHNTtRyZNiMzu7YAsLr9K3X2udY2AMwDaMEQiiE= +cloud.google.com/go/functions v1.6.0/go.mod h1:3H1UA3qiIPRWD7PeZKLvHZ9SaQhR26XIJcC0A5GbvAk= +cloud.google.com/go/functions v1.7.0/go.mod h1:+d+QBcWM+RsrgZfV9xo6KfA1GlzJfxcfZcRPEhDDfzg= +cloud.google.com/go/functions v1.8.0/go.mod h1:RTZ4/HsQjIqIYP9a9YPbU+QFoQsAlYgrwOXJWHn1POY= +cloud.google.com/go/functions v1.9.0/go.mod h1:Y+Dz8yGguzO3PpIjhLTbnqV1CWmgQ5UwtlpzoyquQ08= +cloud.google.com/go/functions v1.10.0/go.mod h1:0D3hEOe3DbEvCXtYOZHQZmD+SzYsi1YbI7dGvHfldXw= +cloud.google.com/go/functions v1.12.0/go.mod h1:AXWGrF3e2C/5ehvwYo/GH6O5s09tOPksiKhz+hH8WkA= +cloud.google.com/go/functions v1.13.0/go.mod h1:EU4O007sQm6Ef/PwRsI8N2umygGqPBS/IZQKBQBcJ3c= +cloud.google.com/go/gaming v1.5.0/go.mod h1:ol7rGcxP/qHTRQE/RO4bxkXq+Fix0j6D4LFPzYTIrDM= +cloud.google.com/go/gaming v1.6.0/go.mod h1:YMU1GEvA39Qt3zWGyAVA9bpYz/yAhTvaQ1t2sK4KPUA= +cloud.google.com/go/gaming v1.7.0/go.mod h1:LrB8U7MHdGgFG851iHAfqUdLcKBdQ55hzXy9xBJz0+w= +cloud.google.com/go/gaming v1.8.0/go.mod h1:xAqjS8b7jAVW0KFYeRUxngo9My3f33kFmua++Pi+ggM= +cloud.google.com/go/gaming v1.9.0/go.mod h1:Fc7kEmCObylSWLO334NcO+O9QMDyz+TKC4v1D7X+Bc0= +cloud.google.com/go/gkebackup v0.2.0/go.mod h1:XKvv/4LfG829/B8B7xRkk8zRrOEbKtEam6yNfuQNH60= +cloud.google.com/go/gkebackup v0.3.0/go.mod h1:n/E671i1aOQvUxT541aTkCwExO/bTer2HDlj4TsBRAo= +cloud.google.com/go/gkebackup v0.4.0/go.mod h1:byAyBGUwYGEEww7xsbnUTBHIYcOPy/PgUWUtOeRm9Vg= +cloud.google.com/go/gkeconnect v0.5.0/go.mod h1:c5lsNAg5EwAy7fkqX/+goqFsU1Da/jQFqArp+wGNr/o= +cloud.google.com/go/gkeconnect v0.6.0/go.mod h1:Mln67KyU/sHJEBY8kFZ0xTeyPtzbq9StAVvEULYK16A= +cloud.google.com/go/gkeconnect v0.7.0/go.mod h1:SNfmVqPkaEi3bF/B3CNZOAYPYdg7sU+obZ+QTky2Myw= +cloud.google.com/go/gkehub v0.9.0/go.mod h1:WYHN6WG8w9bXU0hqNxt8rm5uxnk8IH+lPY9J2TV7BK0= +cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y977wO+hBH0= +cloud.google.com/go/gkehub v0.11.0/go.mod h1:JOWHlmN+GHyIbuWQPl47/C2RFhnFKH38jH9Ascu3n0E= +cloud.google.com/go/gkehub v0.12.0/go.mod h1:djiIwwzTTBrF5NaXCGv3mf7klpEMcST17VBTVVDcuaw= +cloud.google.com/go/gkemulticloud v0.3.0/go.mod h1:7orzy7O0S+5kq95e4Hpn7RysVA7dPs8W/GgfUtsPbrA= +cloud.google.com/go/gkemulticloud v0.4.0/go.mod h1:E9gxVBnseLWCk24ch+P9+B2CoDFJZTyIgLKSalC7tuI= +cloud.google.com/go/gkemulticloud v0.5.0/go.mod h1:W0JDkiyi3Tqh0TJr//y19wyb1yf8llHVto2Htf2Ja3Y= +cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= +cloud.google.com/go/gsuiteaddons v1.3.0/go.mod h1:EUNK/J1lZEZO8yPtykKxLXI6JSVN2rg9bN8SXOa0bgM= +cloud.google.com/go/gsuiteaddons v1.4.0/go.mod h1:rZK5I8hht7u7HxFQcFei0+AtfS9uSushomRlg+3ua1o= +cloud.google.com/go/gsuiteaddons v1.5.0/go.mod h1:TFCClYLd64Eaa12sFVmUyG62tk4mdIsI7pAnSXRkcFo= +cloud.google.com/go/iam v0.1.0/go.mod h1:vcUNEa0pEm0qRVpmWepWaFMIAI8/hjB9mO8rNCJtF6c= +cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= +cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= +cloud.google.com/go/iam v0.6.0/go.mod h1:+1AH33ueBne5MzYccyMHtEKqLE4/kJOibtffMHDMFMc= +cloud.google.com/go/iam v0.7.0/go.mod h1:H5Br8wRaDGNc8XP3keLc4unfUUZeyH3Sfl9XpQEYOeg= +cloud.google.com/go/iam v0.8.0/go.mod h1:lga0/y3iH6CX7sYqypWJ33hf7kkfXJag67naqGESjkE= +cloud.google.com/go/iam v0.11.0/go.mod h1:9PiLDanza5D+oWFZiH1uG+RnRCfEGKoyl6yo4cgWZGY= +cloud.google.com/go/iam v0.12.0/go.mod h1:knyHGviacl11zrtZUoDuYpDgLjvr28sLQaG0YB2GYAY= +cloud.google.com/go/iam v0.13.0/go.mod h1:ljOg+rcNfzZ5d6f1nAUJ8ZIxOaZUVoS14bKCtaLZ/D0= +cloud.google.com/go/iam v1.1.1 h1:lW7fzj15aVIXYHREOqjRBV9PsH0Z6u8Y46a1YGvQP4Y= +cloud.google.com/go/iam v1.1.1/go.mod h1:A5avdyVL2tCppe4unb0951eI9jreack+RJ0/d+KUZOU= +cloud.google.com/go/iap v1.4.0/go.mod h1:RGFwRJdihTINIe4wZ2iCP0zF/qu18ZwyKxrhMhygBEc= +cloud.google.com/go/iap v1.5.0/go.mod h1:UH/CGgKd4KyohZL5Pt0jSKE4m3FR51qg6FKQ/z/Ix9A= +cloud.google.com/go/iap v1.6.0/go.mod h1:NSuvI9C/j7UdjGjIde7t7HBz+QTwBcapPE07+sSRcLk= +cloud.google.com/go/iap v1.7.0/go.mod h1:beqQx56T9O1G1yNPph+spKpNibDlYIiIixiqsQXxLIo= +cloud.google.com/go/iap v1.7.1/go.mod h1:WapEwPc7ZxGt2jFGB/C/bm+hP0Y6NXzOYGjpPnmMS74= +cloud.google.com/go/ids v1.1.0/go.mod h1:WIuwCaYVOzHIj2OhN9HAwvW+DBdmUAdcWlFxRl+KubM= +cloud.google.com/go/ids v1.2.0/go.mod h1:5WXvp4n25S0rA/mQWAg1YEEBBq6/s+7ml1RDCW1IrcY= +cloud.google.com/go/ids v1.3.0/go.mod h1:JBdTYwANikFKaDP6LtW5JAi4gubs57SVNQjemdt6xV4= +cloud.google.com/go/iot v1.3.0/go.mod h1:r7RGh2B61+B8oz0AGE+J72AhA0G7tdXItODWsaA2oLs= +cloud.google.com/go/iot v1.4.0/go.mod h1:dIDxPOn0UvNDUMD8Ger7FIaTuvMkj+aGk94RPP0iV+g= +cloud.google.com/go/iot v1.5.0/go.mod h1:mpz5259PDl3XJthEmh9+ap0affn/MqNSP4My77Qql9o= +cloud.google.com/go/iot v1.6.0/go.mod h1:IqdAsmE2cTYYNO1Fvjfzo9po179rAtJeVGUvkLN3rLE= +cloud.google.com/go/kms v1.4.0/go.mod h1:fajBHndQ+6ubNw6Ss2sSd+SWvjL26RNo/dr7uxsnnOA= +cloud.google.com/go/kms v1.5.0/go.mod h1:QJS2YY0eJGBg3mnDfuaCyLauWwBJiHRboYxJ++1xJNg= +cloud.google.com/go/kms v1.6.0/go.mod h1:Jjy850yySiasBUDi6KFUwUv2n1+o7QZFyuUJg6OgjA0= +cloud.google.com/go/kms v1.8.0/go.mod h1:4xFEhYFqvW+4VMELtZyxomGSYtSQKzM178ylFW4jMAg= +cloud.google.com/go/kms v1.9.0/go.mod h1:qb1tPTgfF9RQP8e1wq4cLFErVuTJv7UsSC915J8dh3w= +cloud.google.com/go/kms v1.10.0/go.mod h1:ng3KTUtQQU9bPX3+QGLsflZIHlkbn8amFAMY63m8d24= +cloud.google.com/go/kms v1.10.1/go.mod h1:rIWk/TryCkR59GMC3YtHtXeLzd634lBbKenvyySAyYI= +cloud.google.com/go/kms v1.12.1 h1:xZmZuwy2cwzsocmKDOPu4BL7umg8QXagQx6fKVmf45U= +cloud.google.com/go/kms v1.12.1/go.mod h1:c9J991h5DTl+kg7gi3MYomh12YEENGrf48ee/N/2CDM= +cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= +cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= +cloud.google.com/go/language v1.7.0/go.mod h1:DJ6dYN/W+SQOjF8e1hLQXMF21AkH2w9wiPzPCJa2MIE= +cloud.google.com/go/language v1.8.0/go.mod h1:qYPVHf7SPoNNiCL2Dr0FfEFNil1qi3pQEyygwpgVKB8= +cloud.google.com/go/language v1.9.0/go.mod h1:Ns15WooPM5Ad/5no/0n81yUetis74g3zrbeJBE+ptUY= +cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= +cloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08= +cloud.google.com/go/lifesciences v0.8.0/go.mod h1:lFxiEOMqII6XggGbOnKiyZ7IBwoIqA84ClvoezaA/bo= +cloud.google.com/go/logging v1.6.1/go.mod h1:5ZO0mHHbvm8gEmeEUHrmDlTDSu5imF6MUP9OfilNXBw= +cloud.google.com/go/logging v1.7.0 h1:CJYxlNNNNAMkHp9em/YEXcfJg+rPDg7YfwoRpMU+t5I= +cloud.google.com/go/logging v1.7.0/go.mod h1:3xjP2CjkM3ZkO73aj4ASA5wRPGGCRrPIAeNqVNkzY8M= +cloud.google.com/go/longrunning v0.1.1/go.mod h1:UUFxuDWkv22EuY93jjmDMFT5GPQKeFVJBIF6QlTqdsE= +cloud.google.com/go/longrunning v0.3.0/go.mod h1:qth9Y41RRSUE69rDcOn6DdK3HfQfsUI0YSmW3iIlLJc= +cloud.google.com/go/longrunning v0.4.1/go.mod h1:4iWDqhBZ70CvZ6BfETbvam3T8FMvLK+eFj0E6AaRQTo= +cloud.google.com/go/longrunning v0.5.1 h1:Fr7TXftcqTudoyRJa113hyaqlGdiBQkp0Gq7tErFDWI= +cloud.google.com/go/longrunning v0.5.1/go.mod h1:spvimkwdz6SPWKEt/XBij79E9fiTkHSQl/fRUUQJYJc= +cloud.google.com/go/managedidentities v1.3.0/go.mod h1:UzlW3cBOiPrzucO5qWkNkh0w33KFtBJU281hacNvsdE= +cloud.google.com/go/managedidentities v1.4.0/go.mod h1:NWSBYbEMgqmbZsLIyKvxrYbtqOsxY1ZrGM+9RgDqInM= +cloud.google.com/go/managedidentities v1.5.0/go.mod h1:+dWcZ0JlUmpuxpIDfyP5pP5y0bLdRwOS4Lp7gMni/LA= +cloud.google.com/go/maps v0.1.0/go.mod h1:BQM97WGyfw9FWEmQMpZ5T6cpovXXSd1cGmFma94eubI= +cloud.google.com/go/maps v0.6.0/go.mod h1:o6DAMMfb+aINHz/p/jbcY+mYeXBoZoxTfdSQ8VAJaCw= +cloud.google.com/go/maps v0.7.0/go.mod h1:3GnvVl3cqeSvgMcpRlQidXsPYuDGQ8naBis7MVzpXsY= +cloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4= +cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w= +cloud.google.com/go/mediatranslation v0.7.0/go.mod h1:LCnB/gZr90ONOIQLgSXagp8XUW1ODs2UmUMvcgMfI2I= +cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE= +cloud.google.com/go/memcache v1.5.0/go.mod h1:dk3fCK7dVo0cUU2c36jKb4VqKPS22BTkf81Xq617aWM= +cloud.google.com/go/memcache v1.6.0/go.mod h1:XS5xB0eQZdHtTuTF9Hf8eJkKtR3pVRCcvJwtm68T3rA= +cloud.google.com/go/memcache v1.7.0/go.mod h1:ywMKfjWhNtkQTxrWxCkCFkoPjLHPW6A7WOTVI8xy3LY= +cloud.google.com/go/memcache v1.9.0/go.mod h1:8oEyzXCu+zo9RzlEaEjHl4KkgjlNDaXbCQeQWlzNFJM= +cloud.google.com/go/metastore v1.5.0/go.mod h1:2ZNrDcQwghfdtCwJ33nM0+GrBGlVuh8rakL3vdPY3XY= +cloud.google.com/go/metastore v1.6.0/go.mod h1:6cyQTls8CWXzk45G55x57DVQ9gWg7RiH65+YgPsNh9s= +cloud.google.com/go/metastore v1.7.0/go.mod h1:s45D0B4IlsINu87/AsWiEVYbLaIMeUSoxlKKDqBGFS8= +cloud.google.com/go/metastore v1.8.0/go.mod h1:zHiMc4ZUpBiM7twCIFQmJ9JMEkDSyZS9U12uf7wHqSI= +cloud.google.com/go/metastore v1.10.0/go.mod h1:fPEnH3g4JJAk+gMRnrAnoqyv2lpUCqJPWOodSaf45Eo= +cloud.google.com/go/monitoring v1.1.0/go.mod h1:L81pzz7HKn14QCMaCs6NTQkdBnE87TElyanS95vIcl4= +cloud.google.com/go/monitoring v1.5.0/go.mod h1:/o9y8NYX5j91JjD/JvGLYbi86kL11OjyJXq2XziLJu4= +cloud.google.com/go/monitoring v1.7.0/go.mod h1:HpYse6kkGo//7p6sT0wsIC6IBDET0RhIsnmlA53dvEk= +cloud.google.com/go/monitoring v1.8.0/go.mod h1:E7PtoMJ1kQXWxPjB6mv2fhC5/15jInuulFdYYtlcvT4= +cloud.google.com/go/monitoring v1.12.0/go.mod h1:yx8Jj2fZNEkL/GYZyTLS4ZtZEZN8WtDEiEqG4kLK50w= +cloud.google.com/go/monitoring v1.13.0/go.mod h1:k2yMBAB1H9JT/QETjNkgdCGD9bPF712XiLTVr+cBrpw= +cloud.google.com/go/networkconnectivity v1.4.0/go.mod h1:nOl7YL8odKyAOtzNX73/M5/mGZgqqMeryi6UPZTk/rA= +cloud.google.com/go/networkconnectivity v1.5.0/go.mod h1:3GzqJx7uhtlM3kln0+x5wyFvuVH1pIBJjhCpjzSt75o= +cloud.google.com/go/networkconnectivity v1.6.0/go.mod h1:OJOoEXW+0LAxHh89nXd64uGG+FbQoeH8DtxCHVOMlaM= +cloud.google.com/go/networkconnectivity v1.7.0/go.mod h1:RMuSbkdbPwNMQjB5HBWD5MpTBnNm39iAVpC3TmsExt8= +cloud.google.com/go/networkconnectivity v1.10.0/go.mod h1:UP4O4sWXJG13AqrTdQCD9TnLGEbtNRqjuaaA7bNjF5E= +cloud.google.com/go/networkconnectivity v1.11.0/go.mod h1:iWmDD4QF16VCDLXUqvyspJjIEtBR/4zq5hwnY2X3scM= +cloud.google.com/go/networkmanagement v1.4.0/go.mod h1:Q9mdLLRn60AsOrPc8rs8iNV6OHXaGcDdsIQe1ohekq8= +cloud.google.com/go/networkmanagement v1.5.0/go.mod h1:ZnOeZ/evzUdUsnvRt792H0uYEnHQEMaz+REhhzJRcf4= +cloud.google.com/go/networkmanagement v1.6.0/go.mod h1:5pKPqyXjB/sgtvB5xqOemumoQNB7y95Q7S+4rjSOPYY= +cloud.google.com/go/networksecurity v0.5.0/go.mod h1:xS6fOCoqpVC5zx15Z/MqkfDwH4+m/61A3ODiDV1xmiQ= +cloud.google.com/go/networksecurity v0.6.0/go.mod h1:Q5fjhTr9WMI5mbpRYEbiexTzROf7ZbDzvzCrNl14nyU= +cloud.google.com/go/networksecurity v0.7.0/go.mod h1:mAnzoxx/8TBSyXEeESMy9OOYwo1v+gZ5eMRnsT5bC8k= +cloud.google.com/go/networksecurity v0.8.0/go.mod h1:B78DkqsxFG5zRSVuwYFRZ9Xz8IcQ5iECsNrPn74hKHU= +cloud.google.com/go/notebooks v1.2.0/go.mod h1:9+wtppMfVPUeJ8fIWPOq1UnATHISkGXGqTkxeieQ6UY= +cloud.google.com/go/notebooks v1.3.0/go.mod h1:bFR5lj07DtCPC7YAAJ//vHskFBxA5JzYlH68kXVdk34= +cloud.google.com/go/notebooks v1.4.0/go.mod h1:4QPMngcwmgb6uw7Po99B2xv5ufVoIQ7nOGDyL4P8AgA= +cloud.google.com/go/notebooks v1.5.0/go.mod h1:q8mwhnP9aR8Hpfnrc5iN5IBhrXUy8S2vuYs+kBJ/gu0= +cloud.google.com/go/notebooks v1.7.0/go.mod h1:PVlaDGfJgj1fl1S3dUwhFMXFgfYGhYQt2164xOMONmE= +cloud.google.com/go/notebooks v1.8.0/go.mod h1:Lq6dYKOYOWUCTvw5t2q1gp1lAp0zxAxRycayS0iJcqQ= +cloud.google.com/go/optimization v1.1.0/go.mod h1:5po+wfvX5AQlPznyVEZjGJTMr4+CAkJf2XSTQOOl9l4= +cloud.google.com/go/optimization v1.2.0/go.mod h1:Lr7SOHdRDENsh+WXVmQhQTrzdu9ybg0NecjHidBq6xs= +cloud.google.com/go/optimization v1.3.1/go.mod h1:IvUSefKiwd1a5p0RgHDbWCIbDFgKuEdB+fPPuP0IDLI= +cloud.google.com/go/orchestration v1.3.0/go.mod h1:Sj5tq/JpWiB//X/q3Ngwdl5K7B7Y0KZ7bfv0wL6fqVA= +cloud.google.com/go/orchestration v1.4.0/go.mod h1:6W5NLFWs2TlniBphAViZEVhrXRSMgUGDfW7vrWKvsBk= +cloud.google.com/go/orchestration v1.6.0/go.mod h1:M62Bevp7pkxStDfFfTuCOaXgaaqRAga1yKyoMtEoWPQ= +cloud.google.com/go/orgpolicy v1.4.0/go.mod h1:xrSLIV4RePWmP9P3tBl8S93lTmlAxjm06NSm2UTmKvE= +cloud.google.com/go/orgpolicy v1.5.0/go.mod h1:hZEc5q3wzwXJaKrsx5+Ewg0u1LxJ51nNFlext7Tanwc= +cloud.google.com/go/orgpolicy v1.10.0/go.mod h1:w1fo8b7rRqlXlIJbVhOMPrwVljyuW5mqssvBtU18ONc= +cloud.google.com/go/osconfig v1.7.0/go.mod h1:oVHeCeZELfJP7XLxcBGTMBvRO+1nQ5tFG9VQTmYS2Fs= +cloud.google.com/go/osconfig v1.8.0/go.mod h1:EQqZLu5w5XA7eKizepumcvWx+m8mJUhEwiPqWiZeEdg= +cloud.google.com/go/osconfig v1.9.0/go.mod h1:Yx+IeIZJ3bdWmzbQU4fxNl8xsZ4amB+dygAwFPlvnNo= +cloud.google.com/go/osconfig v1.10.0/go.mod h1:uMhCzqC5I8zfD9zDEAfvgVhDS8oIjySWh+l4WK6GnWw= +cloud.google.com/go/osconfig v1.11.0/go.mod h1:aDICxrur2ogRd9zY5ytBLV89KEgT2MKB2L/n6x1ooPw= +cloud.google.com/go/oslogin v1.4.0/go.mod h1:YdgMXWRaElXz/lDk1Na6Fh5orF7gvmJ0FGLIs9LId4E= +cloud.google.com/go/oslogin v1.5.0/go.mod h1:D260Qj11W2qx/HVF29zBg+0fd6YCSjSqLUkY/qEenQU= +cloud.google.com/go/oslogin v1.6.0/go.mod h1:zOJ1O3+dTU8WPlGEkFSh7qeHPPSoxrcMbbK1Nm2iX70= +cloud.google.com/go/oslogin v1.7.0/go.mod h1:e04SN0xO1UNJ1M5GP0vzVBFicIe4O53FOfcixIqTyXo= +cloud.google.com/go/oslogin v1.9.0/go.mod h1:HNavntnH8nzrn8JCTT5fj18FuJLFJc4NaZJtBnQtKFs= +cloud.google.com/go/phishingprotection v0.5.0/go.mod h1:Y3HZknsK9bc9dMi+oE8Bim0lczMU6hrX0UpADuMefr0= +cloud.google.com/go/phishingprotection v0.6.0/go.mod h1:9Y3LBLgy0kDTcYET8ZH3bq/7qni15yVUoAxiFxnlSUA= +cloud.google.com/go/phishingprotection v0.7.0/go.mod h1:8qJI4QKHoda/sb/7/YmMQ2omRLSLYSu9bU0EKCNI+Lk= +cloud.google.com/go/policytroubleshooter v1.3.0/go.mod h1:qy0+VwANja+kKrjlQuOzmlvscn4RNsAc0e15GGqfMxg= +cloud.google.com/go/policytroubleshooter v1.4.0/go.mod h1:DZT4BcRw3QoO8ota9xw/LKtPa8lKeCByYeKTIf/vxdE= +cloud.google.com/go/policytroubleshooter v1.5.0/go.mod h1:Rz1WfV+1oIpPdN2VvvuboLVRsB1Hclg3CKQ53j9l8vw= +cloud.google.com/go/policytroubleshooter v1.6.0/go.mod h1:zYqaPTsmfvpjm5ULxAyD/lINQxJ0DDsnWOP/GZ7xzBc= +cloud.google.com/go/privatecatalog v0.5.0/go.mod h1:XgosMUvvPyxDjAVNDYxJ7wBW8//hLDDYmnsNcMGq1K0= +cloud.google.com/go/privatecatalog v0.6.0/go.mod h1:i/fbkZR0hLN29eEWiiwue8Pb+GforiEIBnV9yrRUOKI= +cloud.google.com/go/privatecatalog v0.7.0/go.mod h1:2s5ssIFO69F5csTXcwBP7NPFTZvps26xGzvQ2PQaBYg= +cloud.google.com/go/privatecatalog v0.8.0/go.mod h1:nQ6pfaegeDAq/Q5lrfCQzQLhubPiZhSaNhIgfJlnIXs= +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.24.0/go.mod h1:rWv09Te1SsRpRGPiWOMDKraMQTJyJps4MkUCoMGUgqw= +cloud.google.com/go/pubsub v1.26.0/go.mod h1:QgBH3U/jdJy/ftjPhTkyXNj543Tin1pRYcdcPRnFIRI= +cloud.google.com/go/pubsub v1.27.1/go.mod h1:hQN39ymbV9geqBnfQq6Xf63yNhUAhv9CZhzp5O6qsW0= +cloud.google.com/go/pubsub v1.28.0/go.mod h1:vuXFpwaVoIPQMGXqRyUQigu/AX1S3IWugR9xznmcXX8= +cloud.google.com/go/pubsub v1.30.0/go.mod h1:qWi1OPS0B+b5L+Sg6Gmc9zD1Y+HaM0MdUr7LsupY1P4= +cloud.google.com/go/pubsublite v1.5.0/go.mod h1:xapqNQ1CuLfGi23Yda/9l4bBCKz/wC3KIJ5gKcxveZg= +cloud.google.com/go/pubsublite v1.6.0/go.mod h1:1eFCS0U11xlOuMFV/0iBqw3zP12kddMeCbj/F3FSj9k= +cloud.google.com/go/pubsublite v1.7.0/go.mod h1:8hVMwRXfDfvGm3fahVbtDbiLePT3gpoiJYJY+vxWxVM= +cloud.google.com/go/recaptchaenterprise v1.3.1/go.mod h1:OdD+q+y4XGeAlxRaMn1Y7/GveP6zmq76byL6tjPE7d4= +cloud.google.com/go/recaptchaenterprise/v2 v2.1.0/go.mod h1:w9yVqajwroDNTfGuhmOjPDN//rZGySaf6PtFVcSCa7o= +cloud.google.com/go/recaptchaenterprise/v2 v2.2.0/go.mod h1:/Zu5jisWGeERrd5HnlS3EUGb/D335f9k51B/FVil0jk= +cloud.google.com/go/recaptchaenterprise/v2 v2.3.0/go.mod h1:O9LwGCjrhGHBQET5CA7dd5NwwNQUErSgEDit1DLNTdo= +cloud.google.com/go/recaptchaenterprise/v2 v2.4.0/go.mod h1:Am3LHfOuBstrLrNCBrlI5sbwx9LBg3te2N6hGvHn2mE= +cloud.google.com/go/recaptchaenterprise/v2 v2.5.0/go.mod h1:O8LzcHXN3rz0j+LBC91jrwI3R+1ZSZEWrfL7XHgNo9U= +cloud.google.com/go/recaptchaenterprise/v2 v2.6.0/go.mod h1:RPauz9jeLtB3JVzg6nCbe12qNoaa8pXc4d/YukAmcnA= +cloud.google.com/go/recaptchaenterprise/v2 v2.7.0/go.mod h1:19wVj/fs5RtYtynAPJdDTb69oW0vNHYDBTbB4NvMD9c= +cloud.google.com/go/recommendationengine v0.5.0/go.mod h1:E5756pJcVFeVgaQv3WNpImkFP8a+RptV6dDLGPILjvg= +cloud.google.com/go/recommendationengine v0.6.0/go.mod h1:08mq2umu9oIqc7tDy8sx+MNJdLG0fUi3vaSVbztHgJ4= +cloud.google.com/go/recommendationengine v0.7.0/go.mod h1:1reUcE3GIu6MeBz/h5xZJqNLuuVjNg1lmWMPyjatzac= +cloud.google.com/go/recommender v1.5.0/go.mod h1:jdoeiBIVrJe9gQjwd759ecLJbxCDED4A6p+mqoqDvTg= +cloud.google.com/go/recommender v1.6.0/go.mod h1:+yETpm25mcoiECKh9DEScGzIRyDKpZ0cEhWGo+8bo+c= +cloud.google.com/go/recommender v1.7.0/go.mod h1:XLHs/W+T8olwlGOgfQenXBTbIseGclClff6lhFVe9Bs= +cloud.google.com/go/recommender v1.8.0/go.mod h1:PkjXrTT05BFKwxaUxQmtIlrtj0kph108r02ZZQ5FE70= +cloud.google.com/go/recommender v1.9.0/go.mod h1:PnSsnZY7q+VL1uax2JWkt/UegHssxjUVVCrX52CuEmQ= +cloud.google.com/go/redis v1.7.0/go.mod h1:V3x5Jq1jzUcg+UNsRvdmsfuFnit1cfe3Z/PGyq/lm4Y= +cloud.google.com/go/redis v1.8.0/go.mod h1:Fm2szCDavWzBk2cDKxrkmWBqoCiL1+Ctwq7EyqBCA/A= +cloud.google.com/go/redis v1.9.0/go.mod h1:HMYQuajvb2D0LvMgZmLDZW8V5aOC/WxstZHiy4g8OiA= +cloud.google.com/go/redis v1.10.0/go.mod h1:ThJf3mMBQtW18JzGgh41/Wld6vnDDc/F/F35UolRZPM= +cloud.google.com/go/redis v1.11.0/go.mod h1:/X6eicana+BWcUda5PpwZC48o37SiFVTFSs0fWAJ7uQ= +cloud.google.com/go/resourcemanager v1.3.0/go.mod h1:bAtrTjZQFJkiWTPDb1WBjzvc6/kifjj4QBYuKCCoqKA= +cloud.google.com/go/resourcemanager v1.4.0/go.mod h1:MwxuzkumyTX7/a3n37gmsT3py7LIXwrShilPh3P1tR0= +cloud.google.com/go/resourcemanager v1.5.0/go.mod h1:eQoXNAiAvCf5PXxWxXjhKQoTMaUSNrEfg+6qdf/wots= +cloud.google.com/go/resourcemanager v1.6.0/go.mod h1:YcpXGRs8fDzcUl1Xw8uOVmI8JEadvhRIkoXXUNVYcVo= +cloud.google.com/go/resourcemanager v1.7.0/go.mod h1:HlD3m6+bwhzj9XCouqmeiGuni95NTrExfhoSrkC/3EI= +cloud.google.com/go/resourcesettings v1.3.0/go.mod h1:lzew8VfESA5DQ8gdlHwMrqZs1S9V87v3oCnKCWoOuQU= +cloud.google.com/go/resourcesettings v1.4.0/go.mod h1:ldiH9IJpcrlC3VSuCGvjR5of/ezRrOxFtpJoJo5SmXg= +cloud.google.com/go/resourcesettings v1.5.0/go.mod h1:+xJF7QSG6undsQDfsCJyqWXyBwUoJLhetkRMDRnIoXA= +cloud.google.com/go/retail v1.8.0/go.mod h1:QblKS8waDmNUhghY2TI9O3JLlFk8jybHeV4BF19FrE4= +cloud.google.com/go/retail v1.9.0/go.mod h1:g6jb6mKuCS1QKnH/dpu7isX253absFl6iE92nHwlBUY= +cloud.google.com/go/retail v1.10.0/go.mod h1:2gDk9HsL4HMS4oZwz6daui2/jmKvqShXKQuB2RZ+cCc= +cloud.google.com/go/retail v1.11.0/go.mod h1:MBLk1NaWPmh6iVFSz9MeKG/Psyd7TAgm6y/9L2B4x9Y= +cloud.google.com/go/retail v1.12.0/go.mod h1:UMkelN/0Z8XvKymXFbD4EhFJlYKRx1FGhQkVPU5kF14= +cloud.google.com/go/run v0.2.0/go.mod h1:CNtKsTA1sDcnqqIFR3Pb5Tq0usWxJJvsWOCPldRU3Do= +cloud.google.com/go/run v0.3.0/go.mod h1:TuyY1+taHxTjrD0ZFk2iAR+xyOXEA0ztb7U3UNA0zBo= +cloud.google.com/go/run v0.8.0/go.mod h1:VniEnuBwqjigv0A7ONfQUaEItaiCRVujlMqerPPiktM= +cloud.google.com/go/run v0.9.0/go.mod h1:Wwu+/vvg8Y+JUApMwEDfVfhetv30hCG4ZwDR/IXl2Qg= +cloud.google.com/go/scheduler v1.4.0/go.mod h1:drcJBmxF3aqZJRhmkHQ9b3uSSpQoltBPGPxGAWROx6s= +cloud.google.com/go/scheduler v1.5.0/go.mod h1:ri073ym49NW3AfT6DZi21vLZrG07GXr5p3H1KxN5QlI= +cloud.google.com/go/scheduler v1.6.0/go.mod h1:SgeKVM7MIwPn3BqtcBntpLyrIJftQISRrYB5ZtT+KOk= +cloud.google.com/go/scheduler v1.7.0/go.mod h1:jyCiBqWW956uBjjPMMuX09n3x37mtyPJegEWKxRsn44= +cloud.google.com/go/scheduler v1.8.0/go.mod h1:TCET+Y5Gp1YgHT8py4nlg2Sew8nUHMqcpousDgXJVQc= +cloud.google.com/go/scheduler v1.9.0/go.mod h1:yexg5t+KSmqu+njTIh3b7oYPheFtBWGcbVUYF1GGMIc= +cloud.google.com/go/secretmanager v1.5.0/go.mod h1:5C9kM+RwSpkURNovKySkNvGQLUaOgyoR5W0RUx2SyHQ= +cloud.google.com/go/secretmanager v1.6.0/go.mod h1:awVa/OXF6IiyaU1wQ34inzQNc4ISIDIrId8qE5QGgKA= +cloud.google.com/go/secretmanager v1.8.0/go.mod h1:hnVgi/bN5MYHd3Gt0SPuTPPp5ENina1/LxM+2W9U9J4= +cloud.google.com/go/secretmanager v1.9.0/go.mod h1:b71qH2l1yHmWQHt9LC80akm86mX8AL6X1MA01dW8ht4= +cloud.google.com/go/secretmanager v1.10.0/go.mod h1:MfnrdvKMPNra9aZtQFvBcvRU54hbPD8/HayQdlUgJpU= +cloud.google.com/go/security v1.5.0/go.mod h1:lgxGdyOKKjHL4YG3/YwIL2zLqMFCKs0UbQwgyZmfJl4= +cloud.google.com/go/security v1.7.0/go.mod h1:mZklORHl6Bg7CNnnjLH//0UlAlaXqiG7Lb9PsPXLfD0= +cloud.google.com/go/security v1.8.0/go.mod h1:hAQOwgmaHhztFhiQ41CjDODdWP0+AE1B3sX4OFlq+GU= +cloud.google.com/go/security v1.9.0/go.mod h1:6Ta1bO8LXI89nZnmnsZGp9lVoVWXqsVbIq/t9dzI+2Q= +cloud.google.com/go/security v1.10.0/go.mod h1:QtOMZByJVlibUT2h9afNDWRZ1G96gVywH8T5GUSb9IA= +cloud.google.com/go/security v1.12.0/go.mod h1:rV6EhrpbNHrrxqlvW0BWAIawFWq3X90SduMJdFwtLB8= +cloud.google.com/go/security v1.13.0/go.mod h1:Q1Nvxl1PAgmeW0y3HTt54JYIvUdtcpYKVfIB8AOMZ+0= +cloud.google.com/go/securitycenter v1.13.0/go.mod h1:cv5qNAqjY84FCN6Y9z28WlkKXyWsgLO832YiWwkCWcU= +cloud.google.com/go/securitycenter v1.14.0/go.mod h1:gZLAhtyKv85n52XYWt6RmeBdydyxfPeTrpToDPw4Auc= +cloud.google.com/go/securitycenter v1.15.0/go.mod h1:PeKJ0t8MoFmmXLXWm41JidyzI3PJjd8sXWaVqg43WWk= +cloud.google.com/go/securitycenter v1.16.0/go.mod h1:Q9GMaLQFUD+5ZTabrbujNWLtSLZIZF7SAR0wWECrjdk= +cloud.google.com/go/securitycenter v1.18.1/go.mod h1:0/25gAzCM/9OL9vVx4ChPeM/+DlfGQJDwBy/UC8AKK0= +cloud.google.com/go/securitycenter v1.19.0/go.mod h1:LVLmSg8ZkkyaNy4u7HCIshAngSQ8EcIRREP3xBnyfag= +cloud.google.com/go/servicecontrol v1.4.0/go.mod h1:o0hUSJ1TXJAmi/7fLJAedOovnujSEvjKCAFNXPQ1RaU= +cloud.google.com/go/servicecontrol v1.5.0/go.mod h1:qM0CnXHhyqKVuiZnGKrIurvVImCs8gmqWsDoqe9sU1s= +cloud.google.com/go/servicecontrol v1.10.0/go.mod h1:pQvyvSRh7YzUF2efw7H87V92mxU8FnFDawMClGCNuAA= +cloud.google.com/go/servicecontrol v1.11.0/go.mod h1:kFmTzYzTUIuZs0ycVqRHNaNhgR+UMUpw9n02l/pY+mc= +cloud.google.com/go/servicecontrol v1.11.1/go.mod h1:aSnNNlwEFBY+PWGQ2DoM0JJ/QUXqV5/ZD9DOLB7SnUk= +cloud.google.com/go/servicedirectory v1.4.0/go.mod h1:gH1MUaZCgtP7qQiI+F+A+OpeKF/HQWgtAddhTbhL2bs= +cloud.google.com/go/servicedirectory v1.5.0/go.mod h1:QMKFL0NUySbpZJ1UZs3oFAmdvVxhhxB6eJ/Vlp73dfg= +cloud.google.com/go/servicedirectory v1.6.0/go.mod h1:pUlbnWsLH9c13yGkxCmfumWEPjsRs1RlmJ4pqiNjVL4= +cloud.google.com/go/servicedirectory v1.7.0/go.mod h1:5p/U5oyvgYGYejufvxhgwjL8UVXjkuw7q5XcG10wx1U= +cloud.google.com/go/servicedirectory v1.8.0/go.mod h1:srXodfhY1GFIPvltunswqXpVxFPpZjf8nkKQT7XcXaY= +cloud.google.com/go/servicedirectory v1.9.0/go.mod h1:29je5JjiygNYlmsGz8k6o+OZ8vd4f//bQLtvzkPPT/s= +cloud.google.com/go/servicemanagement v1.4.0/go.mod h1:d8t8MDbezI7Z2R1O/wu8oTggo3BI2GKYbdG4y/SJTco= +cloud.google.com/go/servicemanagement v1.5.0/go.mod h1:XGaCRe57kfqu4+lRxaFEAuqmjzF0r+gWHjWqKqBvKFo= +cloud.google.com/go/servicemanagement v1.6.0/go.mod h1:aWns7EeeCOtGEX4OvZUWCCJONRZeFKiptqKf1D0l/Jc= +cloud.google.com/go/servicemanagement v1.8.0/go.mod h1:MSS2TDlIEQD/fzsSGfCdJItQveu9NXnUniTrq/L8LK4= +cloud.google.com/go/serviceusage v1.3.0/go.mod h1:Hya1cozXM4SeSKTAgGXgj97GlqUvF5JaoXacR1JTP/E= +cloud.google.com/go/serviceusage v1.4.0/go.mod h1:SB4yxXSaYVuUBYUml6qklyONXNLt83U0Rb+CXyhjEeU= +cloud.google.com/go/serviceusage v1.5.0/go.mod h1:w8U1JvqUqwJNPEOTQjrMHkw3IaIFLoLsPLvsE3xueec= +cloud.google.com/go/serviceusage v1.6.0/go.mod h1:R5wwQcbOWsyuOfbP9tGdAnCAc6B9DRwPG1xtWMDeuPA= +cloud.google.com/go/shell v1.3.0/go.mod h1:VZ9HmRjZBsjLGXusm7K5Q5lzzByZmJHf1d0IWHEN5X4= +cloud.google.com/go/shell v1.4.0/go.mod h1:HDxPzZf3GkDdhExzD/gs8Grqk+dmYcEjGShZgYa9URw= +cloud.google.com/go/shell v1.6.0/go.mod h1:oHO8QACS90luWgxP3N9iZVuEiSF84zNyLytb+qE2f9A= +cloud.google.com/go/spanner v1.41.0/go.mod h1:MLYDBJR/dY4Wt7ZaMIQ7rXOTLjYrmxLE/5ve9vFfWos= +cloud.google.com/go/spanner v1.44.0/go.mod h1:G8XIgYdOK+Fbcpbs7p2fiprDw4CaZX63whnSMLVBxjk= +cloud.google.com/go/spanner v1.45.0/go.mod h1:FIws5LowYz8YAE1J8fOS7DJup8ff7xJeetWEo5REA2M= +cloud.google.com/go/speech v1.6.0/go.mod h1:79tcr4FHCimOp56lwC01xnt/WPJZc4v3gzyT7FoBkCM= +cloud.google.com/go/speech v1.7.0/go.mod h1:KptqL+BAQIhMsj1kOP2la5DSEEerPDuOP/2mmkhHhZQ= +cloud.google.com/go/speech v1.8.0/go.mod h1:9bYIl1/tjsAnMgKGHKmBZzXKEkGgtU+MpdDPTE9f7y0= +cloud.google.com/go/speech v1.9.0/go.mod h1:xQ0jTcmnRFFM2RfX/U+rk6FQNUF6DQlydUSyoooSpco= +cloud.google.com/go/speech v1.14.1/go.mod h1:gEosVRPJ9waG7zqqnsHpYTOoAS4KouMRLDFMekpJ0J0= +cloud.google.com/go/speech v1.15.0/go.mod h1:y6oH7GhqCaZANH7+Oe0BhgIogsNInLlz542tg3VqeYI= +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.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= +cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= +cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc= +cloud.google.com/go/storage v1.24.0/go.mod h1:3xrJEFMXBsQLgxwThyjuD3aYlroL0TMRec1ypGUQ0KE= +cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s= +cloud.google.com/go/storage v1.28.1/go.mod h1:Qnisd4CqDdo6BGs2AD5LLnEsmSQ80wQ5ogcBBKhU86Y= +cloud.google.com/go/storage v1.29.0/go.mod h1:4puEjyTKnku6gfKoTfNOU/W+a9JyuVNxjpS5GBrB8h4= +cloud.google.com/go/storage v1.30.1 h1:uOdMxAs8HExqBlnLtnQyP0YkvbiDpdGShGKtx6U/oNM= +cloud.google.com/go/storage v1.30.1/go.mod h1:NfxhC0UJE1aXSx7CIIbCf7y9HKT7BiccwkR7+P7gN8E= +cloud.google.com/go/storagetransfer v1.5.0/go.mod h1:dxNzUopWy7RQevYFHewchb29POFv3/AaBgnhqzqiK0w= +cloud.google.com/go/storagetransfer v1.6.0/go.mod h1:y77xm4CQV/ZhFZH75PLEXY0ROiS7Gh6pSKrM8dJyg6I= +cloud.google.com/go/storagetransfer v1.7.0/go.mod h1:8Giuj1QNb1kfLAiWM1bN6dHzfdlDAVC9rv9abHot2W4= +cloud.google.com/go/storagetransfer v1.8.0/go.mod h1:JpegsHHU1eXg7lMHkvf+KE5XDJ7EQu0GwNJbbVGanEw= +cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw= +cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g= +cloud.google.com/go/talent v1.3.0/go.mod h1:CmcxwJ/PKfRgd1pBjQgU6W3YBwiewmUzQYH5HHmSCmM= +cloud.google.com/go/talent v1.4.0/go.mod h1:ezFtAgVuRf8jRsvyE6EwmbTK5LKciD4KVnHuDEFmOOA= +cloud.google.com/go/talent v1.5.0/go.mod h1:G+ODMj9bsasAEJkQSzO2uHQWXHHXUomArjWQQYkqK6c= +cloud.google.com/go/texttospeech v1.4.0/go.mod h1:FX8HQHA6sEpJ7rCMSfXuzBcysDAuWusNNNvN9FELDd8= +cloud.google.com/go/texttospeech v1.5.0/go.mod h1:oKPLhR4n4ZdQqWKURdwxMy0uiTS1xU161C8W57Wkea4= +cloud.google.com/go/texttospeech v1.6.0/go.mod h1:YmwmFT8pj1aBblQOI3TfKmwibnsfvhIBzPXcW4EBovc= +cloud.google.com/go/tpu v1.3.0/go.mod h1:aJIManG0o20tfDQlRIej44FcwGGl/cD0oiRyMKG19IQ= +cloud.google.com/go/tpu v1.4.0/go.mod h1:mjZaX8p0VBgllCzF6wcU2ovUXN9TONFLd7iz227X2Xg= +cloud.google.com/go/tpu v1.5.0/go.mod h1:8zVo1rYDFuW2l4yZVY0R0fb/v44xLh3llq7RuV61fPM= +cloud.google.com/go/trace v1.0.0/go.mod h1:4iErSByzxkyHWzzlAj63/Gmjz0NH1ASqhJguHpGcr6A= +cloud.google.com/go/trace v1.2.0/go.mod h1:Wc8y/uYyOhPy12KEnXG9XGrvfMz5F5SrYecQlbW1rwM= +cloud.google.com/go/trace v1.3.0/go.mod h1:FFUE83d9Ca57C+K8rDl/Ih8LwOzWIV1krKgxg6N0G28= +cloud.google.com/go/trace v1.4.0/go.mod h1:UG0v8UBqzusp+z63o7FK74SdFE+AXpCLdFb1rshXG+Y= +cloud.google.com/go/trace v1.8.0/go.mod h1:zH7vcsbAhklH8hWFig58HvxcxyQbaIqMarMg9hn5ECA= +cloud.google.com/go/trace v1.9.0/go.mod h1:lOQqpE5IaWY0Ixg7/r2SjixMuc6lfTFeO4QGM4dQWOk= +cloud.google.com/go/translate v1.3.0/go.mod h1:gzMUwRjvOqj5i69y/LYLd8RrNQk+hOmIXTi9+nb3Djs= +cloud.google.com/go/translate v1.4.0/go.mod h1:06Dn/ppvLD6WvA5Rhdp029IX2Mi3Mn7fpMRLPvXT5Wg= +cloud.google.com/go/translate v1.5.0/go.mod h1:29YDSYveqqpA1CQFD7NQuP49xymq17RXNaUDdc0mNu0= +cloud.google.com/go/translate v1.6.0/go.mod h1:lMGRudH1pu7I3n3PETiOB2507gf3HnfLV8qlkHZEyos= +cloud.google.com/go/translate v1.7.0/go.mod h1:lMGRudH1pu7I3n3PETiOB2507gf3HnfLV8qlkHZEyos= +cloud.google.com/go/video v1.8.0/go.mod h1:sTzKFc0bUSByE8Yoh8X0mn8bMymItVGPfTuUBUyRgxk= +cloud.google.com/go/video v1.9.0/go.mod h1:0RhNKFRF5v92f8dQt0yhaHrEuH95m068JYOvLZYnJSw= +cloud.google.com/go/video v1.12.0/go.mod h1:MLQew95eTuaNDEGriQdcYn0dTwf9oWiA4uYebxM5kdg= +cloud.google.com/go/video v1.13.0/go.mod h1:ulzkYlYgCp15N2AokzKjy7MQ9ejuynOJdf1tR5lGthk= +cloud.google.com/go/video v1.14.0/go.mod h1:SkgaXwT+lIIAKqWAJfktHT/RbgjSuY6DobxEp0C5yTQ= +cloud.google.com/go/video v1.15.0/go.mod h1:SkgaXwT+lIIAKqWAJfktHT/RbgjSuY6DobxEp0C5yTQ= +cloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU= +cloud.google.com/go/videointelligence v1.7.0/go.mod h1:k8pI/1wAhjznARtVT9U1llUaFNPh7muw8QyOUpavru4= +cloud.google.com/go/videointelligence v1.8.0/go.mod h1:dIcCn4gVDdS7yte/w+koiXn5dWVplOZkE+xwG9FgK+M= +cloud.google.com/go/videointelligence v1.9.0/go.mod h1:29lVRMPDYHikk3v8EdPSaL8Ku+eMzDljjuvRs105XoU= +cloud.google.com/go/videointelligence v1.10.0/go.mod h1:LHZngX1liVtUhZvi2uNS0VQuOzNi2TkY1OakiuoUOjU= +cloud.google.com/go/vision v1.2.0/go.mod h1:SmNwgObm5DpFBme2xpyOyasvBc1aPdjvMk2bBk0tKD0= +cloud.google.com/go/vision/v2 v2.2.0/go.mod h1:uCdV4PpN1S0jyCyq8sIM42v2Y6zOLkZs+4R9LrGYwFo= +cloud.google.com/go/vision/v2 v2.3.0/go.mod h1:UO61abBx9QRMFkNBbf1D8B1LXdS2cGiiCRx0vSpZoUo= +cloud.google.com/go/vision/v2 v2.4.0/go.mod h1:VtI579ll9RpVTrdKdkMzckdnwMyX2JILb+MhPqRbPsY= +cloud.google.com/go/vision/v2 v2.5.0/go.mod h1:MmaezXOOE+IWa+cS7OhRRLK2cNv1ZL98zhqFFZaaH2E= +cloud.google.com/go/vision/v2 v2.6.0/go.mod h1:158Hes0MvOS9Z/bDMSFpjwsUrZ5fPrdwuyyvKSGAGMY= +cloud.google.com/go/vision/v2 v2.7.0/go.mod h1:H89VysHy21avemp6xcf9b9JvZHVehWbET0uT/bcuY/0= +cloud.google.com/go/vmmigration v1.2.0/go.mod h1:IRf0o7myyWFSmVR1ItrBSFLFD/rJkfDCUTO4vLlJvsE= +cloud.google.com/go/vmmigration v1.3.0/go.mod h1:oGJ6ZgGPQOFdjHuocGcLqX4lc98YQ7Ygq8YQwHh9A7g= +cloud.google.com/go/vmmigration v1.5.0/go.mod h1:E4YQ8q7/4W9gobHjQg4JJSgXXSgY21nA5r8swQV+Xxc= +cloud.google.com/go/vmmigration v1.6.0/go.mod h1:bopQ/g4z+8qXzichC7GW1w2MjbErL54rk3/C843CjfY= +cloud.google.com/go/vmwareengine v0.1.0/go.mod h1:RsdNEf/8UDvKllXhMz5J40XxDrNJNN4sagiox+OI208= +cloud.google.com/go/vmwareengine v0.2.2/go.mod h1:sKdctNJxb3KLZkE/6Oui94iw/xs9PRNC2wnNLXsHvH8= +cloud.google.com/go/vmwareengine v0.3.0/go.mod h1:wvoyMvNWdIzxMYSpH/R7y2h5h3WFkx6d+1TIsP39WGY= +cloud.google.com/go/vpcaccess v1.4.0/go.mod h1:aQHVbTWDYUR1EbTApSVvMq1EnT57ppDmQzZ3imqIk4w= +cloud.google.com/go/vpcaccess v1.5.0/go.mod h1:drmg4HLk9NkZpGfCmZ3Tz0Bwnm2+DKqViEpeEpOq0m8= +cloud.google.com/go/vpcaccess v1.6.0/go.mod h1:wX2ILaNhe7TlVa4vC5xce1bCnqE3AeH27RV31lnmZes= +cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xXZmFiHmGE= +cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg= +cloud.google.com/go/webrisk v1.6.0/go.mod h1:65sW9V9rOosnc9ZY7A7jsy1zoHS5W9IAXv6dGqhMQMc= +cloud.google.com/go/webrisk v1.7.0/go.mod h1:mVMHgEYH0r337nmt1JyLthzMr6YxwN1aAIEc2fTcq7A= +cloud.google.com/go/webrisk v1.8.0/go.mod h1:oJPDuamzHXgUc+b8SiHRcVInZQuybnvEW72PqTc7sSg= +cloud.google.com/go/websecurityscanner v1.3.0/go.mod h1:uImdKm2wyeXQevQJXeh8Uun/Ym1VqworNDlBXQevGMo= +cloud.google.com/go/websecurityscanner v1.4.0/go.mod h1:ebit/Fp0a+FWu5j4JOmJEV8S8CzdTkAS77oDsiSqYWQ= +cloud.google.com/go/websecurityscanner v1.5.0/go.mod h1:Y6xdCPy81yi0SQnDY1xdNTNpfY1oAgXUlcfN3B3eSng= +cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0= +cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= +cloud.google.com/go/workflows v1.8.0/go.mod h1:ysGhmEajwZxGn1OhGOGKsTXc5PyxOc0vfKf5Af+to4M= +cloud.google.com/go/workflows v1.9.0/go.mod h1:ZGkj1aFIOd9c8Gerkjjq7OW7I5+l6cSvT3ujaO/WwSA= +cloud.google.com/go/workflows v1.10.0/go.mod h1:fZ8LmRmZQWacon9UCX1r/g/DfAXx5VcPALq2CxzdePw= +code.cloudfoundry.org/clock v0.0.0-20180518195852-02e53af36e6c/go.mod h1:QD9Lzhd/ux6eNQVUDVRJX/RKTigpewimNYBi7ivZKY8= +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.13/go.mod h1:5pSSGY0Bhuk7waTHuDf4aQ8D2DrhgETRo9fy6k3Xlzc= +contrib.go.opencensus.io/integrations/ocsql v0.1.7/go.mod h1:8DsSdjz3F+APR+0z0WkU1aRorQCFfRxvqjUUPMbF3fE= +dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= +dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= +gioui.org v0.0.0-20210308172011-57750fc8a0a6/go.mod h1:RSH6KIUZ0p2xy5zHDxgAM4zumjgTw83q2ge/PI+yyw8= +git.sr.ht/~sbinet/gg v0.3.1/go.mod h1:KGYtlADtqsqANL9ueOFkWymvzUvLMQllU5Ixo+8v3pc= +github.com/AdaLogics/go-fuzz-headers v0.0.0-20210715213245-6c3934b029d8/go.mod h1:CzsSbkDixRphAF5hS6wbMKq0eI6ccJRb7/A0M6JBnwg= +github.com/Azure/azure-amqp-common-go/v3 v3.2.3/go.mod h1:7rPmbSfszeovxGfc5fSAXE4ehlXQZHpMja2OtxC2Tas= +github.com/Azure/azure-sdk-for-go v16.2.1+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= +github.com/Azure/azure-sdk-for-go v63.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= +github.com/Azure/azure-sdk-for-go v65.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= +github.com/Azure/azure-sdk-for-go v66.0.0+incompatible h1:bmmC38SlE8/E81nNADlgmVGurPWMHDX2YNXVQMrBpEE= +github.com/Azure/azure-sdk-for-go v66.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= +github.com/Azure/azure-sdk-for-go/sdk/azcore v0.19.0/go.mod h1:h6H6c8enJmmocHUbLiiGY6sx7f9i+X3m1CHdd5c6Rdw= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.0.0/go.mod h1:uGG2W01BaETf0Ozp+QxxKJdMBNRWPdstHG0Fmdwn1/U= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.1/go.mod h1:uGG2W01BaETf0Ozp+QxxKJdMBNRWPdstHG0Fmdwn1/U= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v0.11.0/go.mod h1:HcM1YX14R7CJcghJGOYCgdezslRSVzqwLf/q+4Y2r/0= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.0.0/go.mod h1:+6sju8gk8FRmSajX3Oz4G5Gm7P+mbqE9FVaXXFYTkCM= +github.com/Azure/azure-sdk-for-go/sdk/internal v0.7.0/go.mod h1:yqy467j36fJxcRV2TzfVZ1pCb5vxm4BtZPUdYWe/Xo8= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0/go.mod h1:eWRD7oawr1Mu1sLCawqVc0CUiF43ia3qQMxLscsKQ9w= +github.com/Azure/azure-sdk-for-go/sdk/messaging/azservicebus v1.0.2/go.mod h1:LH9XQnMr2ZYxQdVdCrzLO9mxeDyrDFa6wbSI3x5zCZk= +github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v0.4.1/go.mod h1:eZ4g6GUvXiGulfIbbhh1Xr4XwUYaYaWMqzGD/284wCA= +github.com/Azure/go-amqp v0.17.0/go.mod h1:9YJ3RhxRT1gquYnzpZO1vcYMMpAdJT+QEg6fwmw9Zlg= +github.com/Azure/go-amqp v0.17.5/go.mod h1:9YJ3RhxRT1gquYnzpZO1vcYMMpAdJT+QEg6fwmw9Zlg= +github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= +github.com/Azure/go-ansiterm v0.0.0-20210608223527-2377c96fe795/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= +github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= +github.com/Azure/go-autorest v10.8.1+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= +github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs= +github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= +github.com/Azure/go-autorest/autorest v0.11.1/go.mod h1:JFgpikqFJ/MleTTxwepExTKnFUKKszPS8UavbQYUMuw= +github.com/Azure/go-autorest/autorest v0.11.18/go.mod h1:dSiJPy22c3u0OtOKDNttNgqpNFY/GeWa7GH/Pz56QRA= +github.com/Azure/go-autorest/autorest v0.11.24/go.mod h1:G6kyRlFnTuSbEYkQGawPfsCswgme4iYf6rfSKUDzbCc= +github.com/Azure/go-autorest/autorest v0.11.25/go.mod h1:7l8ybrIdUmGqZMTD0sRtAr8NvbHjfofbf8RSP2q7w7U= +github.com/Azure/go-autorest/autorest v0.11.27/go.mod h1:7l8ybrIdUmGqZMTD0sRtAr8NvbHjfofbf8RSP2q7w7U= +github.com/Azure/go-autorest/autorest v0.11.28 h1:ndAExarwr5Y+GaHE6VCaY1kyS/HwwGGyuimVhWsHOEM= +github.com/Azure/go-autorest/autorest v0.11.28/go.mod h1:MrkzG3Y3AH668QyF9KRk5neJnGgmhQ6krbhR8Q5eMvA= +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.13/go.mod h1:W/MM4U6nLxnIskrw4UwWzlHfGjwUS50aOsc/I3yuU8M= +github.com/Azure/go-autorest/autorest/adal v0.9.18/go.mod h1:XVVeme+LZwABT8K5Lc3hA4nAe8LDBVle26gTrguhhPQ= +github.com/Azure/go-autorest/autorest/adal v0.9.20/go.mod h1:XVVeme+LZwABT8K5Lc3hA4nAe8LDBVle26gTrguhhPQ= +github.com/Azure/go-autorest/autorest/adal v0.9.21 h1:jjQnVFXPfekaqb8vIsv2G1lxshoW+oGv4MDlhRtnYZk= +github.com/Azure/go-autorest/autorest/adal v0.9.21/go.mod h1:zua7mBUaCc5YnSLKYgGJR/w5ePdMDA6H56upLsHzA9U= +github.com/Azure/go-autorest/autorest/azure/auth v0.5.11 h1:P6bYXFoao05z5uhOQzbC3Qd8JqF3jUoocoTeIxkp2cA= +github.com/Azure/go-autorest/autorest/azure/auth v0.5.11/go.mod h1:84w/uV8E37feW2NCJ08uT9VBfjfUHpgLVnG2InYD6cg= +github.com/Azure/go-autorest/autorest/azure/cli v0.4.5/go.mod h1:ADQAXrkgm7acgWVUNamOgh8YNrv4p27l3Wc55oVfpzg= +github.com/Azure/go-autorest/autorest/azure/cli v0.4.6 h1:w77/uPk80ZET2F+AfQExZyEWtn+0Rk/uw17m9fv5Ajc= +github.com/Azure/go-autorest/autorest/azure/cli v0.4.6/go.mod h1:piCfgPho7BiIDdEQ1+g4VmKyD5y+p/XtSNqE6Hc4QD0= +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/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= +github.com/Azure/go-autorest/autorest/mocks v0.4.2 h1:PGN4EDXnuQbojHbU0UWoNvmu9AGVwYHG9/fkDYhtAfw= +github.com/Azure/go-autorest/autorest/mocks v0.4.2/go.mod h1:Vy7OitM9Kei0i1Oj+LvyAWMXJHeKH1MVlzFugfVrmyU= +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/AzureAD/microsoft-authentication-library-for-go v0.4.0/go.mod h1:Vt9sXTKwMyGcOxSmLDMnGPgqsUg7m8pe215qMLrDXw4= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/toml v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak= +github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +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.31.2/go.mod h1:qR6jVnZTKDCW3j+fC9mOEPHm++1nKDMkqbbkD6KNsfo= +github.com/HdrHistogram/hdrhistogram-go v1.1.2 h1:5IcZpTvzydCQeHzK4Ef/D5rrSqwxob0t8PQPMybUNFM= +github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= +github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c/go.mod h1:X0CRv0ky0k6m906ixxpzmDRLvX58TFUKS2eePweuyxk= +github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= +github.com/Masterminds/goutils v1.1.1 h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJLSYI= +github.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= +github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= +github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= +github.com/Masterminds/semver/v3 v3.1.1 h1:hLg3sBzpNErnxhQtUy/mmLR2I9foDujNK030IGemrRc= +github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= +github.com/Masterminds/sprig/v3 v3.2.1/go.mod h1:UoaO7Yp8KlPnJIYWTFkMaqPUYKTfGFPhxNuwnnxkKlk= +github.com/Masterminds/sprig/v3 v3.2.2 h1:17jRggJu518dr3QaafizSXOjKYp94wKfABxUmyxvxX8= +github.com/Masterminds/sprig/v3 v3.2.2/go.mod h1:UoaO7Yp8KlPnJIYWTFkMaqPUYKTfGFPhxNuwnnxkKlk= +github.com/Microsoft/go-winio v0.4.11/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA= +github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= +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-0.20201130162521-d1ffc52c7331/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= +github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= +github.com/Microsoft/go-winio v0.4.17-0.20210211115548-6eac466e5fa3/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= +github.com/Microsoft/go-winio v0.4.17-0.20210324224401-5516f17a5958/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= +github.com/Microsoft/go-winio v0.4.17/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= +github.com/Microsoft/go-winio v0.5.1/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= +github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= +github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= +github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= +github.com/Microsoft/hcsshim v0.8.6/go.mod h1:Op3hHsoHPAvb6lceZHDtd9OkTew38wNoXnJs8iY7rUg= +github.com/Microsoft/hcsshim v0.8.7-0.20190325164909-8abdbb8205e4/go.mod h1:Op3hHsoHPAvb6lceZHDtd9OkTew38wNoXnJs8iY7rUg= +github.com/Microsoft/hcsshim v0.8.7/go.mod h1:OHd7sQqRFrYd3RmSgbgji+ctCwkbq2wbEYNSzOYtcBQ= +github.com/Microsoft/hcsshim v0.8.9/go.mod h1:5692vkUqntj1idxauYlpoINNKeqCiG6Sg38RRsjT5y8= +github.com/Microsoft/hcsshim v0.8.14/go.mod h1:NtVKoYxQuTLx6gEq0L96c9Ju4JbRJ4nY2ow3VK6a9Lg= +github.com/Microsoft/hcsshim v0.8.15/go.mod h1:x38A4YbHbdxJtc0sF6oIz+RG0npwSCAvn69iY6URG00= +github.com/Microsoft/hcsshim v0.8.16/go.mod h1:o5/SZqmR7x9JNKsW3pu+nqHm0MF8vbA+VxGOoXdC600= +github.com/Microsoft/hcsshim v0.8.20/go.mod h1:+w2gRZ5ReXQhFOrvSQeNfhrYB/dg3oDwTOcER2fw4I4= +github.com/Microsoft/hcsshim v0.8.21/go.mod h1:+w2gRZ5ReXQhFOrvSQeNfhrYB/dg3oDwTOcER2fw4I4= +github.com/Microsoft/hcsshim v0.8.23/go.mod h1:4zegtUJth7lAvFyc6cH2gGQ5B3OFQim01nnU2M8jKDg= +github.com/Microsoft/hcsshim v0.9.2/go.mod h1:7pLA8lDk46WKDWlVsENo92gC0XFa8rbKfyFRBqxEbCc= +github.com/Microsoft/hcsshim/test v0.0.0-20201218223536-d3e5debf77da/go.mod h1:5hlzMzRKMLyo42nCZ9oml8AdTlq/0cvIaBv6tK1RehU= +github.com/Microsoft/hcsshim/test v0.0.0-20210227013316-43a75bb4edd3/go.mod h1:mw7qgWloBUl75W/gVH3cQszUg1+gUITj7D6NY7ywVnY= +github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= +github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/ProtonMail/go-crypto v0.0.0-20230717121422-5aa5874ade95/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= +github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 h1:kkhsdkhsCvIsutKu5zLMgWtgh9YxGCNAw8Ad8hjwfYg= +github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= +github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= +github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= +github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ= +github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= +github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= +github.com/Twingate/terraform-provider-twingate v1.2.1 h1:Ngg7KhwFjwDAIZbVHwl070zWpPRn1tGC4irUSpBnDD0= +github.com/Twingate/terraform-provider-twingate v1.2.1/go.mod h1:qkVjVOlRFEiv7oG+sdfWada1fdwSg79N9ciCTO+aECo= +github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= +github.com/acomagu/bufpipe v1.0.4 h1:e3H4WUzM3npvo5uv95QuJM3cQspFNtFBzvJ2oNjKIDQ= +github.com/acomagu/bufpipe v1.0.4/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= +github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da h1:KjTM2ks9d14ZYCvmHS9iAKVt9AyzRSqNU1qabPih5BY= +github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da/go.mod h1:eHEWzANqSiWQsof+nXEI9bUVUyV6F53Fp89EuCh2EAA= +github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= +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/ajstarks/deck v0.0.0-20200831202436-30c9fc6549a9/go.mod h1:JynElWSGnm/4RlzPXRlREEwqTHAN3T56Bv2ITsFT3gY= +github.com/ajstarks/deck/generate v0.0.0-20210309230005-c3f852c02e19/go.mod h1:T13YZdzov6OU0A1+RfKZiZN9ca6VeKdBdyDV+BY97Tk= +github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= +github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b/go.mod h1:1KcenG0jGWcpt8ov532z81sp/kMMUG485J2InIOyADM= +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/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= +github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE= +github.com/alexflint/go-filemutex v0.0.0-20171022225611-72bdc8eae2ae/go.mod h1:CgnQgUtFrFz9mxFNtED3jI5tLDjKlOM+oUF/sTk6ps0= +github.com/alexflint/go-filemutex v1.1.0/go.mod h1:7P4iRhttt/nUvUOrYIhcpMzv2G6CY9UnI16Z+UJqRyk= +github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= +github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= +github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4= +github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/apache/arrow/go/v10 v10.0.1/go.mod h1:YvhnlEePVnBS4+0z3fhPfUy7W1Ikj0Ih0vcRo/gZ1M0= +github.com/apache/arrow/go/v11 v11.0.0/go.mod h1:Eg5OsL5H+e299f7u5ssuXsuHQVEGC4xei5aX110hRiI= +github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= +github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= +github.com/apache/thrift v0.16.0/go.mod h1:PHK3hniurgQaNMZYaCLEqXKsYK8upmhPbmdP2FXSqgU= +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/go.mod h1:ZK2fH7c4NqDTLtiYLvIkEghdlcqw7yxLeM89kiTRPUo= +github.com/apparentlymart/go-textseg/v15 v15.0.0 h1:uYvfpb3DyLSCGWnctWKGj857c6ew1u1fNQOlOtuGxQY= +github.com/apparentlymart/go-textseg/v15 v15.0.0/go.mod h1:K8XmNZdhEBkdlyDdvbmmsvpAG721bKi0joRfFdHIWJ4= +github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= +github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= +github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= +github.com/armon/go-metrics v0.3.3/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= +github.com/armon/go-metrics v0.3.9/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= +github.com/armon/go-metrics v0.4.0 h1:yCQqn7dwca4ITXb+CbubHmedzaQYHhNhrEXLYUeEe8Q= +github.com/armon/go-metrics v0.4.0/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= +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/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= +github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= +github.com/asaskevich/govalidator v0.0.0-20200907205600-7a23bdc65eef/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= +github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= +github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z4= +github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI= +github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= +github.com/aws/aws-sdk-go v1.15.11/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0= +github.com/aws/aws-sdk-go v1.15.27/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0= +github.com/aws/aws-sdk-go v1.15.78/go.mod h1:E3/ieXAlvM0XWO57iftYVDLLvQ824smPP3ATZkfNZeM= +github.com/aws/aws-sdk-go v1.25.3/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.38.35/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= +github.com/aws/aws-sdk-go v1.43.11/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= +github.com/aws/aws-sdk-go v1.43.31/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= +github.com/aws/aws-sdk-go v1.44.45/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= +github.com/aws/aws-sdk-go v1.44.68/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= +github.com/aws/aws-sdk-go v1.44.122/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= +github.com/aws/aws-sdk-go v1.44.298 h1:5qTxdubgV7PptZJmp/2qDwD2JL187ePL7VOxsSh1i3g= +github.com/aws/aws-sdk-go v1.44.298/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= +github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= +github.com/aws/aws-sdk-go-v2 v1.16.8/go.mod h1:6CpKuLXg2w7If3ABZCl/qZ6rEgwtjZTn4eAf4RcEyuw= +github.com/aws/aws-sdk-go-v2 v1.17.3 h1:shN7NlnVzvDUgPQ+1rLMSxY8OWRNDRYtiqe0p/PgrhY= +github.com/aws/aws-sdk-go-v2 v1.17.3/go.mod h1:uzbQtefpm44goOPmdKyAlXSNcwlRgF3ePWVW6EtJvvw= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.3 h1:S/ZBwevQkr7gv5YxONYpGQxlMFFYSRfz3RMcjsC9Qhk= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.3/go.mod h1:gNsR5CaXKmQSSzrmGxmwmct/r+ZBfbxorAuXYsj/M5Y= +github.com/aws/aws-sdk-go-v2/config v1.15.15 h1:yBV+J7Au5KZwOIrIYhYkTGJbifZPCkAnCFSvGsF3ui8= +github.com/aws/aws-sdk-go-v2/config v1.15.15/go.mod h1:A1Lzyy/o21I5/s2FbyX5AevQfSVXpvvIDCoVFD0BC4E= +github.com/aws/aws-sdk-go-v2/credentials v1.12.10 h1:7gGcMQePejwiKoDWjB9cWnpfVdnz/e5JwJFuT6OrroI= +github.com/aws/aws-sdk-go-v2/credentials v1.12.10/go.mod h1:g5eIM5XRs/OzIIK81QMBl+dAuDyoLN0VYaLP+tBqEOk= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.9 h1:hz8tc+OW17YqxyFFPSkvfSikbqWcyyHRyPVSTzC0+aI= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.9/go.mod h1:KDCCm4ONIdHtUloDcFvK2+vshZvx4Zmj7UMDfusuz5s= +github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.11.21 h1:bpiKFJ9aC0xTVpygSRRRL/YHC1JZ+pHQHENATHuoiwo= +github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.11.21/go.mod h1:iIYPrQ2rYfZiB/iADYlhj9HHZ9TTi6PqKQPAqygohbE= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.15/go.mod h1:pWrr2OoHlT7M/Pd2y4HV3gJyPb3qj5qMmnPkKSNPYK4= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.27 h1:I3cakv2Uy1vNmmhRQmFptYDxOvBnwCdNwyw63N0RaRU= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.27/go.mod h1:a1/UpzeyBBerajpnP5nGZa9mGzsBn5cOKxm6NWQsvoI= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.9/go.mod h1:08tUpeSGN33QKSO7fwxXczNfiwCpbj+GxK6XKwqWVv0= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.21 h1:5NbbMrIzmUn/TXFqAle6mgrH5m9cOvMLRGL7pnG8tRE= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.21/go.mod h1:+Gxn8jYn5k9ebfHEqlhrMirFjSW0v0C9fI+KN5vk2kE= +github.com/aws/aws-sdk-go-v2/internal/ini v1.3.16 h1:f0ySVcmQhwmzn7zQozd8wBM3yuGBfzdpsOaKQ0/Epzw= +github.com/aws/aws-sdk-go-v2/internal/ini v1.3.16/go.mod h1:CYmI+7x03jjJih8kBEEFKRQc40UjUokT0k7GbvrhhTc= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.0.6 h1:3L8pcjvgaSOs0zzZcMKzxDSkYKEpwJ2dNVDdxm68jAY= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.0.6/go.mod h1:O7Oc4peGZDEKlddivslfYFvAbgzvl/GH3J8j3JIGBXc= +github.com/aws/aws-sdk-go-v2/service/iam v1.19.0 h1:9vCynoqC+dgxZKrsjvAniyIopsv3RZFsZ6wkQ+yxtj8= +github.com/aws/aws-sdk-go-v2/service/iam v1.19.0/go.mod h1:OyAuvpFeSVNppcSsp1hFOVQcaTRc1LE24YIR7pMbbAA= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.3 h1:4n4KCtv5SUoT5Er5XV41huuzrCqepxlW3SDI9qHQebc= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.3/go.mod h1:gkb2qADY+OHaGLKNTYxMaQNacfeyQpZ4csDTQMeFmcw= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.10 h1:7LJcuRalaLw+GYQTMGmVUl4opg2HrDZkvn/L3KvIQfw= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.10/go.mod h1:Qks+dxK3O+Z2deAhNo6cJ8ls1bam3tUGUAcgxQP1c70= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.9 h1:sHfDuhbOuuWSIAEDd3pma6p0JgUcR2iePxtCE8gfCxQ= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.9/go.mod h1:yQowTpvdZkFVuHrLBXmczat4W+WJKg/PafBZnGBLga0= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.13.9 h1:sJdKvydGYDML9LTFcp6qq6Z5fIjN0Rdq2Gvw1hUg8tc= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.13.9/go.mod h1:Rc5+wn2k8gFSi3V1Ch4mhxOzjMh+bYSXVFfVaqowQOY= +github.com/aws/aws-sdk-go-v2/service/kms v1.18.1 h1:y07kzPdcjuuyDVYWf1CCsQQ6kcAWMbFy+yIJ71xQBS0= +github.com/aws/aws-sdk-go-v2/service/kms v1.18.1/go.mod h1:4PZMUkc9rXHWGVB5J9vKaZy3D7Nai79ORworQ3ASMiM= +github.com/aws/aws-sdk-go-v2/service/s3 v1.27.2 h1:NvzGue25jKnuAsh6yQ+TZ4ResMcnp49AWgWGm2L4b5o= +github.com/aws/aws-sdk-go-v2/service/s3 v1.27.2/go.mod h1:u+566cosFI+d+motIz3USXEh6sN8Nq4GrNXSg2RXVMo= +github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.15.14/go.mod h1:xakbH8KMsQQKqzX87uyyzTHshc/0/Df8bsTneTS5pFU= +github.com/aws/aws-sdk-go-v2/service/sns v1.17.10/go.mod h1:uITsRNVMeCB3MkWpXxXw0eDz8pW4TYLzj+eyQtbhSxM= +github.com/aws/aws-sdk-go-v2/service/sqs v1.19.1/go.mod h1:A94o564Gj+Yn+7QO1eLFeI7UVv3riy/YBFOfICVqFvU= +github.com/aws/aws-sdk-go-v2/service/ssm v1.27.6/go.mod h1:fiFzQgj4xNOg4/wqmAiPvzgDMXPD+cUEplX/CYn+0j0= +github.com/aws/aws-sdk-go-v2/service/sso v1.11.13 h1:DQpf+al+aWozOEmVEdml67qkVZ6vdtGUi71BZZWw40k= +github.com/aws/aws-sdk-go-v2/service/sso v1.11.13/go.mod h1:d7ptRksDDgvXaUvxyHZ9SYh+iMDymm94JbVcgvSYSzU= +github.com/aws/aws-sdk-go-v2/service/sts v1.16.10 h1:7tquJrhjYz2EsCBvA9VTl+sBAAh1bv7h/sGASdZOGGo= +github.com/aws/aws-sdk-go-v2/service/sts v1.16.10/go.mod h1:cftkHYN6tCDNfkSasAmclSfl4l7cySoay8vz7p/ce0E= +github.com/aws/smithy-go v1.12.0/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA= +github.com/aws/smithy-go v1.13.5 h1:hgz0X/DX0dGqTYpGALqXJoRKRj5oQ7150i5FdTePzO8= +github.com/aws/smithy-go v1.13.5/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA= +github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k= +github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8= +github.com/benbjohnson/clock v1.0.3/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM= +github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= +github.com/beorn7/perks v0.0.0-20160804104726-4c0e84591b9a/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= +github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= +github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= +github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d h1:xDfNPAt8lFiC1UJrqV3uuy861HCTo708pDMbjHHdCas= +github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ00z/TKoufEY6K/a0k6AhaJrQKdFe6OfVXsa4= +github.com/bgentry/speakeasy v0.1.0 h1:ByYyxL9InA1OWqxJqqp2A5pYHUrCiAL6K3J+LKSsQkY= +github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= +github.com/bitly/go-simplejson v0.5.0/go.mod h1:cXHtHw4XUPsvGaxgjIAn8PhEWG9NfngEKAMDJEczWVA= +github.com/bits-and-blooms/bitset v1.2.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= +github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= +github.com/blang/semver v3.1.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ= +github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4= +github.com/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= +github.com/boombuler/barcode v1.0.1/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= +github.com/bshuster-repo/logrus-logstash-hook v0.4.1/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk= +github.com/bufbuild/protocompile v0.4.0 h1:LbFKd2XowZvQ/kajzguUp2DC9UEIQhIq77fZZlaQsNA= +github.com/bufbuild/protocompile v0.4.0/go.mod h1:3v93+mbWn/v3xzN+31nwkJfrEpAUwp+BagBSZWx+TP8= +github.com/buger/jsonparser v0.0.0-20180808090653-f4dd9f5a6b44/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= +github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= +github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd/go.mod h1:2oa8nejYd4cQ/b0hMIopN0lCRxU0bueqREvZLWFrtK8= +github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b/go.mod h1:obH5gd0BsqsP2LwDJ9aOkm/6J86V6lyAXCoQWGw3K50= +github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0/go.mod h1:D/8v3kj0zr8ZAKg1AQ6crr+5VwKN5eIywRkfhyM/+dE= +github.com/bwesterb/go-ristretto v1.2.3/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= +github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= +github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= +github.com/cenkalti/backoff/v3 v3.0.0/go.mod h1:cIeZDE3IrqwwJl6VUwCN6trj1oXrTS4rc0ij+ULvLYs= +github.com/cenkalti/backoff/v3 v3.2.2 h1:cfUAAO3yvKMYKPrvhDuHSwQnhZNk/RMHKdZqKTxfm6M= +github.com/cenkalti/backoff/v3 v3.2.2/go.mod h1:cIeZDE3IrqwwJl6VUwCN6trj1oXrTS4rc0ij+ULvLYs= +github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v4 v4.1.2/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +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/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw= +github.com/certifi/gocertifi v0.0.0-20191021191039-0944d244cd40/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= +github.com/certifi/gocertifi v0.0.0-20200922220541-2c3bb06c6054/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= +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/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/charmbracelet/bubbles v0.16.1 h1:6uzpAAaT9ZqKssntbvZMlksWHruQLNxg49H5WdeuYSY= +github.com/charmbracelet/bubbles v0.16.1/go.mod h1:2QCp9LFlEsBQMvIYERr7Ww2H2bA7xen1idUDIzm/+Xc= +github.com/charmbracelet/bubbletea v0.24.2 h1:uaQIKx9Ai6Gdh5zpTbGiWpytMU+CfsPp06RaW2cx/SY= +github.com/charmbracelet/bubbletea v0.24.2/go.mod h1:XdrNrV4J8GiyshTtx3DNuYkR1FDaJmO3l2nejekbsgg= +github.com/charmbracelet/lipgloss v0.7.1 h1:17WMwi7N1b1rVWOjMT+rCh7sQkvDU75B2hbZpc5Kc1E= +github.com/charmbracelet/lipgloss v0.7.1/go.mod h1:yG0k3giv8Qj8edTCbbg6AlQ5e8KNWpFujkNawKNhE2c= +github.com/checkpoint-restore/go-criu/v4 v4.1.0/go.mod h1:xUQBLp4RLc5zJtWY++yjOoMoB5lihDt7fai+75m+rGw= +github.com/checkpoint-restore/go-criu/v5 v5.0.0/go.mod h1:cfwC0EG7HMUenopBsUf9d89JlCLQIfgVcNsNN0t6T2M= +github.com/checkpoint-restore/go-criu/v5 v5.3.0/go.mod h1:E/eQpaFtUKGOOSEBZgmKAcn+zUUwWxqcaKZlF54wK8E= +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/logex v1.2.0/go.mod h1:9+9sk7u7pGNWYMkh0hdiL++6OeibzJccyQU4p4MedaY= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/readline v1.5.0/go.mod h1:x22KAscuvRqlLoK9CsoYsmxoXZMMFVyOl86cAH8qUic= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/chzyer/test v0.0.0-20210722231415-061457976a23/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/cilium/ebpf v0.0.0-20200110133405-4032b1d8aae3/go.mod h1:MA5e5Lr8slmEg9bt0VpxxWqJlO4iwu3FBdHUzV7wQVg= +github.com/cilium/ebpf v0.0.0-20200702112145-1c8d4c9ef775/go.mod h1:7cR51M8ViRLIdUjrmSXlK9pkrsDlLHbO8jiB8X8JnOc= +github.com/cilium/ebpf v0.2.0/go.mod h1:To2CFviqOWL/M0gIMsvSMlqe7em/l1ALkX1PyjrX2Qs= +github.com/cilium/ebpf v0.4.0/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs= +github.com/cilium/ebpf v0.6.2/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs= +github.com/cilium/ebpf v0.7.0/go.mod h1:/oI2+1shJiTGAMgl6/RgJr36Eo1jzrRcAWbcXO2usCA= +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/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cloudflare/circl v1.3.3 h1:fE/Qz0QdIGqeWfnwq0RE0R7MI51s0M2E4Ga9kq5AEMs= +github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA= +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/udpa/go v0.0.0-20220112060539-c52dc94e7fbe/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-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20220314180256-7f1daf1720fc/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20230105202645-06c439db220b/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ= +github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= +github.com/cockroachdb/datadriven v0.0.0-20200714090401-bf6692d28da5/go.mod h1:h6jFvWxBdQXxjopDMZyH2UVceIRfR84bdzbkoKrsWNo= +github.com/cockroachdb/errors v1.2.4/go.mod h1:rQD95gz6FARkaKkQXUksEje/d9a6wBJoCr5oaCLELYA= +github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f/go.mod h1:i/u985jwjWRlyHXQbwatDASoW0RMlZ/3i9yJHE2xLkI= +github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= +github.com/containerd/aufs v0.0.0-20200908144142-dab0cbea06f4/go.mod h1:nukgQABAEopAHvB6j7cnP5zJ+/3aVcE7hCYqvIwAHyE= +github.com/containerd/aufs v0.0.0-20201003224125-76a6863f2989/go.mod h1:AkGGQs9NM2vtYHaUen+NljV0/baGCAPELGm2q9ZXpWU= +github.com/containerd/aufs v0.0.0-20210316121734-20793ff83c97/go.mod h1:kL5kd6KM5TzQjR79jljyi4olc1Vrx6XBlcyj3gNv2PU= +github.com/containerd/aufs v1.0.0/go.mod h1:kL5kd6KM5TzQjR79jljyi4olc1Vrx6XBlcyj3gNv2PU= +github.com/containerd/btrfs v0.0.0-20201111183144-404b9149801e/go.mod h1:jg2QkJcsabfHugurUvvPhS3E08Oxiuh5W/g1ybB4e0E= +github.com/containerd/btrfs v0.0.0-20210316141732-918d888fb676/go.mod h1:zMcX3qkXTAi9GI50+0HOeuV8LU2ryCE/V2vG/ZBiTss= +github.com/containerd/btrfs v1.0.0/go.mod h1:zMcX3qkXTAi9GI50+0HOeuV8LU2ryCE/V2vG/ZBiTss= +github.com/containerd/cgroups v0.0.0-20190717030353-c4b9ac5c7601/go.mod h1:X9rLEHIqSf/wfK8NsPqxJmeZgW4pcfzdXITDrUSJ6uI= +github.com/containerd/cgroups v0.0.0-20190919134610-bf292b21730f/go.mod h1:OApqhQ4XNSNC13gXIwDjhOQxjWa/NxkwZXJ1EvqT0ko= +github.com/containerd/cgroups v0.0.0-20200531161412-0dbf7f05ba59/go.mod h1:pA0z1pT8KYB3TCXK/ocprsh7MAkoW8bZVzPdih9snmM= +github.com/containerd/cgroups v0.0.0-20200710171044-318312a37340/go.mod h1:s5q4SojHctfxANBDvMeIaIovkq29IP48TKAxnhYRxvo= +github.com/containerd/cgroups v0.0.0-20200824123100-0b889c03f102/go.mod h1:s5q4SojHctfxANBDvMeIaIovkq29IP48TKAxnhYRxvo= +github.com/containerd/cgroups v0.0.0-20210114181951-8a68de567b68/go.mod h1:ZJeTFisyysqgcCdecO57Dj79RfL0LNeGiFUqLYQRYLE= +github.com/containerd/cgroups v1.0.1/go.mod h1:0SJrPIenamHDcZhEcJMNBB85rHcUsw4f25ZfBiPYRkU= +github.com/containerd/cgroups v1.0.3/go.mod h1:/ofk34relqNjSGyqPrmEULrO4Sc8LJhvJmWbUCUKqj8= +github.com/containerd/console v0.0.0-20180822173158-c12b1e7919c1/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw= +github.com/containerd/console v0.0.0-20181022165439-0650fd9eeb50/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw= +github.com/containerd/console v0.0.0-20191206165004-02ecf6a7291e/go.mod h1:8Pf4gM6VEbTNRIT26AyyU7hxdQU3MvAvxVI0sc00XBE= +github.com/containerd/console v1.0.1/go.mod h1:XUsP6YE/mKtz6bxc+I8UiKKTP04qjQL4qcS3XoQ5xkw= +github.com/containerd/console v1.0.2/go.mod h1:ytZPjGgY2oeTkAONYafi2kSj0aYggsf8acV1PGKCbzQ= +github.com/containerd/console v1.0.3/go.mod h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkXar0TQ1gf3U= +github.com/containerd/console v1.0.4-0.20230313162750-1ae8d489ac81 h1:q2hJAaP1k2wIvVRd/hEHD7lacgqrCPS+k8g1MndzfWY= +github.com/containerd/console v1.0.4-0.20230313162750-1ae8d489ac81/go.mod h1:YynlIjWYF8myEu6sdkwKIvGQq+cOckRm6So2avqoYAk= +github.com/containerd/containerd v1.2.10/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.3.0-beta.2.0.20190828155532-0293cbd26c69/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.3.0/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.3.1-0.20191213020239-082f7e3aed57/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.3.2/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.4.0-beta.2.0.20200729163537-40b22ef07410/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.4.1/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.4.3/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.4.9/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/containerd v1.5.0-beta.1/go.mod h1:5HfvG1V2FsKesEGQ17k5/T7V960Tmcumvqn8Mc+pCYQ= +github.com/containerd/containerd v1.5.0-beta.3/go.mod h1:/wr9AVtEM7x9c+n0+stptlo/uBBoBORwEx6ardVcmKU= +github.com/containerd/containerd v1.5.0-beta.4/go.mod h1:GmdgZd2zA2GYIBZ0w09ZvgqEq8EfBp/m3lcVZIvPHhI= +github.com/containerd/containerd v1.5.0-rc.0/go.mod h1:V/IXoMqNGgBlabz3tHD2TWDoTJseu1FGOKuoA4nNb2s= +github.com/containerd/containerd v1.5.1/go.mod h1:0DOxVqwDy2iZvrZp2JUx/E+hS0UNTVn7dJnIOwtYR4g= +github.com/containerd/containerd v1.5.7/go.mod h1:gyvv6+ugqY25TiXxcZC3L5yOeYgEw0QMhscqVp1AR9c= +github.com/containerd/containerd v1.5.8/go.mod h1:YdFSv5bTFLpG2HIYmfqDpSYYTDX+mc5qtSuYx1YUb/s= +github.com/containerd/containerd v1.6.1/go.mod h1:1nJz5xCZPusx6jJU8Frfct988y0NpumIq9ODB0kLtoE= +github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= +github.com/containerd/continuity v0.0.0-20190815185530-f2a389ac0a02/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= +github.com/containerd/continuity v0.0.0-20191127005431-f65d91d395eb/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= +github.com/containerd/continuity v0.0.0-20200710164510-efbc4488d8fe/go.mod h1:cECdGN1O8G9bgKTlLhuPJimka6Xb/Gg7vYzCTNVxhvo= +github.com/containerd/continuity v0.0.0-20201208142359-180525291bb7/go.mod h1:kR3BEg7bDFaEddKm54WSmrol1fKWDU1nKYkgrcgZT7Y= +github.com/containerd/continuity v0.0.0-20210208174643-50096c924a4e/go.mod h1:EXlVlkqNba9rJe3j7w3Xa924itAMLgZH4UD/Q4PExuQ= +github.com/containerd/continuity v0.1.0/go.mod h1:ICJu0PwR54nI0yPEnJ6jcS+J7CZAUXrLh8lPo2knzsM= +github.com/containerd/continuity v0.2.2/go.mod h1:pWygW9u7LtS1o4N/Tn0FoCFDIXZ7rxcMX7HX1Dmibvk= +github.com/containerd/fifo v0.0.0-20180307165137-3d5202aec260/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI= +github.com/containerd/fifo v0.0.0-20190226154929-a9fb20d87448/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI= +github.com/containerd/fifo v0.0.0-20200410184934-f15a3290365b/go.mod h1:jPQ2IAeZRCYxpS/Cm1495vGFww6ecHmMk1YJH2Q5ln0= +github.com/containerd/fifo v0.0.0-20201026212402-0724c46b320c/go.mod h1:jPQ2IAeZRCYxpS/Cm1495vGFww6ecHmMk1YJH2Q5ln0= +github.com/containerd/fifo v0.0.0-20210316144830-115abcc95a1d/go.mod h1:ocF/ME1SX5b1AOlWi9r677YJmCPSwwWnQ9O123vzpE4= +github.com/containerd/fifo v1.0.0/go.mod h1:ocF/ME1SX5b1AOlWi9r677YJmCPSwwWnQ9O123vzpE4= +github.com/containerd/go-cni v1.0.1/go.mod h1:+vUpYxKvAF72G9i1WoDOiPGRtQpqsNW/ZHtSlv++smU= +github.com/containerd/go-cni v1.0.2/go.mod h1:nrNABBHzu0ZwCug9Ije8hL2xBCYh/pjfMb1aZGrrohk= +github.com/containerd/go-cni v1.1.0/go.mod h1:Rflh2EJ/++BA2/vY5ao3K6WJRR/bZKsX123aPk+kUtA= +github.com/containerd/go-cni v1.1.3/go.mod h1:Rflh2EJ/++BA2/vY5ao3K6WJRR/bZKsX123aPk+kUtA= +github.com/containerd/go-runc v0.0.0-20180907222934-5a6d9f37cfa3/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0= +github.com/containerd/go-runc v0.0.0-20190911050354-e029b79d8cda/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0= +github.com/containerd/go-runc v0.0.0-20200220073739-7016d3ce2328/go.mod h1:PpyHrqVs8FTi9vpyHwPwiNEGaACDxT/N/pLcvMSRA9g= +github.com/containerd/go-runc v0.0.0-20201020171139-16b287bc67d0/go.mod h1:cNU0ZbCgCQVZK4lgG3P+9tn9/PaJNmoDXPpoJhDR+Ok= +github.com/containerd/go-runc v1.0.0/go.mod h1:cNU0ZbCgCQVZK4lgG3P+9tn9/PaJNmoDXPpoJhDR+Ok= +github.com/containerd/imgcrypt v1.0.1/go.mod h1:mdd8cEPW7TPgNG4FpuP3sGBiQ7Yi/zak9TYCG3juvb0= +github.com/containerd/imgcrypt v1.0.4-0.20210301171431-0ae5c75f59ba/go.mod h1:6TNsg0ctmizkrOgXRNQjAPFWpMYRWuiB6dSF4Pfa5SA= +github.com/containerd/imgcrypt v1.1.1-0.20210312161619-7ed62a527887/go.mod h1:5AZJNI6sLHJljKuI9IHnw1pWqo/F0nGDOuR9zgTs7ow= +github.com/containerd/imgcrypt v1.1.1/go.mod h1:xpLnwiQmEUJPvQoAapeb2SNCxz7Xr6PJrXQb0Dpc4ms= +github.com/containerd/imgcrypt v1.1.3/go.mod h1:/TPA1GIDXMzbj01yd8pIbQiLdQxed5ue1wb8bP7PQu4= +github.com/containerd/nri v0.0.0-20201007170849-eb1350a75164/go.mod h1:+2wGSDGFYfE5+So4M5syatU0N0f0LbWpuqyMi4/BE8c= +github.com/containerd/nri v0.0.0-20210316161719-dbaa18c31c14/go.mod h1:lmxnXF6oMkbqs39FiCt1s0R2HSMhcLel9vNL3m4AaeY= +github.com/containerd/nri v0.1.0/go.mod h1:lmxnXF6oMkbqs39FiCt1s0R2HSMhcLel9vNL3m4AaeY= +github.com/containerd/stargz-snapshotter/estargz v0.4.1/go.mod h1:x7Q9dg9QYb4+ELgxmo4gBUeJB0tl5dqH1Sdz0nJU1QM= +github.com/containerd/ttrpc v0.0.0-20190828154514-0e0f228740de/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o= +github.com/containerd/ttrpc v0.0.0-20190828172938-92c8520ef9f8/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o= +github.com/containerd/ttrpc v0.0.0-20191028202541-4f1b8fe65a5c/go.mod h1:LPm1u0xBw8r8NOKoOdNMeVHSawSsltak+Ihv+etqsE8= +github.com/containerd/ttrpc v1.0.1/go.mod h1:UAxOpgT9ziI0gJrmKvgcZivgxOp8iFPSk8httJEt98Y= +github.com/containerd/ttrpc v1.0.2/go.mod h1:UAxOpgT9ziI0gJrmKvgcZivgxOp8iFPSk8httJEt98Y= +github.com/containerd/ttrpc v1.1.0/go.mod h1:XX4ZTnoOId4HklF4edwc4DcqskFZuvXB1Evzy5KFQpQ= +github.com/containerd/typeurl v0.0.0-20180627222232-a93fcdb778cd/go.mod h1:Cm3kwCdlkCfMSHURc+r6fwoGH6/F1hH3S4sg0rLFWPc= +github.com/containerd/typeurl v0.0.0-20190911142611-5eb25027c9fd/go.mod h1:GeKYzf2pQcqv7tJ0AoCuuhtnqhva5LNU3U+OyKxxJpk= +github.com/containerd/typeurl v1.0.1/go.mod h1:TB1hUtrpaiO88KEK56ijojHS1+NeF0izUACaJW2mdXg= +github.com/containerd/typeurl v1.0.2/go.mod h1:9trJWW2sRlGub4wZJRTW83VtbOLS6hwcDZXTn6oPz9s= +github.com/containerd/zfs v0.0.0-20200918131355-0a33824f23a2/go.mod h1:8IgZOBdv8fAgXddBT4dBXJPtxyRsejFIpXoklgxgEjw= +github.com/containerd/zfs v0.0.0-20210301145711-11e8f1707f62/go.mod h1:A9zfAbMlQwE+/is6hi0Xw8ktpL+6glmqZYtevJgaB8Y= +github.com/containerd/zfs v0.0.0-20210315114300-dde8f0fda960/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNRIRHsFY= +github.com/containerd/zfs v0.0.0-20210324211415-d5c4544f0433/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNRIRHsFY= +github.com/containerd/zfs v1.0.0/go.mod h1:m+m51S1DvAP6r3FcmYCp54bQ34pyOwTieQDNRIRHsFY= +github.com/containernetworking/cni v0.7.1/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= +github.com/containernetworking/cni v0.8.0/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= +github.com/containernetworking/cni v0.8.1/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= +github.com/containernetworking/cni v1.0.1/go.mod h1:AKuhXbN5EzmD4yTNtfSsX3tPcmtrBI6QcRV0NiNt15Y= +github.com/containernetworking/plugins v0.8.6/go.mod h1:qnw5mN19D8fIwkqW7oHHYDHVlzhJpcY6TQxn/fUyDDM= +github.com/containernetworking/plugins v0.9.1/go.mod h1:xP/idU2ldlzN6m4p5LmGiwRDjeJr6FLK6vuiUwoH7P8= +github.com/containernetworking/plugins v1.0.1/go.mod h1:QHCfGpaTwYTbbH+nZXKVTxNBDZcxSOplJT5ico8/FLE= +github.com/containers/ocicrypt v1.0.1/go.mod h1:MeJDzk1RJHv89LjsH0Sp5KTY3ZYkjXO/C+bKAeWFIrc= +github.com/containers/ocicrypt v1.1.0/go.mod h1:b8AOe0YR67uU8OqfVNcznfFpAzu3rdgUV4GP9qXPfu4= +github.com/containers/ocicrypt v1.1.1/go.mod h1:Dm55fwWm1YZAjYRaJ94z2mfZikIyIN4B0oB3dj3jFxY= +github.com/containers/ocicrypt v1.1.2/go.mod h1:Dm55fwWm1YZAjYRaJ94z2mfZikIyIN4B0oB3dj3jFxY= +github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= +github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= +github.com/coreos/go-iptables v0.4.5/go.mod h1:/mVI274lEDI2ns62jHCDnCyBF9Iwsmekav8Dbxlm1MU= +github.com/coreos/go-iptables v0.5.0/go.mod h1:/mVI274lEDI2ns62jHCDnCyBF9Iwsmekav8Dbxlm1MU= +github.com/coreos/go-iptables v0.6.0/go.mod h1:Qe8Bv2Xik5FyTXwgIbLAnv2sWSBmvWdFETJConOQ//Q= +github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= +github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-systemd v0.0.0-20161114122254-48702e0da86b/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd/v22 v22.0.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= +github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= +github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= +github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= +github.com/cpuguy83/go-md2man/v2 v2.0.2/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/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/cyphar/filepath-securejoin v0.2.2/go.mod h1:FpkQEhXnPnOthhzymB7CGsFk2G9VLXONKD9G7QGMM+4= +github.com/cyphar/filepath-securejoin v0.2.3/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= +github.com/cyphar/filepath-securejoin v0.2.4 h1:Ugdm7cg7i6ZK6x3xDF1oEu1nfkyfH53EtKeQYTC3kyg= +github.com/cyphar/filepath-securejoin v0.2.4/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= +github.com/d2g/dhcp4 v0.0.0-20170904100407-a1d1b6c41b1c/go.mod h1:Ct2BUK8SB0YC1SMSibvLzxjeJLnrYEVLULFNiHY9YfQ= +github.com/d2g/dhcp4client v1.0.0/go.mod h1:j0hNfjhrt2SxUOw55nL0ATM/z4Yt3t2Kd1mW34z5W5s= +github.com/d2g/dhcp4server v0.0.0-20181031114812-7d4a0a7f59a5/go.mod h1:Eo87+Kg/IX2hfWJfwxMzLyuSZyxSoAug2nGa1G2QAi8= +github.com/d2g/hardwareaddr v0.0.0-20190221164911-e7d9fbe030e4/go.mod h1:bMl4RjIciD2oAxI7DmWRx6gbeqrkoLqv3MV0vzNad+I= +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/deckarep/golang-set/v2 v2.5.0 h1:hn6cEZtQ0h3J8kFrHR/NrzyOoTnjgW1+FmNJzQ7y/sA= +github.com/deckarep/golang-set/v2 v2.5.0/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpOF4IN+y82NBOac4= +github.com/denisenkom/go-mssqldb v0.12.2/go.mod h1:lnIw1mZukFRZDJYQ0Pb833QS2IaC3l5HkEfra2LJ+sk= +github.com/dennwc/varint v1.0.0/go.mod h1:hnItb35rvZvJrbTALZtY/iQfDs48JKRG1RPpgziApxA= +github.com/denverdino/aliyungo v0.0.0-20190125010748-a747050bb1ba/go.mod h1:dV8lFg6daOBZbT6/BDGIz6Y3WFGn8juu6G+CQ6LHtl0= +github.com/devigned/tab v0.1.1/go.mod h1:XG9mPq0dFghrYvoBF3xdRrJzSTX1b7IQrvaL9mzjeJY= +github.com/dgrijalva/jwt-go v0.0.0-20170104182250-a601269ab70c/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= +github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/dgryski/go-sip13 v0.0.0-20200911182023-62edffca9245/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= +github.com/digitalocean/godo v1.78.0/go.mod h1:GBmu8MkjZmNARE7IXRPmkbbnocNN8+uBm0xbEVw2LCs= +github.com/digitalocean/godo v1.81.0/go.mod h1:BPCqvwbjbGqxuUnIKB4EvS/AX7IDnNmt5fwvIkWo+ew= +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/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E= +github.com/dnaeon/go-vcr v1.1.0/go.mod h1:M7tiix8f0r6mKKJ3Yq/kqU1OYf3MnfmBWVbPx/yU9ko= +github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= +github.com/docker/cli v0.0.0-20191017083524-a8ff7f821017/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/distribution v0.0.0-20190905152932-14b96e55d84c/go.mod h1:0+TTO4EOBfRPhZXAeF1Vu+W3hHZ8eLp8PgKVZlcvtFY= +github.com/docker/distribution v2.7.1-0.20190205005809-0d3efadf0154+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/docker v1.4.2-0.20190924003213-a8608b5b67c7/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v20.10.14+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v20.10.17+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker-credential-helpers v0.6.3/go.mod h1:WRaJzqw3CTB9bk10avuGsjVBZsD05qeibJ1/TYlvc0Y= +github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= +github.com/docker/go-events v0.0.0-20170721190031-9461782956ad/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA= +github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA= +github.com/docker/go-metrics v0.0.0-20180209012529-399ea8c73916/go.mod h1:/u0gXw0Gay3ceNrsHubL3BtdOL2fHf93USgMTe0W5dI= +github.com/docker/go-metrics v0.0.1/go.mod h1:cG1hvH2utMXtqgqqYE9plW6lDxS3/5ayHzueweSI3Vw= +github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE= +github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= +github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= +github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= +github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= +github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= +github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= +github.com/edsrzf/mmap-go v1.1.0 h1:6EUwBLQ/Mcr1EYLE4Tn1VdW1A4ckqCQWZBw8Hr0kjpQ= +github.com/edsrzf/mmap-go v1.1.0/go.mod h1:19H/e8pUPLicwkyNgOykDXkJ9F0MHE+Z52B8EIth78Q= +github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= +github.com/elazarl/goproxy v0.0.0-20221015165544-a0805db90819/go.mod h1:Ro8st/ElPeALwNFlcTpWmkr6IoMFfkjXAvTHpevnDsM= +github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a h1:mATvB/9r/3gvcejNsXKSkQ6lcIaNec2nyfOdlTBR2lU= +github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a/go.mod h1:Ro8st/ElPeALwNFlcTpWmkr6IoMFfkjXAvTHpevnDsM= +github.com/elazarl/goproxy/ext v0.0.0-20190711103511-473e67f1d7d2/go.mod h1:gNh8nYJoAm43RfaxurUnxr+N1PwuFV3ZMl/efxlIlY8= +github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= +github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= +github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= +github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= +github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= +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/go-control-plane v0.10.1/go.mod h1:AY7fTTXNdv/aJ2O5jwpxAPOWUZ7hQAEvzN5Pf27BkQQ= +github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= +github.com/envoyproxy/go-control-plane v0.10.3/go.mod h1:fJJn/j26vwOu972OllsvAgJJM//w9BV6Fxbg2LuVd34= +github.com/envoyproxy/go-control-plane v0.11.1-0.20230524094728-9239064ad72f/go.mod h1:sfYdkwUW4BA3PbKjySwjJy+O4Pu0h62rlqCMHNk+K+Q= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/envoyproxy/protoc-gen-validate v0.6.7/go.mod h1:dyJXwwfPK2VSqiB9Klm1J6romD608Ba7Hij42vrOBCo= +github.com/envoyproxy/protoc-gen-validate v0.9.1/go.mod h1:OKNgG7TCp5pF4d6XftA0++PMirau2/yoOwVac3AbF2w= +github.com/envoyproxy/protoc-gen-validate v0.10.1/go.mod h1:DRjgyB0I43LtJapqN6NiRwroiAU2PaFuvk/vjgh61ss= +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/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/evanphx/json-patch v4.11.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/evanphx/json-patch/v5 v5.5.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= +github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= +github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= +github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= +github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= +github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs= +github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw= +github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo= +github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= +github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/felixge/httpsnoop v1.0.2/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/felixge/httpsnoop v1.0.3/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= +github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= +github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= +github.com/form3tech-oss/jwt-go v3.2.3+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= +github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= +github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= +github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= +github.com/frankban/quicktest v1.10.0/go.mod h1:ui7WezCLWMWxVWr1GETZY3smRy0G4KWq9vcPtJmFl7Y= +github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= +github.com/frankban/quicktest v1.13.0/go.mod h1:qLE0fzW0VuyUAJgPU19zByoIr0HtCHN/r/VLSOOIySU= +github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= +github.com/frankban/quicktest v1.14.3/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU= +github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= +github.com/fullsailor/pkcs7 v0.0.0-20190404230743-d7302db945fa/go.mod h1:KnogPXtdwXqoenmZCw6S+25EAm2MkxbG0deNDu4cbSA= +github.com/garyburd/redigo v0.0.0-20150301180006-535138d7bcd7/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY= +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/getkin/kin-openapi v0.76.0/go.mod h1:660oXbgy5JFMKreazJaQTw7o+X00qeSyhcnluiMv+Xg= +github.com/getsentry/raven-go v0.2.0/go.mod h1:KungGk8q33+aIAZUIVWZDr2OfAEBsO49PX4NzFV5kcQ= +github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= +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/gin-gonic/gin v1.7.7 h1:3DoBmSbJbZAWqXJC3SLjAPfutPJJRN1U5pALB7EeTTs= +github.com/gin-gonic/gin v1.7.7/go.mod h1:axIBovoeJpVj8S3BwE0uPMTeReE4+AfFtqpqaZ1qq1U= +github.com/gliderlabs/ssh v0.3.5 h1:OcaySEmAQJgyYcArR+gGGTHCyE7nvhEMTlYY+Dp8CpY= +github.com/gliderlabs/ssh v0.3.5/go.mod h1:8XB4KraRrX39qHhT6yxPsHedjA08I/uBVwj4xC+/+z4= +github.com/go-asn1-ber/asn1-ber v1.3.1/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0= +github.com/go-fonts/dejavu v0.1.0/go.mod h1:4Wt4I4OU2Nq9asgDCteaAaWZOV24E+0/Pwo0gppep4g= +github.com/go-fonts/latin-modern v0.2.0/go.mod h1:rQVLdDMK+mK1xscDwsqM5J8U2jrRa3T0ecnM9pNujks= +github.com/go-fonts/liberation v0.1.1/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY= +github.com/go-fonts/liberation v0.2.0/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY= +github.com/go-fonts/stix v0.1.0/go.mod h1:w/c1f0ldAUlJmLBvlbkvVXLAD+tAMqobIIQpmnUIzUY= +github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI= +github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic= +github.com/go-git/go-billy/v5 v5.3.1/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= +github.com/go-git/go-billy/v5 v5.4.1/go.mod h1:vjbugF6Fz7JIflbVpl1hJsGjSHNltrSw45YK/ukIvQg= +github.com/go-git/go-billy/v5 v5.5.0 h1:yEY4yhzCDuMGSv83oGxiBotRzhwhNr8VZyphhiu+mTU= +github.com/go-git/go-billy/v5 v5.5.0/go.mod h1:hmexnoNsr2SJU1Ju67OaNz5ASJY3+sHgFRpCtpDCKow= +github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20230305113008-0c11038e723f h1:Pz0DHeFij3XFhoBRGUDPzSJ+w2UcK5/0JvF8DRI58r8= +github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20230305113008-0c11038e723f/go.mod h1:8LHG1a3SRW71ettAD/jW13h8c6AqjVSeL11RAdgaqpo= +github.com/go-git/go-git/v5 v5.8.1/go.mod h1:FHFuoD6yGz5OSKEBK+aWN9Oah0q54Jxl0abmj6GnqAo= +github.com/go-git/go-git/v5 v5.9.0 h1:cD9SFA7sHVRdJ7AYck1ZaAa/yeuBvGPxwXDL8cxrObY= +github.com/go-git/go-git/v5 v5.9.0/go.mod h1:RKIqga24sWdMGZF+1Ekv9kylsDz6LzdTSI2s/OsZWE0= +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-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= +github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= +github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= +github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= +github.com/go-latex/latex v0.0.0-20210118124228-b3d85cf34e07/go.mod h1:CO1AlKB2CSIqUrmQPqA0gdRIlnLEY0gK5JGjh37zN5U= +github.com/go-latex/latex v0.0.0-20210823091927-c0d11ff05a81/go.mod h1:SX0U8uGpxhq9o2S/CELCSUxEWWAuoCUcVCQWv7G2OCk= +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-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= +github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= +github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= +github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= +github.com/go-logr/logr v0.4.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= +github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.2.1/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/stdr v1.2.0/go.mod h1:YkVgnZu1ZjjL7xTxrfm/LLZBfkhTqSR1ydtm6jTKKwI= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= +github.com/go-openapi/analysis v0.21.2/go.mod h1:HZwRk4RRisyG8vx2Oe6aqeSQcoxRp47Xkp3+K6q+LdY= +github.com/go-openapi/errors v0.19.8/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M= +github.com/go-openapi/errors v0.19.9/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M= +github.com/go-openapi/errors v0.20.2/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M= +github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= +github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= +github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= +github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= +github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg= +github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc= +github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8= +github.com/go-openapi/jsonreference v0.19.5/go.mod h1:RdybgQwPxbL4UEjuAruzK1x3nE69AqPYEJeo/TWfEeg= +github.com/go-openapi/jsonreference v0.19.6/go.mod h1:diGHMEHg2IqXZGKxqyvWdfWU/aim5Dprw5bqpKkTvns= +github.com/go-openapi/loads v0.21.1/go.mod h1:/DtAMXXneXFjbQMGEtbamCZb+4x7eGwkvZCvBmwUG+g= +github.com/go-openapi/runtime v0.23.1/go.mod h1:AKurw9fNre+h3ELZfk6ILsfvPN+bvvlaU/M9q/r9hpk= +github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc= +github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo= +github.com/go-openapi/spec v0.20.4/go.mod h1:faYFR1CvsJZ0mNsmsphTMSoRrNV3TEDoAM7FOEWeq8I= +github.com/go-openapi/strfmt v0.21.0/go.mod h1:ZRQ409bWMj+SOgXofQAGTIo2Ebu72Gs+WaRADcS5iNg= +github.com/go-openapi/strfmt v0.21.1/go.mod h1:I/XVKeLc5+MM5oPNN7P6urMOpuLXEcNrCX/rPGuWb0k= +github.com/go-openapi/strfmt v0.21.2/go.mod h1:I/XVKeLc5+MM5oPNN7P6urMOpuLXEcNrCX/rPGuWb0k= +github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= +github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= +github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= +github.com/go-openapi/swag v0.19.14/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= +github.com/go-openapi/swag v0.19.15/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= +github.com/go-openapi/swag v0.21.1/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= +github.com/go-openapi/validate v0.21.0/go.mod h1:rjnrwK57VJ7A8xqfpAOEKRH8yQSGUriMu5/zuPSQ1hg= +github.com/go-pdf/fpdf v0.5.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M= +github.com/go-pdf/fpdf v0.6.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M= +github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= +github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q= +github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= +github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD876Lmtgy7VtROAbHHXk8no= +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-playground/validator/v10 v10.4.1 h1:pH2c5ADXtd66mxoE0Zm9SUhxE20r7aM3F26W0hOn+GE= +github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4= +github.com/go-resty/resty/v2 v2.1.1-0.20191201195748-d7b97669fe48/go.mod h1:dZGr0i9PLlaaTD4H/hoZIDjQ+r6xq8mgbRzHZf7f2J8= +github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= +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-stack/stack v1.8.1/go.mod h1:dcoOX6HbPZSZptuspn9bctJ+N/CnF5gGygcUP3XYfe4= +github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= +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/go-zookeeper/zk v1.0.2/go.mod h1:nOB03cncLtlp4t+UAkGSV+9beXP/akpekBwL+UX1Qcw= +github.com/gobuffalo/attrs v0.0.0-20190224210810-a9411de4debd/go.mod h1:4duuawTqi2wkkpB4ePgWMaai6/Kc6WEz83bhFwpHzj0= +github.com/gobuffalo/depgen v0.0.0-20190329151759-d478694a28d3/go.mod h1:3STtPUQYuzV0gBVOY3vy6CfMm/ljR4pABfrTeHNLHUY= +github.com/gobuffalo/depgen v0.1.0/go.mod h1:+ifsuy7fhi15RWncXQQKjWS9JPkdah5sZvtHc2RXGlg= +github.com/gobuffalo/envy v1.6.15/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI= +github.com/gobuffalo/envy v1.7.0/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI= +github.com/gobuffalo/flect v0.1.0/go.mod h1:d2ehjJqGOH/Kjqcoz+F7jHTBbmDb38yXA598Hb50EGs= +github.com/gobuffalo/flect v0.1.1/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI= +github.com/gobuffalo/flect v0.1.3/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI= +github.com/gobuffalo/genny v0.0.0-20190329151137-27723ad26ef9/go.mod h1:rWs4Z12d1Zbf19rlsn0nurr75KqhYp52EAGGxTbBhNk= +github.com/gobuffalo/genny v0.0.0-20190403191548-3ca520ef0d9e/go.mod h1:80lIj3kVJWwOrXWWMRzzdhW3DsrdjILVil/SFKBzF28= +github.com/gobuffalo/genny v0.1.0/go.mod h1:XidbUqzak3lHdS//TPu2OgiFB+51Ur5f7CSnXZ/JDvo= +github.com/gobuffalo/genny v0.1.1/go.mod h1:5TExbEyY48pfunL4QSXxlDOmdsD44RRq4mVZ0Ex28Xk= +github.com/gobuffalo/gitgen v0.0.0-20190315122116-cc086187d211/go.mod h1:vEHJk/E9DmhejeLeNt7UVvlSGv3ziL+djtTr3yyzcOw= +github.com/gobuffalo/gogen v0.0.0-20190315121717-8f38393713f5/go.mod h1:V9QVDIxsgKNZs6L2IYiGR8datgMhB577vzTDqypH360= +github.com/gobuffalo/gogen v0.1.0/go.mod h1:8NTelM5qd8RZ15VjQTFkAW6qOMx5wBbW4dSCS3BY8gg= +github.com/gobuffalo/gogen v0.1.1/go.mod h1:y8iBtmHmGc4qa3urIyo1shvOD8JftTtfcKi+71xfDNE= +github.com/gobuffalo/logger v0.0.0-20190315122211-86e12af44bc2/go.mod h1:QdxcLw541hSGtBnhUc4gaNIXRjiDppFGaDqzbrBd3v8= +github.com/gobuffalo/mapi v1.0.1/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc= +github.com/gobuffalo/mapi v1.0.2/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc= +github.com/gobuffalo/packd v0.0.0-20190315124812-a385830c7fc0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4= +github.com/gobuffalo/packd v0.1.0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4= +github.com/gobuffalo/packr/v2 v2.0.9/go.mod h1:emmyGweYTm6Kdper+iywB6YK5YzuKchGtJQZ0Odn4pQ= +github.com/gobuffalo/packr/v2 v2.2.0/go.mod h1:CaAwI0GPIAv+5wKLtv8Afwl+Cm78K/I/VCm/3ptBN+0= +github.com/gobuffalo/syncx v0.0.0-20190224160051-33c29581e754/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw= +github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee h1:s+21KNqlpePfkah2I+gwHF8xmJWRjooY+5248k6m4A0= +github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= +github.com/gobwas/pool v0.2.0 h1:QEmUOlnSjWtnpRGHF3SauEiOsy82Cup83Vf2LcMlnc8= +github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= +github.com/gobwas/ws v1.0.2 h1:CoAavW/wd/kulfZmSIBt6p24n4j7tHgNVCjsfHVNUbo= +github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= +github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= +github.com/goccy/go-yaml v1.9.5/go.mod h1:U/jl18uSupI5rdI2jmuCswEA2htH9eXfferR3KfscvA= +github.com/godbus/dbus v0.0.0-20151105175453-c7fdd8b5cd55/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= +github.com/godbus/dbus v0.0.0-20180201030542-885f9cc04c9c/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= +github.com/godbus/dbus v0.0.0-20190422162347-ade71ed3457e/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= +github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/godbus/dbus/v5 v5.0.6/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/gofrs/uuid v3.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +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/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= +github.com/gogo/googleapis v1.2.0/go.mod h1:Njal3psf3qN6dwBtQfUmBZh2ybovJ0tlu3o/AC7HYjU= +github.com/gogo/googleapis v1.4.0/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= +github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/gogo/protobuf v1.3.0/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +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 v3.2.1+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= +github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= +github.com/golang-jwt/jwt/v4 v4.2.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= +github.com/golang-jwt/jwt/v4 v4.4.2 h1:rcc4lwaZgFMCZ5jxF9ABolDcIHdBytAFgqFPbSJQAYs= +github.com/golang-jwt/jwt/v4 v4.4.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= +github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= +github.com/golang-sql/sqlexp v0.1.0/go.mod h1:J4ad9Vo8ZCWQ2GMrC4UCQy1JpCbwU9m3EOqtpKwwwHI= +github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= +github.com/golang/glog v1.1.0 h1:/d3pCKDPWNnvIWe0vVUpNP32qc8U3PDVxySP/y360qE= +github.com/golang/glog v1.1.0/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ= +github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +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/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= +github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +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/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA= +github.com/google/flatbuffers v2.0.8+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= +github.com/google/gnostic v0.5.7-v3refs/go.mod h1:73MKFl6jIHelAJNaBGFzt3SPtZULs9dYrGFt8OiIsHQ= +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/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= +github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-containerregistry v0.5.1/go.mod h1:Ct15B4yir3PLOP5jsy0GNeYVaIZs/MK/Jz5any1wFW0= +github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= +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.1.1 h1:H91sIMlt1NZzN7R+/ASswyouLJfW0WLW7fhyUFvDEkY= +github.com/google/go-replayers/httpreplay v1.1.1/go.mod h1:gN9GeLIs7l6NUoVaSSnv2RiqK1NiwAmD0MrKeC9IIks= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/gofuzz v1.2.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/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= +github.com/google/martian/v3 v3.3.2 h1:IqNFLAmvJOgVlpdEBiQbDc2EwKW77amAycfTuWKdfvw= +github.com/google/martian/v3 v3.3.2/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-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20220318212150-b2ab0324ddda/go.mod h1:KgnwoLYCZ8IQu3XUZ8Nc/bM9CCZFOyjUNOSygVozoDg= +github.com/google/pprof v0.0.0-20220608213341-c488b8fa1db3/go.mod h1:gSuNB+gJaOiQKLEZ+q+PK9Mq3SOzhRcw2GsGS/FhYDk= +github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/s2a-go v0.1.4 h1:1kZ/sQM3srePvKs3tXAvQzo66XfcReoqFpIpIccE7Oc= +github.com/google/s2a-go v0.1.4/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= +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.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.1.2/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/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= +github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= +github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= +github.com/googleapis/enterprise-certificate-proxy v0.2.1/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= +github.com/googleapis/enterprise-certificate-proxy v0.2.3 h1:yk9/cqRKtT9wXZSsRH9aurXEpJX+U6FLtpYTdC3R06k= +github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= +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/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/OthfcblKl4IGNaM= +github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99EXz9pXxye9YM= +github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= +github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo= +github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY= +github.com/googleapis/gax-go/v2 v2.7.0/go.mod h1:TEop28CZZQ2y+c0VxMUmu1lV+fQx57QpBWsYpwqHJx8= +github.com/googleapis/gax-go/v2 v2.7.1/go.mod h1:4orTrqY6hXxxaUL4LHIPl6lGo8vAE38/qKbhSAKP6QI= +github.com/googleapis/gax-go/v2 v2.11.0 h1:9V9PWXEsWnPpQhu/PeQIkS4eGzMlTLGgt80cUUI8Ki4= +github.com/googleapis/gax-go/v2 v2.11.0/go.mod h1:DxmR61SGKkGLa2xigwuZIQpkCI2S5iydzRfb3peWZJI= +github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg= +github.com/googleapis/gnostic v0.5.1/go.mod h1:6U4PtQXGIEt/Z3h5MAT7FNofLnw9vXk2cUuW7uA/OeU= +github.com/googleapis/gnostic v0.5.5/go.mod h1:7+EbHbldMins07ALC74bsA81Ovc97DwqyJO1AENw9kA= +github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= +github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= +github.com/gophercloud/gophercloud v0.24.0/go.mod h1:Q8fZtyi5zZxPS/j9aj3sSxtvj41AdQMDwyo1myduD5c= +github.com/gophercloud/gophercloud v0.25.0/go.mod h1:Q8fZtyi5zZxPS/j9aj3sSxtvj41AdQMDwyo1myduD5c= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= +github.com/gorilla/handlers v0.0.0-20150720190736-60c7bfde3e33/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= +github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/mux v1.7.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= +github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= +github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= +github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/grafana/regexp v0.0.0-20220304095617-2e8d9baf4ac2/go.mod h1:M5qHK+eWfAv8VR/265dIuEpL3fNfeC21tXXp9itM24A= +github.com/graph-gophers/graphql-go v1.5.0 h1:fDqblo50TEpD0LY7RXk/LFVYEVqo3+tXMNMPSVXA1yc= +github.com/graph-gophers/graphql-go v1.5.0/go.mod h1:YtmJZDLbF1YYNrlNAuiO5zAStUWc3XZT07iGsVqe1Os= +github.com/graph-gophers/graphql-transport-ws v0.0.2 h1:DbmSkbIGzj8SvHei6n8Mh9eLQin8PtA8xY9eCzjRpvo= +github.com/graph-gophers/graphql-transport-ws v0.0.2/go.mod h1:5BVKvFzOd2BalVIBFfnfmHjpJi/MZ5rOj8G55mXvZ8g= +github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= +github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= +github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= +github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= +github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= +github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0/go.mod h1:hgWBS7lorOAVIJEQMi4ZsPv9hVvWI6+ch50m39Pf2Ks= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.10.2/go.mod h1:chrfS3YoLAlKTRE5cFWvCbt8uGAjshktT4PveTUpsFQ= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3/go.mod h1:o//XUCC/F+yRGJoPO/VU0GSB0f8Nhgmxx0VIRUvaC0w= +github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 h1:MJG/KsmcqMwFAkh8mTnAwhyKoB+sTAnY4CACC110tbU= +github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645/go.mod h1:6iZfnjpejD4L/4DwD7NryNaJyCQdzwWwH2MWhCA90Kw= +github.com/hanwen/go-fuse v1.0.0/go.mod h1:unqXarDXqzAk0rt98O2tVndEPIpUgLD9+rwFisZH3Ok= +github.com/hanwen/go-fuse/v2 v2.1.0/go.mod h1:oRyA5eK+pvJyv5otpO/DgccS8y/RvYMaO00GgRLGryc= +github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= +github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= +github.com/hashicorp/consul/api v1.12.0/go.mod h1:6pVBMo0ebnYdt2S3H87XhekM/HHrUoTD2XXb/VrZVy0= +github.com/hashicorp/consul/api v1.13.0/go.mod h1:ZlVrynguJKcYr54zGaDbaL3fOvKC9m72FhPvA8T35KQ= +github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= +github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= +github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms= +github.com/hashicorp/cronexpr v1.1.1/go.mod h1:P4wA0KBl9C5q2hABiMO7cp6jcIg96CDh1Efb3g1PWA4= +github.com/hashicorp/errwrap v0.0.0-20141028054710-7554cd9344ce/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.7.1 h1:SWiSWN/42qdpR0MdhaOc/bLR48PLuP1ZQtYLRlM69uY= +github.com/hashicorp/go-getter v1.7.1/go.mod h1:W7TalhMmbPmsSMdNjD0ZskARur/9GJ17cfHTRtXV744= +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.12.2/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.2/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= +github.com/hashicorp/go-hclog v1.2.2/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= +github.com/hashicorp/go-hclog v1.5.0 h1:bI2ocEMgcVlz55Oj1xZNBsVi900c7II+fWDyV9o+13c= +github.com/hashicorp/go-hclog v1.5.0/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= +github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-immutable-radix v1.2.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc= +github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= +github.com/hashicorp/go-kms-wrapping/entropy v0.1.0/go.mod h1:d1g9WGtAunDNpek8jUIEJnBlbgKS1N2Q61QkHiZyR1g= +github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= +github.com/hashicorp/go-multierror v0.0.0-20161216184304-ed905158d874/go.mod h1:JMRHfdO9jKNzS/+BTlxCjKNQHg/jZAft8U7LloJvN7I= +github.com/hashicorp/go-multierror v1.0.0/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/go.mod h1:5fGEH17QVwTTcR0zV7yhDPLLmFX9YSZ38b18Udy6vYQ= +github.com/hashicorp/go-plugin v1.4.4/go.mod h1:viDMjcLJuDui6pXb8U4HVfb8AamCWhHGUjr2IrTF67s= +github.com/hashicorp/go-plugin v1.5.1 h1:oGm7cWBaYIp3lJpx1RUEfLWophprE2EV/KUeqBYo+6k= +github.com/hashicorp/go-plugin v1.5.1/go.mod h1:w1sAEES3g3PuV/RzUrgow20W2uErMly84hhD3um1WL4= +github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= +github.com/hashicorp/go-retryablehttp v0.6.6/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= +github.com/hashicorp/go-retryablehttp v0.7.1/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= +github.com/hashicorp/go-retryablehttp v0.7.4 h1:ZQgVdpTdAL7WpMIwLzCfbalOcSUdkDZnpUv3/+BxzFA= +github.com/hashicorp/go-retryablehttp v0.7.4/go.mod h1:Jy/gPYAdjqffZ/yFGCFV2doI5wjtH1ewM9u8iYVjtX8= +github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= +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-secure-stdlib/base62 v0.1.1/go.mod h1:EdWO6czbmthiwZ3/PUsDV+UD1D5IRU4ActiaWGwt0Yw= +github.com/hashicorp/go-secure-stdlib/mlock v0.1.1/go.mod h1:zq93CJChV6L9QTfGKtfBxKqD7BqqXx5O04A/ns2p5+I= +github.com/hashicorp/go-secure-stdlib/mlock v0.1.2 h1:p4AKXPPS24tO8Wc8i1gLvSKdmkiSY5xuju57czJ/IJQ= +github.com/hashicorp/go-secure-stdlib/mlock v0.1.2/go.mod h1:zq93CJChV6L9QTfGKtfBxKqD7BqqXx5O04A/ns2p5+I= +github.com/hashicorp/go-secure-stdlib/parseutil v0.1.1/go.mod h1:QmrqtbKuxxSWTN3ETMPuB+VtEiBJ/A9XhoYGv8E1uD8= +github.com/hashicorp/go-secure-stdlib/parseutil v0.1.6 h1:om4Al8Oy7kCm/B86rLCLah4Dt5Aa0Fr5rYBG60OzwHQ= +github.com/hashicorp/go-secure-stdlib/parseutil v0.1.6/go.mod h1:QmrqtbKuxxSWTN3ETMPuB+VtEiBJ/A9XhoYGv8E1uD8= +github.com/hashicorp/go-secure-stdlib/password v0.1.1/go.mod h1:9hH302QllNwu1o2TGYtSk8I8kTAN0ca1EHpwhm5Mmzo= +github.com/hashicorp/go-secure-stdlib/strutil v0.1.1/go.mod h1:gKOamz3EwoIoJq7mlMIRBpVTAUn8qPCrEclOKKWhD3U= +github.com/hashicorp/go-secure-stdlib/strutil v0.1.2 h1:kes8mmyCpxJsI7FTwtzRqEy9CdjCtrXrXGuOpxEA7Ts= +github.com/hashicorp/go-secure-stdlib/strutil v0.1.2/go.mod h1:Gou2R9+il93BqX25LAKCLuM+y9U2T4hlwvT1yprcna4= +github.com/hashicorp/go-secure-stdlib/tlsutil v0.1.1/go.mod h1:l8slYwnJA26yBz+ErHpp2IRCLr0vuOMGBORIz4rRiAs= +github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= +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-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= +github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= +github.com/hashicorp/go-uuid v1.0.3 h1:2gKiV6YVmrJ1i2CKKa9obLvRieoRGviZFL26PcT/Co8= +github.com/hashicorp/go-uuid v1.0.3/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.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= +github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= +github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= +github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/hc-install v0.6.0/go.mod h1:10I912u3nntx9Umo1VAeYPUUuehk0aRQJYpMwbX5wQA= +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.18.0 h1:wYnG7Lt31t2zYkcquwgKo6MWXzRUDIeIVU5naZwHLl8= +github.com/hashicorp/hcl/v2 v2.18.0/go.mod h1:ThLC89FV4p9MPW804KVbe/cEXoQ8NZEh+JtMeeGErHE= +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/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= +github.com/hashicorp/mdns v1.0.4/go.mod h1:mtBihi+LeNXGtG8L9dX59gAEa12BDtBQSp4v/YAJqrc= +github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= +github.com/hashicorp/memberlist v0.3.0/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= +github.com/hashicorp/memberlist v0.3.1/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= +github.com/hashicorp/nomad/api v0.0.0-20220629141207-c2428e1673ec/go.mod h1:jP79oXjopTyH6E8LF0CEMq67STgrlmBRIyijA0tuR5o= +github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= +github.com/hashicorp/serf v0.9.6/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= +github.com/hashicorp/terraform-config-inspect v0.0.0-20191115094559-17f92b0546e8/go.mod h1:p+ivJws3dpqbp1iP84+npOyAmTTOLMgCzrXd3GSdn/A= +github.com/hashicorp/terraform-exec v0.19.0/go.mod h1:tbxUpe3JKruE9Cuf65mycSIT8KiNPZ0FkuTE3H4urQg= +github.com/hashicorp/terraform-json v0.4.0/go.mod h1:eAbqb4w0pSlRmdvl8fOyHAi/+8jnkVYN28gJkSJrLhU= +github.com/hashicorp/terraform-json v0.17.1/go.mod h1:Huy6zt6euxaY9knPAFKjUITn8QxUFIe9VuSzb4zn/0o= +github.com/hashicorp/terraform-plugin-go v0.19.0 h1:BuZx/6Cp+lkmiG0cOBk6Zps0Cb2tmqQpDM3iAtnhDQU= +github.com/hashicorp/terraform-plugin-go v0.19.0/go.mod h1:EhRSkEPNoylLQntYsk5KrDHTZJh9HQoumZXbOGOXmec= +github.com/hashicorp/terraform-plugin-log v0.9.0 h1:i7hOA+vdAItN1/7UrfBqBwvYPQ9TFvymaRGZED3FCV0= +github.com/hashicorp/terraform-plugin-log v0.9.0/go.mod h1:rKL8egZQ/eXSyDqzLUuwUYLVdlYeamldAHSxjUFADow= +github.com/hashicorp/terraform-plugin-sdk v1.7.0 h1:B//oq0ZORG+EkVrIJy0uPGSonvmXqxSzXe8+GhknoW0= +github.com/hashicorp/terraform-plugin-sdk v1.7.0/go.mod h1:OjgQmey5VxnPej/buEhe+YqKm0KNvV3QqU4hkqHqPCY= +github.com/hashicorp/terraform-plugin-test v1.2.0/go.mod h1:QIJHYz8j+xJtdtLrFTlzQVC0ocr3rf/OjIpgZLK56Hs= +github.com/hashicorp/terraform-registry-address v0.2.2/go.mod h1:LtwNbCihUoUZ3RYriyS2wF/lGPB6gF9ICLRtuDk7hSo= +github.com/hashicorp/terraform-svchost v0.0.0-20191011084731-65d371908596/go.mod h1:kNDNcF7sN4DocDLBkQYz73HGKwN1ANB1blq4lIYLYvg= +github.com/hashicorp/terraform-svchost v0.1.1 h1:EZZimZ1GxdqFRinZ1tpJwVxxt49xc/S52uzrw4x0jKQ= +github.com/hashicorp/terraform-svchost v0.1.1/go.mod h1:mNsjQfZyf/Jhz35v6/0LWcv26+X7JPS+buii2c9/ctc= +github.com/hashicorp/vault/api v1.7.2/go.mod h1:xbfA+1AvxFseDzxxdWaL0uO99n1+tndus4GCrtouy0M= +github.com/hashicorp/vault/api v1.8.2 h1:C7OL9YtOtwQbTKI9ogB0A1wffRbCN+rH/LLCHO3d8HM= +github.com/hashicorp/vault/api v1.8.2/go.mod h1:ML8aYzBIhY5m1MD1B2Q0JV89cC85YVH4t5kBaZiyVaE= +github.com/hashicorp/vault/sdk v0.5.1/go.mod h1:DoGraE9kKGNcVgPmTuX357Fm6WAx1Okvde8Vp3dPDoU= +github.com/hashicorp/vault/sdk v0.5.3/go.mod h1:DoGraE9kKGNcVgPmTuX357Fm6WAx1Okvde8Vp3dPDoU= +github.com/hashicorp/vault/sdk v0.6.1 h1:sjZC1z4j5Rh2GXYbkxn5BLK05S1p7+MhW4AgdUmgRUA= +github.com/hashicorp/vault/sdk v0.6.1/go.mod h1:Ck4JuAC6usTphfrrRJCRH+7/N7O2ozZzkm/fzQFt4uM= +github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= +github.com/hashicorp/yamux v0.0.0-20181012175058-2f1d1f20f75d/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= +github.com/hashicorp/yamux v0.1.1 h1:yrQxtgseBDrq9Y652vSRDvsKCJKOUD+GzTS4Y0Y8pvE= +github.com/hashicorp/yamux v0.1.1/go.mod h1:CtWFDAQgb7dxtzFs4tWbplKIe2jSi3+5vKbgIO0SLnQ= +github.com/hasura/go-graphql-client v0.10.0 h1:eQm/ap/rqxMG6yAGe6J+FkXu1VqJ9p21E63vz0A7zLQ= +github.com/hasura/go-graphql-client v0.10.0/go.mod h1:z9UPkMmCBMuJjvBEtdE6F+oTR2r15AcjirVNq/8P+Ig= +github.com/hetznercloud/hcloud-go v1.33.1/go.mod h1:XX/TQub3ge0yWR2yHWmnDVIrB+MQbda1pHxkUmDlUME= +github.com/hetznercloud/hcloud-go v1.35.0/go.mod h1:mepQwR6va27S3UQthaEPGS86jtzSY9xWL1e9dyxXpgA= +github.com/hexops/autogold v1.3.0 h1:IEtGNPxBeBu8RMn8eKWh/Ll9dVNgSnJ7bp/qHgMQ14o= +github.com/hexops/autogold v1.3.0/go.mod h1:d4hwi2rid66Sag+BVuHgwakW/EmaFr8vdTSbWDbrDRI= +github.com/hexops/autogold/v2 v2.2.1 h1:JPUXuZQGkcQMv7eeDXuNMovjfoRYaa0yVcm+F3voaGY= +github.com/hexops/autogold/v2 v2.2.1/go.mod h1:IJwxtUfj1BGLm0YsR/k+dIxYi6xbeLjqGke2bzcOTMI= +github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM= +github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= +github.com/hexops/valast v1.4.4 h1:rETyycw+/L2ZVJHHNxEBgh8KUn+87WugH9MxcEv9PGs= +github.com/hexops/valast v1.4.4/go.mod h1:Jcy1pNH7LNraVaAZDLyv21hHg2WBv9Nf9FL6fGxU7o4= +github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/huandu/xstrings v1.3.1/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= +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/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= +github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= +github.com/iancoleman/strcase v0.3.0 h1:nTXanmYxhfFAMjZL34Ov6gkzEsSJZ5DbhxWjvSASxEI= +github.com/iancoleman/strcase v0.3.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/ianlancetaylor/demangle v0.0.0-20210905161508-09a460cdf81d/go.mod h1:aYm2/VgdVmcIU8iMfdMvDMsRAQjcfZSKFby6HOFvi/w= +github.com/ianlancetaylor/demangle v0.0.0-20220319035150-800ac71e25c2/go.mod h1:aYm2/VgdVmcIU8iMfdMvDMsRAQjcfZSKFby6HOFvi/w= +github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/imdario/mergo v0.3.10/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= +github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= +github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= +github.com/imdario/mergo v0.3.15 h1:M8XP7IuFNsqUx6VPK2P9OSmsYsI/YFaGil0uD21V3dM= +github.com/imdario/mergo v0.3.15/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY= +github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= +github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= +github.com/intel/goresctrl v0.2.0/go.mod h1:+CZdzouYFn5EsxgqAQTEzMfwKwuc0fVdMrT9FCCAVRQ= +github.com/ionos-cloud/sdk-go/v6 v6.1.0/go.mod h1:Ox3W0iiEz0GHnfY9e5LmAxwklsxguuNFEUSu0gVRTME= +github.com/j-keck/arping v0.0.0-20160618110441-2cf9dc699c56/go.mod h1:ymszkNOg6tORTn+6F6j+Jc8TOr5osrynvN6ivFWZ2GA= +github.com/j-keck/arping v1.0.2/go.mod h1:aJbELhR92bSk7tp79AWM/ftfc90EfEi2bQJrbBFOsPw= +github.com/jackc/chunkreader v1.0.0/go.mod h1:RT6O25fNZIuasFJRyZ4R/Y2BbhasbmZXF9QQ7T3kePo= +github.com/jackc/chunkreader/v2 v2.0.0/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk= +github.com/jackc/chunkreader/v2 v2.0.1/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk= +github.com/jackc/pgconn v0.0.0-20190420214824-7e0022ef6ba3/go.mod h1:jkELnwuX+w9qN5YIfX0fl88Ehu4XC3keFuOJJk9pcnA= +github.com/jackc/pgconn v0.0.0-20190824142844-760dd75542eb/go.mod h1:lLjNuW/+OfW9/pnVKPazfWOgNfH2aPem8YQ7ilXGvJE= +github.com/jackc/pgconn v0.0.0-20190831204454-2fabfa3c18b7/go.mod h1:ZJKsE/KZfsUgOEh9hBm+xYTstcNHg7UPMVJqRfQxq4s= +github.com/jackc/pgconn v1.8.0/go.mod h1:1C2Pb36bGIP9QHGBYCjnyhqu7Rv3sGshaQUvmfGIB/o= +github.com/jackc/pgconn v1.9.0/go.mod h1:YctiPyvzfU11JFxoXokUOOKQXQmDMoJL9vJzHH8/2JY= +github.com/jackc/pgconn v1.9.1-0.20210724152538-d89c8390a530/go.mod h1:4z2w8XhRbP1hYxkpTuBjTS3ne3J48K83+u0zoyvg2pI= +github.com/jackc/pgconn v1.12.1/go.mod h1:ZkhRC59Llhrq3oSfrikvwQ5NaxYExr6twkdkMLaKono= +github.com/jackc/pgio v1.0.0/go.mod h1:oP+2QK2wFfUWgr+gxjoBH9KGBb31Eio69xUb0w5bYf8= +github.com/jackc/pgmock v0.0.0-20190831213851-13a1b77aafa2/go.mod h1:fGZlG77KXmcq05nJLRkk0+p82V8B8Dw8KN2/V9c/OAE= +github.com/jackc/pgmock v0.0.0-20201204152224-4fe30f7445fd/go.mod h1:hrBW0Enj2AZTNpt/7Y5rr2xe/9Mn757Wtb2xeBzPv2c= +github.com/jackc/pgmock v0.0.0-20210724152146-4ad1a8207f65/go.mod h1:5R2h2EEX+qri8jOWMbJCtaPWkrrNc7OHwsp2TCqp7ak= +github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= +github.com/jackc/pgproto3 v1.1.0/go.mod h1:eR5FA3leWg7p9aeAqi37XOTgTIbkABlvcPB3E5rlc78= +github.com/jackc/pgproto3/v2 v2.0.0-alpha1.0.20190420180111-c116219b62db/go.mod h1:bhq50y+xrl9n5mRYyCBFKkpRVTLYJVWeCc+mEAI3yXA= +github.com/jackc/pgproto3/v2 v2.0.0-alpha1.0.20190609003834-432c2951c711/go.mod h1:uH0AWtUmuShn0bcesswc4aBTWGvw0cAxIJp+6OB//Wg= +github.com/jackc/pgproto3/v2 v2.0.0-rc3/go.mod h1:ryONWYqW6dqSg1Lw6vXNMXoBJhpzvWKnT95C46ckYeM= +github.com/jackc/pgproto3/v2 v2.0.0-rc3.0.20190831210041-4c03ce451f29/go.mod h1:ryONWYqW6dqSg1Lw6vXNMXoBJhpzvWKnT95C46ckYeM= +github.com/jackc/pgproto3/v2 v2.0.6/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= +github.com/jackc/pgproto3/v2 v2.1.1/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= +github.com/jackc/pgproto3/v2 v2.3.0/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= +github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b/go.mod h1:vsD4gTJCa9TptPL8sPkXrLZ+hDuNrZCnj29CQpr4X1E= +github.com/jackc/pgtype v0.0.0-20190421001408-4ed0de4755e0/go.mod h1:hdSHsc1V01CGwFsrv11mJRHWJ6aifDLfdV3aVjFF0zg= +github.com/jackc/pgtype v0.0.0-20190824184912-ab885b375b90/go.mod h1:KcahbBH1nCMSo2DXpzsoWOAfFkdEtEJpPbVLq8eE+mc= +github.com/jackc/pgtype v0.0.0-20190828014616-a8802b16cc59/go.mod h1:MWlu30kVJrUS8lot6TQqcg7mtthZ9T0EoIBFiJcmcyw= +github.com/jackc/pgtype v1.8.1-0.20210724151600-32e20a603178/go.mod h1:C516IlIV9NKqfsMCXTdChteoXmwgUceqaLfjg2e3NlM= +github.com/jackc/pgtype v1.11.0/go.mod h1:LUMuVrfsFfdKGLw+AFFVv6KtHOFMwRgDDzBt76IqCA4= +github.com/jackc/pgx/v4 v4.0.0-20190420224344-cc3461e65d96/go.mod h1:mdxmSJJuR08CZQyj1PVQBHy9XOp5p8/SHH6a0psbY9Y= +github.com/jackc/pgx/v4 v4.0.0-20190421002000-1b8f0016e912/go.mod h1:no/Y67Jkk/9WuGR0JG/JseM9irFbnEPbuWV2EELPNuM= +github.com/jackc/pgx/v4 v4.0.0-pre1.0.20190824185557-6972a5742186/go.mod h1:X+GQnOEnf1dqHGpw7JmHqHc1NxDoalibchSk9/RWuDc= +github.com/jackc/pgx/v4 v4.12.1-0.20210724153913-640aa07df17c/go.mod h1:1QD0+tgSXP7iUjYm9C1NxKhny7lq6ee99u/z+IHFcgs= +github.com/jackc/pgx/v4 v4.16.1/go.mod h1:SIhx0D5hoADaiXZVyv+3gSm3LCIIINTVO0PficsvWGQ= +github.com/jackc/puddle v0.0.0-20190413234325-e4ced69a3a2b/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= +github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= +github.com/jackc/puddle v1.1.3/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= +github.com/jackc/puddle v1.2.1/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= +github.com/jarcoal/httpmock v1.3.0 h1:2RJ8GP0IIaWwcC9Fp2BmVi8Kog3v2Hn7VXM3fTd+nuc= +github.com/jarcoal/httpmock v1.3.0/go.mod h1:3yb8rc4BI7TCBhFY8ng0gjuLKJNquuDNiPaZjnENuYg= +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/gopoet v0.0.0-20190322174617-17282ff210b3/go.mod h1:me9yfT6IJSlOL3FCfrg+L6yzUEZ+5jW6WHt4Sk+UPUI= +github.com/jhump/gopoet v0.1.0/go.mod h1:me9yfT6IJSlOL3FCfrg+L6yzUEZ+5jW6WHt4Sk+UPUI= +github.com/jhump/goprotoc v0.5.0/go.mod h1:VrbvcYrQOrTi3i0Vf+m+oqQWk9l72mjkJCYo7UvLHRQ= +github.com/jhump/protoreflect v1.6.0/go.mod h1:eaTn3RZAmMBcV0fifFvlm6VHNz3wSkYyXYWUh7ymB74= +github.com/jhump/protoreflect v1.11.0/go.mod h1:U7aMIjN0NWq9swDP7xDdoMfRHb35uiuTd3Z9nFXJf5E= +github.com/jhump/protoreflect v1.15.1 h1:HUMERORf3I3ZdX05WaQ6MIpd/NJ434hTp5YiKgfCL6c= +github.com/jhump/protoreflect v1.15.1/go.mod h1:jD/2GMKKE6OqX8qTjhADU1e6DShO+gavG9e0Q693nKo= +github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/jmespath/go-jmespath v0.0.0-20160803190731-bd40a432e4c7/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/jmespath/go-jmespath v0.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/joefitzgerald/rainbow-reporter v0.1.0/go.mod h1:481CNgqmVHQZzdIbN52CupLJyoVwB10FQ/IQlF1pdL8= +github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= +github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +github.com/jonboulle/clockwork v0.2.2/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8= +github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= +github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= +github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/json-iterator/go v1.1.11/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/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= +github.com/jung-kurt/gofpdf v1.0.0/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= +github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= +github.com/karrick/godirwalk v1.8.0/go.mod h1:H5KPZjojv4lE+QYImBI8xVtrBRgYrIVsaRPx4tDPEn4= +github.com/karrick/godirwalk v1.10.3/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA= +github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= +github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4= +github.com/kevinburke/ssh_config v1.2.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/asmfmt v1.3.2/go.mod h1:AG8TuvYojzulgDAMCnYn50l/5QV3Bs/tp6j0HLHbNSE= +github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= +github.com/klauspost/compress v1.11.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= +github.com/klauspost/compress v1.11.13/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= +github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/klauspost/compress v1.15.1/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= +github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= +github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I= +github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= +github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= +github.com/kolo/xmlrpc v0.0.0-20201022064351-38db28db192b/go.mod h1:pcaDhQK0/NJZEvtCO0qQPPropqV0sJOJ6YW7X+9kRwM= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.3/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/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= +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 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y= +github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= +github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lib/pq v1.1.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lib/pq v1.10.2/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/lib/pq v1.10.6/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= +github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= +github.com/linode/linodego v1.4.0/go.mod h1:PVsRxSlOiJyvG4/scTszpmZDTdgS+to3X6eS8pRrWI8= +github.com/linode/linodego v1.8.0/go.mod h1:heqhl91D8QTPVm2k9qZHP78zzbOdTFLXE9NJc3bcc50= +github.com/linuxkit/virtsock v0.0.0-20201010232012-f8cee7dfc7a3/go.mod h1:3r6x7q95whyfWQpmGZTu3gk3v2YkMi05HEzl7Tf7YEo= +github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= +github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= +github.com/lyft/protoc-gen-star v0.6.0/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA= +github.com/lyft/protoc-gen-star v0.6.1/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA= +github.com/lyft/protoc-gen-star/v2 v2.0.1/go.mod h1:RcCdONR2ScXaYnQC5tUzxzlpA3WVYF7/opLeUgcQs/o= +github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= +github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= +github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/markbates/oncer v0.0.0-20181203154359-bf2de49a0be2/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE= +github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0= +github.com/marstr/guid v1.1.0/go.mod h1:74gB1z2wpxxInTG6yaqA7KrtM0NZ+RbrcqDvYHefzho= +github.com/matryer/is v1.2.0 h1:92UTHpy8CDwaJ08GqLDzhhuixiBUUD1p3AU6PHddz4A= +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.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.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +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.7/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/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= +github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-localereader v0.0.1 h1:ygSAOl7ZXTx4RdPYinUpg6W99U8jWvWi9Ye2JC/oIi4= +github.com/mattn/go-localereader v0.0.1/go.mod h1:8fBrzywKY7BI3czFoHkuzRoWE9C+EiG4R1k4Cjx5p88= +github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-runewidth v0.0.12/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk= +github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U= +github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/mattn/go-shellwords v1.0.3/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vqg+NOMyg4B2o= +github.com/mattn/go-shellwords v1.0.6/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vqg+NOMyg4B2o= +github.com/mattn/go-shellwords v1.0.12/go.mod h1:EZzvwXDESEeg03EKmM+RmDnNOPKG4lLtQsUlTZDWQ8Y= +github.com/mattn/go-sqlite3 v1.14.14/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/maxbrunsfeld/counterfeiter/v6 v6.2.2/go.mod h1:eD9eIE7cdwcMi9rYluz88Jz2VyhSmden33/aXg4oVIY= +github.com/microsoft/ApplicationInsights-Go v0.4.4/go.mod h1:fKRUseBqkw6bDiXTs3ESTiU/4YTIHsQS4W3fP2ieF4U= +github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= +github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= +github.com/miekg/dns v1.1.48/go.mod h1:e3IlAVfNqAllflbibAZEWOXOQ+Ynzk/dDozDxY7XnME= +github.com/miekg/dns v1.1.50/go.mod h1:e3IlAVfNqAllflbibAZEWOXOQ+Ynzk/dDozDxY7XnME= +github.com/miekg/pkcs11 v1.0.3/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= +github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8/go.mod h1:mC1jAcsrzbxHt8iiaC+zU4b1ylILSosueou12R++wfY= +github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3/go.mod h1:RagcQ7I8IeTMnF8JTXieKnO4Z6JCsikNEzj0DwauVzE= +github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible/go.mod h1:8AuVvqP/mXw1px98n46wfvcGfQ4ci2FwoAjKYxuo3Z4= +github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= +github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= +github.com/mitchellh/cli v1.1.5 h1:OxRIeJXpAMztws/XHlN2vu6imG5Dpq+j61AzAX5fLng= +github.com/mitchellh/cli v1.1.5/go.mod h1:v8+iFts2sPIKUV1ltktPXMCC8fumSKFItNcD2cLtRR4= +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/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= +github.com/mitchellh/hashstructure v1.0.0 h1:ZkRJX1CyOoTkar7p/mLS5TZU4nJ1Rn/F8u9dGS02Q3Y= +github.com/mitchellh/hashstructure v1.0.0/go.mod h1:QjSHrPWS+BGUVBYkbTZWEnOh3G1DutKwClXU/ABz6AQ= +github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= +github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/mitchellh/mapstructure v1.3.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/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= +github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f/go.mod h1:OkQIRizQZAeMln+1tSwduZz7+Af5oFlKirV/MSYes2A= +github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/mitchellh/reflectwalk v1.0.1/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/mmcloughlin/avo v0.5.0/go.mod h1:ChHFdoV7ql95Wi7vuq2YT1bwCJqiWdZrQ1im3VujLYM= +github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc= +github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c= +github.com/moby/sys/mountinfo v0.4.0/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A= +github.com/moby/sys/mountinfo v0.4.1/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A= +github.com/moby/sys/mountinfo v0.5.0/go.mod h1:3bMD3Rg+zkqx8MRYPi7Pyb0Ie97QEBmdxbhnCLlSvSU= +github.com/moby/sys/signal v0.6.0/go.mod h1:GQ6ObYZfqacOwTtlXvcmh9A26dVRul/hbOZn88Kg8Tg= +github.com/moby/sys/symlink v0.1.0/go.mod h1:GGDODQmbFOjFsXvfLVn3+ZRxkch54RkSiGqsZeMYowQ= +github.com/moby/sys/symlink v0.2.0/go.mod h1:7uZVF2dqJjG/NsClqul95CqKOBRQyYSNnJ6BMgR/gFs= +github.com/moby/term v0.0.0-20200312100748-672ec06f55cd/go.mod h1:DdlQx2hp0Ss5/fLikoLlEeIYiATotOjgB//nb973jeo= +github.com/moby/term v0.0.0-20210610120745-9d4ed1856297/go.mod h1:vgPCkQMyxTZ7IDy8SXRufE172gr8+K/JE/7hHFxHW3A= +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/modocache/gover v0.0.0-20171022184752-b58185e213c5/go.mod h1:caMODM3PzxT8aQXRPkAt8xlV/e7d7w8GM5g0fa5F0D8= +github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= +github.com/montanaflynn/stats v0.6.6/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow= +github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= +github.com/mrunalp/fileutils v0.5.0/go.mod h1:M1WthSahJixYnrXQl/DFQuteStB1weuxD2QJNHXfbSQ= +github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 h1:ZK8zHtRHOkbHy6Mmr5D264iyp3TiX5OmNcI5cIARiQI= +github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6/go.mod h1:CJlz5H+gyd6CUWT45Oy4q24RdLyn7Md9Vj2/ldJBSIo= +github.com/muesli/cancelreader v0.2.2 h1:3I4Kt4BQjOR54NavqnDogx/MIoWBFa0StPA8ELUXHmA= +github.com/muesli/cancelreader v0.2.2/go.mod h1:3XuTXfFS2VjM+HTLZY9Ak0l6eUKfijIfMUZ4EgX0QYo= +github.com/muesli/reflow v0.3.0 h1:IFsN6K9NfGtjeggFP+68I4chLZV2yIKsXJFNZ+eWh6s= +github.com/muesli/reflow v0.3.0/go.mod h1:pbwTDkVPibjO2kyvBQRBxTWEEGDGq0FlB1BIKtnHY/8= +github.com/muesli/termenv v0.15.2 h1:GohcuySI0QmI3wN8Ok9PtKGkgkFIk7y6Vpb5PvrY+Wo= +github.com/muesli/termenv v0.15.2/go.mod h1:Epx+iuz8sNs7mNKhxzH4fWXGNpZwUaJKRS1noLXviQ8= +github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= +github.com/natefinch/atomic v1.0.1 h1:ZPYKxkqQOx3KZ+RsbnP/YsgvxWQPGxjC0oBt2AhwV0A= +github.com/natefinch/atomic v1.0.1/go.mod h1:N/D/ELrljoqDyT3rZrsUmtsuzvHkeB/wWjHV22AZRbM= +github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= +github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= +github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= +github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= +github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= +github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= +github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= +github.com/ncw/swift v1.0.47/go.mod h1:23YIA4yWVnGwv2dQlN4bB7egfYX6YLn0Yo/S6zZO/ZM= +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/nightlyone/lockfile v1.0.0/go.mod h1:rywoIealpdNse2r832aiD9jRk8ErCatROs6LzC841CI= +github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= +github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= +github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= +github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= +github.com/oklog/run v1.1.0 h1:GEenZ1cK0+q0+wsJew9qUg/DyD8k3JzYsZAi5gYi2mA= +github.com/oklog/run v1.1.0/go.mod h1:sVPdnTZT1zYwAJeCMu2Th4T21pA3FPOQRfWjQlk7DVU= +github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= +github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= +github.com/onsi/ginkgo v0.0.0-20151202141238-7f8ab55aaf3b/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +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.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg= +github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= +github.com/onsi/ginkgo v1.13.0/go.mod h1:+REjRxOmWfHCjfv9TTWB1jD1Frx4XydAD3zm1lskyM0= +github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= +github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= +github.com/onsi/gomega v0.0.0-20151007035656-2152b45fa28a/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= +github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= +github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= +github.com/onsi/gomega v1.9.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= +github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= +github.com/onsi/gomega v1.10.3/go.mod h1:V9xEwhxec5O8UDM77eCW8vLymOMltsqPVYWrpDsH8xc= +github.com/onsi/gomega v1.15.0/go.mod h1:cIuvLEne0aoVhAgh/O6ac0Op8WWw9H6eYCriF+tEHG0= +github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI= +github.com/onsi/gomega v1.27.10/go.mod h1:RsS8tutOdbdgzbPtzzATp12yT7kM5I5aElG3evPbQ0M= +github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= +github.com/opencontainers/go-digest v0.0.0-20170106003457-a6d0ee40d420/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= +github.com/opencontainers/go-digest v0.0.0-20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= +github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= +github.com/opencontainers/go-digest v1.0.0-rc1.0.20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= +github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= +github.com/opencontainers/image-spec v1.0.0/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= +github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= +github.com/opencontainers/image-spec v1.0.2-0.20211117181255-693428a734f5/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= +github.com/opencontainers/image-spec v1.0.2/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/runc v1.0.0-rc8.0.20190926000215-3e425f80a8c9/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= +github.com/opencontainers/runc v1.0.0-rc9/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= +github.com/opencontainers/runc v1.0.0-rc93/go.mod h1:3NOsor4w32B2tC0Zbl8Knk4Wg84SM2ImC1fxBuqJ/H0= +github.com/opencontainers/runc v1.0.2/go.mod h1:aTaHFFwQXuA71CiyxOdFFIorAoemI04suvGRQFzWTD0= +github.com/opencontainers/runc v1.1.0/go.mod h1:Tj1hFw6eFWp/o33uxGf5yF2BX5yz2Z6iptFpuvbbKqc= +github.com/opencontainers/runtime-spec v0.1.2-0.20190507144316-5b71a03e2700/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/runtime-spec v1.0.1/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/runtime-spec v1.0.2-0.20190207185410-29686dbc5559/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/runtime-spec v1.0.3-0.20200929063507-e6143ca7d51d/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/runtime-tools v0.0.0-20181011054405-1d69bd0f9c39/go.mod h1:r3f7wjNzSs2extwzU3Y+6pKfobzPh+kKFJ3ofN+3nfs= +github.com/opencontainers/selinux v1.6.0/go.mod h1:VVGKuOLlE7v4PJyT6h7mNWvq1rzqiriPsEqVhc+svHE= +github.com/opencontainers/selinux v1.8.0/go.mod h1:RScLhm78qiWa2gbVCcGkC7tCGdgk3ogry1nUQF8Evvo= +github.com/opencontainers/selinux v1.8.2/go.mod h1:MUIHuUEvKB1wtJjQdOyYRgOnLD2xAPP8dBsCoU0KuF8= +github.com/opencontainers/selinux v1.10.0/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI= +github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= +github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= +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.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= +github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= +github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= +github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= +github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= +github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= +github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= +github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= +github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= +github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +github.com/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAvS1LBMMhTE= +github.com/pelletier/go-toml v1.8.1/go.mod h1:T2/BmBdy8dvIRq1a/8aqjN41wvWlN4lrapLU/GW4pbc= +github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= +github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= +github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= +github.com/pgavlin/fx v0.1.6 h1:r9jEg69DhNoCd3Xh0+5mIbdbS3PqWrVWujkY76MFRTU= +github.com/pgavlin/fx v0.1.6/go.mod h1:KWZJ6fqBBSh8GxHYqwYCf3rYE7Gp2p0N8tJp8xv9u9M= +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/phpdave11/gofpdf v1.4.2/go.mod h1:zpO6xFn9yxo3YLyMvW8HcKWVdbNqgIfOOp2dXMnm1mY= +github.com/phpdave11/gofpdi v1.0.12/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI= +github.com/phpdave11/gofpdi v1.0.13/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI= +github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= +github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pierrec/lz4 v2.5.2+incompatible/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/pierrec/lz4/v4 v4.1.15/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4= +github.com/pjbgf/sha1cd v0.3.0/go.mod h1:nZ1rrWOcGJ5uZgEEVL1VUM9iRQiZvWdbZjkKyFzPPsI= +github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4/go.mod h1:4OwLy04Bl9Ef3GJJCoec+30X3LQs/0/m4HFRt/2LUSA= +github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4/go.mod h1:N6UoU20jOqggOuDwUaBQpluzLNDqif3kq9z2wpdYEfQ= +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/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= +github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= +github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= +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/go.mod h1:6gapUrK/U1TAN7ciCoNRIdVC5sbdBTUh1DKN0g6uH7E= +github.com/posener/complete v1.2.3 h1:NP0eAhjcjImqslEwo/1hq7gpajME0fTLTezBKDqfXqo= +github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= +github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= +github.com/prashantv/gostub v1.1.0/go.mod h1:A5zLQHz7ieHGG7is6LLXLz7I8+3LZzsrV0P1IAHhP5U= +github.com/prometheus/alertmanager v0.24.0/go.mod h1:r6fy/D7FRuZh5YbnX6J3MBY0eI4Pb5yPYS7/bPSXXqI= +github.com/prometheus/client_golang v0.0.0-20180209125602-c332b6f63c06/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= +github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= +github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= +github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g= +github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= +github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= +github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= +github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= +github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= +github.com/prometheus/client_golang v1.12.2/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= +github.com/prometheus/client_model v0.0.0-20171117100541-99fa1f4be8e5/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= +github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= +github.com/prometheus/common v0.0.0-20180110214958-89604d197083/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= +github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= +github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= +github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= +github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= +github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= +github.com/prometheus/common v0.29.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= +github.com/prometheus/common v0.30.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= +github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= +github.com/prometheus/common v0.34.0/go.mod h1:gB3sOl7P0TvJabZpLY5uQMpUqRCPPCyRLCZYc7JZTNE= +github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= +github.com/prometheus/common/assets v0.1.0/go.mod h1:D17UVUE12bHbim7HzwUvtqm6gwBEaDQ0F+hIGbFbccI= +github.com/prometheus/common/assets v0.2.0/go.mod h1:D17UVUE12bHbim7HzwUvtqm6gwBEaDQ0F+hIGbFbccI= +github.com/prometheus/common/sigv4 v0.1.0/go.mod h1:2Jkxxk9yYvCkE5G1sQT7GuEXm57JrvHu9k5YwTjsNtI= +github.com/prometheus/exporter-toolkit v0.7.1/go.mod h1:ZUBIj498ePooX9t/2xtDjeQYwvRpiPP2lh5u4iblj2g= +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-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.0-20190522114515-bc1a522cf7b1/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= +github.com/prometheus/procfs v0.0.5/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= +github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= +github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= +github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= +github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= +github.com/prometheus/prometheus v0.35.0/go.mod h1:7HaLx5kEPKJ0GDgbODG0fZgXbQ8K/XjZNJXQmbmgQlY= +github.com/prometheus/prometheus v0.37.0/go.mod h1:egARUgz+K93zwqsVIAneFlLZefyGOON44WyAp4Xqbbk= +github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= +github.com/pulumi/appdash v0.0.0-20231130102222-75f619a67231 h1:vkHw5I/plNdTr435cARxCW6q9gc0S/Yxz7Mkd38pOb0= +github.com/pulumi/appdash v0.0.0-20231130102222-75f619a67231/go.mod h1:murToZ2N9hNJzewjHBgfFdXhZKjY3z5cYC1VXk+lbFE= +github.com/pulumi/esc v0.6.1 h1:X6gRcw1cH/oNkZG8MuD4rUhetO7fUTGKZXPzQWAPX40= +github.com/pulumi/esc v0.6.1/go.mod h1:1+tlMNX29iqfyElwo0tc2eRx9MWjWHRjrPLyLvTQMqM= +github.com/pulumi/pulumi-java/pkg v0.9.8 h1:c8mYsalnRXA2Ibgvv6scefOn6mW1Vb0UT0mcDqjsivQ= +github.com/pulumi/pulumi-java/pkg v0.9.8/go.mod h1:c6rSw/+q4O0IImgJ9axxoC6QesbPYWBaG5gimbHouUQ= +github.com/pulumi/pulumi-terraform-bridge/testing v0.0.1 h1:SCg1gjfY9N4yn8U8peIUYATifjoDABkyR7H9lmefsfc= +github.com/pulumi/pulumi-terraform-bridge/testing v0.0.1/go.mod h1:7OeUPH8rpt5ipyj9EFcnXpuzQ8SHL0dyqdfa8nOacdk= +github.com/pulumi/pulumi-terraform-bridge/v3 v3.69.0 h1:PsIB738ZqrQbHKe5Q5Ag8Kq/ejrOyO8skLUQeAqRjzM= +github.com/pulumi/pulumi-terraform-bridge/v3 v3.69.0/go.mod h1:/wXhD95iSr4FlmGtVN/H8hXriMW4isDDrAUprozXG4A= +github.com/pulumi/pulumi-terraform-bridge/x/muxer v0.0.4 h1:rIzMmtcVpPX8ynaz6/nW5AHNY63DiNfCohqmxWvMpM4= +github.com/pulumi/pulumi-terraform-bridge/x/muxer v0.0.4/go.mod h1:Kt8RIZWa/N8rW3+0g6NrqCBmF3o+HuIhFaZpssEkG6w= +github.com/pulumi/pulumi-yaml v1.4.3 h1:GO36c7FTl8If20Dn/w2Hi3huP7kmsO00KNaz3GJU0Ws= +github.com/pulumi/pulumi-yaml v1.4.3/go.mod h1:1hwsXFnT7hm2ZeftY5fzjkngjs2eT/rv9MsPE48Leb4= +github.com/pulumi/pulumi/pkg/v3 v3.98.0 h1:lQyjy31az5bMfTmsyqeeAEQMKjrLyx8IL+C27D6b+x4= +github.com/pulumi/pulumi/pkg/v3 v3.98.0/go.mod h1:aeQmrCMwvMOIz1s6qOk+vg1oCWff5hmeRrg1vYv8eRU= +github.com/pulumi/pulumi/sdk/v3 v3.98.0 h1:H18eCWKiv7oXy7n/dni3JxFfwvY3UEjAzjeqtaaZT+I= +github.com/pulumi/pulumi/sdk/v3 v3.98.0/go.mod h1:/bHwzPhsCJCjzY0STmvZ7DzV5gZN6iDSXQ/gitEAyws= +github.com/pulumi/schema-tools v0.1.2 h1:Fd9xvUjgck4NA+7/jSk7InqCUT4Kj940+EcnbQKpfZo= +github.com/pulumi/schema-tools v0.1.2/go.mod h1:62lgj52Tzq11eqWTIaKd+EVyYAu5dEcDJxMhTjvMO/k= +github.com/pulumi/terraform-diff-reader v0.0.2 h1:kTE4nEXU3/SYXESvAIem+wyHMI3abqkI3OhJ0G04LLI= +github.com/pulumi/terraform-diff-reader v0.0.2/go.mod h1:sZ9FUzGO+yM41hsQHs/yIcj/Y993qMdBxBU5mpDmAfQ= +github.com/pulumi/terraform-plugin-sdk/v2 v2.0.0-20230912190043-e6d96b3b8f7e h1:blSirnXqvm8JXLxwxelsBroUNRhOHakDO7cgJUYTdpQ= +github.com/pulumi/terraform-plugin-sdk/v2 v2.0.0-20230912190043-e6d96b3b8f7e/go.mod h1:qH/34G25Ugdj5FcM95cSoXzUgIbgfhVLXCcEcYaMwq8= +github.com/rakyll/embedmd v0.0.0-20171029212350-c8060a0752a2/go.mod h1:7jOTMgqac46PZcF54q6l2hkLEG8op93fZu61KmxWDV4= +github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= +github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= +github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= +github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= +github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis= +github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= +github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= +github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= +github.com/rogpeppe/go-charset v0.0.0-20180617210344-2471d30d28b4/go.mod h1:qgYeAmZ5ZIpBWTGllZSQnw97Dj+woV0toclVaRGI8pc= +github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= +github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= +github.com/rs/cors v1.8.2/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= +github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= +github.com/rs/zerolog v1.13.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU= +github.com/rs/zerolog v1.15.0/go.mod h1:xYTKnLHcpfU2225ny5qZjxnj9NvkumZYjJHlAThCjNc= +github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +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/ruudk/golang-pdf417 v0.0.0-20181029194003-1af4ab5afa58/go.mod h1:6lfFZQK844Gfx8o5WFuvpxWRwnSoipWe/p622j1v06w= +github.com/ruudk/golang-pdf417 v0.0.0-20201230142125-a7e3863a1245/go.mod h1:pQAZKsJ8yyVxGRWYNEm9oFB8ieLgKFnamEyDmSA0BRk= +github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +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/safchain/ethtool v0.0.0-20190326074333-42ed695e3de8/go.mod h1:Z0q5wiBQGYcxhMZ6gUqHn6pYNLypFAvaL3UvgZLR0U4= +github.com/safchain/ethtool v0.0.0-20210803160452-9aa261dae9b1/go.mod h1:Z0q5wiBQGYcxhMZ6gUqHn6pYNLypFAvaL3UvgZLR0U4= +github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= +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/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= +github.com/scaleway/scaleway-sdk-go v1.0.0-beta.9/go.mod h1:fCa7OJZ/9DRTnOKmxvT6pn+LPWUptQAmHF/SBJUGEcg= +github.com/sclevine/agouti v3.0.0+incompatible/go.mod h1:b4WX9W9L1sfQKXeJf1mUTLZKJ48R1S7H23Ji7oFO5Bw= +github.com/sclevine/spec v1.2.0/go.mod h1:W4J29eT/Kzv7/b9IWLB055Z+qvVC9vt0Arko24q7p+U= +github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= +github.com/sebdah/goldie v1.0.0/go.mod h1:jXP4hmWywNEwZzhMuv2ccnqTSFpuq8iyQhtQdkkZBH4= +github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo= +github.com/seccomp/libseccomp-golang v0.9.2-0.20210429002308-3879420cc921/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg= +github.com/segmentio/asm v1.1.3 h1:WM03sfUOENvvKexOLp+pCqgb/WDjsi7EK8gIsICtzhc= +github.com/segmentio/asm v1.1.3/go.mod h1:Ld3L4ZXGNcSLRg4JBsZ3//1+f/TjYl0Mzen/DQy1EJg= +github.com/segmentio/encoding v0.3.5 h1:UZEiaZ55nlXGDL92scoVuw00RmiRCazIEmvPSbSvt8Y= +github.com/segmentio/encoding v0.3.5/go.mod h1:n0JeuIqEQrQoPDGsjo8UNd1iA0U8d8+oHAA4E3G3OxM= +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/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= +github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= +github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I= +github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= +github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= +github.com/shopspring/decimal v1.3.1 h1:2Usl1nmF/WZucqkFZhnfFYxxxu8LG21F6nPQBE5gKV8= +github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= +github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= +github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= +github.com/shurcooL/vfsgen v0.0.0-20200824052919-0d455de96546/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw= +github.com/sirupsen/logrus v1.0.4-0.20170822132746-89742aefa4b2/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= +github.com/sirupsen/logrus v1.0.6/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= +github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= +github.com/sirupsen/logrus v1.4.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.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= +github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/skeema/knownhosts v1.2.0 h1:h9r9cf0+u7wSE+M183ZtMGgOJKiL96brpaz5ekfJCpM= +github.com/skeema/knownhosts v1.2.0/go.mod h1:g4fPeYpque7P0xefxtGzV81ihjC8sX2IqpAoNkjxbMo= +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= +github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= +github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= +github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= +github.com/soheilhy/cmux v0.1.5/go.mod h1:T7TcVDs9LWfQgPlPsdngu6I6QIoyIFZDDC6sNE1GqG0= +github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= +github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= +github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= +github.com/spf13/afero v1.3.3/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4= +github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= +github.com/spf13/afero v1.9.2/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= +github.com/spf13/afero v1.9.5 h1:stMpOSZFs//0Lv29HduCmli3GUfpFoF3Y1Q/aXj/wVM= +github.com/spf13/afero v1.9.5/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ= +github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= +github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= +github.com/spf13/cobra v0.0.2-0.20171109065643-2da4a54c5cee/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= +github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= +github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= +github.com/spf13/cobra v1.1.3/go.mod h1:pGADOWyqRD/YMrPZigI/zbliZ2wVD/23d+is3pSWzOo= +github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= +github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= +github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= +github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.1-0.20171106142849-4c012f6dcd95/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.2/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= +github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= +github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= +github.com/stefanberger/go-pkcs11uri v0.0.0-20201008174630-78d3cae3a980/go.mod h1:AO3tvPzVZ/ayst6UlUKUv6rcPQInYe3IknH3jYhAKu8= +github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= +github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= +github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= +github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= +github.com/stretchr/objx v0.0.0-20180129172003-8a3f7159479f/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v0.0.0-20180303142811-b89eecf5ca5d/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/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= +github.com/stretchr/testify v1.7.5/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= +github.com/syndtr/gocapability v0.0.0-20170704070218-db04d3cc01c8/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= +github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= +github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= +github.com/tchap/go-patricia v2.2.6+incompatible/go.mod h1:bmLyhP68RS6kStMGxByiQ23RP/odRBOTVjwp2cDyi6I= +github.com/tedsuo/ifrit v0.0.0-20180802180643-bea94bb476cc/go.mod h1:eyZnKCc955uh98WQvzOm0dgAeLnf2O0Rz0LPoC5ze+0= +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/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= +github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= +github.com/tv42/httpunix v0.0.0-20191220191345-2ba4b9c3382c/go.mod h1:hzIxponao9Kjc7aWznkXaL4U4TWaDSs8zcsY4Ka08nM= +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.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.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.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= +github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo= +github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= +github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs= +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.10 h1:t92gobL9l3HE202wg3rlk19F6X+JOxl9BBrCCMYEYd8= +github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= +github.com/urfave/cli v0.0.0-20171014202726-7bc6a0acffa5/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= +github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= +github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/vishvananda/netlink v0.0.0-20181108222139-023a6dafdcdf/go.mod h1:+SR5DhBJrl6ZM7CoCKvpw5BKroDKQ+PJqOg65H/2ktk= +github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE= +github.com/vishvananda/netlink v1.1.1-0.20201029203352-d40f9887b852/go.mod h1:twkDnbuQxJYemMlGd4JFIcuhgX83tXhKS2B/PRMpOho= +github.com/vishvananda/netlink v1.1.1-0.20210330154013-f5de75959ad5/go.mod h1:twkDnbuQxJYemMlGd4JFIcuhgX83tXhKS2B/PRMpOho= +github.com/vishvananda/netns v0.0.0-20180720170159-13995c7128cc/go.mod h1:ZjcWmFBXmLKZu9Nxj3WKYEafiSqer2rnvPr0en9UNpI= +github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU= +github.com/vishvananda/netns v0.0.0-20200728191858-db3c7e526aae/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= +github.com/vishvananda/netns v0.0.0-20210104183010-2eb08e3e575f/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0= +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/v5 v5.3.5 h1:5gO0H1iULLWGhs2H5tbAHIZTV8/cYafcFOr9znI5mJU= +github.com/vmihailenco/msgpack/v5 v5.3.5/go.mod h1:7xyJ9e+0+9SaZT0Wt1RGleJXzli6Q/V5KbhBonMG9jc= +github.com/vmihailenco/tagparser/v2 v2.0.0 h1:y09buUbR+b5aycVFQs/g70pqKVZNBmxwAhO7/IwNM9g= +github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV6mEfg5OIWRZA9qds= +github.com/vultr/govultr/v2 v2.17.2/go.mod h1:ZFOKGWmgjytfyjeyAdhQlSWwTjh2ig+X49cAp50dzXI= +github.com/willf/bitset v1.1.11-0.20200630133818-d5bec3311243/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4= +github.com/willf/bitset v1.1.11/go.mod h1:83CECat5yLh5zVOf4P1ErAgKA5UDvKtgyUABdr3+MjI= +github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= +github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= +github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= +github.com/xdg-go/scram v1.0.2/go.mod h1:1WAq6h33pAW+iRreB34OORO2Nf7qel3VV3fjBj+hCSs= +github.com/xdg-go/stringprep v1.0.2/go.mod h1:8F9zXuvzgwmyT5DUm4GUfZGDdT3W+LCvS6+da4O5kxM= +github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f h1:J9EGpcZtP0E/raorCMxlFGSTBrsSlaDGf3jU/qvAE2c= +github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= +github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0= +github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= +github.com/xeipuuv/gojsonschema v0.0.0-20180618132009-1d523034197f/go.mod h1:5yf86TLmAcydyeJq5YvxkGPE2fm/u4myDekKRoLuqhs= +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/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +github.com/xlab/treeprint v1.1.0/go.mod h1:gj5Gd3gPdKtR1ikdDK6fnFLdmIS0X30kTTuNd/WEJu0= +github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA= +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/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= +github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43/go.mod h1:aX5oPXxHm3bOH+xeAttToC8pqch2ScQN/JoXYupl6xs= +github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50/go.mod h1:NUSPSUX/bi6SeDMUh6brw0nXpxHnc96TguQh0+r/ssA= +github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f/go.mod h1:GlGEuHIJweS1mbCqG+7vt2nvWLzLLnRHbXz5JKd/Qbg= +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.13.0/go.mod h1:YKQzy/7pZ7iq2jNFzy5go57xdxdWoLLpaEp4u238AE0= +github.com/zclconf/go-cty v1.13.1/go.mod h1:YKQzy/7pZ7iq2jNFzy5go57xdxdWoLLpaEp4u238AE0= +github.com/zclconf/go-cty v1.13.2/go.mod h1:YKQzy/7pZ7iq2jNFzy5go57xdxdWoLLpaEp4u238AE0= +github.com/zclconf/go-cty v1.14.0 h1:/Xrd39K7DXbHzlisFP9c4pHao4yyf+/Ug9LEz+Y/yhc= +github.com/zclconf/go-cty v1.14.0/go.mod h1:VvMs5i0vgZdhYawQNq5kePSpLAoz8u1xvZgrPIxfnZE= +github.com/zclconf/go-cty-debug v0.0.0-20191215020915-b22d67c1ba0b h1:FosyBZYxY34Wul7O/MSKey3txpPYyCqVO5ZyceuQJEI= +github.com/zclconf/go-cty-debug v0.0.0-20191215020915-b22d67c1ba0b/go.mod h1:ZRKQfBXbGkpdV6QMzT3rU1kSTAnfu1dO8dPKjYprgj8= +github.com/zclconf/go-cty-yaml v1.0.1 h1:up11wlgAaDvlAGENcFDnZgkn0qUJurso7k6EpURKNF8= +github.com/zclconf/go-cty-yaml v1.0.1/go.mod h1:IP3Ylp0wQpYm50IHK8OZWKMu6sPJIUgKa8XhiVHura0= +github.com/zeebo/assert v1.3.0/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN/wJ0= +github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA= +github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= +go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= +go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= +go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= +go.etcd.io/etcd v0.5.0-alpha.5.0.20200910180754-dd1b699fc489/go.mod h1:yVHk9ub3CSBatqGNg7GRmsnfLWtoW60w4eDYfh7vHDg= +go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= +go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= +go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= +go.etcd.io/etcd/client/v3 v3.5.0/go.mod h1:AIKXXVX/DQXtfTEqBryiLTUXwON+GuvO6Z7lLS/oTh0= +go.etcd.io/etcd/pkg/v3 v3.5.0/go.mod h1:UzJGatBQ1lXChBkQF0AuAtkRQMYnHubxAEYIrC3MSsE= +go.etcd.io/etcd/raft/v3 v3.5.0/go.mod h1:UFOHSIvO/nKwd4lhkwabrTD3cqW5yVyYYf/KlD00Szc= +go.etcd.io/etcd/server/v3 v3.5.0/go.mod h1:3Ah5ruV+M+7RZr0+Y/5mNLwC+eQlni+mQmOVdCRJoS4= +go.mongodb.org/mongo-driver v1.7.3/go.mod h1:NqaYOwnXWr5Pm7AOpO5QFxKJ503nbMse/R79oO62zWg= +go.mongodb.org/mongo-driver v1.7.5/go.mod h1:VXEWRZ6URJIkUq2SCAyapmhH0ZLRBP+FT4xhp5Zvxng= +go.mongodb.org/mongo-driver v1.8.3/go.mod h1:0sQWfOeY63QTntERDJJ/0SuKK0T1uVSgKCuAROlKEPY= +go.mozilla.org/pkcs7 v0.0.0-20200128120323-432b2356ecb1/go.mod h1:SNgMg+EgDFwmvSmLRTNKC5fegJjB7v23qTQ0XLGUNHk= +go.opencensus.io v0.15.0/go.mod h1:UffZAU+4sDEINUGP/B7UfBBkq4fqLu9zXAX7ke6CHW0= +go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= +go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= +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.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= +go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= +go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= +go.opentelemetry.io/contrib v0.20.0/go.mod h1:G/EtFaa6qaN7+LxqfIAT3GiZa7Wv5DTBUzl5H4LY0Kc= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.20.0/go.mod h1:oVGt1LRbBOBq1A5BQLlUg9UaU/54aiHw8cgjV3aWZ/E= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.28.0/go.mod h1:vEhqr0m4eTc+DWxfsXoXue2GBgV2uUwVznkGIHW/e5w= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.20.0/go.mod h1:2AboqHi0CiIZU0qwhtUfCYD1GeUzvvIXWNkhDt7ZMG4= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.31.0/go.mod h1:PFmBsWbldL1kiWZk9+0LBZz2brhByaGsvp6pRICMlPE= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.32.0/go.mod h1:5eCOqeGphOyz6TsY3ZDNjE33SM/TFAK3RGuCL2naTgY= +go.opentelemetry.io/otel v0.20.0/go.mod h1:Y3ugLH2oa81t5QO+Lty+zXf8zC9L26ax4Nzoxm/dooo= +go.opentelemetry.io/otel v1.3.0/go.mod h1:PWIKzi6JCp7sM0k9yZ43VX+T345uNbAkDKwHVjb2PTs= +go.opentelemetry.io/otel v1.6.0/go.mod h1:bfJD2DZVw0LBxghOTlgnlI0CV3hLDu9XF/QKOUXMTQQ= +go.opentelemetry.io/otel v1.6.1/go.mod h1:blzUabWHkX6LJewxvadmzafgh/wnvBSDBdOuwkAtrWQ= +go.opentelemetry.io/otel v1.7.0/go.mod h1:5BdUoMIz5WEs0vt0CUEMtSSaTSHBBVwrhnz7+nrD5xk= +go.opentelemetry.io/otel/exporters/otlp v0.20.0/go.mod h1:YIieizyaN77rtLJra0buKiNBOm9XQfkPEKBeuhoMwAM= +go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.3.0/go.mod h1:VpP4/RMn8bv8gNo9uK7/IMY4mtWLELsS+JIP0inH0h4= +go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.6.1/go.mod h1:NEu79Xo32iVb+0gVNV8PMd7GoWqnyDXRlj04yFjqz40= +go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.7.0/go.mod h1:M1hVZHNxcbkAlcvrOMlpQ4YOO3Awf+4N2dxkZL3xm04= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.3.0/go.mod h1:hO1KLR7jcKaDDKDkvI9dP/FIhpmna5lkqPUQdEjFAM8= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.6.1/go.mod h1:YJ/JbY5ag/tSQFXzH3mtDmHqzF3aFn3DI/aB1n7pt4w= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.7.0/go.mod h1:ceUgdyfNv4h4gLxHR0WNfDiiVmZFodZhZSbOLhpxqXE= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.3.0/go.mod h1:keUU7UfnwWTWpJ+FWnyqmogPa82nuU5VUANFq49hlMY= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.6.1/go.mod h1:UJJXJj0rltNIemDMwkOJyggsvyMG9QHfJeFH0HS5JjM= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.7.0/go.mod h1:E+/KKhwOSw8yoPxSSuUHG6vKppkvhN+S1Jc7Nib3k3o= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.3.0/go.mod h1:QNX1aly8ehqqX1LEa6YniTU7VY9I6R3X/oPxhGdTceE= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.6.1/go.mod h1:DAKwdo06hFLc0U88O10x4xnb5sc7dDRDqRuiN+io8JE= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.7.0/go.mod h1:aFXT9Ng2seM9eizF+LfKiyPBGy8xIZKwhusC1gIu3hA= +go.opentelemetry.io/otel/metric v0.20.0/go.mod h1:598I5tYlH1vzBjn+BTuhzTCSb/9debfNp6R3s7Pr1eU= +go.opentelemetry.io/otel/metric v0.28.0/go.mod h1:TrzsfQAmQaB1PDcdhBauLMk7nyyg9hm+GoQq/ekE9Iw= +go.opentelemetry.io/otel/metric v0.30.0/go.mod h1:/ShZ7+TS4dHzDFmfi1kSXMhMVubNoP0oIaBp70J6UXU= +go.opentelemetry.io/otel/oteltest v0.20.0/go.mod h1:L7bgKf9ZB7qCwT9Up7i9/pn0PWIa9FqQ2IQ8LoxiGnw= +go.opentelemetry.io/otel/sdk v0.20.0/go.mod h1:g/IcepuwNsoiX5Byy2nNV0ySUF1em498m7hBWC279Yc= +go.opentelemetry.io/otel/sdk v1.3.0/go.mod h1:rIo4suHNhQwBIPg9axF8V9CA72Wz2mKF1teNrup8yzs= +go.opentelemetry.io/otel/sdk v1.6.1/go.mod h1:IVYrddmFZ+eJqu2k38qD3WezFR2pymCzm8tdxyh3R4E= +go.opentelemetry.io/otel/sdk v1.7.0/go.mod h1:uTEOTwaqIVuTGiJN7ii13Ibp75wJmYUDe374q6cZwUU= +go.opentelemetry.io/otel/sdk/export/metric v0.20.0/go.mod h1:h7RBNMsDJ5pmI1zExLi+bJK+Dr8NQCh0qGhm1KDnNlE= +go.opentelemetry.io/otel/sdk/metric v0.20.0/go.mod h1:knxiS8Xd4E/N+ZqKmUPf3gTTZ4/0TjTXukfxjzSTpHE= +go.opentelemetry.io/otel/trace v0.20.0/go.mod h1:6GjCW8zgDjwGHGa6GkyeB8+/5vjT16gUEi0Nf1iBdgw= +go.opentelemetry.io/otel/trace v1.3.0/go.mod h1:c/VDhno8888bvQYmbYLqe41/Ldmr/KKunbvWM4/fEjk= +go.opentelemetry.io/otel/trace v1.6.0/go.mod h1:qs7BrU5cZ8dXQHBGxHMOxwME/27YH2qEp4/+tZLLwJE= +go.opentelemetry.io/otel/trace v1.6.1/go.mod h1:RkFRM1m0puWIq10oxImnGEduNBzxiN7TXluRBtE+5j0= +go.opentelemetry.io/otel/trace v1.7.0/go.mod h1:fzLSB9nqR2eXzxPXb2JW9IKE+ScyXA48yyE4TNvoHqU= +go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +go.opentelemetry.io/proto/otlp v0.11.0/go.mod h1:QpEjXPrNQzrFDZgoTo49dgHR9RYRSrg3NAKnUGl9YpQ= +go.opentelemetry.io/proto/otlp v0.12.1/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= +go.opentelemetry.io/proto/otlp v0.15.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= +go.opentelemetry.io/proto/otlp v0.16.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= +go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= +go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= +go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= +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/automaxprocs v1.5.1/go.mod h1:BF4eumQw0P9GtnuxxovUd06vwm1o18oMzFtK66vU6XU= +go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= +go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= +go.uber.org/goleak v1.1.12/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= +go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= +go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= +go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= +go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= +go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= +go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= +go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= +go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= +go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= +go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= +gocloud.dev v0.27.0 h1:j0WTUsnKTxCsWO7y8T+YCiBZUmLl9w/WIowqAY3yo0g= +gocloud.dev v0.27.0/go.mod h1:YlYKhYsY5/1JdHGWQDkAuqkezVKowu7qbe9aIeUF6p0= +gocloud.dev/secrets/hashivault v0.27.0 h1:AAeGJXr0tiHHJgg5tL8atOGktB4eK9EJAqkZbPKAcOo= +gocloud.dev/secrets/hashivault v0.27.0/go.mod h1:offqsI5oj0B0bVHZdfk/88uIb3NnN93ia8py0yvRlHY= +golang.org/x/arch v0.1.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= +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-20181009213950-7c1a557ab941/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/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-20190411191339-88737f569e3a/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= +golang.org/x/crypto v0.0.0-20190422162423-af44ce270edf/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-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/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-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= +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-20200414173820-0848c9571904/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-20201016220609-9e8e0b390897/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20201203163018-be400aefbc4c/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= +golang.org/x/crypto v0.0.0-20201216223049-8b5274cf687f/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= +golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= +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-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-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20211202192323-5770296d904e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220314234659-1baeb1ce4c0b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220511200225-c6db032c6c88/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220517005047-85d78b3ac167/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220826181053-bd7e27e6170d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= +golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= +golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= +golang.org/x/crypto v0.8.0/go.mod h1:mRqEX+O9/h5TFCrQhkgjo2yKi0yYA+9ecGkdQoHrywE= +golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio= +golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= +golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k= +golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= +golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/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-20191002040644-a1355ae1e2c3/go.mod h1:NOZ3BPKG0ec/BKJQgnvsSFpcKLM5xXVWnvZS97DWHgE= +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/exp v0.0.0-20220827204233-334a2380cb91/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= +golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa h1:FRnLl4eNAQl8hwxVVC17teOw8kdjVDVAiFMtgUdTSRQ= +golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa/go.mod h1:zk2irFbV9DP96SEBUUAy67IdHUaZuSnrz1n472HUCLE= +golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= +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/image v0.0.0-20190910094157-69e4b8554b2a/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20200119044424-58c23975cae1/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20200430140353-33d19683fad8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20200618115811-c13761719519/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20201208152932-35266b937fa6/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20210216034530-4410531fe030/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20210607152325-775e3b0c77b9/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= +golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= +golang.org/x/image v0.0.0-20211028202545-6944b10bf410/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= +golang.org/x/image v0.0.0-20220302094943-723b81ca9867/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= +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/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= +golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= +golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= +golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI= +golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0= +golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +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-20181011144130-49bb7cea24b1/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/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-20181220203305-927f97764cc3/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-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-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-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +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-20190619014844-b5b0513f8c1b/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-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190923162816-aa69164e4478/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-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-20200520004742-59133d7f0dd7/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-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-20201006153459-a7d1128ccaa0/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201010224723-4f7140c49acb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +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-20201202161906-c7110b5ffcbb/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-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= +golang.org/x/net v0.0.0-20210421230115-4e50805a0758/go.mod h1:72T/g9IO56b78aLF+1Kcs5dz7/ng1VjMUvfKvpfy+jM= +golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= +golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210520170846-37e1c6afe023/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210610132358-84b48f89b13b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210825183410-e898025ed96a/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211209124913-491a49abca63/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211216030914-fe4d6282115f/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/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220617184016-355a448f1bc9/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220802222814-0bcc04d9c69b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.0.0-20220826154423-83b083e8dc8b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.0.0-20221012135044-0b7e1fb9d458/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= +golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= +golang.org/x/net v0.4.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= +golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= +golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= +golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA= +golang.org/x/net v0.13.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA= +golang.org/x/net v0.18.0 h1:mIYleuAkSbHh0tCv7RvjL3F6ZVbLjq4+R7zbOn3Kokg= +golang.org/x/net v0.18.0/go.mod h1:/czyP5RqHAH4odGYxBJ1qz0+CE5WZ+2j1YgoEo8F2jQ= +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-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-20211005180243-6b3c2da341f1/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/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= +golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= +golang.org/x/oauth2 v0.0.0-20220628200809-02e64fa58f26/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= +golang.org/x/oauth2 v0.0.0-20220722155238-128564f6959c/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20221006150949-b44042a4b9c1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= +golang.org/x/oauth2 v0.4.0/go.mod h1:RznEsdpjGAINPTOF0UH/t+xJ75L18YO3Ho6Pyn+uRec= +golang.org/x/oauth2 v0.5.0/go.mod h1:9/XBHVqLaWO3/BRHs5jbpYCnOZVjj5V0ndyaAM7KB4I= +golang.org/x/oauth2 v0.6.0/go.mod h1:ycmewcwgD4Rpr3eZJLSB4Kyyljb3qDh40vJ8STE5HKw= +golang.org/x/oauth2 v0.7.0/go.mod h1:hPLQkd9LyjfXTiRohC/41GhcFqxisoUQ99sCUOHO9x4= +golang.org/x/oauth2 v0.8.0 h1:6dkIjl3j3LtZ/O3sTgZTMsLKSftL/B8Zgq4huOIIUu8= +golang.org/x/oauth2 v0.8.0/go.mod h1:yr7u4HXZRm1R1kBWqr/xKNqewf0plRYoB7sla+BCIXE= +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-20190412183630-56d357773e84/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/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220819030929-7fc1605a5dde/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE= +golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +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-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/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-20181122145206-62eef0e2fa9b/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-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-20190419153524-e8e3143a4f4a/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-20190522044717-8097e1b27ff5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190531175056-4c3a928424d2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190602015325-4c4f7f33c9ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190804053845-51ab0e2deafa/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190812073006-9eafafc0a87e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191115151921-52ab43148777/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191210023423-ac6580df4449/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/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-20200120151820-655fe14d7479/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/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-20200217220822-9197077df867/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-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200622214017-ed371f2e16b4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200728102440-3e129f6d46b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200817155316-9781c653f443/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200831180312-196b9ba8737a/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-20200916030750-2334cc1a136f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200922070232-aee5d888a860/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201112073958-5cba982894dd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201117170446-d9b008d0a637/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-20201202213521-69691e467435/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210112080510-489259a85091/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-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210304124612-50617c2ba197/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-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210420072515-93ed5bcd2bfe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210426230700-d19ff857e887/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-20210603081109-ebe580a85c40/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-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/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-20210903071746-97244b99971b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210906170528-6f6e22806c34/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-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211110154304-99a53858aa08/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211116061358-0a5406a5449c/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-20220114195835-da31bd327af9/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-20220310020820-b874c991c1a5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220627191245-f75cf1eec38b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220731174439-a90be440212d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220825204002-c680a09ffe64/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= +golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.0.0-20220722155259-a9ba230a4035/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= +golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= +golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= +golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= +golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= +golang.org/x/term v0.10.0/go.mod h1:lpqdcUyK/oCiQxvxVrppt5ggO2KCZ5QblwqPnfZ6d5o= +golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= +golang.org/x/term v0.15.0 h1:y/Oo/a/q3IXu26lQgl04j/gjuBDOBlx7X6Om1j2CPW4= +golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= +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/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= +golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +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-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20220210224613-90d013bbcef8/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20220224211638-0e9765cccd65/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20220609170525-579cf78fd858/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20220722155302-e5dcc9cfc0b9/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20220922220347-f3bd1da661af/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.1.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= +golang.org/x/time v0.3.0/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-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/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-20181011042414-1f849cf54d09/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-20190206041539-40960b6deb8e/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-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190329151228-23e29df326fe/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190416151739-9c9e1878f421/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190420181800-aa740d480789/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-20190425163242-31fd60d6bfdc/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-20190531172133-b3315ee88b7d/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/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-20190706070813-72ffa07ba3db/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-20190823170909-c4a336ef6a2f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/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-20190927191325-030b2cf1153e/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-20191029190741-b9c20aec41a5/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-20191112195655-aa38f8e97acc/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-20200103221440-774c71fcf114/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-20200505023115-26f46d2f7ef8/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-20200616133436-c1934b75d054/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-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-20200916195026-c9a70fc28ce3/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= +golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201124115921-2c860bdd6e78/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-20201224043029-2b0845dc783e/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/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= +golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= +golang.org/x/tools v0.1.11/go.mod h1:SgwaegtQh8clINPpECJMqnxLv9I09HLqnW3RMqW0CA4= +golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA= +golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s= +golang.org/x/tools v0.15.0 h1:zdAyfUGbYmuVokhzVmghFl2ZJh5QhcfebBgmVPFYA+8= +golang.org/x/tools v0.15.0/go.mod h1:hpksKq4dtpQWS1uQ61JkdqWM3LscIS6Slf+VVkm+wQk= +golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +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/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk= +golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= +gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= +gonum.org/v1/gonum v0.9.3/go.mod h1:TZumC3NeyVQskjXqmyWt4S3bINhy7B4eYwW69EbyX+0= +gonum.org/v1/gonum v0.11.0/go.mod h1:fSG4YDCxxUZQJ7rKsQrj0gMOg00Il0Z96/qMA4bVQhA= +gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= +gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= +gonum.org/v1/plot v0.9.0/go.mod h1:3Pcqqmp6RHvJI72kgb8fThyUnav364FOsdDo2aGW5lY= +gonum.org/v1/plot v0.10.1/go.mod h1:VZW5OlhkL1mysU9vaqNHnsy86inf6Ot+jB3r+BczCEo= +google.golang.org/api v0.0.0-20160322025152-9bf6e6e569ff/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= +google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= +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.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= +google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= +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.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.59.0/go.mod h1:sT2boj7M9YJxZzgeZqXogmhfmRWDtPzT31xkieUbuZU= +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/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs= +google.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= +google.golang.org/api v0.77.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= +google.golang.org/api v0.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw= +google.golang.org/api v0.80.0/go.mod h1:xY3nI94gbvBrE0J6NHXhxOmW97HG7Khjkku6AFB3Hyg= +google.golang.org/api v0.84.0/go.mod h1:NTsGnUFJMYROtiquksZHBWtHfeMC7iYthki7Eq3pa8o= +google.golang.org/api v0.85.0/go.mod h1:AqZf8Ep9uZ2pyTvgL+x0D3Zt0eoT9b5E8fmzfu6FO2g= +google.golang.org/api v0.86.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= +google.golang.org/api v0.90.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= +google.golang.org/api v0.91.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= +google.golang.org/api v0.93.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= +google.golang.org/api v0.95.0/go.mod h1:eADj+UBuxkh5zlrSntJghuNeg8HwQ1w5lTKkuqaETEI= +google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +google.golang.org/api v0.99.0/go.mod h1:1YOf74vkVndF7pG6hIHuINsM7eWwpVTAfNMNiL91A08= +google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= +google.golang.org/api v0.102.0/go.mod h1:3VFl6/fzoA+qNuS1N1/VfXY4LjoXN/wzeIp7TweWwGo= +google.golang.org/api v0.103.0/go.mod h1:hGtW6nK1AC+d9si/UBhw8Xli+QMOf6xyNAyJw4qU9w0= +google.golang.org/api v0.106.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= +google.golang.org/api v0.107.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= +google.golang.org/api v0.108.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= +google.golang.org/api v0.110.0/go.mod h1:7FC4Vvx1Mooxh8C5HWjzZHcavuS2f6pmJpZx60ca7iI= +google.golang.org/api v0.111.0/go.mod h1:qtFHvU9mhgTJegR31csQ+rwxyUTHOKFqCKWp1J0fdw0= +google.golang.org/api v0.114.0/go.mod h1:ifYI2ZsFK6/uGddGfAD5BMxlnkBqCmqHSDUVi45N5Yg= +google.golang.org/api v0.126.0 h1:q4GJq+cAdMAC7XP7njvQ4tvohGLiSlytuL4BQxbIZ+o= +google.golang.org/api v0.126.0/go.mod h1:mBwVAtz+87bEN6CbA1GtZPDOqY2R5ONPqJeIlvyo4Aw= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +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/cloud v0.0.0-20151119220103-975617b05ea8/go.mod h1:0H1ncTHf11KCFhTc/+EFRbzSCOZx+VUbRMk55Yv5MYk= +google.golang.org/genproto v0.0.0-20170818010345-ee236bd376b0/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +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-20190522204451-c2c4e71fbf69/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= +google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= +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-20200117163144-32f20d992d24/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-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-20200423170343-7949de9c1215/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-20200527145253-8367513e4ece/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +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-20201019141844-1ed22bb0c154/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-20201110150050-8816d57aaa9a/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-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/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-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-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-20210921142501-181ce0d877f6/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211008145708-270636b82663/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211018162055-cf77aa76bad2/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211028162531-8db9c33dc351/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-20220329172620-7be39ac1afc7/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220617124728-180714bec0ad/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220624142145-8cd45d7dbd1f/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220628213854-d9e0b6570c03/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220722212130-b98a9ff5e252/go.mod h1:GkXuJDJ6aQ7lnJcRF+SJVgFdQhypqgl3LB1C9vabdRE= +google.golang.org/genproto v0.0.0-20220801145646-83ce21fca29f/go.mod h1:iHe1svFLAZg9VWz891+QbRMwUv9O/1Ww+/mngYeThbc= +google.golang.org/genproto v0.0.0-20220802133213-ce4fa296bf78/go.mod h1:iHe1svFLAZg9VWz891+QbRMwUv9O/1Ww+/mngYeThbc= +google.golang.org/genproto v0.0.0-20220815135757-37a418bb8959/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220817144833-d7fd3f11b9b1/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220822174746-9e6da59bd2fc/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220829144015-23454907ede3/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220829175752-36a9c930ecbf/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220913154956-18f8339a66a5/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220914142337-ca0e39ece12f/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220915135415-7fd63a7952de/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220916172020-2692e8806bfa/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220919141832-68c03719ef51/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220920201722-2b89144ce006/go.mod h1:ht8XFiar2npT/g4vkk7O0WYS1sHOHbdujxbEp7CJWbw= +google.golang.org/genproto v0.0.0-20220926165614-551eb538f295/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= +google.golang.org/genproto v0.0.0-20220926220553-6981cbe3cfce/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= +google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqwhZAwq4wsRUaVG555sVgsNmIjRtO7t/JH29U= +google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= +google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= +google.golang.org/genproto v0.0.0-20221024153911-1573dae28c9c/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= +google.golang.org/genproto v0.0.0-20221024183307-1bc688fe9f3e/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= +google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= +google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c/go.mod h1:CGI5F/G+E5bKwmfYo09AXuVN4dD894kIKUFmVbP2/Fo= +google.golang.org/genproto v0.0.0-20221109142239-94d6d90a7d66/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221114212237-e4508ebdbee1/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221117204609-8f9c96812029/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221201164419-0e50fba7f41c/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221201204527-e3fa12d562f3/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221202195650-67e5cbc046fd/go.mod h1:cTsE614GARnxrLsqKREzmNYJACSWWpAWdNMwnD7c2BE= +google.golang.org/genproto v0.0.0-20221227171554-f9683d7f8bef/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230112194545-e10362b5ecf9/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230113154510-dbe35b8444a5/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230123190316-2c411cf9d197/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230124163310-31e0e69b6fc2/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230125152338-dcaf20b6aeaa/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230127162408-596548ed4efa/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230209215440-0dfe4f8abfcc/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44/go.mod h1:8B0gmkoRebU8ukX6HP+4wrVQUY1+6PkQ44BSyIlflHA= +google.golang.org/genproto v0.0.0-20230222225845-10f96fb3dbec/go.mod h1:3Dl5ZL0q0isWJt+FVcfpQyirqemEuLAK/iFvg1UP1Hw= +google.golang.org/genproto v0.0.0-20230223222841-637eb2293923/go.mod h1:3Dl5ZL0q0isWJt+FVcfpQyirqemEuLAK/iFvg1UP1Hw= +google.golang.org/genproto v0.0.0-20230303212802-e74f57abe488/go.mod h1:TvhZT5f700eVlTNwND1xoEZQeWTB2RY/65kplwl/bFA= +google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4/go.mod h1:NWraEVixdDnqcqQ30jipen1STv2r/n24Wb7twVTGR4s= +google.golang.org/genproto v0.0.0-20230320184635-7606e756e683/go.mod h1:NWraEVixdDnqcqQ30jipen1STv2r/n24Wb7twVTGR4s= +google.golang.org/genproto v0.0.0-20230323212658-478b75c54725/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak= +google.golang.org/genproto v0.0.0-20230330154414-c0448cd141ea/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak= +google.golang.org/genproto v0.0.0-20230331144136-dcfb400f0633/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak= +google.golang.org/genproto v0.0.0-20230525234025-438c736192d0/go.mod h1:9ExIQyXL5hZrHzQceCwuSYwZZ5QZBazOcprJ5rgs3lY= +google.golang.org/genproto v0.0.0-20230526161137-0005af68ea54/go.mod h1:zqTuNwFlFRsw5zIts5VnzLQxSRqh+CGOTVMlYbY0Eyk= +google.golang.org/genproto v0.0.0-20230726155614-23370e0ffb3e h1:xIXmWJ303kJCuogpj0bHq+dcjcZHU+XFyc1I0Yl9cRg= +google.golang.org/genproto v0.0.0-20230726155614-23370e0ffb3e/go.mod h1:0ggbjUrZYpy1q+ANUS30SEoGZ53cdfwtbuG7Ptgy108= +google.golang.org/genproto/googleapis/api v0.0.0-20230525234020-1aefcd67740a/go.mod h1:ts19tUU+Z0ZShN1y3aPyq2+O3d5FUNNgT6FtOzmrNn8= +google.golang.org/genproto/googleapis/api v0.0.0-20230525234035-dd9d682886f9/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= +google.golang.org/genproto/googleapis/api v0.0.0-20230706204954-ccb25ca9f130 h1:XVeBY8d/FaK4848myy41HBqnDwvxeV3zMZhwN1TvAMU= +google.golang.org/genproto/googleapis/api v0.0.0-20230706204954-ccb25ca9f130/go.mod h1:mPBs5jNgx2GuQGvFwUvVKqtn6HsUw9nP64BedgvqEsQ= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230525234015-3fc162c6f38a/go.mod h1:xURIpW9ES5+/GZhnV6beoEtxQrnkRGIfP5VQG2tCBLc= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230525234030-28d5490b6b19/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230706204954-ccb25ca9f130 h1:2FZP5XuJY9zQyGM5N0rtovnoXjiMUEIUMvw0m9wlpLc= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230706204954-ccb25ca9f130/go.mod h1:8mL13HKkDa+IuJ8yruA3ci0q+0vsUz4m//+ottjwS5o= +google.golang.org/grpc v0.0.0-20160317175043-d3ddb4469d5a/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= +google.golang.org/grpc v1.8.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= +google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= +google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= +google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= +google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= +google.golang.org/grpc v1.22.1/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.24.0/go.mod h1:XDChyiUovWa60DnaeDeZmSW86xtLtjtZbwvSiRnRtcA= +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.41.0/go.mod h1:U3l9uK9J0sini8mHphKoXyaqDA/8VyGnDee1zzIUK6k= +google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= +google.golang.org/grpc v1.43.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= +google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= +google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= +google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.46.2/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.47.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= +google.golang.org/grpc v1.52.3/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5vorUY= +google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= +google.golang.org/grpc v1.54.0/go.mod h1:PUSEXI6iWghWaB6lXM4knEgpJNu2qUcKfDtNci3EC2g= +google.golang.org/grpc v1.57.0/go.mod h1:Sd+9RMTACXwmub0zcNY2c4arhtrbBYD1AUHI/dt16Mo= +google.golang.org/grpc v1.57.1 h1:upNTNqv0ES+2ZOOqACwVtS3Il8M12/+Hz41RCPzAjQg= +google.golang.org/grpc v1.57.1/go.mod h1:Sd+9RMTACXwmub0zcNY2c4arhtrbBYD1AUHI/dt16Mo= +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/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.28.2-0.20230222093303-bc1253ad3743/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.29.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= +google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +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-20141024133853-64131543e789/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.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= +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/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= +gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo= +gopkg.in/inconshreveable/log15.v2 v2.0.0-20180818164646-67afb5ed74ec/go.mod h1:aPpfJ7XW+gOuirDoZ8gHhLh3kZ1B08FtV2bbmy7Jv3s= +gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= +gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/ini.v1 v1.66.4/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= +gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= +gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= +gopkg.in/square/go-jose.v2 v2.3.1/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/telebot.v3 v3.0.0/go.mod h1:7rExV8/0mDDNu9epSrDm/8j22KLaActH1Tbee6YjzWg= +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.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= +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-20200605160147-a5ece683394c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/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/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= +gotest.tools/v3 v3.0.3 h1:4AuOwCGf4lLR9u3YOe2awrHygurzhO/HeQ6laiA6Sx0= +gotest.tools/v3 v3.0.3/go.mod h1:Z7Lb0S5l+klDB31fvDQX8ss/FlKDxtlFlw3Oa8Ymbl8= +honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +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= +honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= +k8s.io/api v0.20.1/go.mod h1:KqwcCVogGxQY3nBlRpwt+wpAMF/KjaCc7RpywacvqUo= +k8s.io/api v0.20.4/go.mod h1:++lNL1AJMkDymriNniQsWRkMDzRaX2Y/POTUi8yvqYQ= +k8s.io/api v0.20.6/go.mod h1:X9e8Qag6JV/bL5G6bU8sdVRltWKmdHsFUGS3eVndqE8= +k8s.io/api v0.22.5/go.mod h1:mEhXyLaSD1qTOf40rRiKXkc+2iCem09rWLlFwhCEiAs= +k8s.io/api v0.23.5/go.mod h1:Na4XuKng8PXJ2JsploYYrivXrINeTaycCGcYgF91Xm8= +k8s.io/api v0.24.2/go.mod h1:AHqbSkTm6YrQ0ObxjO3Pmp/ubFF/KuM7jU+3khoBsOg= +k8s.io/apimachinery v0.20.1/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU= +k8s.io/apimachinery v0.20.4/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU= +k8s.io/apimachinery v0.20.6/go.mod h1:ejZXtW1Ra6V1O5H8xPBGz+T3+4gfkTCeExAHKU57MAc= +k8s.io/apimachinery v0.22.1/go.mod h1:O3oNtNadZdeOMxHFVxOreoznohCpy0z6mocxbZr7oJ0= +k8s.io/apimachinery v0.22.5/go.mod h1:xziclGKwuuJ2RM5/rSFQSYAj0zdbci3DH8kj+WvyN0U= +k8s.io/apimachinery v0.23.5/go.mod h1:BEuFMMBaIbcOqVIJqNZJXGFTP4W6AycEpb5+m/97hrM= +k8s.io/apimachinery v0.24.2/go.mod h1:82Bi4sCzVBdpYjyI4jY6aHX+YCUchUIrZrXKedjd2UM= +k8s.io/apiserver v0.20.1/go.mod h1:ro5QHeQkgMS7ZGpvf4tSMx6bBOgPfE+f52KwvXfScaU= +k8s.io/apiserver v0.20.4/go.mod h1:Mc80thBKOyy7tbvFtB4kJv1kbdD0eIH8k8vianJcbFM= +k8s.io/apiserver v0.20.6/go.mod h1:QIJXNt6i6JB+0YQRNcS0hdRHJlMhflFmsBDeSgT1r8Q= +k8s.io/apiserver v0.22.5/go.mod h1:s2WbtgZAkTKt679sYtSudEQrTGWUSQAPe6MupLnlmaQ= +k8s.io/client-go v0.20.1/go.mod h1:/zcHdt1TeWSd5HoUe6elJmHSQ6uLLgp4bIJHVEuy+/Y= +k8s.io/client-go v0.20.4/go.mod h1:LiMv25ND1gLUdBeYxBIwKpkSC5IsozMMmOOeSJboP+k= +k8s.io/client-go v0.20.6/go.mod h1:nNQMnOvEUEsOzRRFIIkdmYOjAZrC8bgq0ExboWSU1I0= +k8s.io/client-go v0.22.5/go.mod h1:cs6yf/61q2T1SdQL5Rdcjg9J1ElXSwbjSrW2vFImM4Y= +k8s.io/client-go v0.23.5/go.mod h1:flkeinTO1CirYgzMPRWxUCnV0G4Fbu2vLhYCObnt/r4= +k8s.io/client-go v0.24.2/go.mod h1:zg4Xaoo+umDsfCWr4fCnmLEtQXyCNXCvJuSsglNcV30= +k8s.io/code-generator v0.19.7/go.mod h1:lwEq3YnLYb/7uVXLorOJfxg+cUu2oihFhHZ0n9NIla0= +k8s.io/component-base v0.20.1/go.mod h1:guxkoJnNoh8LNrbtiQOlyp2Y2XFCZQmrcg2n/DeYNLk= +k8s.io/component-base v0.20.4/go.mod h1:t4p9EdiagbVCJKrQ1RsA5/V4rFQNDfRlevJajlGwgjI= +k8s.io/component-base v0.20.6/go.mod h1:6f1MPBAeI+mvuts3sIdtpjljHWBQ2cIy38oBIWMYnrM= +k8s.io/component-base v0.22.5/go.mod h1:VK3I+TjuF9eaa+Ln67dKxhGar5ynVbwnGrUiNF4MqCI= +k8s.io/cri-api v0.17.3/go.mod h1:X1sbHmuXhwaHs9xxYffLqJogVsnI+f6cPRcgPel7ywM= +k8s.io/cri-api v0.20.1/go.mod h1:2JRbKt+BFLTjtrILYVqQK5jqhI+XNdF6UiGMgczeBCI= +k8s.io/cri-api v0.20.4/go.mod h1:2JRbKt+BFLTjtrILYVqQK5jqhI+XNdF6UiGMgczeBCI= +k8s.io/cri-api v0.20.6/go.mod h1:ew44AjNXwyn1s0U4xCKGodU7J1HzBeZ1MpGrpa5r8Yc= +k8s.io/cri-api v0.23.1/go.mod h1:REJE3PSU0h/LOV1APBrupxrEJqnoxZC8KWzkBUHwrK4= +k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= +k8s.io/gengo v0.0.0-20200428234225-8167cfdcfc14/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= +k8s.io/gengo v0.0.0-20201113003025-83324d819ded/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= +k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= +k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= +k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= +k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= +k8s.io/klog/v2 v2.4.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= +k8s.io/klog/v2 v2.9.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec= +k8s.io/klog/v2 v2.30.0/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= +k8s.io/klog/v2 v2.40.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= +k8s.io/klog/v2 v2.60.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= +k8s.io/klog/v2 v2.70.0/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= +k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6/go.mod h1:UuqjUnNftUyPE5H64/qeyjQoUZhGpeFDVdxjTeEVN2o= +k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd/go.mod h1:WOJ3KddDSol4tAGcJo0Tvi+dK12EcqSLqcWsryKMpfM= +k8s.io/kube-openapi v0.0.0-20210421082810-95288971da7e/go.mod h1:vHXdDvt9+2spS2Rx9ql3I8tycm3H9FDfdUoIuKCefvw= +k8s.io/kube-openapi v0.0.0-20211109043538-20434351676c/go.mod h1:vHXdDvt9+2spS2Rx9ql3I8tycm3H9FDfdUoIuKCefvw= +k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65/go.mod h1:sX9MT8g7NVZM5lVL/j8QyCCJe8YSMW30QvGZWaCIDIk= +k8s.io/kube-openapi v0.0.0-20220328201542-3ee0da9b0b42/go.mod h1:Z/45zLw8lUo4wdiUkI+v/ImEGAvu3WatcZl3lPMR4Rk= +k8s.io/kubernetes v1.13.0/go.mod h1:ocZa8+6APFNC2tX1DZASIbocyYT5jHzqFVsY5aoB7Jk= +k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +k8s.io/utils v0.0.0-20210819203725-bdf08cb9a70a/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +k8s.io/utils v0.0.0-20210930125809-cb0fa318a74b/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +k8s.io/utils v0.0.0-20211116205334-6203023598ed/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= +lukechampine.com/frand v1.4.2 h1:RzFIpOvkMXuPMBb9maa4ND4wjBn71E1Jpf8BzJHMaVw= +lukechampine.com/frand v1.4.2/go.mod h1:4S/TM2ZgrKejMcKMbeLjISpJMO+/eZ1zu3vYX9dtj3s= +lukechampine.com/uint128 v1.1.1/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= +lukechampine.com/uint128 v1.2.0/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= +modernc.org/cc/v3 v3.36.0/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI= +modernc.org/cc/v3 v3.36.2/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI= +modernc.org/cc/v3 v3.36.3/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI= +modernc.org/ccgo/v3 v3.0.0-20220428102840-41399a37e894/go.mod h1:eI31LL8EwEBKPpNpA4bU1/i+sKOwOrQy8D87zWUcRZc= +modernc.org/ccgo/v3 v3.0.0-20220430103911-bc99d88307be/go.mod h1:bwdAnOoaIt8Ax9YdWGjxWsdkPcZyRPHqrOvJxaKAKGw= +modernc.org/ccgo/v3 v3.16.4/go.mod h1:tGtX0gE9Jn7hdZFeU88slbTh1UtCYKusWOoCJuvkWsQ= +modernc.org/ccgo/v3 v3.16.6/go.mod h1:tGtX0gE9Jn7hdZFeU88slbTh1UtCYKusWOoCJuvkWsQ= +modernc.org/ccgo/v3 v3.16.8/go.mod h1:zNjwkizS+fIFDrDjIAgBSCLkWbJuHF+ar3QRn+Z9aws= +modernc.org/ccgo/v3 v3.16.9/go.mod h1:zNMzC9A9xeNUepy6KuZBbugn3c0Mc9TeiJO4lgvkJDo= +modernc.org/ccorpus v1.11.6/go.mod h1:2gEUTrWqdpH2pXsmTM1ZkjeSrUWDpjMu2T6m29L/ErQ= +modernc.org/httpfs v1.0.6/go.mod h1:7dosgurJGp0sPaRanU53W4xZYKh14wfzX420oZADeHM= +modernc.org/libc v0.0.0-20220428101251-2d5f3daf273b/go.mod h1:p7Mg4+koNjc8jkqwcoFBJx7tXkpj00G77X7A72jXPXA= +modernc.org/libc v1.16.0/go.mod h1:N4LD6DBE9cf+Dzf9buBlzVJndKr/iJHG97vGLHYnb5A= +modernc.org/libc v1.16.1/go.mod h1:JjJE0eu4yeK7tab2n4S1w8tlWd9MxXLRzheaRnAKymU= +modernc.org/libc v1.16.17/go.mod h1:hYIV5VZczAmGZAnG15Vdngn5HSF5cSkbvfz2B7GRuVU= +modernc.org/libc v1.16.19/go.mod h1:p7Mg4+koNjc8jkqwcoFBJx7tXkpj00G77X7A72jXPXA= +modernc.org/libc v1.17.0/go.mod h1:XsgLldpP4aWlPlsjqKRdHPqCxCjISdHfM/yeWC5GyW0= +modernc.org/libc v1.17.1/go.mod h1:FZ23b+8LjxZs7XtFMbSzL/EhPxNbfZbErxEHc7cbD9s= +modernc.org/mathutil v1.2.2/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/mathutil v1.4.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/mathutil v1.5.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/memory v1.1.1/go.mod h1:/0wo5ibyrQiaoUoH7f9D8dnglAmILJ5/cxZlRECf+Nw= +modernc.org/memory v1.2.0/go.mod h1:/0wo5ibyrQiaoUoH7f9D8dnglAmILJ5/cxZlRECf+Nw= +modernc.org/memory v1.2.1/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= +modernc.org/opt v0.1.1/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= +modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= +modernc.org/sqlite v1.18.1/go.mod h1:6ho+Gow7oX5V+OiOQ6Tr4xeqbx13UZ6t+Fw9IRUG4d4= +modernc.org/strutil v1.1.1/go.mod h1:DE+MQQ/hjKBZS2zNInV5hhcipt5rLPWkmpbGeW5mmdw= +modernc.org/strutil v1.1.3/go.mod h1:MEHNA7PdEnEwLvspRMtWTNnp2nnyvMfkimT1NKNAGbw= +modernc.org/tcl v1.13.1/go.mod h1:XOLfOwzhkljL4itZkK6T72ckMgvj0BDsnKNdZVUOecw= +modernc.org/token v1.0.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= +modernc.org/z v1.5.1/go.mod h1:eWFB510QWW5Th9YGZT81s+LwvaAs3Q2yr4sP0rmLkv8= +mvdan.cc/gofumpt v0.5.0 h1:0EQ+Z56k8tXjj/6TQD25BFNKQXpCvT0rnansIc7Ug5E= +mvdan.cc/gofumpt v0.5.0/go.mod h1:HBeVDtMKRZpXyxFciAirzdKklDlGu8aAy1wEbH5Y9js= +nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= +nhooyr.io/websocket v1.8.7 h1:usjR2uOr/zjjkVMy0lW+PPohFok7PCow5sDjLgX4P4g= +nhooyr.io/websocket v1.8.7/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= +pgregory.net/rapid v0.6.1 h1:4eyrDxyht86tT4Ztm+kvlyNBLIk071gR+ZQdhphc9dQ= +pgregory.net/rapid v0.6.1/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= +rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= +rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= +rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= +rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= +sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.14/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= +sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.15/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= +sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.22/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= +sigs.k8s.io/json v0.0.0-20211020170558-c049b76a60c6/go.mod h1:p4QtZmO4uMYipTQNzagwnNoseA6OxSUutVw05NhYDRs= +sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2/go.mod h1:B+TnT182UBxE84DiCz4CVE26eOSDAeYCpfDnC2kdKMY= +sigs.k8s.io/structured-merge-diff/v4 v4.0.1/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= +sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= +sigs.k8s.io/structured-merge-diff/v4 v4.0.3/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= +sigs.k8s.io/structured-merge-diff/v4 v4.1.2/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4= +sigs.k8s.io/structured-merge-diff/v4 v4.2.1/go.mod h1:j/nl6xW8vLS49O8YvXW1ocPhZawJtm+Yrr7PPRQ0Vg4= +sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= +sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= +sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= +sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= diff --git a/provider/resources.go b/provider/resources.go index ffd44a7..f56a886 100644 --- a/provider/resources.go +++ b/provider/resources.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package xyz +package twingate import ( "fmt" @@ -28,18 +28,18 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/common/resource" // Replace this provider with the provider you are bridging. - xyz "github.com/iwahbe/terraform-provider-xyz/provider" + twingate "github.com/Twingate/terraform-provider-twingate/twingate" - "github.com/pulumi/pulumi-xyz/provider/pkg/version" + "github.com/Twingate/pulumi-twingate/provider/pkg/version" ) // 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" + mainPkg = "twingate" // modules: - mainMod = "index" // the xyz module + mainMod = "index" // the twingate module ) // preConfigureCallback is called before the providerConfigure function of the underlying provider. @@ -50,7 +50,7 @@ func preConfigureCallback(resource.PropertyMap, shim.ResourceConfig) error { return nil } -//go:embed cmd/pulumi-resource-xyz/bridge-metadata.json +//go:embed cmd/pulumi-resource-twingate/bridge-metadata.json var metadata []byte // Provider returns additional overlaid schema and metadata associated with the provider.. @@ -58,16 +58,16 @@ func Provider() tfbridge.ProviderInfo { // Create a Pulumi provider mapping prov := tfbridge.ProviderInfo{ // Instantiate the Terraform provider - P: shimv2.NewProvider(xyz.New(version.Version)()), - Name: "xyz", + P: shimv2.NewProvider(twingate.Provider(fmt.Sprintf("%s-pulumi", version.Version))), + Name: "twingate", // DisplayName is a way to be able to change the casing of the provider // name when being displayed on the Pulumi registry - DisplayName: "", + DisplayName: "Twingate", // 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", + Publisher: "Twingate", // LogoURL is optional but useful to help identify your package in the Pulumi Registry // if this package is published there. // @@ -78,17 +78,17 @@ func Provider() tfbridge.ProviderInfo { // 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.", + Description: "A Pulumi package for creating and managing twingate 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"}, + Keywords: []string{"pulumi", "twingate", "category/infrastructure"}, License: "Apache-2.0", - Homepage: "https://www.pulumi.com", - Repository: "https://github.com/pulumi/pulumi-xyz", + Homepage: "https://www.twingate.com", + Repository: "https://github.com/Twingate/pulumi-twingate", // The GitHub Org for the provider - defaults to `terraform-providers`. Note that this // should match the TF provider module's require directive, not any replace directives. - GitHubOrg: "", + GitHubOrg: "Twingate", MetadataInfo: tfbridge.NewProviderMetadata(metadata), Config: map[string]*tfbridge.SchemaInfo{ // Add any required configuration here, or remove the example below if @@ -101,24 +101,30 @@ func Provider() tfbridge.ProviderInfo { // }, }, PreConfigureCallback: preConfigureCallback, - 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")}, - // }, - // }, + Resources: map[string]*tfbridge.ResourceInfo{ + "twingate_remote_network": {Tok: tfbridge.MakeResource(mainPkg, mainMod, "TwingateRemoteNetwork")}, + "twingate_connector": {Tok: tfbridge.MakeResource(mainPkg, mainMod, "TwingateConnector")}, + "twingate_connector_tokens": {Tok: tfbridge.MakeResource(mainPkg, mainMod, "TwingateConnectorTokens")}, + "twingate_group": {Tok: tfbridge.MakeResource(mainPkg, mainMod, "TwingateGroup")}, + "twingate_resource": {Tok: tfbridge.MakeResource(mainPkg, mainMod, "TwingateResource")}, + "twingate_service_account": {Tok: tfbridge.MakeResource(mainPkg, mainMod, "TwingateServiceAccount")}, + "twingate_service_account_key": {Tok: tfbridge.MakeResource(mainPkg, mainMod, "TwingateServiceAccountKey")}, + "twingate_user": {Tok: tfbridge.MakeResource(mainPkg, mainMod, "TwingateUser")}, }, 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")}, + "twingate_remote_network": {Tok: tfbridge.MakeDataSource(mainPkg, mainMod, "getTwingateRemoteNetwork")}, + "twingate_remote_networks": {Tok: tfbridge.MakeDataSource(mainPkg, mainMod, "getTwingateRemoteNetworks")}, + "twingate_connector": {Tok: tfbridge.MakeDataSource(mainPkg, mainMod, "getTwingateConnector")}, + "twingate_connectors": {Tok: tfbridge.MakeDataSource(mainPkg, mainMod, "getTwingateConnectors")}, + "twingate_group": {Tok: tfbridge.MakeDataSource(mainPkg, mainMod, "getTwingateGroup")}, + "twingate_groups": {Tok: tfbridge.MakeDataSource(mainPkg, mainMod, "getTwingateGroups")}, + "twingate_resource": {Tok: tfbridge.MakeDataSource(mainPkg, mainMod, "getTwingateResource")}, + "twingate_resources": {Tok: tfbridge.MakeDataSource(mainPkg, mainMod, "getTwingateResources")}, + "twingate_user": {Tok: tfbridge.MakeDataSource(mainPkg, mainMod, "getTwingateUser")}, + "twingate_users": {Tok: tfbridge.MakeDataSource(mainPkg, mainMod, "getTwingateUsers")}, + "twingate_service_accounts": {Tok: tfbridge.MakeDataSource(mainPkg, mainMod, "getTwingateServiceAccounts")}, + "twingate_security_policy": {Tok: tfbridge.MakeDataSource(mainPkg, mainMod, "getTwingateSecurityPolicy")}, + "twingate_security_policies": {Tok: tfbridge.MakeDataSource(mainPkg, mainMod, "getTwingateSecurityPolicies")}, }, JavaScript: &tfbridge.JavaScriptInfo{ // List any npm dependencies and their versions @@ -142,7 +148,7 @@ func Provider() tfbridge.ProviderInfo { }, Golang: &tfbridge.GolangInfo{ ImportBasePath: path.Join( - fmt.Sprintf("github.com/pulumi/pulumi-%[1]s/sdk/", mainPkg), + fmt.Sprintf("github.com/Twingate/pulumi-%[1]s/sdk/", mainPkg), tfbridge.GetModuleMajorVersion(version.Version), "go", mainPkg, @@ -160,7 +166,7 @@ func Provider() tfbridge.ProviderInfo { // tokens, and apply auto aliasing for full backwards compatibility. For more // information, please reference: // https://pkg.go.dev/github.com/pulumi/pulumi-terraform-bridge/v3/pkg/tfbridge#ProviderInfo.ComputeTokens - prov.MustComputeTokens(tokens.SingleModule("xyz_", mainMod, + prov.MustComputeTokens(tokens.SingleModule("twingate_", mainMod, tokens.MakeStandard(mainPkg))) prov.MustApplyAutoAliases() prov.SetAutonaming(255, "-") diff --git a/sdk/dotnet/Config/Config.cs b/sdk/dotnet/Config/Config.cs new file mode 100644 index 0000000..9e343e4 --- /dev/null +++ b/sdk/dotnet/Config/Config.cs @@ -0,0 +1,92 @@ +// *** 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.Twingate +{ + public static class Config + { + [global::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 global::Pulumi.Config __config = new global::Pulumi.Config("twingate"); + + private static readonly __Value _apiToken = new __Value(() => __config.Get("apiToken")); + /// + /// The access key for API operations. You can retrieve this from the Twingate Admin Console + /// ([documentation](https://docs.twingate.com/docs/api-overview)). Alternatively, this can be specified using the + /// TWINGATE_API_TOKEN environment variable. + /// + public static string? ApiToken + { + get => _apiToken.Get(); + set => _apiToken.Set(value); + } + + private static readonly __Value _httpMaxRetry = new __Value(() => __config.GetInt32("httpMaxRetry")); + /// + /// Specifies a retry limit for the http requests made. The default value is 10. Alternatively, this can be specified using + /// the TWINGATE_HTTP_MAX_RETRY environment variable + /// + public static int? HttpMaxRetry + { + get => _httpMaxRetry.Get(); + set => _httpMaxRetry.Set(value); + } + + private static readonly __Value _httpTimeout = new __Value(() => __config.GetInt32("httpTimeout")); + /// + /// Specifies a time limit in seconds for the http requests made. The default value is 10 seconds. Alternatively, this can + /// be specified using the TWINGATE_HTTP_TIMEOUT environment variable + /// + public static int? HttpTimeout + { + get => _httpTimeout.Get(); + set => _httpTimeout.Set(value); + } + + private static readonly __Value _network = new __Value(() => __config.Get("network")); + /// + /// Your Twingate network ID for API operations. You can find it in the Admin Console URL, for example: + /// `autoco.twingate.com`, where `autoco` is your network ID Alternatively, this can be specified using the TWINGATE_NETWORK + /// environment variable. + /// + public static string? Network + { + get => _network.Get(); + set => _network.Set(value); + } + + private static readonly __Value _url = new __Value(() => __config.Get("url")); + /// + /// The default is 'twingate.com' This is optional and shouldn't be changed under normal circumstances. + /// + 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..cba2359 --- /dev/null +++ b/sdk/dotnet/Config/README.md @@ -0,0 +1 @@ +A Pulumi package for creating and managing twingate cloud resources. diff --git a/sdk/dotnet/GetTwingateConnector.cs b/sdk/dotnet/GetTwingateConnector.cs new file mode 100644 index 0000000..c72c0bb --- /dev/null +++ b/sdk/dotnet/GetTwingateConnector.cs @@ -0,0 +1,137 @@ +// *** 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.Twingate +{ + public static class GetTwingateConnector + { + /// + /// Connectors provide connectivity to Remote Networks. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/understanding-access-nodes). + /// + /// {{% examples %}} + /// ## Example Usage + /// {{% example %}} + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Twingate = Pulumi.Twingate; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var foo = Twingate.GetTwingateConnector.Invoke(new() + /// { + /// Id = "<your connector's id>", + /// }); + /// + /// }); + /// ``` + /// {{% /example %}} + /// {{% /examples %}} + /// + public static Task InvokeAsync(GetTwingateConnectorArgs args, InvokeOptions? options = null) + => global::Pulumi.Deployment.Instance.InvokeAsync("twingate:index/getTwingateConnector:getTwingateConnector", args ?? new GetTwingateConnectorArgs(), options.WithDefaults()); + + /// + /// Connectors provide connectivity to Remote Networks. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/understanding-access-nodes). + /// + /// {{% examples %}} + /// ## Example Usage + /// {{% example %}} + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Twingate = Pulumi.Twingate; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var foo = Twingate.GetTwingateConnector.Invoke(new() + /// { + /// Id = "<your connector's id>", + /// }); + /// + /// }); + /// ``` + /// {{% /example %}} + /// {{% /examples %}} + /// + public static Output Invoke(GetTwingateConnectorInvokeArgs args, InvokeOptions? options = null) + => global::Pulumi.Deployment.Instance.Invoke("twingate:index/getTwingateConnector:getTwingateConnector", args ?? new GetTwingateConnectorInvokeArgs(), options.WithDefaults()); + } + + + public sealed class GetTwingateConnectorArgs : global::Pulumi.InvokeArgs + { + /// + /// The ID of the Connector. The ID for the Connector can be obtained from the Admin API or the URL string in the Admin Console. + /// + [Input("id", required: true)] + public string Id { get; set; } = null!; + + public GetTwingateConnectorArgs() + { + } + public static new GetTwingateConnectorArgs Empty => new GetTwingateConnectorArgs(); + } + + public sealed class GetTwingateConnectorInvokeArgs : global::Pulumi.InvokeArgs + { + /// + /// The ID of the Connector. The ID for the Connector can be obtained from the Admin API or the URL string in the Admin Console. + /// + [Input("id", required: true)] + public Input Id { get; set; } = null!; + + public GetTwingateConnectorInvokeArgs() + { + } + public static new GetTwingateConnectorInvokeArgs Empty => new GetTwingateConnectorInvokeArgs(); + } + + + [OutputType] + public sealed class GetTwingateConnectorResult + { + /// + /// The ID of the Connector. The ID for the Connector can be obtained from the Admin API or the URL string in the Admin Console. + /// + public readonly string Id; + /// + /// The name of the Connector. + /// + public readonly string Name; + /// + /// The ID of the Remote Network the Connector is attached to. + /// + public readonly string RemoteNetworkId; + /// + /// Determines whether status notifications are enabled for the Connector. + /// + public readonly bool StatusUpdatesEnabled; + + [OutputConstructor] + private GetTwingateConnectorResult( + string id, + + string name, + + string remoteNetworkId, + + bool statusUpdatesEnabled) + { + Id = id; + Name = name; + RemoteNetworkId = remoteNetworkId; + StatusUpdatesEnabled = statusUpdatesEnabled; + } + } +} diff --git a/sdk/dotnet/GetTwingateConnectors.cs b/sdk/dotnet/GetTwingateConnectors.cs new file mode 100644 index 0000000..c624f00 --- /dev/null +++ b/sdk/dotnet/GetTwingateConnectors.cs @@ -0,0 +1,129 @@ +// *** 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.Twingate +{ + public static class GetTwingateConnectors + { + /// + /// Connectors provide connectivity to Remote Networks. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/understanding-access-nodes). + /// + /// {{% examples %}} + /// ## Example Usage + /// {{% example %}} + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Twingate = Pulumi.Twingate; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var all = Twingate.GetTwingateConnectors.Invoke(); + /// + /// }); + /// ``` + /// {{% /example %}} + /// {{% /examples %}} + /// + public static Task InvokeAsync(GetTwingateConnectorsArgs? args = null, InvokeOptions? options = null) + => global::Pulumi.Deployment.Instance.InvokeAsync("twingate:index/getTwingateConnectors:getTwingateConnectors", args ?? new GetTwingateConnectorsArgs(), options.WithDefaults()); + + /// + /// Connectors provide connectivity to Remote Networks. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/understanding-access-nodes). + /// + /// {{% examples %}} + /// ## Example Usage + /// {{% example %}} + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Twingate = Pulumi.Twingate; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var all = Twingate.GetTwingateConnectors.Invoke(); + /// + /// }); + /// ``` + /// {{% /example %}} + /// {{% /examples %}} + /// + public static Output Invoke(GetTwingateConnectorsInvokeArgs? args = null, InvokeOptions? options = null) + => global::Pulumi.Deployment.Instance.Invoke("twingate:index/getTwingateConnectors:getTwingateConnectors", args ?? new GetTwingateConnectorsInvokeArgs(), options.WithDefaults()); + } + + + public sealed class GetTwingateConnectorsArgs : global::Pulumi.InvokeArgs + { + [Input("connectors")] + private List? _connectors; + + /// + /// List of Connectors + /// + public List Connectors + { + get => _connectors ?? (_connectors = new List()); + set => _connectors = value; + } + + public GetTwingateConnectorsArgs() + { + } + public static new GetTwingateConnectorsArgs Empty => new GetTwingateConnectorsArgs(); + } + + public sealed class GetTwingateConnectorsInvokeArgs : global::Pulumi.InvokeArgs + { + [Input("connectors")] + private InputList? _connectors; + + /// + /// List of Connectors + /// + public InputList Connectors + { + get => _connectors ?? (_connectors = new InputList()); + set => _connectors = value; + } + + public GetTwingateConnectorsInvokeArgs() + { + } + public static new GetTwingateConnectorsInvokeArgs Empty => new GetTwingateConnectorsInvokeArgs(); + } + + + [OutputType] + public sealed class GetTwingateConnectorsResult + { + /// + /// List of Connectors + /// + public readonly ImmutableArray Connectors; + /// + /// The provider-assigned unique ID for this managed resource. + /// + public readonly string Id; + + [OutputConstructor] + private GetTwingateConnectorsResult( + ImmutableArray connectors, + + string id) + { + Connectors = connectors; + Id = id; + } + } +} diff --git a/sdk/dotnet/GetTwingateGroup.cs b/sdk/dotnet/GetTwingateGroup.cs new file mode 100644 index 0000000..786dac4 --- /dev/null +++ b/sdk/dotnet/GetTwingateGroup.cs @@ -0,0 +1,144 @@ +// *** 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.Twingate +{ + public static class GetTwingateGroup + { + /// + /// Groups are how users are authorized to access Resources. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/groups). + /// + /// {{% examples %}} + /// ## Example Usage + /// {{% example %}} + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Twingate = Pulumi.Twingate; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var foo = Twingate.GetTwingateGroup.Invoke(new() + /// { + /// Id = "<your group's id>", + /// }); + /// + /// }); + /// ``` + /// {{% /example %}} + /// {{% /examples %}} + /// + public static Task InvokeAsync(GetTwingateGroupArgs args, InvokeOptions? options = null) + => global::Pulumi.Deployment.Instance.InvokeAsync("twingate:index/getTwingateGroup:getTwingateGroup", args ?? new GetTwingateGroupArgs(), options.WithDefaults()); + + /// + /// Groups are how users are authorized to access Resources. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/groups). + /// + /// {{% examples %}} + /// ## Example Usage + /// {{% example %}} + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Twingate = Pulumi.Twingate; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var foo = Twingate.GetTwingateGroup.Invoke(new() + /// { + /// Id = "<your group's id>", + /// }); + /// + /// }); + /// ``` + /// {{% /example %}} + /// {{% /examples %}} + /// + public static Output Invoke(GetTwingateGroupInvokeArgs args, InvokeOptions? options = null) + => global::Pulumi.Deployment.Instance.Invoke("twingate:index/getTwingateGroup:getTwingateGroup", args ?? new GetTwingateGroupInvokeArgs(), options.WithDefaults()); + } + + + public sealed class GetTwingateGroupArgs : global::Pulumi.InvokeArgs + { + /// + /// The ID of the Group. The ID for the Group can be obtained from the Admin API or the URL string in the Admin Console. + /// + [Input("id", required: true)] + public string Id { get; set; } = null!; + + public GetTwingateGroupArgs() + { + } + public static new GetTwingateGroupArgs Empty => new GetTwingateGroupArgs(); + } + + public sealed class GetTwingateGroupInvokeArgs : global::Pulumi.InvokeArgs + { + /// + /// The ID of the Group. The ID for the Group can be obtained from the Admin API or the URL string in the Admin Console. + /// + [Input("id", required: true)] + public Input Id { get; set; } = null!; + + public GetTwingateGroupInvokeArgs() + { + } + public static new GetTwingateGroupInvokeArgs Empty => new GetTwingateGroupInvokeArgs(); + } + + + [OutputType] + public sealed class GetTwingateGroupResult + { + /// + /// The ID of the Group. The ID for the Group can be obtained from the Admin API or the URL string in the Admin Console. + /// + public readonly string Id; + /// + /// Indicates if the Group is active + /// + public readonly bool IsActive; + /// + /// The name of the Group + /// + public readonly string Name; + /// + /// The Security Policy assigned to the Group. + /// + public readonly string SecurityPolicyId; + /// + /// The type of the Group + /// + public readonly string Type; + + [OutputConstructor] + private GetTwingateGroupResult( + string id, + + bool isActive, + + string name, + + string securityPolicyId, + + string type) + { + Id = id; + IsActive = isActive; + Name = name; + SecurityPolicyId = securityPolicyId; + Type = type; + } + } +} diff --git a/sdk/dotnet/GetTwingateGroups.cs b/sdk/dotnet/GetTwingateGroups.cs new file mode 100644 index 0000000..611d861 --- /dev/null +++ b/sdk/dotnet/GetTwingateGroups.cs @@ -0,0 +1,192 @@ +// *** 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.Twingate +{ + public static class GetTwingateGroups + { + /// + /// Groups are how users are authorized to access Resources. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/groups). + /// + /// {{% examples %}} + /// ## Example Usage + /// {{% example %}} + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Twingate = Pulumi.Twingate; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var foo = Twingate.GetTwingateGroups.Invoke(new() + /// { + /// Name = "<your group's name>", + /// }); + /// + /// }); + /// ``` + /// {{% /example %}} + /// {{% /examples %}} + /// + public static Task InvokeAsync(GetTwingateGroupsArgs? args = null, InvokeOptions? options = null) + => global::Pulumi.Deployment.Instance.InvokeAsync("twingate:index/getTwingateGroups:getTwingateGroups", args ?? new GetTwingateGroupsArgs(), options.WithDefaults()); + + /// + /// Groups are how users are authorized to access Resources. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/groups). + /// + /// {{% examples %}} + /// ## Example Usage + /// {{% example %}} + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Twingate = Pulumi.Twingate; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var foo = Twingate.GetTwingateGroups.Invoke(new() + /// { + /// Name = "<your group's name>", + /// }); + /// + /// }); + /// ``` + /// {{% /example %}} + /// {{% /examples %}} + /// + public static Output Invoke(GetTwingateGroupsInvokeArgs? args = null, InvokeOptions? options = null) + => global::Pulumi.Deployment.Instance.Invoke("twingate:index/getTwingateGroups:getTwingateGroups", args ?? new GetTwingateGroupsInvokeArgs(), options.WithDefaults()); + } + + + public sealed class GetTwingateGroupsArgs : global::Pulumi.InvokeArgs + { + [Input("groups")] + private List? _groups; + + /// + /// List of Groups + /// + public List Groups + { + get => _groups ?? (_groups = new List()); + set => _groups = value; + } + + /// + /// Indicates if the Group is active + /// + [Input("isActive")] + public bool? IsActive { get; set; } + + /// + /// The name of the Group + /// + [Input("name")] + public string? Name { get; set; } + + /// + /// The type of the Group + /// + [Input("type")] + public string? Type { get; set; } + + public GetTwingateGroupsArgs() + { + } + public static new GetTwingateGroupsArgs Empty => new GetTwingateGroupsArgs(); + } + + public sealed class GetTwingateGroupsInvokeArgs : global::Pulumi.InvokeArgs + { + [Input("groups")] + private InputList? _groups; + + /// + /// List of Groups + /// + public InputList Groups + { + get => _groups ?? (_groups = new InputList()); + set => _groups = value; + } + + /// + /// Indicates if the Group is active + /// + [Input("isActive")] + public Input? IsActive { get; set; } + + /// + /// The name of the Group + /// + [Input("name")] + public Input? Name { get; set; } + + /// + /// The type of the Group + /// + [Input("type")] + public Input? Type { get; set; } + + public GetTwingateGroupsInvokeArgs() + { + } + public static new GetTwingateGroupsInvokeArgs Empty => new GetTwingateGroupsInvokeArgs(); + } + + + [OutputType] + public sealed class GetTwingateGroupsResult + { + /// + /// List of Groups + /// + public readonly ImmutableArray Groups; + /// + /// The provider-assigned unique ID for this managed resource. + /// + public readonly string Id; + /// + /// Returns only Groups matching the specified state. + /// + public readonly bool? IsActive; + /// + /// Returns only Groups that exactly match this name. + /// + public readonly string? Name; + /// + /// Returns only Groups of the specified type (valid: `MANUAL`, `SYNCED`, `SYSTEM`). + /// + public readonly string? Type; + + [OutputConstructor] + private GetTwingateGroupsResult( + ImmutableArray groups, + + string id, + + bool? isActive, + + string? name, + + string? type) + { + Groups = groups; + Id = id; + IsActive = isActive; + Name = name; + Type = type; + } + } +} diff --git a/sdk/dotnet/GetTwingateRemoteNetwork.cs b/sdk/dotnet/GetTwingateRemoteNetwork.cs new file mode 100644 index 0000000..e1086ed --- /dev/null +++ b/sdk/dotnet/GetTwingateRemoteNetwork.cs @@ -0,0 +1,142 @@ +// *** 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.Twingate +{ + public static class GetTwingateRemoteNetwork + { + /// + /// A Remote Network represents a single private network in Twingate that can have one or more Connectors and Resources assigned to it. You must create a Remote Network before creating Resources and Connectors that belong to it. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/remote-networks). + /// + /// {{% examples %}} + /// ## Example Usage + /// {{% example %}} + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Twingate = Pulumi.Twingate; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var foo = Twingate.GetTwingateRemoteNetwork.Invoke(new() + /// { + /// Name = "<your network's name>", + /// }); + /// + /// }); + /// ``` + /// {{% /example %}} + /// {{% /examples %}} + /// + public static Task InvokeAsync(GetTwingateRemoteNetworkArgs? args = null, InvokeOptions? options = null) + => global::Pulumi.Deployment.Instance.InvokeAsync("twingate:index/getTwingateRemoteNetwork:getTwingateRemoteNetwork", args ?? new GetTwingateRemoteNetworkArgs(), options.WithDefaults()); + + /// + /// A Remote Network represents a single private network in Twingate that can have one or more Connectors and Resources assigned to it. You must create a Remote Network before creating Resources and Connectors that belong to it. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/remote-networks). + /// + /// {{% examples %}} + /// ## Example Usage + /// {{% example %}} + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Twingate = Pulumi.Twingate; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var foo = Twingate.GetTwingateRemoteNetwork.Invoke(new() + /// { + /// Name = "<your network's name>", + /// }); + /// + /// }); + /// ``` + /// {{% /example %}} + /// {{% /examples %}} + /// + public static Output Invoke(GetTwingateRemoteNetworkInvokeArgs? args = null, InvokeOptions? options = null) + => global::Pulumi.Deployment.Instance.Invoke("twingate:index/getTwingateRemoteNetwork:getTwingateRemoteNetwork", args ?? new GetTwingateRemoteNetworkInvokeArgs(), options.WithDefaults()); + } + + + public sealed class GetTwingateRemoteNetworkArgs : global::Pulumi.InvokeArgs + { + /// + /// The ID of the Remote Network + /// + [Input("id")] + public string? Id { get; set; } + + /// + /// The name of the Remote Network + /// + [Input("name")] + public string? Name { get; set; } + + public GetTwingateRemoteNetworkArgs() + { + } + public static new GetTwingateRemoteNetworkArgs Empty => new GetTwingateRemoteNetworkArgs(); + } + + public sealed class GetTwingateRemoteNetworkInvokeArgs : global::Pulumi.InvokeArgs + { + /// + /// The ID of the Remote Network + /// + [Input("id")] + public Input? Id { get; set; } + + /// + /// The name of the Remote Network + /// + [Input("name")] + public Input? Name { get; set; } + + public GetTwingateRemoteNetworkInvokeArgs() + { + } + public static new GetTwingateRemoteNetworkInvokeArgs Empty => new GetTwingateRemoteNetworkInvokeArgs(); + } + + + [OutputType] + public sealed class GetTwingateRemoteNetworkResult + { + /// + /// The ID of the Remote Network + /// + public readonly string? Id; + /// + /// The location of the Remote Network. Must be one of the following: AWS, AZURE, GOOGLE*CLOUD, ON*PREMISE, OTHER. + /// + public readonly string Location; + /// + /// The name of the Remote Network + /// + public readonly string? Name; + + [OutputConstructor] + private GetTwingateRemoteNetworkResult( + string? id, + + string location, + + string? name) + { + Id = id; + Location = location; + Name = name; + } + } +} diff --git a/sdk/dotnet/GetTwingateRemoteNetworks.cs b/sdk/dotnet/GetTwingateRemoteNetworks.cs new file mode 100644 index 0000000..ffba922 --- /dev/null +++ b/sdk/dotnet/GetTwingateRemoteNetworks.cs @@ -0,0 +1,129 @@ +// *** 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.Twingate +{ + public static class GetTwingateRemoteNetworks + { + /// + /// A Remote Network represents a single private network in Twingate that can have one or more Connectors and Resources assigned to it. You must create a Remote Network before creating Resources and Connectors that belong to it. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/remote-networks). + /// + /// {{% examples %}} + /// ## Example Usage + /// {{% example %}} + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Twingate = Pulumi.Twingate; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var all = Twingate.GetTwingateRemoteNetworks.Invoke(); + /// + /// }); + /// ``` + /// {{% /example %}} + /// {{% /examples %}} + /// + public static Task InvokeAsync(GetTwingateRemoteNetworksArgs? args = null, InvokeOptions? options = null) + => global::Pulumi.Deployment.Instance.InvokeAsync("twingate:index/getTwingateRemoteNetworks:getTwingateRemoteNetworks", args ?? new GetTwingateRemoteNetworksArgs(), options.WithDefaults()); + + /// + /// A Remote Network represents a single private network in Twingate that can have one or more Connectors and Resources assigned to it. You must create a Remote Network before creating Resources and Connectors that belong to it. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/remote-networks). + /// + /// {{% examples %}} + /// ## Example Usage + /// {{% example %}} + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Twingate = Pulumi.Twingate; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var all = Twingate.GetTwingateRemoteNetworks.Invoke(); + /// + /// }); + /// ``` + /// {{% /example %}} + /// {{% /examples %}} + /// + public static Output Invoke(GetTwingateRemoteNetworksInvokeArgs? args = null, InvokeOptions? options = null) + => global::Pulumi.Deployment.Instance.Invoke("twingate:index/getTwingateRemoteNetworks:getTwingateRemoteNetworks", args ?? new GetTwingateRemoteNetworksInvokeArgs(), options.WithDefaults()); + } + + + public sealed class GetTwingateRemoteNetworksArgs : global::Pulumi.InvokeArgs + { + [Input("remoteNetworks")] + private List? _remoteNetworks; + + /// + /// List of Remote Networks + /// + public List RemoteNetworks + { + get => _remoteNetworks ?? (_remoteNetworks = new List()); + set => _remoteNetworks = value; + } + + public GetTwingateRemoteNetworksArgs() + { + } + public static new GetTwingateRemoteNetworksArgs Empty => new GetTwingateRemoteNetworksArgs(); + } + + public sealed class GetTwingateRemoteNetworksInvokeArgs : global::Pulumi.InvokeArgs + { + [Input("remoteNetworks")] + private InputList? _remoteNetworks; + + /// + /// List of Remote Networks + /// + public InputList RemoteNetworks + { + get => _remoteNetworks ?? (_remoteNetworks = new InputList()); + set => _remoteNetworks = value; + } + + public GetTwingateRemoteNetworksInvokeArgs() + { + } + public static new GetTwingateRemoteNetworksInvokeArgs Empty => new GetTwingateRemoteNetworksInvokeArgs(); + } + + + [OutputType] + public sealed class GetTwingateRemoteNetworksResult + { + /// + /// The provider-assigned unique ID for this managed resource. + /// + public readonly string Id; + /// + /// List of Remote Networks + /// + public readonly ImmutableArray RemoteNetworks; + + [OutputConstructor] + private GetTwingateRemoteNetworksResult( + string id, + + ImmutableArray remoteNetworks) + { + Id = id; + RemoteNetworks = remoteNetworks; + } + } +} diff --git a/sdk/dotnet/GetTwingateResource.cs b/sdk/dotnet/GetTwingateResource.cs new file mode 100644 index 0000000..31d63bf --- /dev/null +++ b/sdk/dotnet/GetTwingateResource.cs @@ -0,0 +1,168 @@ +// *** 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.Twingate +{ + public static class GetTwingateResource + { + /// + /// Resources in Twingate represent any network destination address that you wish to provide private access to for users authorized via the Twingate Client application. Resources can be defined by either IP or DNS address, and all private DNS addresses will be automatically resolved with no client configuration changes. For more information, see the Twingate [documentation](https://docs.twingate.com/docs/resources-and-access-nodes). + /// + /// {{% examples %}} + /// ## Example Usage + /// {{% example %}} + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Twingate = Pulumi.Twingate; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var foo = Twingate.GetTwingateResource.Invoke(new() + /// { + /// Id = "<your resource's id>", + /// }); + /// + /// }); + /// ``` + /// {{% /example %}} + /// {{% /examples %}} + /// + public static Task InvokeAsync(GetTwingateResourceArgs args, InvokeOptions? options = null) + => global::Pulumi.Deployment.Instance.InvokeAsync("twingate:index/getTwingateResource:getTwingateResource", args ?? new GetTwingateResourceArgs(), options.WithDefaults()); + + /// + /// Resources in Twingate represent any network destination address that you wish to provide private access to for users authorized via the Twingate Client application. Resources can be defined by either IP or DNS address, and all private DNS addresses will be automatically resolved with no client configuration changes. For more information, see the Twingate [documentation](https://docs.twingate.com/docs/resources-and-access-nodes). + /// + /// {{% examples %}} + /// ## Example Usage + /// {{% example %}} + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Twingate = Pulumi.Twingate; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var foo = Twingate.GetTwingateResource.Invoke(new() + /// { + /// Id = "<your resource's id>", + /// }); + /// + /// }); + /// ``` + /// {{% /example %}} + /// {{% /examples %}} + /// + public static Output Invoke(GetTwingateResourceInvokeArgs args, InvokeOptions? options = null) + => global::Pulumi.Deployment.Instance.Invoke("twingate:index/getTwingateResource:getTwingateResource", args ?? new GetTwingateResourceInvokeArgs(), options.WithDefaults()); + } + + + public sealed class GetTwingateResourceArgs : global::Pulumi.InvokeArgs + { + /// + /// The ID of the Resource. The ID for the Resource can be obtained from the Admin API or the URL string in the Admin Console. + /// + [Input("id", required: true)] + public string Id { get; set; } = null!; + + [Input("protocols")] + private List? _protocols; + + /// + /// By default (when this argument is not defined) no restriction is applied, and all protocols and ports are allowed. + /// + public List Protocols + { + get => _protocols ?? (_protocols = new List()); + set => _protocols = value; + } + + public GetTwingateResourceArgs() + { + } + public static new GetTwingateResourceArgs Empty => new GetTwingateResourceArgs(); + } + + public sealed class GetTwingateResourceInvokeArgs : global::Pulumi.InvokeArgs + { + /// + /// The ID of the Resource. The ID for the Resource can be obtained from the Admin API or the URL string in the Admin Console. + /// + [Input("id", required: true)] + public Input Id { get; set; } = null!; + + [Input("protocols")] + private InputList? _protocols; + + /// + /// By default (when this argument is not defined) no restriction is applied, and all protocols and ports are allowed. + /// + public InputList Protocols + { + get => _protocols ?? (_protocols = new InputList()); + set => _protocols = value; + } + + public GetTwingateResourceInvokeArgs() + { + } + public static new GetTwingateResourceInvokeArgs Empty => new GetTwingateResourceInvokeArgs(); + } + + + [OutputType] + public sealed class GetTwingateResourceResult + { + /// + /// The Resource's address, which may be an IP address, CIDR range, or DNS address + /// + public readonly string Address; + /// + /// The ID of the Resource. The ID for the Resource can be obtained from the Admin API or the URL string in the Admin Console. + /// + public readonly string Id; + /// + /// The name of the Resource + /// + public readonly string Name; + /// + /// By default (when this argument is not defined) no restriction is applied, and all protocols and ports are allowed. + /// + public readonly ImmutableArray Protocols; + /// + /// The Remote Network ID that the Resource is associated with. Resources may only be associated with a single Remote Network. + /// + public readonly string RemoteNetworkId; + + [OutputConstructor] + private GetTwingateResourceResult( + string address, + + string id, + + string name, + + ImmutableArray protocols, + + string remoteNetworkId) + { + Address = address; + Id = id; + Name = name; + Protocols = protocols; + RemoteNetworkId = remoteNetworkId; + } + } +} diff --git a/sdk/dotnet/GetTwingateResources.cs b/sdk/dotnet/GetTwingateResources.cs new file mode 100644 index 0000000..321b87b --- /dev/null +++ b/sdk/dotnet/GetTwingateResources.cs @@ -0,0 +1,154 @@ +// *** 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.Twingate +{ + public static class GetTwingateResources + { + /// + /// Resources in Twingate represent servers on the private network that clients can connect to. Resources can be defined by IP, CIDR range, FQDN, or DNS zone. For more information, see the Twingate [documentation](https://docs.twingate.com/docs/resources-and-access-nodes). + /// + /// {{% examples %}} + /// ## Example Usage + /// {{% example %}} + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Twingate = Pulumi.Twingate; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var foo = Twingate.GetTwingateResources.Invoke(new() + /// { + /// Name = "<your resource's name>", + /// }); + /// + /// }); + /// ``` + /// {{% /example %}} + /// {{% /examples %}} + /// + public static Task InvokeAsync(GetTwingateResourcesArgs args, InvokeOptions? options = null) + => global::Pulumi.Deployment.Instance.InvokeAsync("twingate:index/getTwingateResources:getTwingateResources", args ?? new GetTwingateResourcesArgs(), options.WithDefaults()); + + /// + /// Resources in Twingate represent servers on the private network that clients can connect to. Resources can be defined by IP, CIDR range, FQDN, or DNS zone. For more information, see the Twingate [documentation](https://docs.twingate.com/docs/resources-and-access-nodes). + /// + /// {{% examples %}} + /// ## Example Usage + /// {{% example %}} + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Twingate = Pulumi.Twingate; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var foo = Twingate.GetTwingateResources.Invoke(new() + /// { + /// Name = "<your resource's name>", + /// }); + /// + /// }); + /// ``` + /// {{% /example %}} + /// {{% /examples %}} + /// + public static Output Invoke(GetTwingateResourcesInvokeArgs args, InvokeOptions? options = null) + => global::Pulumi.Deployment.Instance.Invoke("twingate:index/getTwingateResources:getTwingateResources", args ?? new GetTwingateResourcesInvokeArgs(), options.WithDefaults()); + } + + + public sealed class GetTwingateResourcesArgs : global::Pulumi.InvokeArgs + { + /// + /// The name of the Resource + /// + [Input("name", required: true)] + public string Name { get; set; } = null!; + + [Input("resources")] + private List? _resources; + + /// + /// List of Resources + /// + public List Resources + { + get => _resources ?? (_resources = new List()); + set => _resources = value; + } + + public GetTwingateResourcesArgs() + { + } + public static new GetTwingateResourcesArgs Empty => new GetTwingateResourcesArgs(); + } + + public sealed class GetTwingateResourcesInvokeArgs : global::Pulumi.InvokeArgs + { + /// + /// The name of the Resource + /// + [Input("name", required: true)] + public Input Name { get; set; } = null!; + + [Input("resources")] + private InputList? _resources; + + /// + /// List of Resources + /// + public InputList Resources + { + get => _resources ?? (_resources = new InputList()); + set => _resources = value; + } + + public GetTwingateResourcesInvokeArgs() + { + } + public static new GetTwingateResourcesInvokeArgs Empty => new GetTwingateResourcesInvokeArgs(); + } + + + [OutputType] + public sealed class GetTwingateResourcesResult + { + /// + /// The provider-assigned unique ID for this managed resource. + /// + public readonly string Id; + /// + /// The name of the Resource + /// + public readonly string Name; + /// + /// List of Resources + /// + public readonly ImmutableArray Resources; + + [OutputConstructor] + private GetTwingateResourcesResult( + string id, + + string name, + + ImmutableArray resources) + { + Id = id; + Name = name; + Resources = resources; + } + } +} diff --git a/sdk/dotnet/GetTwingateSecurityPolicies.cs b/sdk/dotnet/GetTwingateSecurityPolicies.cs new file mode 100644 index 0000000..3672a76 --- /dev/null +++ b/sdk/dotnet/GetTwingateSecurityPolicies.cs @@ -0,0 +1,118 @@ +// *** 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.Twingate +{ + public static class GetTwingateSecurityPolicies + { + /// + /// Security Policies are defined in the Twingate Admin Console and determine user and device authentication requirements for Resources. + /// + /// {{% examples %}} + /// ## Example Usage + /// {{% example %}} + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Twingate = Pulumi.Twingate; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var all = Twingate.GetTwingateSecurityPolicies.Invoke(); + /// + /// }); + /// ``` + /// {{% /example %}} + /// {{% /examples %}} + /// + public static Task InvokeAsync(GetTwingateSecurityPoliciesArgs? args = null, InvokeOptions? options = null) + => global::Pulumi.Deployment.Instance.InvokeAsync("twingate:index/getTwingateSecurityPolicies:getTwingateSecurityPolicies", args ?? new GetTwingateSecurityPoliciesArgs(), options.WithDefaults()); + + /// + /// Security Policies are defined in the Twingate Admin Console and determine user and device authentication requirements for Resources. + /// + /// {{% examples %}} + /// ## Example Usage + /// {{% example %}} + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Twingate = Pulumi.Twingate; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var all = Twingate.GetTwingateSecurityPolicies.Invoke(); + /// + /// }); + /// ``` + /// {{% /example %}} + /// {{% /examples %}} + /// + public static Output Invoke(GetTwingateSecurityPoliciesInvokeArgs? args = null, InvokeOptions? options = null) + => global::Pulumi.Deployment.Instance.Invoke("twingate:index/getTwingateSecurityPolicies:getTwingateSecurityPolicies", args ?? new GetTwingateSecurityPoliciesInvokeArgs(), options.WithDefaults()); + } + + + public sealed class GetTwingateSecurityPoliciesArgs : global::Pulumi.InvokeArgs + { + [Input("securityPolicies")] + private List? _securityPolicies; + public List SecurityPolicies + { + get => _securityPolicies ?? (_securityPolicies = new List()); + set => _securityPolicies = value; + } + + public GetTwingateSecurityPoliciesArgs() + { + } + public static new GetTwingateSecurityPoliciesArgs Empty => new GetTwingateSecurityPoliciesArgs(); + } + + public sealed class GetTwingateSecurityPoliciesInvokeArgs : global::Pulumi.InvokeArgs + { + [Input("securityPolicies")] + private InputList? _securityPolicies; + public InputList SecurityPolicies + { + get => _securityPolicies ?? (_securityPolicies = new InputList()); + set => _securityPolicies = value; + } + + public GetTwingateSecurityPoliciesInvokeArgs() + { + } + public static new GetTwingateSecurityPoliciesInvokeArgs Empty => new GetTwingateSecurityPoliciesInvokeArgs(); + } + + + [OutputType] + public sealed class GetTwingateSecurityPoliciesResult + { + /// + /// The provider-assigned unique ID for this managed resource. + /// + public readonly string Id; + public readonly ImmutableArray SecurityPolicies; + + [OutputConstructor] + private GetTwingateSecurityPoliciesResult( + string id, + + ImmutableArray securityPolicies) + { + Id = id; + SecurityPolicies = securityPolicies; + } + } +} diff --git a/sdk/dotnet/GetTwingateSecurityPolicy.cs b/sdk/dotnet/GetTwingateSecurityPolicy.cs new file mode 100644 index 0000000..0310592 --- /dev/null +++ b/sdk/dotnet/GetTwingateSecurityPolicy.cs @@ -0,0 +1,135 @@ +// *** 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.Twingate +{ + public static class GetTwingateSecurityPolicy + { + /// + /// Security Policies are defined in the Twingate Admin Console and determine user and device authentication requirements for Resources. + /// + /// {{% examples %}} + /// ## Example Usage + /// {{% example %}} + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Twingate = Pulumi.Twingate; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var foo = Twingate.GetTwingateSecurityPolicy.Invoke(new() + /// { + /// Name = "<your security policy name>", + /// }); + /// + /// }); + /// ``` + /// {{% /example %}} + /// {{% /examples %}} + /// + public static Task InvokeAsync(GetTwingateSecurityPolicyArgs? args = null, InvokeOptions? options = null) + => global::Pulumi.Deployment.Instance.InvokeAsync("twingate:index/getTwingateSecurityPolicy:getTwingateSecurityPolicy", args ?? new GetTwingateSecurityPolicyArgs(), options.WithDefaults()); + + /// + /// Security Policies are defined in the Twingate Admin Console and determine user and device authentication requirements for Resources. + /// + /// {{% examples %}} + /// ## Example Usage + /// {{% example %}} + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Twingate = Pulumi.Twingate; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var foo = Twingate.GetTwingateSecurityPolicy.Invoke(new() + /// { + /// Name = "<your security policy name>", + /// }); + /// + /// }); + /// ``` + /// {{% /example %}} + /// {{% /examples %}} + /// + public static Output Invoke(GetTwingateSecurityPolicyInvokeArgs? args = null, InvokeOptions? options = null) + => global::Pulumi.Deployment.Instance.Invoke("twingate:index/getTwingateSecurityPolicy:getTwingateSecurityPolicy", args ?? new GetTwingateSecurityPolicyInvokeArgs(), options.WithDefaults()); + } + + + public sealed class GetTwingateSecurityPolicyArgs : global::Pulumi.InvokeArgs + { + /// + /// Return a Security Policy by its ID. The ID for the Security Policy can be obtained from the Admin API or the URL string in the Admin Console. + /// + [Input("id")] + public string? Id { get; set; } + + /// + /// Return a Security Policy that exactly matches this name. + /// + [Input("name")] + public string? Name { get; set; } + + public GetTwingateSecurityPolicyArgs() + { + } + public static new GetTwingateSecurityPolicyArgs Empty => new GetTwingateSecurityPolicyArgs(); + } + + public sealed class GetTwingateSecurityPolicyInvokeArgs : global::Pulumi.InvokeArgs + { + /// + /// Return a Security Policy by its ID. The ID for the Security Policy can be obtained from the Admin API or the URL string in the Admin Console. + /// + [Input("id")] + public Input? Id { get; set; } + + /// + /// Return a Security Policy that exactly matches this name. + /// + [Input("name")] + public Input? Name { get; set; } + + public GetTwingateSecurityPolicyInvokeArgs() + { + } + public static new GetTwingateSecurityPolicyInvokeArgs Empty => new GetTwingateSecurityPolicyInvokeArgs(); + } + + + [OutputType] + public sealed class GetTwingateSecurityPolicyResult + { + /// + /// Return a Security Policy by its ID. The ID for the Security Policy can be obtained from the Admin API or the URL string in the Admin Console. + /// + public readonly string? Id; + /// + /// Return a Security Policy that exactly matches this name. + /// + public readonly string? Name; + + [OutputConstructor] + private GetTwingateSecurityPolicyResult( + string? id, + + string? name) + { + Id = id; + Name = name; + } + } +} diff --git a/sdk/dotnet/GetTwingateServiceAccounts.cs b/sdk/dotnet/GetTwingateServiceAccounts.cs new file mode 100644 index 0000000..7c9ce80 --- /dev/null +++ b/sdk/dotnet/GetTwingateServiceAccounts.cs @@ -0,0 +1,154 @@ +// *** 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.Twingate +{ + public static class GetTwingateServiceAccounts + { + /// + /// Service Accounts offer a way to provide programmatic, centrally-controlled, and consistent access controls. + /// + /// {{% examples %}} + /// ## Example Usage + /// {{% example %}} + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Twingate = Pulumi.Twingate; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var foo = Twingate.GetTwingateServiceAccounts.Invoke(new() + /// { + /// Name = "<your service account's name>", + /// }); + /// + /// }); + /// ``` + /// {{% /example %}} + /// {{% /examples %}} + /// + public static Task InvokeAsync(GetTwingateServiceAccountsArgs? args = null, InvokeOptions? options = null) + => global::Pulumi.Deployment.Instance.InvokeAsync("twingate:index/getTwingateServiceAccounts:getTwingateServiceAccounts", args ?? new GetTwingateServiceAccountsArgs(), options.WithDefaults()); + + /// + /// Service Accounts offer a way to provide programmatic, centrally-controlled, and consistent access controls. + /// + /// {{% examples %}} + /// ## Example Usage + /// {{% example %}} + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Twingate = Pulumi.Twingate; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var foo = Twingate.GetTwingateServiceAccounts.Invoke(new() + /// { + /// Name = "<your service account's name>", + /// }); + /// + /// }); + /// ``` + /// {{% /example %}} + /// {{% /examples %}} + /// + public static Output Invoke(GetTwingateServiceAccountsInvokeArgs? args = null, InvokeOptions? options = null) + => global::Pulumi.Deployment.Instance.Invoke("twingate:index/getTwingateServiceAccounts:getTwingateServiceAccounts", args ?? new GetTwingateServiceAccountsInvokeArgs(), options.WithDefaults()); + } + + + public sealed class GetTwingateServiceAccountsArgs : global::Pulumi.InvokeArgs + { + /// + /// Name of the Service Account + /// + [Input("name")] + public string? Name { get; set; } + + [Input("serviceAccounts")] + private List? _serviceAccounts; + + /// + /// List of Service Accounts + /// + public List ServiceAccounts + { + get => _serviceAccounts ?? (_serviceAccounts = new List()); + set => _serviceAccounts = value; + } + + public GetTwingateServiceAccountsArgs() + { + } + public static new GetTwingateServiceAccountsArgs Empty => new GetTwingateServiceAccountsArgs(); + } + + public sealed class GetTwingateServiceAccountsInvokeArgs : global::Pulumi.InvokeArgs + { + /// + /// Name of the Service Account + /// + [Input("name")] + public Input? Name { get; set; } + + [Input("serviceAccounts")] + private InputList? _serviceAccounts; + + /// + /// List of Service Accounts + /// + public InputList ServiceAccounts + { + get => _serviceAccounts ?? (_serviceAccounts = new InputList()); + set => _serviceAccounts = value; + } + + public GetTwingateServiceAccountsInvokeArgs() + { + } + public static new GetTwingateServiceAccountsInvokeArgs Empty => new GetTwingateServiceAccountsInvokeArgs(); + } + + + [OutputType] + public sealed class GetTwingateServiceAccountsResult + { + /// + /// The provider-assigned unique ID for this managed resource. + /// + public readonly string Id; + /// + /// Filter results by the name of the Service Account. + /// + public readonly string? Name; + /// + /// List of Service Accounts + /// + public readonly ImmutableArray ServiceAccounts; + + [OutputConstructor] + private GetTwingateServiceAccountsResult( + string id, + + string? name, + + ImmutableArray serviceAccounts) + { + Id = id; + Name = name; + ServiceAccounts = serviceAccounts; + } + } +} diff --git a/sdk/dotnet/GetTwingateUser.cs b/sdk/dotnet/GetTwingateUser.cs new file mode 100644 index 0000000..10e1aed --- /dev/null +++ b/sdk/dotnet/GetTwingateUser.cs @@ -0,0 +1,158 @@ +// *** 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.Twingate +{ + public static class GetTwingateUser + { + /// + /// Users in Twingate can be given access to Twingate Resources and may either be added manually or automatically synchronized with a 3rd party identity provider. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/users). + /// + /// {{% examples %}} + /// ## Example Usage + /// {{% example %}} + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Twingate = Pulumi.Twingate; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var foo = Twingate.GetTwingateUser.Invoke(new() + /// { + /// Id = "<your user's id>", + /// }); + /// + /// }); + /// ``` + /// {{% /example %}} + /// {{% /examples %}} + /// + public static Task InvokeAsync(GetTwingateUserArgs args, InvokeOptions? options = null) + => global::Pulumi.Deployment.Instance.InvokeAsync("twingate:index/getTwingateUser:getTwingateUser", args ?? new GetTwingateUserArgs(), options.WithDefaults()); + + /// + /// Users in Twingate can be given access to Twingate Resources and may either be added manually or automatically synchronized with a 3rd party identity provider. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/users). + /// + /// {{% examples %}} + /// ## Example Usage + /// {{% example %}} + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Twingate = Pulumi.Twingate; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var foo = Twingate.GetTwingateUser.Invoke(new() + /// { + /// Id = "<your user's id>", + /// }); + /// + /// }); + /// ``` + /// {{% /example %}} + /// {{% /examples %}} + /// + public static Output Invoke(GetTwingateUserInvokeArgs args, InvokeOptions? options = null) + => global::Pulumi.Deployment.Instance.Invoke("twingate:index/getTwingateUser:getTwingateUser", args ?? new GetTwingateUserInvokeArgs(), options.WithDefaults()); + } + + + public sealed class GetTwingateUserArgs : global::Pulumi.InvokeArgs + { + /// + /// The ID of the User. The ID for the User can be obtained from the Admin API or the URL string in the Admin Console. + /// + [Input("id", required: true)] + public string Id { get; set; } = null!; + + public GetTwingateUserArgs() + { + } + public static new GetTwingateUserArgs Empty => new GetTwingateUserArgs(); + } + + public sealed class GetTwingateUserInvokeArgs : global::Pulumi.InvokeArgs + { + /// + /// The ID of the User. The ID for the User can be obtained from the Admin API or the URL string in the Admin Console. + /// + [Input("id", required: true)] + public Input Id { get; set; } = null!; + + public GetTwingateUserInvokeArgs() + { + } + public static new GetTwingateUserInvokeArgs Empty => new GetTwingateUserInvokeArgs(); + } + + + [OutputType] + public sealed class GetTwingateUserResult + { + /// + /// The email address of the User + /// + public readonly string Email; + /// + /// The first name of the User + /// + public readonly string FirstName; + /// + /// The ID of the User. The ID for the User can be obtained from the Admin API or the URL string in the Admin Console. + /// + public readonly string Id; + /// + /// Indicates whether the User is an admin + /// + public readonly bool IsAdmin; + /// + /// The last name of the User + /// + public readonly string LastName; + /// + /// Indicates the User's role. Either ADMIN, DEVOPS, SUPPORT, or MEMBER + /// + public readonly string Role; + /// + /// Indicates the User's type. Either MANUAL or SYNCED. + /// + public readonly string Type; + + [OutputConstructor] + private GetTwingateUserResult( + string email, + + string firstName, + + string id, + + bool isAdmin, + + string lastName, + + string role, + + string type) + { + Email = email; + FirstName = firstName; + Id = id; + IsAdmin = isAdmin; + LastName = lastName; + Role = role; + Type = type; + } + } +} diff --git a/sdk/dotnet/GetTwingateUsers.cs b/sdk/dotnet/GetTwingateUsers.cs new file mode 100644 index 0000000..54a1fc0 --- /dev/null +++ b/sdk/dotnet/GetTwingateUsers.cs @@ -0,0 +1,118 @@ +// *** 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.Twingate +{ + public static class GetTwingateUsers + { + /// + /// Users in Twingate can be given access to Twingate Resources and may either be added manually or automatically synchronized with a 3rd party identity provider. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/users). + /// + /// {{% examples %}} + /// ## Example Usage + /// {{% example %}} + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Twingate = Pulumi.Twingate; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var all = Twingate.GetTwingateUsers.Invoke(); + /// + /// }); + /// ``` + /// {{% /example %}} + /// {{% /examples %}} + /// + public static Task InvokeAsync(GetTwingateUsersArgs? args = null, InvokeOptions? options = null) + => global::Pulumi.Deployment.Instance.InvokeAsync("twingate:index/getTwingateUsers:getTwingateUsers", args ?? new GetTwingateUsersArgs(), options.WithDefaults()); + + /// + /// Users in Twingate can be given access to Twingate Resources and may either be added manually or automatically synchronized with a 3rd party identity provider. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/users). + /// + /// {{% examples %}} + /// ## Example Usage + /// {{% example %}} + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Twingate = Pulumi.Twingate; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var all = Twingate.GetTwingateUsers.Invoke(); + /// + /// }); + /// ``` + /// {{% /example %}} + /// {{% /examples %}} + /// + public static Output Invoke(GetTwingateUsersInvokeArgs? args = null, InvokeOptions? options = null) + => global::Pulumi.Deployment.Instance.Invoke("twingate:index/getTwingateUsers:getTwingateUsers", args ?? new GetTwingateUsersInvokeArgs(), options.WithDefaults()); + } + + + public sealed class GetTwingateUsersArgs : global::Pulumi.InvokeArgs + { + [Input("users")] + private List? _users; + public List Users + { + get => _users ?? (_users = new List()); + set => _users = value; + } + + public GetTwingateUsersArgs() + { + } + public static new GetTwingateUsersArgs Empty => new GetTwingateUsersArgs(); + } + + public sealed class GetTwingateUsersInvokeArgs : global::Pulumi.InvokeArgs + { + [Input("users")] + private InputList? _users; + public InputList Users + { + get => _users ?? (_users = new InputList()); + set => _users = value; + } + + public GetTwingateUsersInvokeArgs() + { + } + public static new GetTwingateUsersInvokeArgs Empty => new GetTwingateUsersInvokeArgs(); + } + + + [OutputType] + public sealed class GetTwingateUsersResult + { + /// + /// The provider-assigned unique ID for this managed resource. + /// + public readonly string Id; + public readonly ImmutableArray Users; + + [OutputConstructor] + private GetTwingateUsersResult( + string id, + + ImmutableArray users) + { + Id = id; + Users = users; + } + } +} diff --git a/sdk/dotnet/Inputs/GetTwingateConnectorsConnector.cs b/sdk/dotnet/Inputs/GetTwingateConnectorsConnector.cs new file mode 100644 index 0000000..8461926 --- /dev/null +++ b/sdk/dotnet/Inputs/GetTwingateConnectorsConnector.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.Twingate.Inputs +{ + + public sealed class GetTwingateConnectorsConnectorArgs : global::Pulumi.InvokeArgs + { + /// + /// The ID of the Connector. + /// + [Input("id", required: true)] + public string Id { get; set; } = null!; + + /// + /// The Name of the Connector. + /// + [Input("name", required: true)] + public string Name { get; set; } = null!; + + /// + /// The ID of the Remote Network attached to the Connector. + /// + [Input("remoteNetworkId", required: true)] + public string RemoteNetworkId { get; set; } = null!; + + /// + /// Determines whether status notifications are enabled for the Connector. + /// + [Input("statusUpdatesEnabled", required: true)] + public bool StatusUpdatesEnabled { get; set; } + + public GetTwingateConnectorsConnectorArgs() + { + } + public static new GetTwingateConnectorsConnectorArgs Empty => new GetTwingateConnectorsConnectorArgs(); + } +} diff --git a/sdk/dotnet/Inputs/GetTwingateConnectorsConnectorArgs.cs b/sdk/dotnet/Inputs/GetTwingateConnectorsConnectorArgs.cs new file mode 100644 index 0000000..43113ff --- /dev/null +++ b/sdk/dotnet/Inputs/GetTwingateConnectorsConnectorArgs.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.Twingate.Inputs +{ + + public sealed class GetTwingateConnectorsConnectorInputArgs : global::Pulumi.ResourceArgs + { + /// + /// The ID of the Connector. + /// + [Input("id", required: true)] + public Input Id { get; set; } = null!; + + /// + /// The Name of the Connector. + /// + [Input("name", required: true)] + public Input Name { get; set; } = null!; + + /// + /// The ID of the Remote Network attached to the Connector. + /// + [Input("remoteNetworkId", required: true)] + public Input RemoteNetworkId { get; set; } = null!; + + /// + /// Determines whether status notifications are enabled for the Connector. + /// + [Input("statusUpdatesEnabled", required: true)] + public Input StatusUpdatesEnabled { get; set; } = null!; + + public GetTwingateConnectorsConnectorInputArgs() + { + } + public static new GetTwingateConnectorsConnectorInputArgs Empty => new GetTwingateConnectorsConnectorInputArgs(); + } +} diff --git a/sdk/dotnet/Inputs/GetTwingateGroupsGroup.cs b/sdk/dotnet/Inputs/GetTwingateGroupsGroup.cs new file mode 100644 index 0000000..ee1c0ca --- /dev/null +++ b/sdk/dotnet/Inputs/GetTwingateGroupsGroup.cs @@ -0,0 +1,50 @@ +// *** 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.Twingate.Inputs +{ + + public sealed class GetTwingateGroupsGroupArgs : global::Pulumi.InvokeArgs + { + /// + /// The ID of the Group + /// + [Input("id", required: true)] + public string Id { get; set; } = null!; + + /// + /// Indicates if the Group is active + /// + [Input("isActive", required: true)] + public bool IsActive { get; set; } + + /// + /// The name of the Group + /// + [Input("name", required: true)] + public string Name { get; set; } = null!; + + /// + /// The Security Policy assigned to the Group. + /// + [Input("securityPolicyId", required: true)] + public string SecurityPolicyId { get; set; } = null!; + + /// + /// The type of the Group + /// + [Input("type", required: true)] + public string Type { get; set; } = null!; + + public GetTwingateGroupsGroupArgs() + { + } + public static new GetTwingateGroupsGroupArgs Empty => new GetTwingateGroupsGroupArgs(); + } +} diff --git a/sdk/dotnet/Inputs/GetTwingateGroupsGroupArgs.cs b/sdk/dotnet/Inputs/GetTwingateGroupsGroupArgs.cs new file mode 100644 index 0000000..494eb83 --- /dev/null +++ b/sdk/dotnet/Inputs/GetTwingateGroupsGroupArgs.cs @@ -0,0 +1,50 @@ +// *** 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.Twingate.Inputs +{ + + public sealed class GetTwingateGroupsGroupInputArgs : global::Pulumi.ResourceArgs + { + /// + /// The ID of the Group + /// + [Input("id", required: true)] + public Input Id { get; set; } = null!; + + /// + /// Indicates if the Group is active + /// + [Input("isActive", required: true)] + public Input IsActive { get; set; } = null!; + + /// + /// The name of the Group + /// + [Input("name", required: true)] + public Input Name { get; set; } = null!; + + /// + /// The Security Policy assigned to the Group. + /// + [Input("securityPolicyId", required: true)] + public Input SecurityPolicyId { get; set; } = null!; + + /// + /// The type of the Group + /// + [Input("type", required: true)] + public Input Type { get; set; } = null!; + + public GetTwingateGroupsGroupInputArgs() + { + } + public static new GetTwingateGroupsGroupInputArgs Empty => new GetTwingateGroupsGroupInputArgs(); + } +} diff --git a/sdk/dotnet/Inputs/GetTwingateRemoteNetworksRemoteNetwork.cs b/sdk/dotnet/Inputs/GetTwingateRemoteNetworksRemoteNetwork.cs new file mode 100644 index 0000000..209cf31 --- /dev/null +++ b/sdk/dotnet/Inputs/GetTwingateRemoteNetworksRemoteNetwork.cs @@ -0,0 +1,38 @@ +// *** 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.Twingate.Inputs +{ + + public sealed class GetTwingateRemoteNetworksRemoteNetworkArgs : global::Pulumi.InvokeArgs + { + /// + /// The ID of the Remote Network + /// + [Input("id", required: true)] + public string Id { get; set; } = null!; + + /// + /// The location of the Remote Network. Must be one of the following: AWS, AZURE, GOOGLE*CLOUD, ON*PREMISE, OTHER. + /// + [Input("location", required: true)] + public string Location { get; set; } = null!; + + /// + /// The name of the Remote Network + /// + [Input("name", required: true)] + public string Name { get; set; } = null!; + + public GetTwingateRemoteNetworksRemoteNetworkArgs() + { + } + public static new GetTwingateRemoteNetworksRemoteNetworkArgs Empty => new GetTwingateRemoteNetworksRemoteNetworkArgs(); + } +} diff --git a/sdk/dotnet/Inputs/GetTwingateRemoteNetworksRemoteNetworkArgs.cs b/sdk/dotnet/Inputs/GetTwingateRemoteNetworksRemoteNetworkArgs.cs new file mode 100644 index 0000000..46c84c5 --- /dev/null +++ b/sdk/dotnet/Inputs/GetTwingateRemoteNetworksRemoteNetworkArgs.cs @@ -0,0 +1,38 @@ +// *** 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.Twingate.Inputs +{ + + public sealed class GetTwingateRemoteNetworksRemoteNetworkInputArgs : global::Pulumi.ResourceArgs + { + /// + /// The ID of the Remote Network + /// + [Input("id", required: true)] + public Input Id { get; set; } = null!; + + /// + /// The location of the Remote Network. Must be one of the following: AWS, AZURE, GOOGLE*CLOUD, ON*PREMISE, OTHER. + /// + [Input("location", required: true)] + public Input Location { get; set; } = null!; + + /// + /// The name of the Remote Network + /// + [Input("name", required: true)] + public Input Name { get; set; } = null!; + + public GetTwingateRemoteNetworksRemoteNetworkInputArgs() + { + } + public static new GetTwingateRemoteNetworksRemoteNetworkInputArgs Empty => new GetTwingateRemoteNetworksRemoteNetworkInputArgs(); + } +} diff --git a/sdk/dotnet/Inputs/GetTwingateResourceProtocol.cs b/sdk/dotnet/Inputs/GetTwingateResourceProtocol.cs new file mode 100644 index 0000000..6b39822 --- /dev/null +++ b/sdk/dotnet/Inputs/GetTwingateResourceProtocol.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.Twingate.Inputs +{ + + public sealed class GetTwingateResourceProtocolArgs : global::Pulumi.InvokeArgs + { + /// + /// Whether to allow ICMP (ping) traffic + /// + [Input("allowIcmp", required: true)] + public bool AllowIcmp { get; set; } + + [Input("tcps")] + private List? _tcps; + public List Tcps + { + get => _tcps ?? (_tcps = new List()); + set => _tcps = value; + } + + [Input("udps")] + private List? _udps; + public List Udps + { + get => _udps ?? (_udps = new List()); + set => _udps = value; + } + + public GetTwingateResourceProtocolArgs() + { + } + public static new GetTwingateResourceProtocolArgs Empty => new GetTwingateResourceProtocolArgs(); + } +} diff --git a/sdk/dotnet/Inputs/GetTwingateResourceProtocolArgs.cs b/sdk/dotnet/Inputs/GetTwingateResourceProtocolArgs.cs new file mode 100644 index 0000000..533c1d3 --- /dev/null +++ b/sdk/dotnet/Inputs/GetTwingateResourceProtocolArgs.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.Twingate.Inputs +{ + + public sealed class GetTwingateResourceProtocolInputArgs : global::Pulumi.ResourceArgs + { + /// + /// Whether to allow ICMP (ping) traffic + /// + [Input("allowIcmp", required: true)] + public Input AllowIcmp { get; set; } = null!; + + [Input("tcps")] + private InputList? _tcps; + public InputList Tcps + { + get => _tcps ?? (_tcps = new InputList()); + set => _tcps = value; + } + + [Input("udps")] + private InputList? _udps; + public InputList Udps + { + get => _udps ?? (_udps = new InputList()); + set => _udps = value; + } + + public GetTwingateResourceProtocolInputArgs() + { + } + public static new GetTwingateResourceProtocolInputArgs Empty => new GetTwingateResourceProtocolInputArgs(); + } +} diff --git a/sdk/dotnet/Inputs/GetTwingateResourceProtocolTcp.cs b/sdk/dotnet/Inputs/GetTwingateResourceProtocolTcp.cs new file mode 100644 index 0000000..aeacfb3 --- /dev/null +++ b/sdk/dotnet/Inputs/GetTwingateResourceProtocolTcp.cs @@ -0,0 +1,38 @@ +// *** 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.Twingate.Inputs +{ + + public sealed class GetTwingateResourceProtocolTcpArgs : global::Pulumi.InvokeArgs + { + /// + /// Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + /// + [Input("policy", required: true)] + public string Policy { get; set; } = null!; + + [Input("ports", required: true)] + private List? _ports; + + /// + /// List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + /// + public List Ports + { + get => _ports ?? (_ports = new List()); + set => _ports = value; + } + + public GetTwingateResourceProtocolTcpArgs() + { + } + public static new GetTwingateResourceProtocolTcpArgs Empty => new GetTwingateResourceProtocolTcpArgs(); + } +} diff --git a/sdk/dotnet/Inputs/GetTwingateResourceProtocolTcpArgs.cs b/sdk/dotnet/Inputs/GetTwingateResourceProtocolTcpArgs.cs new file mode 100644 index 0000000..ff3225c --- /dev/null +++ b/sdk/dotnet/Inputs/GetTwingateResourceProtocolTcpArgs.cs @@ -0,0 +1,38 @@ +// *** 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.Twingate.Inputs +{ + + public sealed class GetTwingateResourceProtocolTcpInputArgs : global::Pulumi.ResourceArgs + { + /// + /// Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + /// + [Input("policy", required: true)] + public Input Policy { get; set; } = null!; + + [Input("ports", required: true)] + private InputList? _ports; + + /// + /// List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + /// + public InputList Ports + { + get => _ports ?? (_ports = new InputList()); + set => _ports = value; + } + + public GetTwingateResourceProtocolTcpInputArgs() + { + } + public static new GetTwingateResourceProtocolTcpInputArgs Empty => new GetTwingateResourceProtocolTcpInputArgs(); + } +} diff --git a/sdk/dotnet/Inputs/GetTwingateResourceProtocolUdp.cs b/sdk/dotnet/Inputs/GetTwingateResourceProtocolUdp.cs new file mode 100644 index 0000000..5803e67 --- /dev/null +++ b/sdk/dotnet/Inputs/GetTwingateResourceProtocolUdp.cs @@ -0,0 +1,38 @@ +// *** 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.Twingate.Inputs +{ + + public sealed class GetTwingateResourceProtocolUdpArgs : global::Pulumi.InvokeArgs + { + /// + /// Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + /// + [Input("policy", required: true)] + public string Policy { get; set; } = null!; + + [Input("ports", required: true)] + private List? _ports; + + /// + /// List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + /// + public List Ports + { + get => _ports ?? (_ports = new List()); + set => _ports = value; + } + + public GetTwingateResourceProtocolUdpArgs() + { + } + public static new GetTwingateResourceProtocolUdpArgs Empty => new GetTwingateResourceProtocolUdpArgs(); + } +} diff --git a/sdk/dotnet/Inputs/GetTwingateResourceProtocolUdpArgs.cs b/sdk/dotnet/Inputs/GetTwingateResourceProtocolUdpArgs.cs new file mode 100644 index 0000000..21b9dc8 --- /dev/null +++ b/sdk/dotnet/Inputs/GetTwingateResourceProtocolUdpArgs.cs @@ -0,0 +1,38 @@ +// *** 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.Twingate.Inputs +{ + + public sealed class GetTwingateResourceProtocolUdpInputArgs : global::Pulumi.ResourceArgs + { + /// + /// Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + /// + [Input("policy", required: true)] + public Input Policy { get; set; } = null!; + + [Input("ports", required: true)] + private InputList? _ports; + + /// + /// List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + /// + public InputList Ports + { + get => _ports ?? (_ports = new InputList()); + set => _ports = value; + } + + public GetTwingateResourceProtocolUdpInputArgs() + { + } + public static new GetTwingateResourceProtocolUdpInputArgs Empty => new GetTwingateResourceProtocolUdpInputArgs(); + } +} diff --git a/sdk/dotnet/Inputs/GetTwingateResourcesResource.cs b/sdk/dotnet/Inputs/GetTwingateResourcesResource.cs new file mode 100644 index 0000000..9c425de --- /dev/null +++ b/sdk/dotnet/Inputs/GetTwingateResourcesResource.cs @@ -0,0 +1,56 @@ +// *** 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.Twingate.Inputs +{ + + public sealed class GetTwingateResourcesResourceArgs : global::Pulumi.InvokeArgs + { + /// + /// The Resource's IP/CIDR or FQDN/DNS zone + /// + [Input("address", required: true)] + public string Address { get; set; } = null!; + + /// + /// The id of the Resource + /// + [Input("id", required: true)] + public string Id { get; set; } = null!; + + /// + /// The name of the Resource + /// + [Input("name", required: true)] + public string Name { get; set; } = null!; + + [Input("protocols")] + private List? _protocols; + + /// + /// Restrict access to certain protocols and ports. By default or when this argument is not defined, there is no restriction, and all protocols and ports are allowed. + /// + public List Protocols + { + get => _protocols ?? (_protocols = new List()); + set => _protocols = value; + } + + /// + /// Remote Network ID where the Resource lives + /// + [Input("remoteNetworkId", required: true)] + public string RemoteNetworkId { get; set; } = null!; + + public GetTwingateResourcesResourceArgs() + { + } + public static new GetTwingateResourcesResourceArgs Empty => new GetTwingateResourcesResourceArgs(); + } +} diff --git a/sdk/dotnet/Inputs/GetTwingateResourcesResourceArgs.cs b/sdk/dotnet/Inputs/GetTwingateResourcesResourceArgs.cs new file mode 100644 index 0000000..8e8df79 --- /dev/null +++ b/sdk/dotnet/Inputs/GetTwingateResourcesResourceArgs.cs @@ -0,0 +1,56 @@ +// *** 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.Twingate.Inputs +{ + + public sealed class GetTwingateResourcesResourceInputArgs : global::Pulumi.ResourceArgs + { + /// + /// The Resource's IP/CIDR or FQDN/DNS zone + /// + [Input("address", required: true)] + public Input Address { get; set; } = null!; + + /// + /// The id of the Resource + /// + [Input("id", required: true)] + public Input Id { get; set; } = null!; + + /// + /// The name of the Resource + /// + [Input("name", required: true)] + public Input Name { get; set; } = null!; + + [Input("protocols")] + private InputList? _protocols; + + /// + /// Restrict access to certain protocols and ports. By default or when this argument is not defined, there is no restriction, and all protocols and ports are allowed. + /// + public InputList Protocols + { + get => _protocols ?? (_protocols = new InputList()); + set => _protocols = value; + } + + /// + /// Remote Network ID where the Resource lives + /// + [Input("remoteNetworkId", required: true)] + public Input RemoteNetworkId { get; set; } = null!; + + public GetTwingateResourcesResourceInputArgs() + { + } + public static new GetTwingateResourcesResourceInputArgs Empty => new GetTwingateResourcesResourceInputArgs(); + } +} diff --git a/sdk/dotnet/Inputs/GetTwingateResourcesResourceProtocol.cs b/sdk/dotnet/Inputs/GetTwingateResourcesResourceProtocol.cs new file mode 100644 index 0000000..5970548 --- /dev/null +++ b/sdk/dotnet/Inputs/GetTwingateResourcesResourceProtocol.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.Twingate.Inputs +{ + + public sealed class GetTwingateResourcesResourceProtocolArgs : global::Pulumi.InvokeArgs + { + /// + /// Whether to allow ICMP (ping) traffic + /// + [Input("allowIcmp", required: true)] + public bool AllowIcmp { get; set; } + + [Input("tcps")] + private List? _tcps; + public List Tcps + { + get => _tcps ?? (_tcps = new List()); + set => _tcps = value; + } + + [Input("udps")] + private List? _udps; + public List Udps + { + get => _udps ?? (_udps = new List()); + set => _udps = value; + } + + public GetTwingateResourcesResourceProtocolArgs() + { + } + public static new GetTwingateResourcesResourceProtocolArgs Empty => new GetTwingateResourcesResourceProtocolArgs(); + } +} diff --git a/sdk/dotnet/Inputs/GetTwingateResourcesResourceProtocolArgs.cs b/sdk/dotnet/Inputs/GetTwingateResourcesResourceProtocolArgs.cs new file mode 100644 index 0000000..a9fce0b --- /dev/null +++ b/sdk/dotnet/Inputs/GetTwingateResourcesResourceProtocolArgs.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.Twingate.Inputs +{ + + public sealed class GetTwingateResourcesResourceProtocolInputArgs : global::Pulumi.ResourceArgs + { + /// + /// Whether to allow ICMP (ping) traffic + /// + [Input("allowIcmp", required: true)] + public Input AllowIcmp { get; set; } = null!; + + [Input("tcps")] + private InputList? _tcps; + public InputList Tcps + { + get => _tcps ?? (_tcps = new InputList()); + set => _tcps = value; + } + + [Input("udps")] + private InputList? _udps; + public InputList Udps + { + get => _udps ?? (_udps = new InputList()); + set => _udps = value; + } + + public GetTwingateResourcesResourceProtocolInputArgs() + { + } + public static new GetTwingateResourcesResourceProtocolInputArgs Empty => new GetTwingateResourcesResourceProtocolInputArgs(); + } +} diff --git a/sdk/dotnet/Inputs/GetTwingateResourcesResourceProtocolTcp.cs b/sdk/dotnet/Inputs/GetTwingateResourcesResourceProtocolTcp.cs new file mode 100644 index 0000000..39b8b7f --- /dev/null +++ b/sdk/dotnet/Inputs/GetTwingateResourcesResourceProtocolTcp.cs @@ -0,0 +1,38 @@ +// *** 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.Twingate.Inputs +{ + + public sealed class GetTwingateResourcesResourceProtocolTcpArgs : global::Pulumi.InvokeArgs + { + /// + /// Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + /// + [Input("policy", required: true)] + public string Policy { get; set; } = null!; + + [Input("ports", required: true)] + private List? _ports; + + /// + /// List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + /// + public List Ports + { + get => _ports ?? (_ports = new List()); + set => _ports = value; + } + + public GetTwingateResourcesResourceProtocolTcpArgs() + { + } + public static new GetTwingateResourcesResourceProtocolTcpArgs Empty => new GetTwingateResourcesResourceProtocolTcpArgs(); + } +} diff --git a/sdk/dotnet/Inputs/GetTwingateResourcesResourceProtocolTcpArgs.cs b/sdk/dotnet/Inputs/GetTwingateResourcesResourceProtocolTcpArgs.cs new file mode 100644 index 0000000..c5be982 --- /dev/null +++ b/sdk/dotnet/Inputs/GetTwingateResourcesResourceProtocolTcpArgs.cs @@ -0,0 +1,38 @@ +// *** 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.Twingate.Inputs +{ + + public sealed class GetTwingateResourcesResourceProtocolTcpInputArgs : global::Pulumi.ResourceArgs + { + /// + /// Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + /// + [Input("policy", required: true)] + public Input Policy { get; set; } = null!; + + [Input("ports", required: true)] + private InputList? _ports; + + /// + /// List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + /// + public InputList Ports + { + get => _ports ?? (_ports = new InputList()); + set => _ports = value; + } + + public GetTwingateResourcesResourceProtocolTcpInputArgs() + { + } + public static new GetTwingateResourcesResourceProtocolTcpInputArgs Empty => new GetTwingateResourcesResourceProtocolTcpInputArgs(); + } +} diff --git a/sdk/dotnet/Inputs/GetTwingateResourcesResourceProtocolUdp.cs b/sdk/dotnet/Inputs/GetTwingateResourcesResourceProtocolUdp.cs new file mode 100644 index 0000000..f611da3 --- /dev/null +++ b/sdk/dotnet/Inputs/GetTwingateResourcesResourceProtocolUdp.cs @@ -0,0 +1,38 @@ +// *** 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.Twingate.Inputs +{ + + public sealed class GetTwingateResourcesResourceProtocolUdpArgs : global::Pulumi.InvokeArgs + { + /// + /// Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + /// + [Input("policy", required: true)] + public string Policy { get; set; } = null!; + + [Input("ports", required: true)] + private List? _ports; + + /// + /// List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + /// + public List Ports + { + get => _ports ?? (_ports = new List()); + set => _ports = value; + } + + public GetTwingateResourcesResourceProtocolUdpArgs() + { + } + public static new GetTwingateResourcesResourceProtocolUdpArgs Empty => new GetTwingateResourcesResourceProtocolUdpArgs(); + } +} diff --git a/sdk/dotnet/Inputs/GetTwingateResourcesResourceProtocolUdpArgs.cs b/sdk/dotnet/Inputs/GetTwingateResourcesResourceProtocolUdpArgs.cs new file mode 100644 index 0000000..1d7c65c --- /dev/null +++ b/sdk/dotnet/Inputs/GetTwingateResourcesResourceProtocolUdpArgs.cs @@ -0,0 +1,38 @@ +// *** 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.Twingate.Inputs +{ + + public sealed class GetTwingateResourcesResourceProtocolUdpInputArgs : global::Pulumi.ResourceArgs + { + /// + /// Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + /// + [Input("policy", required: true)] + public Input Policy { get; set; } = null!; + + [Input("ports", required: true)] + private InputList? _ports; + + /// + /// List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + /// + public InputList Ports + { + get => _ports ?? (_ports = new InputList()); + set => _ports = value; + } + + public GetTwingateResourcesResourceProtocolUdpInputArgs() + { + } + public static new GetTwingateResourcesResourceProtocolUdpInputArgs Empty => new GetTwingateResourcesResourceProtocolUdpInputArgs(); + } +} diff --git a/sdk/dotnet/Inputs/GetTwingateSecurityPoliciesSecurityPolicy.cs b/sdk/dotnet/Inputs/GetTwingateSecurityPoliciesSecurityPolicy.cs new file mode 100644 index 0000000..4008773 --- /dev/null +++ b/sdk/dotnet/Inputs/GetTwingateSecurityPoliciesSecurityPolicy.cs @@ -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! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Twingate.Inputs +{ + + public sealed class GetTwingateSecurityPoliciesSecurityPolicyArgs : global::Pulumi.InvokeArgs + { + /// + /// Return a matching Security Policy by its ID. The ID for the Security Policy can be obtained from the Admin API or the URL string in the Admin Console. + /// + [Input("id", required: true)] + public string Id { get; set; } = null!; + + /// + /// Return a Security Policy that exactly matches this name. + /// + [Input("name", required: true)] + public string Name { get; set; } = null!; + + public GetTwingateSecurityPoliciesSecurityPolicyArgs() + { + } + public static new GetTwingateSecurityPoliciesSecurityPolicyArgs Empty => new GetTwingateSecurityPoliciesSecurityPolicyArgs(); + } +} diff --git a/sdk/dotnet/Inputs/GetTwingateSecurityPoliciesSecurityPolicyArgs.cs b/sdk/dotnet/Inputs/GetTwingateSecurityPoliciesSecurityPolicyArgs.cs new file mode 100644 index 0000000..4077650 --- /dev/null +++ b/sdk/dotnet/Inputs/GetTwingateSecurityPoliciesSecurityPolicyArgs.cs @@ -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! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Twingate.Inputs +{ + + public sealed class GetTwingateSecurityPoliciesSecurityPolicyInputArgs : global::Pulumi.ResourceArgs + { + /// + /// Return a matching Security Policy by its ID. The ID for the Security Policy can be obtained from the Admin API or the URL string in the Admin Console. + /// + [Input("id", required: true)] + public Input Id { get; set; } = null!; + + /// + /// Return a Security Policy that exactly matches this name. + /// + [Input("name", required: true)] + public Input Name { get; set; } = null!; + + public GetTwingateSecurityPoliciesSecurityPolicyInputArgs() + { + } + public static new GetTwingateSecurityPoliciesSecurityPolicyInputArgs Empty => new GetTwingateSecurityPoliciesSecurityPolicyInputArgs(); + } +} diff --git a/sdk/dotnet/Inputs/GetTwingateServiceAccountsServiceAccount.cs b/sdk/dotnet/Inputs/GetTwingateServiceAccountsServiceAccount.cs new file mode 100644 index 0000000..3425199 --- /dev/null +++ b/sdk/dotnet/Inputs/GetTwingateServiceAccountsServiceAccount.cs @@ -0,0 +1,56 @@ +// *** 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.Twingate.Inputs +{ + + public sealed class GetTwingateServiceAccountsServiceAccountArgs : global::Pulumi.InvokeArgs + { + /// + /// ID of the Service Account resource + /// + [Input("id", required: true)] + public string Id { get; set; } = null!; + + [Input("keyIds", required: true)] + private List? _keyIds; + + /// + /// List of twingate*service*account_key IDs that are assigned to the Service Account. + /// + public List KeyIds + { + get => _keyIds ?? (_keyIds = new List()); + set => _keyIds = value; + } + + /// + /// Name of the Service Account + /// + [Input("name", required: true)] + public string Name { get; set; } = null!; + + [Input("resourceIds", required: true)] + private List? _resourceIds; + + /// + /// List of twingate.TwingateResource IDs that the Service Account is assigned to. + /// + public List ResourceIds + { + get => _resourceIds ?? (_resourceIds = new List()); + set => _resourceIds = value; + } + + public GetTwingateServiceAccountsServiceAccountArgs() + { + } + public static new GetTwingateServiceAccountsServiceAccountArgs Empty => new GetTwingateServiceAccountsServiceAccountArgs(); + } +} diff --git a/sdk/dotnet/Inputs/GetTwingateServiceAccountsServiceAccountArgs.cs b/sdk/dotnet/Inputs/GetTwingateServiceAccountsServiceAccountArgs.cs new file mode 100644 index 0000000..9b1c34d --- /dev/null +++ b/sdk/dotnet/Inputs/GetTwingateServiceAccountsServiceAccountArgs.cs @@ -0,0 +1,56 @@ +// *** 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.Twingate.Inputs +{ + + public sealed class GetTwingateServiceAccountsServiceAccountInputArgs : global::Pulumi.ResourceArgs + { + /// + /// ID of the Service Account resource + /// + [Input("id", required: true)] + public Input Id { get; set; } = null!; + + [Input("keyIds", required: true)] + private InputList? _keyIds; + + /// + /// List of twingate*service*account_key IDs that are assigned to the Service Account. + /// + public InputList KeyIds + { + get => _keyIds ?? (_keyIds = new InputList()); + set => _keyIds = value; + } + + /// + /// Name of the Service Account + /// + [Input("name", required: true)] + public Input Name { get; set; } = null!; + + [Input("resourceIds", required: true)] + private InputList? _resourceIds; + + /// + /// List of twingate.TwingateResource IDs that the Service Account is assigned to. + /// + public InputList ResourceIds + { + get => _resourceIds ?? (_resourceIds = new InputList()); + set => _resourceIds = value; + } + + public GetTwingateServiceAccountsServiceAccountInputArgs() + { + } + public static new GetTwingateServiceAccountsServiceAccountInputArgs Empty => new GetTwingateServiceAccountsServiceAccountInputArgs(); + } +} diff --git a/sdk/dotnet/Inputs/GetTwingateUsersUser.cs b/sdk/dotnet/Inputs/GetTwingateUsersUser.cs new file mode 100644 index 0000000..01b58af --- /dev/null +++ b/sdk/dotnet/Inputs/GetTwingateUsersUser.cs @@ -0,0 +1,62 @@ +// *** 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.Twingate.Inputs +{ + + public sealed class GetTwingateUsersUserArgs : global::Pulumi.InvokeArgs + { + /// + /// The email address of the User + /// + [Input("email", required: true)] + public string Email { get; set; } = null!; + + /// + /// The first name of the User + /// + [Input("firstName", required: true)] + public string FirstName { get; set; } = null!; + + /// + /// The ID of the User + /// + [Input("id", required: true)] + public string Id { get; set; } = null!; + + /// + /// Indicates whether the User is an admin + /// + [Input("isAdmin", required: true)] + public bool IsAdmin { get; set; } + + /// + /// The last name of the User + /// + [Input("lastName", required: true)] + public string LastName { get; set; } = null!; + + /// + /// Indicates the User's role. Either ADMIN, DEVOPS, SUPPORT, or MEMBER. + /// + [Input("role", required: true)] + public string Role { get; set; } = null!; + + /// + /// Indicates the User's type. Either MANUAL or SYNCED. + /// + [Input("type", required: true)] + public string Type { get; set; } = null!; + + public GetTwingateUsersUserArgs() + { + } + public static new GetTwingateUsersUserArgs Empty => new GetTwingateUsersUserArgs(); + } +} diff --git a/sdk/dotnet/Inputs/GetTwingateUsersUserArgs.cs b/sdk/dotnet/Inputs/GetTwingateUsersUserArgs.cs new file mode 100644 index 0000000..6ee2d44 --- /dev/null +++ b/sdk/dotnet/Inputs/GetTwingateUsersUserArgs.cs @@ -0,0 +1,62 @@ +// *** 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.Twingate.Inputs +{ + + public sealed class GetTwingateUsersUserInputArgs : global::Pulumi.ResourceArgs + { + /// + /// The email address of the User + /// + [Input("email", required: true)] + public Input Email { get; set; } = null!; + + /// + /// The first name of the User + /// + [Input("firstName", required: true)] + public Input FirstName { get; set; } = null!; + + /// + /// The ID of the User + /// + [Input("id", required: true)] + public Input Id { get; set; } = null!; + + /// + /// Indicates whether the User is an admin + /// + [Input("isAdmin", required: true)] + public Input IsAdmin { get; set; } = null!; + + /// + /// The last name of the User + /// + [Input("lastName", required: true)] + public Input LastName { get; set; } = null!; + + /// + /// Indicates the User's role. Either ADMIN, DEVOPS, SUPPORT, or MEMBER. + /// + [Input("role", required: true)] + public Input Role { get; set; } = null!; + + /// + /// Indicates the User's type. Either MANUAL or SYNCED. + /// + [Input("type", required: true)] + public Input Type { get; set; } = null!; + + public GetTwingateUsersUserInputArgs() + { + } + public static new GetTwingateUsersUserInputArgs Empty => new GetTwingateUsersUserInputArgs(); + } +} diff --git a/sdk/dotnet/Inputs/TwingateResourceAccessArgs.cs b/sdk/dotnet/Inputs/TwingateResourceAccessArgs.cs new file mode 100644 index 0000000..f30cd77 --- /dev/null +++ b/sdk/dotnet/Inputs/TwingateResourceAccessArgs.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.Twingate.Inputs +{ + + public sealed class TwingateResourceAccessArgs : global::Pulumi.ResourceArgs + { + [Input("groupIds")] + private InputList? _groupIds; + + /// + /// List of Group IDs that will have permission to access the Resource. + /// + public InputList GroupIds + { + get => _groupIds ?? (_groupIds = new InputList()); + set => _groupIds = value; + } + + [Input("serviceAccountIds")] + private InputList? _serviceAccountIds; + + /// + /// List of Service Account IDs that will have permission to access the Resource. + /// + public InputList ServiceAccountIds + { + get => _serviceAccountIds ?? (_serviceAccountIds = new InputList()); + set => _serviceAccountIds = value; + } + + public TwingateResourceAccessArgs() + { + } + public static new TwingateResourceAccessArgs Empty => new TwingateResourceAccessArgs(); + } +} diff --git a/sdk/dotnet/Inputs/TwingateResourceAccessGetArgs.cs b/sdk/dotnet/Inputs/TwingateResourceAccessGetArgs.cs new file mode 100644 index 0000000..cc2d58a --- /dev/null +++ b/sdk/dotnet/Inputs/TwingateResourceAccessGetArgs.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.Twingate.Inputs +{ + + public sealed class TwingateResourceAccessGetArgs : global::Pulumi.ResourceArgs + { + [Input("groupIds")] + private InputList? _groupIds; + + /// + /// List of Group IDs that will have permission to access the Resource. + /// + public InputList GroupIds + { + get => _groupIds ?? (_groupIds = new InputList()); + set => _groupIds = value; + } + + [Input("serviceAccountIds")] + private InputList? _serviceAccountIds; + + /// + /// List of Service Account IDs that will have permission to access the Resource. + /// + public InputList ServiceAccountIds + { + get => _serviceAccountIds ?? (_serviceAccountIds = new InputList()); + set => _serviceAccountIds = value; + } + + public TwingateResourceAccessGetArgs() + { + } + public static new TwingateResourceAccessGetArgs Empty => new TwingateResourceAccessGetArgs(); + } +} diff --git a/sdk/dotnet/Inputs/TwingateResourceProtocolsArgs.cs b/sdk/dotnet/Inputs/TwingateResourceProtocolsArgs.cs new file mode 100644 index 0000000..9d080c1 --- /dev/null +++ b/sdk/dotnet/Inputs/TwingateResourceProtocolsArgs.cs @@ -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! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Twingate.Inputs +{ + + public sealed class TwingateResourceProtocolsArgs : global::Pulumi.ResourceArgs + { + /// + /// Whether to allow ICMP (ping) traffic + /// + [Input("allowIcmp")] + public Input? AllowIcmp { get; set; } + + [Input("tcp", required: true)] + public Input Tcp { get; set; } = null!; + + [Input("udp", required: true)] + public Input Udp { get; set; } = null!; + + public TwingateResourceProtocolsArgs() + { + } + public static new TwingateResourceProtocolsArgs Empty => new TwingateResourceProtocolsArgs(); + } +} diff --git a/sdk/dotnet/Inputs/TwingateResourceProtocolsGetArgs.cs b/sdk/dotnet/Inputs/TwingateResourceProtocolsGetArgs.cs new file mode 100644 index 0000000..8faa37d --- /dev/null +++ b/sdk/dotnet/Inputs/TwingateResourceProtocolsGetArgs.cs @@ -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! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Twingate.Inputs +{ + + public sealed class TwingateResourceProtocolsGetArgs : global::Pulumi.ResourceArgs + { + /// + /// Whether to allow ICMP (ping) traffic + /// + [Input("allowIcmp")] + public Input? AllowIcmp { get; set; } + + [Input("tcp", required: true)] + public Input Tcp { get; set; } = null!; + + [Input("udp", required: true)] + public Input Udp { get; set; } = null!; + + public TwingateResourceProtocolsGetArgs() + { + } + public static new TwingateResourceProtocolsGetArgs Empty => new TwingateResourceProtocolsGetArgs(); + } +} diff --git a/sdk/dotnet/Inputs/TwingateResourceProtocolsTcpArgs.cs b/sdk/dotnet/Inputs/TwingateResourceProtocolsTcpArgs.cs new file mode 100644 index 0000000..d43fb50 --- /dev/null +++ b/sdk/dotnet/Inputs/TwingateResourceProtocolsTcpArgs.cs @@ -0,0 +1,38 @@ +// *** 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.Twingate.Inputs +{ + + public sealed class TwingateResourceProtocolsTcpArgs : global::Pulumi.ResourceArgs + { + /// + /// Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + /// + [Input("policy", required: true)] + public Input Policy { get; set; } = null!; + + [Input("ports")] + private InputList? _ports; + + /// + /// List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + /// + public InputList Ports + { + get => _ports ?? (_ports = new InputList()); + set => _ports = value; + } + + public TwingateResourceProtocolsTcpArgs() + { + } + public static new TwingateResourceProtocolsTcpArgs Empty => new TwingateResourceProtocolsTcpArgs(); + } +} diff --git a/sdk/dotnet/Inputs/TwingateResourceProtocolsTcpGetArgs.cs b/sdk/dotnet/Inputs/TwingateResourceProtocolsTcpGetArgs.cs new file mode 100644 index 0000000..443be84 --- /dev/null +++ b/sdk/dotnet/Inputs/TwingateResourceProtocolsTcpGetArgs.cs @@ -0,0 +1,38 @@ +// *** 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.Twingate.Inputs +{ + + public sealed class TwingateResourceProtocolsTcpGetArgs : global::Pulumi.ResourceArgs + { + /// + /// Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + /// + [Input("policy", required: true)] + public Input Policy { get; set; } = null!; + + [Input("ports")] + private InputList? _ports; + + /// + /// List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + /// + public InputList Ports + { + get => _ports ?? (_ports = new InputList()); + set => _ports = value; + } + + public TwingateResourceProtocolsTcpGetArgs() + { + } + public static new TwingateResourceProtocolsTcpGetArgs Empty => new TwingateResourceProtocolsTcpGetArgs(); + } +} diff --git a/sdk/dotnet/Inputs/TwingateResourceProtocolsUdpArgs.cs b/sdk/dotnet/Inputs/TwingateResourceProtocolsUdpArgs.cs new file mode 100644 index 0000000..f253777 --- /dev/null +++ b/sdk/dotnet/Inputs/TwingateResourceProtocolsUdpArgs.cs @@ -0,0 +1,38 @@ +// *** 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.Twingate.Inputs +{ + + public sealed class TwingateResourceProtocolsUdpArgs : global::Pulumi.ResourceArgs + { + /// + /// Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + /// + [Input("policy", required: true)] + public Input Policy { get; set; } = null!; + + [Input("ports")] + private InputList? _ports; + + /// + /// List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + /// + public InputList Ports + { + get => _ports ?? (_ports = new InputList()); + set => _ports = value; + } + + public TwingateResourceProtocolsUdpArgs() + { + } + public static new TwingateResourceProtocolsUdpArgs Empty => new TwingateResourceProtocolsUdpArgs(); + } +} diff --git a/sdk/dotnet/Inputs/TwingateResourceProtocolsUdpGetArgs.cs b/sdk/dotnet/Inputs/TwingateResourceProtocolsUdpGetArgs.cs new file mode 100644 index 0000000..857dba2 --- /dev/null +++ b/sdk/dotnet/Inputs/TwingateResourceProtocolsUdpGetArgs.cs @@ -0,0 +1,38 @@ +// *** 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.Twingate.Inputs +{ + + public sealed class TwingateResourceProtocolsUdpGetArgs : global::Pulumi.ResourceArgs + { + /// + /// Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + /// + [Input("policy", required: true)] + public Input Policy { get; set; } = null!; + + [Input("ports")] + private InputList? _ports; + + /// + /// List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + /// + public InputList Ports + { + get => _ports ?? (_ports = new InputList()); + set => _ports = value; + } + + public TwingateResourceProtocolsUdpGetArgs() + { + } + public static new TwingateResourceProtocolsUdpGetArgs Empty => new TwingateResourceProtocolsUdpGetArgs(); + } +} diff --git a/sdk/dotnet/Outputs/GetTwingateConnectorsConnectorResult.cs b/sdk/dotnet/Outputs/GetTwingateConnectorsConnectorResult.cs new file mode 100644 index 0000000..efc2de4 --- /dev/null +++ b/sdk/dotnet/Outputs/GetTwingateConnectorsConnectorResult.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.Twingate.Outputs +{ + + [OutputType] + public sealed class GetTwingateConnectorsConnectorResult + { + /// + /// The ID of the Connector. + /// + public readonly string Id; + /// + /// The Name of the Connector. + /// + public readonly string Name; + /// + /// The ID of the Remote Network attached to the Connector. + /// + public readonly string RemoteNetworkId; + /// + /// Determines whether status notifications are enabled for the Connector. + /// + public readonly bool StatusUpdatesEnabled; + + [OutputConstructor] + private GetTwingateConnectorsConnectorResult( + string id, + + string name, + + string remoteNetworkId, + + bool statusUpdatesEnabled) + { + Id = id; + Name = name; + RemoteNetworkId = remoteNetworkId; + StatusUpdatesEnabled = statusUpdatesEnabled; + } + } +} diff --git a/sdk/dotnet/Outputs/GetTwingateGroupsGroupResult.cs b/sdk/dotnet/Outputs/GetTwingateGroupsGroupResult.cs new file mode 100644 index 0000000..a95f634 --- /dev/null +++ b/sdk/dotnet/Outputs/GetTwingateGroupsGroupResult.cs @@ -0,0 +1,56 @@ +// *** 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.Twingate.Outputs +{ + + [OutputType] + public sealed class GetTwingateGroupsGroupResult + { + /// + /// The ID of the Group + /// + public readonly string Id; + /// + /// Indicates if the Group is active + /// + public readonly bool IsActive; + /// + /// The name of the Group + /// + public readonly string Name; + /// + /// The Security Policy assigned to the Group. + /// + public readonly string SecurityPolicyId; + /// + /// The type of the Group + /// + public readonly string Type; + + [OutputConstructor] + private GetTwingateGroupsGroupResult( + string id, + + bool isActive, + + string name, + + string securityPolicyId, + + string type) + { + Id = id; + IsActive = isActive; + Name = name; + SecurityPolicyId = securityPolicyId; + Type = type; + } + } +} diff --git a/sdk/dotnet/Outputs/GetTwingateRemoteNetworksRemoteNetworkResult.cs b/sdk/dotnet/Outputs/GetTwingateRemoteNetworksRemoteNetworkResult.cs new file mode 100644 index 0000000..23ccaed --- /dev/null +++ b/sdk/dotnet/Outputs/GetTwingateRemoteNetworksRemoteNetworkResult.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.Twingate.Outputs +{ + + [OutputType] + public sealed class GetTwingateRemoteNetworksRemoteNetworkResult + { + /// + /// The ID of the Remote Network + /// + public readonly string Id; + /// + /// The location of the Remote Network. Must be one of the following: AWS, AZURE, GOOGLE*CLOUD, ON*PREMISE, OTHER. + /// + public readonly string Location; + /// + /// The name of the Remote Network + /// + public readonly string Name; + + [OutputConstructor] + private GetTwingateRemoteNetworksRemoteNetworkResult( + string id, + + string location, + + string name) + { + Id = id; + Location = location; + Name = name; + } + } +} diff --git a/sdk/dotnet/Outputs/GetTwingateResourceProtocolResult.cs b/sdk/dotnet/Outputs/GetTwingateResourceProtocolResult.cs new file mode 100644 index 0000000..af6952e --- /dev/null +++ b/sdk/dotnet/Outputs/GetTwingateResourceProtocolResult.cs @@ -0,0 +1,36 @@ +// *** 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.Twingate.Outputs +{ + + [OutputType] + public sealed class GetTwingateResourceProtocolResult + { + /// + /// Whether to allow ICMP (ping) traffic + /// + public readonly bool AllowIcmp; + public readonly ImmutableArray Tcps; + public readonly ImmutableArray Udps; + + [OutputConstructor] + private GetTwingateResourceProtocolResult( + bool allowIcmp, + + ImmutableArray tcps, + + ImmutableArray udps) + { + AllowIcmp = allowIcmp; + Tcps = tcps; + Udps = udps; + } + } +} diff --git a/sdk/dotnet/Outputs/GetTwingateResourceProtocolTcpResult.cs b/sdk/dotnet/Outputs/GetTwingateResourceProtocolTcpResult.cs new file mode 100644 index 0000000..e334902 --- /dev/null +++ b/sdk/dotnet/Outputs/GetTwingateResourceProtocolTcpResult.cs @@ -0,0 +1,35 @@ +// *** 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.Twingate.Outputs +{ + + [OutputType] + public sealed class GetTwingateResourceProtocolTcpResult + { + /// + /// Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + /// + public readonly string Policy; + /// + /// List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + /// + public readonly ImmutableArray Ports; + + [OutputConstructor] + private GetTwingateResourceProtocolTcpResult( + string policy, + + ImmutableArray ports) + { + Policy = policy; + Ports = ports; + } + } +} diff --git a/sdk/dotnet/Outputs/GetTwingateResourceProtocolUdpResult.cs b/sdk/dotnet/Outputs/GetTwingateResourceProtocolUdpResult.cs new file mode 100644 index 0000000..0bd4ea5 --- /dev/null +++ b/sdk/dotnet/Outputs/GetTwingateResourceProtocolUdpResult.cs @@ -0,0 +1,35 @@ +// *** 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.Twingate.Outputs +{ + + [OutputType] + public sealed class GetTwingateResourceProtocolUdpResult + { + /// + /// Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + /// + public readonly string Policy; + /// + /// List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + /// + public readonly ImmutableArray Ports; + + [OutputConstructor] + private GetTwingateResourceProtocolUdpResult( + string policy, + + ImmutableArray ports) + { + Policy = policy; + Ports = ports; + } + } +} diff --git a/sdk/dotnet/Outputs/GetTwingateResourcesResourceProtocolResult.cs b/sdk/dotnet/Outputs/GetTwingateResourcesResourceProtocolResult.cs new file mode 100644 index 0000000..f1edc07 --- /dev/null +++ b/sdk/dotnet/Outputs/GetTwingateResourcesResourceProtocolResult.cs @@ -0,0 +1,36 @@ +// *** 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.Twingate.Outputs +{ + + [OutputType] + public sealed class GetTwingateResourcesResourceProtocolResult + { + /// + /// Whether to allow ICMP (ping) traffic + /// + public readonly bool AllowIcmp; + public readonly ImmutableArray Tcps; + public readonly ImmutableArray Udps; + + [OutputConstructor] + private GetTwingateResourcesResourceProtocolResult( + bool allowIcmp, + + ImmutableArray tcps, + + ImmutableArray udps) + { + AllowIcmp = allowIcmp; + Tcps = tcps; + Udps = udps; + } + } +} diff --git a/sdk/dotnet/Outputs/GetTwingateResourcesResourceProtocolTcpResult.cs b/sdk/dotnet/Outputs/GetTwingateResourcesResourceProtocolTcpResult.cs new file mode 100644 index 0000000..79d9a9a --- /dev/null +++ b/sdk/dotnet/Outputs/GetTwingateResourcesResourceProtocolTcpResult.cs @@ -0,0 +1,35 @@ +// *** 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.Twingate.Outputs +{ + + [OutputType] + public sealed class GetTwingateResourcesResourceProtocolTcpResult + { + /// + /// Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + /// + public readonly string Policy; + /// + /// List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + /// + public readonly ImmutableArray Ports; + + [OutputConstructor] + private GetTwingateResourcesResourceProtocolTcpResult( + string policy, + + ImmutableArray ports) + { + Policy = policy; + Ports = ports; + } + } +} diff --git a/sdk/dotnet/Outputs/GetTwingateResourcesResourceProtocolUdpResult.cs b/sdk/dotnet/Outputs/GetTwingateResourcesResourceProtocolUdpResult.cs new file mode 100644 index 0000000..5c52218 --- /dev/null +++ b/sdk/dotnet/Outputs/GetTwingateResourcesResourceProtocolUdpResult.cs @@ -0,0 +1,35 @@ +// *** 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.Twingate.Outputs +{ + + [OutputType] + public sealed class GetTwingateResourcesResourceProtocolUdpResult + { + /// + /// Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + /// + public readonly string Policy; + /// + /// List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + /// + public readonly ImmutableArray Ports; + + [OutputConstructor] + private GetTwingateResourcesResourceProtocolUdpResult( + string policy, + + ImmutableArray ports) + { + Policy = policy; + Ports = ports; + } + } +} diff --git a/sdk/dotnet/Outputs/GetTwingateResourcesResourceResult.cs b/sdk/dotnet/Outputs/GetTwingateResourcesResourceResult.cs new file mode 100644 index 0000000..f9d7219 --- /dev/null +++ b/sdk/dotnet/Outputs/GetTwingateResourcesResourceResult.cs @@ -0,0 +1,56 @@ +// *** 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.Twingate.Outputs +{ + + [OutputType] + public sealed class GetTwingateResourcesResourceResult + { + /// + /// The Resource's IP/CIDR or FQDN/DNS zone + /// + public readonly string Address; + /// + /// The id of the Resource + /// + public readonly string Id; + /// + /// The name of the Resource + /// + public readonly string Name; + /// + /// Restrict access to certain protocols and ports. By default or when this argument is not defined, there is no restriction, and all protocols and ports are allowed. + /// + public readonly ImmutableArray Protocols; + /// + /// Remote Network ID where the Resource lives + /// + public readonly string RemoteNetworkId; + + [OutputConstructor] + private GetTwingateResourcesResourceResult( + string address, + + string id, + + string name, + + ImmutableArray protocols, + + string remoteNetworkId) + { + Address = address; + Id = id; + Name = name; + Protocols = protocols; + RemoteNetworkId = remoteNetworkId; + } + } +} diff --git a/sdk/dotnet/Outputs/GetTwingateSecurityPoliciesSecurityPolicyResult.cs b/sdk/dotnet/Outputs/GetTwingateSecurityPoliciesSecurityPolicyResult.cs new file mode 100644 index 0000000..ccaafc3 --- /dev/null +++ b/sdk/dotnet/Outputs/GetTwingateSecurityPoliciesSecurityPolicyResult.cs @@ -0,0 +1,35 @@ +// *** 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.Twingate.Outputs +{ + + [OutputType] + public sealed class GetTwingateSecurityPoliciesSecurityPolicyResult + { + /// + /// Return a matching Security Policy by its ID. The ID for the Security Policy can be obtained from the Admin API or the URL string in the Admin Console. + /// + public readonly string Id; + /// + /// Return a Security Policy that exactly matches this name. + /// + public readonly string Name; + + [OutputConstructor] + private GetTwingateSecurityPoliciesSecurityPolicyResult( + string id, + + string name) + { + Id = id; + Name = name; + } + } +} diff --git a/sdk/dotnet/Outputs/GetTwingateServiceAccountsServiceAccountResult.cs b/sdk/dotnet/Outputs/GetTwingateServiceAccountsServiceAccountResult.cs new file mode 100644 index 0000000..960206a --- /dev/null +++ b/sdk/dotnet/Outputs/GetTwingateServiceAccountsServiceAccountResult.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.Twingate.Outputs +{ + + [OutputType] + public sealed class GetTwingateServiceAccountsServiceAccountResult + { + /// + /// ID of the Service Account resource + /// + public readonly string Id; + /// + /// List of twingate*service*account_key IDs that are assigned to the Service Account. + /// + public readonly ImmutableArray KeyIds; + /// + /// Name of the Service Account + /// + public readonly string Name; + /// + /// List of twingate.TwingateResource IDs that the Service Account is assigned to. + /// + public readonly ImmutableArray ResourceIds; + + [OutputConstructor] + private GetTwingateServiceAccountsServiceAccountResult( + string id, + + ImmutableArray keyIds, + + string name, + + ImmutableArray resourceIds) + { + Id = id; + KeyIds = keyIds; + Name = name; + ResourceIds = resourceIds; + } + } +} diff --git a/sdk/dotnet/Outputs/GetTwingateUsersUserResult.cs b/sdk/dotnet/Outputs/GetTwingateUsersUserResult.cs new file mode 100644 index 0000000..8f76f4f --- /dev/null +++ b/sdk/dotnet/Outputs/GetTwingateUsersUserResult.cs @@ -0,0 +1,70 @@ +// *** 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.Twingate.Outputs +{ + + [OutputType] + public sealed class GetTwingateUsersUserResult + { + /// + /// The email address of the User + /// + public readonly string Email; + /// + /// The first name of the User + /// + public readonly string FirstName; + /// + /// The ID of the User + /// + public readonly string Id; + /// + /// Indicates whether the User is an admin + /// + public readonly bool IsAdmin; + /// + /// The last name of the User + /// + public readonly string LastName; + /// + /// Indicates the User's role. Either ADMIN, DEVOPS, SUPPORT, or MEMBER. + /// + public readonly string Role; + /// + /// Indicates the User's type. Either MANUAL or SYNCED. + /// + public readonly string Type; + + [OutputConstructor] + private GetTwingateUsersUserResult( + string email, + + string firstName, + + string id, + + bool isAdmin, + + string lastName, + + string role, + + string type) + { + Email = email; + FirstName = firstName; + Id = id; + IsAdmin = isAdmin; + LastName = lastName; + Role = role; + Type = type; + } + } +} diff --git a/sdk/dotnet/Outputs/TwingateResourceAccess.cs b/sdk/dotnet/Outputs/TwingateResourceAccess.cs new file mode 100644 index 0000000..fda863f --- /dev/null +++ b/sdk/dotnet/Outputs/TwingateResourceAccess.cs @@ -0,0 +1,35 @@ +// *** 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.Twingate.Outputs +{ + + [OutputType] + public sealed class TwingateResourceAccess + { + /// + /// List of Group IDs that will have permission to access the Resource. + /// + public readonly ImmutableArray GroupIds; + /// + /// List of Service Account IDs that will have permission to access the Resource. + /// + public readonly ImmutableArray ServiceAccountIds; + + [OutputConstructor] + private TwingateResourceAccess( + ImmutableArray groupIds, + + ImmutableArray serviceAccountIds) + { + GroupIds = groupIds; + ServiceAccountIds = serviceAccountIds; + } + } +} diff --git a/sdk/dotnet/Outputs/TwingateResourceProtocols.cs b/sdk/dotnet/Outputs/TwingateResourceProtocols.cs new file mode 100644 index 0000000..a1d5ac1 --- /dev/null +++ b/sdk/dotnet/Outputs/TwingateResourceProtocols.cs @@ -0,0 +1,36 @@ +// *** 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.Twingate.Outputs +{ + + [OutputType] + public sealed class TwingateResourceProtocols + { + /// + /// Whether to allow ICMP (ping) traffic + /// + public readonly bool? AllowIcmp; + public readonly Outputs.TwingateResourceProtocolsTcp Tcp; + public readonly Outputs.TwingateResourceProtocolsUdp Udp; + + [OutputConstructor] + private TwingateResourceProtocols( + bool? allowIcmp, + + Outputs.TwingateResourceProtocolsTcp tcp, + + Outputs.TwingateResourceProtocolsUdp udp) + { + AllowIcmp = allowIcmp; + Tcp = tcp; + Udp = udp; + } + } +} diff --git a/sdk/dotnet/Outputs/TwingateResourceProtocolsTcp.cs b/sdk/dotnet/Outputs/TwingateResourceProtocolsTcp.cs new file mode 100644 index 0000000..d97a553 --- /dev/null +++ b/sdk/dotnet/Outputs/TwingateResourceProtocolsTcp.cs @@ -0,0 +1,35 @@ +// *** 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.Twingate.Outputs +{ + + [OutputType] + public sealed class TwingateResourceProtocolsTcp + { + /// + /// Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + /// + public readonly string Policy; + /// + /// List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + /// + public readonly ImmutableArray Ports; + + [OutputConstructor] + private TwingateResourceProtocolsTcp( + string policy, + + ImmutableArray ports) + { + Policy = policy; + Ports = ports; + } + } +} diff --git a/sdk/dotnet/Outputs/TwingateResourceProtocolsUdp.cs b/sdk/dotnet/Outputs/TwingateResourceProtocolsUdp.cs new file mode 100644 index 0000000..0144eee --- /dev/null +++ b/sdk/dotnet/Outputs/TwingateResourceProtocolsUdp.cs @@ -0,0 +1,35 @@ +// *** 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.Twingate.Outputs +{ + + [OutputType] + public sealed class TwingateResourceProtocolsUdp + { + /// + /// Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + /// + public readonly string Policy; + /// + /// List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + /// + public readonly ImmutableArray Ports; + + [OutputConstructor] + private TwingateResourceProtocolsUdp( + string policy, + + ImmutableArray ports) + { + Policy = policy; + Ports = ports; + } + } +} diff --git a/sdk/dotnet/Provider.cs b/sdk/dotnet/Provider.cs new file mode 100644 index 0000000..62218a6 --- /dev/null +++ b/sdk/dotnet/Provider.cs @@ -0,0 +1,126 @@ +// *** 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.Twingate +{ + /// + /// The provider type for the twingate 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. + /// + [TwingateResourceType("pulumi:providers:twingate")] + public partial class Provider : global::Pulumi.ProviderResource + { + /// + /// The access key for API operations. You can retrieve this from the Twingate Admin Console + /// ([documentation](https://docs.twingate.com/docs/api-overview)). Alternatively, this can be specified using the + /// TWINGATE_API_TOKEN environment variable. + /// + [Output("apiToken")] + public Output ApiToken { get; private set; } = null!; + + /// + /// Your Twingate network ID for API operations. You can find it in the Admin Console URL, for example: + /// `autoco.twingate.com`, where `autoco` is your network ID Alternatively, this can be specified using the TWINGATE_NETWORK + /// environment variable. + /// + [Output("network")] + public Output Network { get; private set; } = null!; + + /// + /// The default is 'twingate.com' This is optional and shouldn't be changed under normal circumstances. + /// + [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 = null, CustomResourceOptions? options = null) + : base("twingate", name, args ?? new ProviderArgs(), MakeResourceOptions(options, "")) + { + } + + private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input? id) + { + var defaultOptions = new CustomResourceOptions + { + Version = Utilities.Version, + AdditionalSecretOutputs = + { + "apiToken", + }, + }; + 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 : global::Pulumi.ResourceArgs + { + [Input("apiToken")] + private Input? _apiToken; + + /// + /// The access key for API operations. You can retrieve this from the Twingate Admin Console + /// ([documentation](https://docs.twingate.com/docs/api-overview)). Alternatively, this can be specified using the + /// TWINGATE_API_TOKEN environment variable. + /// + public Input? ApiToken + { + get => _apiToken; + set + { + var emptySecret = Output.CreateSecret(0); + _apiToken = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } + + /// + /// Specifies a retry limit for the http requests made. The default value is 10. Alternatively, this can be specified using + /// the TWINGATE_HTTP_MAX_RETRY environment variable + /// + [Input("httpMaxRetry", json: true)] + public Input? HttpMaxRetry { get; set; } + + /// + /// Specifies a time limit in seconds for the http requests made. The default value is 10 seconds. Alternatively, this can + /// be specified using the TWINGATE_HTTP_TIMEOUT environment variable + /// + [Input("httpTimeout", json: true)] + public Input? HttpTimeout { get; set; } + + /// + /// Your Twingate network ID for API operations. You can find it in the Admin Console URL, for example: + /// `autoco.twingate.com`, where `autoco` is your network ID Alternatively, this can be specified using the TWINGATE_NETWORK + /// environment variable. + /// + [Input("network")] + public Input? Network { get; set; } + + /// + /// The default is 'twingate.com' This is optional and shouldn't be changed under normal circumstances. + /// + [Input("url")] + public Input? Url { get; set; } + + public ProviderArgs() + { + } + public static new ProviderArgs Empty => new ProviderArgs(); + } +} diff --git a/sdk/dotnet/Pulumi.Twingate.csproj b/sdk/dotnet/Pulumi.Twingate.csproj new file mode 100644 index 0000000..2088856 --- /dev/null +++ b/sdk/dotnet/Pulumi.Twingate.csproj @@ -0,0 +1,60 @@ + + + + true + Twingate + Twingate + A Pulumi package for creating and managing twingate cloud resources. + Apache-2.0 + https://www.twingate.com + https://github.com/Twingate/pulumi-twingate + logo.png + + net6.0 + enable + + + + 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..cba2359 --- /dev/null +++ b/sdk/dotnet/README.md @@ -0,0 +1 @@ +A Pulumi package for creating and managing twingate cloud resources. diff --git a/sdk/dotnet/TwingateConnector.cs b/sdk/dotnet/TwingateConnector.cs new file mode 100644 index 0000000..4e609de --- /dev/null +++ b/sdk/dotnet/TwingateConnector.cs @@ -0,0 +1,157 @@ +// *** 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.Twingate +{ + /// + /// Connectors provide connectivity to Remote Networks. This resource type will create the Connector in the Twingate Admin Console, but in order to successfully deploy it, you must also generate Connector tokens that authenticate the Connector with Twingate. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/understanding-access-nodes). + /// + /// ## Example Usage + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Twingate = Pulumi.Twingate; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var awsNetwork = new Twingate.TwingateRemoteNetwork("awsNetwork"); + /// + /// var awsConnector = new Twingate.TwingateConnector("awsConnector", new() + /// { + /// RemoteNetworkId = awsNetwork.Id, + /// }); + /// + /// }); + /// ``` + /// + /// ## Import + /// + /// ```sh + /// $ pulumi import twingate:index/twingateConnector:TwingateConnector aws_connector Q29ubmVjdG9yOjI2NzM= + /// ``` + /// + [TwingateResourceType("twingate:index/twingateConnector:TwingateConnector")] + public partial class TwingateConnector : global::Pulumi.CustomResource + { + /// + /// Name of the Connector, if not provided one will be generated. + /// + [Output("name")] + public Output Name { get; private set; } = null!; + + /// + /// The ID of the Remote Network the Connector is attached to. + /// + [Output("remoteNetworkId")] + public Output RemoteNetworkId { get; private set; } = null!; + + /// + /// Determines whether status notifications are enabled for the Connector. + /// + [Output("statusUpdatesEnabled")] + public Output StatusUpdatesEnabled { get; private set; } = null!; + + + /// + /// Create a TwingateConnector 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 TwingateConnector(string name, TwingateConnectorArgs args, CustomResourceOptions? options = null) + : base("twingate:index/twingateConnector:TwingateConnector", name, args ?? new TwingateConnectorArgs(), MakeResourceOptions(options, "")) + { + } + + private TwingateConnector(string name, Input id, TwingateConnectorState? state = null, CustomResourceOptions? options = null) + : base("twingate:index/twingateConnector:TwingateConnector", name, state, MakeResourceOptions(options, id)) + { + } + + private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input? id) + { + var defaultOptions = new CustomResourceOptions + { + Version = Utilities.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; + } + /// + /// Get an existing TwingateConnector 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 TwingateConnector Get(string name, Input id, TwingateConnectorState? state = null, CustomResourceOptions? options = null) + { + return new TwingateConnector(name, id, state, options); + } + } + + public sealed class TwingateConnectorArgs : global::Pulumi.ResourceArgs + { + /// + /// Name of the Connector, if not provided one will be generated. + /// + [Input("name")] + public Input? Name { get; set; } + + /// + /// The ID of the Remote Network the Connector is attached to. + /// + [Input("remoteNetworkId", required: true)] + public Input RemoteNetworkId { get; set; } = null!; + + /// + /// Determines whether status notifications are enabled for the Connector. + /// + [Input("statusUpdatesEnabled")] + public Input? StatusUpdatesEnabled { get; set; } + + public TwingateConnectorArgs() + { + } + public static new TwingateConnectorArgs Empty => new TwingateConnectorArgs(); + } + + public sealed class TwingateConnectorState : global::Pulumi.ResourceArgs + { + /// + /// Name of the Connector, if not provided one will be generated. + /// + [Input("name")] + public Input? Name { get; set; } + + /// + /// The ID of the Remote Network the Connector is attached to. + /// + [Input("remoteNetworkId")] + public Input? RemoteNetworkId { get; set; } + + /// + /// Determines whether status notifications are enabled for the Connector. + /// + [Input("statusUpdatesEnabled")] + public Input? StatusUpdatesEnabled { get; set; } + + public TwingateConnectorState() + { + } + public static new TwingateConnectorState Empty => new TwingateConnectorState(); + } +} diff --git a/sdk/dotnet/TwingateConnectorTokens.cs b/sdk/dotnet/TwingateConnectorTokens.cs new file mode 100644 index 0000000..09b9fd4 --- /dev/null +++ b/sdk/dotnet/TwingateConnectorTokens.cs @@ -0,0 +1,199 @@ +// *** 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.Twingate +{ + /// + /// This resource type will generate tokens for a Connector, which are needed to successfully provision one on your network. The Connector itself has its own resource type and must be created before you can provision tokens. + /// + /// ## Example Usage + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Twingate = Pulumi.Twingate; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var awsNetwork = new Twingate.TwingateRemoteNetwork("awsNetwork"); + /// + /// var awsConnector = new Twingate.TwingateConnector("awsConnector", new() + /// { + /// RemoteNetworkId = awsNetwork.Id, + /// }); + /// + /// var awsConnectorTokens = new Twingate.TwingateConnectorTokens("awsConnectorTokens", new() + /// { + /// ConnectorId = awsConnector.Id, + /// }); + /// + /// }); + /// ``` + /// + [TwingateResourceType("twingate:index/twingateConnectorTokens:TwingateConnectorTokens")] + public partial class TwingateConnectorTokens : global::Pulumi.CustomResource + { + /// + /// The Access Token of the parent Connector + /// + [Output("accessToken")] + public Output AccessToken { get; private set; } = null!; + + /// + /// The ID of the parent Connector + /// + [Output("connectorId")] + public Output ConnectorId { get; private set; } = null!; + + /// + /// Arbitrary map of values that, when changed, will trigger recreation of resource. Use this to automatically rotate Connector tokens on a schedule. + /// + [Output("keepers")] + public Output?> Keepers { get; private set; } = null!; + + /// + /// The Refresh Token of the parent Connector + /// + [Output("refreshToken")] + public Output RefreshToken { get; private set; } = null!; + + + /// + /// Create a TwingateConnectorTokens 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 TwingateConnectorTokens(string name, TwingateConnectorTokensArgs args, CustomResourceOptions? options = null) + : base("twingate:index/twingateConnectorTokens:TwingateConnectorTokens", name, args ?? new TwingateConnectorTokensArgs(), MakeResourceOptions(options, "")) + { + } + + private TwingateConnectorTokens(string name, Input id, TwingateConnectorTokensState? state = null, CustomResourceOptions? options = null) + : base("twingate:index/twingateConnectorTokens:TwingateConnectorTokens", name, state, MakeResourceOptions(options, id)) + { + } + + private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input? id) + { + var defaultOptions = new CustomResourceOptions + { + Version = Utilities.Version, + AdditionalSecretOutputs = + { + "accessToken", + "refreshToken", + }, + }; + 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 TwingateConnectorTokens 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 TwingateConnectorTokens Get(string name, Input id, TwingateConnectorTokensState? state = null, CustomResourceOptions? options = null) + { + return new TwingateConnectorTokens(name, id, state, options); + } + } + + public sealed class TwingateConnectorTokensArgs : global::Pulumi.ResourceArgs + { + /// + /// The ID of the parent Connector + /// + [Input("connectorId", required: true)] + public Input ConnectorId { get; set; } = null!; + + [Input("keepers")] + private InputMap? _keepers; + + /// + /// Arbitrary map of values that, when changed, will trigger recreation of resource. Use this to automatically rotate Connector tokens on a schedule. + /// + public InputMap Keepers + { + get => _keepers ?? (_keepers = new InputMap()); + set => _keepers = value; + } + + public TwingateConnectorTokensArgs() + { + } + public static new TwingateConnectorTokensArgs Empty => new TwingateConnectorTokensArgs(); + } + + public sealed class TwingateConnectorTokensState : global::Pulumi.ResourceArgs + { + [Input("accessToken")] + private Input? _accessToken; + + /// + /// The Access Token of the parent Connector + /// + public Input? AccessToken + { + get => _accessToken; + set + { + var emptySecret = Output.CreateSecret(0); + _accessToken = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } + + /// + /// The ID of the parent Connector + /// + [Input("connectorId")] + public Input? ConnectorId { get; set; } + + [Input("keepers")] + private InputMap? _keepers; + + /// + /// Arbitrary map of values that, when changed, will trigger recreation of resource. Use this to automatically rotate Connector tokens on a schedule. + /// + public InputMap Keepers + { + get => _keepers ?? (_keepers = new InputMap()); + set => _keepers = value; + } + + [Input("refreshToken")] + private Input? _refreshToken; + + /// + /// The Refresh Token of the parent Connector + /// + public Input? RefreshToken + { + get => _refreshToken; + set + { + var emptySecret = Output.CreateSecret(0); + _refreshToken = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } + + public TwingateConnectorTokensState() + { + } + public static new TwingateConnectorTokensState Empty => new TwingateConnectorTokensState(); + } +} diff --git a/sdk/dotnet/TwingateGroup.cs b/sdk/dotnet/TwingateGroup.cs new file mode 100644 index 0000000..d76bd9c --- /dev/null +++ b/sdk/dotnet/TwingateGroup.cs @@ -0,0 +1,185 @@ +// *** 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.Twingate +{ + /// + /// Groups are how users are authorized to access Resources. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/groups). + /// + /// ## Example Usage + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Twingate = Pulumi.Twingate; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var aws = new Twingate.TwingateGroup("aws"); + /// + /// }); + /// ``` + /// + /// ## Import + /// + /// ```sh + /// $ pulumi import twingate:index/twingateGroup:TwingateGroup aws R3JvdXA6MzQ4OTE= + /// ``` + /// + [TwingateResourceType("twingate:index/twingateGroup:TwingateGroup")] + public partial class TwingateGroup : global::Pulumi.CustomResource + { + /// + /// Determines whether User assignments to this Group will override any existing assignments. Default is `true`. If set to + /// `false`, assignments made outside of Terraform will be ignored. + /// + [Output("isAuthoritative")] + public Output IsAuthoritative { get; private set; } = null!; + + /// + /// The name of the group + /// + [Output("name")] + public Output Name { get; private set; } = null!; + + /// + /// Defines which Security Policy applies to this Group. The Security Policy ID can be obtained from the `twingate.getTwingateSecurityPolicy` and `twingate.getTwingateSecurityPolicies` data sources. + /// + [Output("securityPolicyId")] + public Output SecurityPolicyId { get; private set; } = null!; + + /// + /// List of User IDs that have permission to access the Group. + /// + [Output("userIds")] + public Output> UserIds { get; private set; } = null!; + + + /// + /// Create a TwingateGroup 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 TwingateGroup(string name, TwingateGroupArgs? args = null, CustomResourceOptions? options = null) + : base("twingate:index/twingateGroup:TwingateGroup", name, args ?? new TwingateGroupArgs(), MakeResourceOptions(options, "")) + { + } + + private TwingateGroup(string name, Input id, TwingateGroupState? state = null, CustomResourceOptions? options = null) + : base("twingate:index/twingateGroup:TwingateGroup", name, state, MakeResourceOptions(options, id)) + { + } + + private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input? id) + { + var defaultOptions = new CustomResourceOptions + { + Version = Utilities.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; + } + /// + /// Get an existing TwingateGroup 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 TwingateGroup Get(string name, Input id, TwingateGroupState? state = null, CustomResourceOptions? options = null) + { + return new TwingateGroup(name, id, state, options); + } + } + + public sealed class TwingateGroupArgs : global::Pulumi.ResourceArgs + { + /// + /// Determines whether User assignments to this Group will override any existing assignments. Default is `true`. If set to + /// `false`, assignments made outside of Terraform will be ignored. + /// + [Input("isAuthoritative")] + public Input? IsAuthoritative { get; set; } + + /// + /// The name of the group + /// + [Input("name")] + public Input? Name { get; set; } + + /// + /// Defines which Security Policy applies to this Group. The Security Policy ID can be obtained from the `twingate.getTwingateSecurityPolicy` and `twingate.getTwingateSecurityPolicies` data sources. + /// + [Input("securityPolicyId")] + public Input? SecurityPolicyId { get; set; } + + [Input("userIds")] + private InputList? _userIds; + + /// + /// List of User IDs that have permission to access the Group. + /// + public InputList UserIds + { + get => _userIds ?? (_userIds = new InputList()); + set => _userIds = value; + } + + public TwingateGroupArgs() + { + } + public static new TwingateGroupArgs Empty => new TwingateGroupArgs(); + } + + public sealed class TwingateGroupState : global::Pulumi.ResourceArgs + { + /// + /// Determines whether User assignments to this Group will override any existing assignments. Default is `true`. If set to + /// `false`, assignments made outside of Terraform will be ignored. + /// + [Input("isAuthoritative")] + public Input? IsAuthoritative { get; set; } + + /// + /// The name of the group + /// + [Input("name")] + public Input? Name { get; set; } + + /// + /// Defines which Security Policy applies to this Group. The Security Policy ID can be obtained from the `twingate.getTwingateSecurityPolicy` and `twingate.getTwingateSecurityPolicies` data sources. + /// + [Input("securityPolicyId")] + public Input? SecurityPolicyId { get; set; } + + [Input("userIds")] + private InputList? _userIds; + + /// + /// List of User IDs that have permission to access the Group. + /// + public InputList UserIds + { + get => _userIds ?? (_userIds = new InputList()); + set => _userIds = value; + } + + public TwingateGroupState() + { + } + public static new TwingateGroupState Empty => new TwingateGroupState(); + } +} diff --git a/sdk/dotnet/TwingateRemoteNetwork.cs b/sdk/dotnet/TwingateRemoteNetwork.cs new file mode 100644 index 0000000..e052c22 --- /dev/null +++ b/sdk/dotnet/TwingateRemoteNetwork.cs @@ -0,0 +1,134 @@ +// *** 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.Twingate +{ + /// + /// A Remote Network represents a single private network in Twingate that can have one or more Connectors and Resources assigned to it. You must create a Remote Network before creating Resources and Connectors that belong to it. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/remote-networks). + /// + /// ## Example Usage + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Twingate = Pulumi.Twingate; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var awsNetwork = new Twingate.TwingateRemoteNetwork("awsNetwork"); + /// + /// }); + /// ``` + /// + /// ## Import + /// + /// ```sh + /// $ pulumi import twingate:index/twingateRemoteNetwork:TwingateRemoteNetwork network UmVtb3RlTmV0d29zaipgMKIkNg== + /// ``` + /// + [TwingateResourceType("twingate:index/twingateRemoteNetwork:TwingateRemoteNetwork")] + public partial class TwingateRemoteNetwork : global::Pulumi.CustomResource + { + /// + /// The location of the Remote Network. Must be one of the following: AWS, AZURE, GOOGLE*CLOUD, ON*PREMISE, OTHER. + /// + [Output("location")] + public Output Location { get; private set; } = null!; + + /// + /// The name of the Remote Network + /// + [Output("name")] + public Output Name { get; private set; } = null!; + + + /// + /// Create a TwingateRemoteNetwork 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 TwingateRemoteNetwork(string name, TwingateRemoteNetworkArgs? args = null, CustomResourceOptions? options = null) + : base("twingate:index/twingateRemoteNetwork:TwingateRemoteNetwork", name, args ?? new TwingateRemoteNetworkArgs(), MakeResourceOptions(options, "")) + { + } + + private TwingateRemoteNetwork(string name, Input id, TwingateRemoteNetworkState? state = null, CustomResourceOptions? options = null) + : base("twingate:index/twingateRemoteNetwork:TwingateRemoteNetwork", name, state, MakeResourceOptions(options, id)) + { + } + + private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input? id) + { + var defaultOptions = new CustomResourceOptions + { + Version = Utilities.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; + } + /// + /// Get an existing TwingateRemoteNetwork 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 TwingateRemoteNetwork Get(string name, Input id, TwingateRemoteNetworkState? state = null, CustomResourceOptions? options = null) + { + return new TwingateRemoteNetwork(name, id, state, options); + } + } + + public sealed class TwingateRemoteNetworkArgs : global::Pulumi.ResourceArgs + { + /// + /// The location of the Remote Network. Must be one of the following: AWS, AZURE, GOOGLE*CLOUD, ON*PREMISE, OTHER. + /// + [Input("location")] + public Input? Location { get; set; } + + /// + /// The name of the Remote Network + /// + [Input("name")] + public Input? Name { get; set; } + + public TwingateRemoteNetworkArgs() + { + } + public static new TwingateRemoteNetworkArgs Empty => new TwingateRemoteNetworkArgs(); + } + + public sealed class TwingateRemoteNetworkState : global::Pulumi.ResourceArgs + { + /// + /// The location of the Remote Network. Must be one of the following: AWS, AZURE, GOOGLE*CLOUD, ON*PREMISE, OTHER. + /// + [Input("location")] + public Input? Location { get; set; } + + /// + /// The name of the Remote Network + /// + [Input("name")] + public Input? Name { get; set; } + + public TwingateRemoteNetworkState() + { + } + public static new TwingateRemoteNetworkState Empty => new TwingateRemoteNetworkState(); + } +} diff --git a/sdk/dotnet/TwingateResource.cs b/sdk/dotnet/TwingateResource.cs new file mode 100644 index 0000000..dcf9c3c --- /dev/null +++ b/sdk/dotnet/TwingateResource.cs @@ -0,0 +1,301 @@ +// *** 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.Twingate +{ + /// + /// Resources in Twingate represent servers on the private network that clients can connect to. Resources can be defined by IP, CIDR range, FQDN, or DNS zone. For more information, see the Twingate [documentation](https://docs.twingate.com/docs/resources-and-access-nodes). + /// + /// ## Example Usage + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Twingate = Pulumi.Twingate; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var awsNetwork = new Twingate.TwingateRemoteNetwork("awsNetwork"); + /// + /// var aws = new Twingate.TwingateGroup("aws"); + /// + /// var githubActionsProd = new Twingate.TwingateServiceAccount("githubActionsProd"); + /// + /// var resource = new Twingate.TwingateResource("resource", new() + /// { + /// Address = "internal.int", + /// RemoteNetworkId = awsNetwork.Id, + /// Protocols = new Twingate.Inputs.TwingateResourceProtocolsArgs + /// { + /// AllowIcmp = true, + /// Tcp = new Twingate.Inputs.TwingateResourceProtocolsTcpArgs + /// { + /// Policy = "RESTRICTED", + /// Ports = new[] + /// { + /// "80", + /// "82-83", + /// }, + /// }, + /// Udp = new Twingate.Inputs.TwingateResourceProtocolsUdpArgs + /// { + /// Policy = "ALLOW_ALL", + /// }, + /// }, + /// Access = new Twingate.Inputs.TwingateResourceAccessArgs + /// { + /// GroupIds = new[] + /// { + /// aws.Id, + /// }, + /// ServiceAccountIds = new[] + /// { + /// githubActionsProd.Id, + /// }, + /// }, + /// }); + /// + /// }); + /// ``` + /// + /// ## Import + /// + /// ```sh + /// $ pulumi import twingate:index/twingateResource:TwingateResource resource UmVzb3VyY2U6MzQwNDQ3 + /// ``` + /// + [TwingateResourceType("twingate:index/twingateResource:TwingateResource")] + public partial class TwingateResource : global::Pulumi.CustomResource + { + /// + /// Restrict access to certain groups or service accounts + /// + [Output("access")] + public Output Access { get; private set; } = null!; + + /// + /// The Resource's IP/CIDR or FQDN/DNS zone + /// + [Output("address")] + public Output Address { get; private set; } = null!; + + /// + /// Set a DNS alias address for the Resource. Must be a DNS-valid name string. + /// + [Output("alias")] + public Output Alias { get; private set; } = null!; + + /// + /// Determines whether assignments in the access block will override any existing assignments. Default is `true`. If set to + /// `false`, assignments made outside of Terraform will be ignored. + /// + [Output("isAuthoritative")] + public Output IsAuthoritative { get; private set; } = null!; + + /// + /// Controls whether an "Open in Browser" shortcut will be shown for this Resource in the Twingate Client. + /// + [Output("isBrowserShortcutEnabled")] + public Output IsBrowserShortcutEnabled { get; private set; } = null!; + + /// + /// Controls whether this Resource will be visible in the main Resource list in the Twingate Client. + /// + [Output("isVisible")] + public Output IsVisible { get; private set; } = null!; + + /// + /// The name of the Resource + /// + [Output("name")] + public Output Name { get; private set; } = null!; + + /// + /// Restrict access to certain protocols and ports. By default or when this argument is not defined, there is no restriction, and all protocols and ports are allowed. + /// + [Output("protocols")] + public Output Protocols { get; private set; } = null!; + + /// + /// Remote Network ID where the Resource lives + /// + [Output("remoteNetworkId")] + public Output RemoteNetworkId { get; private set; } = null!; + + + /// + /// Create a TwingateResource 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 TwingateResource(string name, TwingateResourceArgs args, CustomResourceOptions? options = null) + : base("twingate:index/twingateResource:TwingateResource", name, args ?? new TwingateResourceArgs(), MakeResourceOptions(options, "")) + { + } + + private TwingateResource(string name, Input id, TwingateResourceState? state = null, CustomResourceOptions? options = null) + : base("twingate:index/twingateResource:TwingateResource", name, state, MakeResourceOptions(options, id)) + { + } + + private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input? id) + { + var defaultOptions = new CustomResourceOptions + { + Version = Utilities.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; + } + /// + /// Get an existing TwingateResource 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 TwingateResource Get(string name, Input id, TwingateResourceState? state = null, CustomResourceOptions? options = null) + { + return new TwingateResource(name, id, state, options); + } + } + + public sealed class TwingateResourceArgs : global::Pulumi.ResourceArgs + { + /// + /// Restrict access to certain groups or service accounts + /// + [Input("access")] + public Input? Access { get; set; } + + /// + /// The Resource's IP/CIDR or FQDN/DNS zone + /// + [Input("address", required: true)] + public Input Address { get; set; } = null!; + + /// + /// Set a DNS alias address for the Resource. Must be a DNS-valid name string. + /// + [Input("alias")] + public Input? Alias { get; set; } + + /// + /// Determines whether assignments in the access block will override any existing assignments. Default is `true`. If set to + /// `false`, assignments made outside of Terraform will be ignored. + /// + [Input("isAuthoritative")] + public Input? IsAuthoritative { get; set; } + + /// + /// Controls whether an "Open in Browser" shortcut will be shown for this Resource in the Twingate Client. + /// + [Input("isBrowserShortcutEnabled")] + public Input? IsBrowserShortcutEnabled { get; set; } + + /// + /// Controls whether this Resource will be visible in the main Resource list in the Twingate Client. + /// + [Input("isVisible")] + public Input? IsVisible { get; set; } + + /// + /// The name of the Resource + /// + [Input("name")] + public Input? Name { get; set; } + + /// + /// Restrict access to certain protocols and ports. By default or when this argument is not defined, there is no restriction, and all protocols and ports are allowed. + /// + [Input("protocols")] + public Input? Protocols { get; set; } + + /// + /// Remote Network ID where the Resource lives + /// + [Input("remoteNetworkId", required: true)] + public Input RemoteNetworkId { get; set; } = null!; + + public TwingateResourceArgs() + { + } + public static new TwingateResourceArgs Empty => new TwingateResourceArgs(); + } + + public sealed class TwingateResourceState : global::Pulumi.ResourceArgs + { + /// + /// Restrict access to certain groups or service accounts + /// + [Input("access")] + public Input? Access { get; set; } + + /// + /// The Resource's IP/CIDR or FQDN/DNS zone + /// + [Input("address")] + public Input? Address { get; set; } + + /// + /// Set a DNS alias address for the Resource. Must be a DNS-valid name string. + /// + [Input("alias")] + public Input? Alias { get; set; } + + /// + /// Determines whether assignments in the access block will override any existing assignments. Default is `true`. If set to + /// `false`, assignments made outside of Terraform will be ignored. + /// + [Input("isAuthoritative")] + public Input? IsAuthoritative { get; set; } + + /// + /// Controls whether an "Open in Browser" shortcut will be shown for this Resource in the Twingate Client. + /// + [Input("isBrowserShortcutEnabled")] + public Input? IsBrowserShortcutEnabled { get; set; } + + /// + /// Controls whether this Resource will be visible in the main Resource list in the Twingate Client. + /// + [Input("isVisible")] + public Input? IsVisible { get; set; } + + /// + /// The name of the Resource + /// + [Input("name")] + public Input? Name { get; set; } + + /// + /// Restrict access to certain protocols and ports. By default or when this argument is not defined, there is no restriction, and all protocols and ports are allowed. + /// + [Input("protocols")] + public Input? Protocols { get; set; } + + /// + /// Remote Network ID where the Resource lives + /// + [Input("remoteNetworkId")] + public Input? RemoteNetworkId { get; set; } + + public TwingateResourceState() + { + } + public static new TwingateResourceState Empty => new TwingateResourceState(); + } +} diff --git a/sdk/dotnet/TwingateServiceAccount.cs b/sdk/dotnet/TwingateServiceAccount.cs new file mode 100644 index 0000000..323ba85 --- /dev/null +++ b/sdk/dotnet/TwingateServiceAccount.cs @@ -0,0 +1,110 @@ +// *** 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.Twingate +{ + /// + /// Service Accounts offer a way to provide programmatic, centrally-controlled, and consistent access controls. + /// + /// ## Example Usage + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Twingate = Pulumi.Twingate; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var githubActionsProd = new Twingate.TwingateServiceAccount("githubActionsProd"); + /// + /// }); + /// ``` + /// + [TwingateResourceType("twingate:index/twingateServiceAccount:TwingateServiceAccount")] + public partial class TwingateServiceAccount : global::Pulumi.CustomResource + { + /// + /// The name of the Service Account in Twingate + /// + [Output("name")] + public Output Name { get; private set; } = null!; + + + /// + /// Create a TwingateServiceAccount 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 TwingateServiceAccount(string name, TwingateServiceAccountArgs? args = null, CustomResourceOptions? options = null) + : base("twingate:index/twingateServiceAccount:TwingateServiceAccount", name, args ?? new TwingateServiceAccountArgs(), MakeResourceOptions(options, "")) + { + } + + private TwingateServiceAccount(string name, Input id, TwingateServiceAccountState? state = null, CustomResourceOptions? options = null) + : base("twingate:index/twingateServiceAccount:TwingateServiceAccount", name, state, MakeResourceOptions(options, id)) + { + } + + private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input? id) + { + var defaultOptions = new CustomResourceOptions + { + Version = Utilities.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; + } + /// + /// Get an existing TwingateServiceAccount 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 TwingateServiceAccount Get(string name, Input id, TwingateServiceAccountState? state = null, CustomResourceOptions? options = null) + { + return new TwingateServiceAccount(name, id, state, options); + } + } + + public sealed class TwingateServiceAccountArgs : global::Pulumi.ResourceArgs + { + /// + /// The name of the Service Account in Twingate + /// + [Input("name")] + public Input? Name { get; set; } + + public TwingateServiceAccountArgs() + { + } + public static new TwingateServiceAccountArgs Empty => new TwingateServiceAccountArgs(); + } + + public sealed class TwingateServiceAccountState : global::Pulumi.ResourceArgs + { + /// + /// The name of the Service Account in Twingate + /// + [Input("name")] + public Input? Name { get; set; } + + public TwingateServiceAccountState() + { + } + public static new TwingateServiceAccountState Empty => new TwingateServiceAccountState(); + } +} diff --git a/sdk/dotnet/TwingateServiceAccountKey.cs b/sdk/dotnet/TwingateServiceAccountKey.cs new file mode 100644 index 0000000..82d109e --- /dev/null +++ b/sdk/dotnet/TwingateServiceAccountKey.cs @@ -0,0 +1,159 @@ +// *** 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.Twingate +{ + /// + /// A Service Key authorizes access to all Resources assigned to a Service Account. + /// + /// ## Example Usage + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Twingate = Pulumi.Twingate; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var githubActionsProd = new Twingate.TwingateServiceAccount("githubActionsProd"); + /// + /// var githubKey = new Twingate.TwingateServiceAccountKey("githubKey", new() + /// { + /// ServiceAccountId = githubActionsProd.Id, + /// }); + /// + /// }); + /// ``` + /// + [TwingateResourceType("twingate:index/twingateServiceAccountKey:TwingateServiceAccountKey")] + public partial class TwingateServiceAccountKey : global::Pulumi.CustomResource + { + /// + /// The name of the Service Key + /// + [Output("name")] + public Output Name { get; private set; } = null!; + + /// + /// The id of the Service Account + /// + [Output("serviceAccountId")] + public Output ServiceAccountId { get; private set; } = null!; + + /// + /// Autogenerated Service Key token. Used to configure a Twingate Client running in headless mode. + /// + [Output("token")] + public Output Token { get; private set; } = null!; + + + /// + /// Create a TwingateServiceAccountKey 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 TwingateServiceAccountKey(string name, TwingateServiceAccountKeyArgs args, CustomResourceOptions? options = null) + : base("twingate:index/twingateServiceAccountKey:TwingateServiceAccountKey", name, args ?? new TwingateServiceAccountKeyArgs(), MakeResourceOptions(options, "")) + { + } + + private TwingateServiceAccountKey(string name, Input id, TwingateServiceAccountKeyState? state = null, CustomResourceOptions? options = null) + : base("twingate:index/twingateServiceAccountKey:TwingateServiceAccountKey", name, state, MakeResourceOptions(options, id)) + { + } + + private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input? id) + { + var defaultOptions = new CustomResourceOptions + { + Version = Utilities.Version, + AdditionalSecretOutputs = + { + "token", + }, + }; + 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 TwingateServiceAccountKey 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 TwingateServiceAccountKey Get(string name, Input id, TwingateServiceAccountKeyState? state = null, CustomResourceOptions? options = null) + { + return new TwingateServiceAccountKey(name, id, state, options); + } + } + + public sealed class TwingateServiceAccountKeyArgs : global::Pulumi.ResourceArgs + { + /// + /// The name of the Service Key + /// + [Input("name")] + public Input? Name { get; set; } + + /// + /// The id of the Service Account + /// + [Input("serviceAccountId", required: true)] + public Input ServiceAccountId { get; set; } = null!; + + public TwingateServiceAccountKeyArgs() + { + } + public static new TwingateServiceAccountKeyArgs Empty => new TwingateServiceAccountKeyArgs(); + } + + public sealed class TwingateServiceAccountKeyState : global::Pulumi.ResourceArgs + { + /// + /// The name of the Service Key + /// + [Input("name")] + public Input? Name { get; set; } + + /// + /// The id of the Service Account + /// + [Input("serviceAccountId")] + public Input? ServiceAccountId { get; set; } + + [Input("token")] + private Input? _token; + + /// + /// Autogenerated Service Key token. Used to configure a Twingate Client running in headless mode. + /// + public Input? Token + { + get => _token; + set + { + var emptySecret = Output.CreateSecret(0); + _token = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } + + public TwingateServiceAccountKeyState() + { + } + public static new TwingateServiceAccountKeyState Empty => new TwingateServiceAccountKeyState(); + } +} diff --git a/sdk/dotnet/TwingateUser.cs b/sdk/dotnet/TwingateUser.cs new file mode 100644 index 0000000..1f02dc9 --- /dev/null +++ b/sdk/dotnet/TwingateUser.cs @@ -0,0 +1,219 @@ +// *** 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.Twingate +{ + /// + /// Users provides different levels of write capabilities across the Twingate Admin Console. For more information, see Twingate's [documentation](https://www.twingate.com/docs/users). + /// + /// ## Example Usage + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Twingate = Pulumi.Twingate; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var user = new Twingate.TwingateUser("user", new() + /// { + /// Email = "sample@company.com", + /// FirstName = "Twin", + /// LastName = "Gate", + /// Role = "DEVOPS", + /// SendInvite = true, + /// }); + /// + /// }); + /// ``` + /// + [TwingateResourceType("twingate:index/twingateUser:TwingateUser")] + public partial class TwingateUser : global::Pulumi.CustomResource + { + /// + /// The User's email address + /// + [Output("email")] + public Output Email { get; private set; } = null!; + + /// + /// The User's first name + /// + [Output("firstName")] + public Output FirstName { get; private set; } = null!; + + /// + /// Determines whether the User is active or not. Inactive users will be not able to sign in. + /// + [Output("isActive")] + public Output IsActive { get; private set; } = null!; + + /// + /// The User's last name + /// + [Output("lastName")] + public Output LastName { get; private set; } = null!; + + /// + /// Determines the User's role. Either ADMIN, DEVOPS, SUPPORT or MEMBER. + /// + [Output("role")] + public Output Role { get; private set; } = null!; + + /// + /// Determines whether to send an email invitation to the User. True by default. + /// + [Output("sendInvite")] + public Output SendInvite { get; private set; } = null!; + + /// + /// Indicates the User's type. Either MANUAL or SYNCED. + /// + [Output("type")] + public Output Type { get; private set; } = null!; + + + /// + /// Create a TwingateUser 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 TwingateUser(string name, TwingateUserArgs args, CustomResourceOptions? options = null) + : base("twingate:index/twingateUser:TwingateUser", name, args ?? new TwingateUserArgs(), MakeResourceOptions(options, "")) + { + } + + private TwingateUser(string name, Input id, TwingateUserState? state = null, CustomResourceOptions? options = null) + : base("twingate:index/twingateUser:TwingateUser", name, state, MakeResourceOptions(options, id)) + { + } + + private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input? id) + { + var defaultOptions = new CustomResourceOptions + { + Version = Utilities.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; + } + /// + /// Get an existing TwingateUser 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 TwingateUser Get(string name, Input id, TwingateUserState? state = null, CustomResourceOptions? options = null) + { + return new TwingateUser(name, id, state, options); + } + } + + public sealed class TwingateUserArgs : global::Pulumi.ResourceArgs + { + /// + /// The User's email address + /// + [Input("email", required: true)] + public Input Email { get; set; } = null!; + + /// + /// The User's first name + /// + [Input("firstName")] + public Input? FirstName { get; set; } + + /// + /// Determines whether the User is active or not. Inactive users will be not able to sign in. + /// + [Input("isActive")] + public Input? IsActive { get; set; } + + /// + /// The User's last name + /// + [Input("lastName")] + public Input? LastName { get; set; } + + /// + /// Determines the User's role. Either ADMIN, DEVOPS, SUPPORT or MEMBER. + /// + [Input("role")] + public Input? Role { get; set; } + + /// + /// Determines whether to send an email invitation to the User. True by default. + /// + [Input("sendInvite")] + public Input? SendInvite { get; set; } + + public TwingateUserArgs() + { + } + public static new TwingateUserArgs Empty => new TwingateUserArgs(); + } + + public sealed class TwingateUserState : global::Pulumi.ResourceArgs + { + /// + /// The User's email address + /// + [Input("email")] + public Input? Email { get; set; } + + /// + /// The User's first name + /// + [Input("firstName")] + public Input? FirstName { get; set; } + + /// + /// Determines whether the User is active or not. Inactive users will be not able to sign in. + /// + [Input("isActive")] + public Input? IsActive { get; set; } + + /// + /// The User's last name + /// + [Input("lastName")] + public Input? LastName { get; set; } + + /// + /// Determines the User's role. Either ADMIN, DEVOPS, SUPPORT or MEMBER. + /// + [Input("role")] + public Input? Role { get; set; } + + /// + /// Determines whether to send an email invitation to the User. True by default. + /// + [Input("sendInvite")] + public Input? SendInvite { get; set; } + + /// + /// Indicates the User's type. Either MANUAL or SYNCED. + /// + [Input("type")] + public Input? Type { get; set; } + + public TwingateUserState() + { + } + public static new TwingateUserState Empty => new TwingateUserState(); + } +} diff --git a/sdk/dotnet/Utilities.cs b/sdk/dotnet/Utilities.cs new file mode 100644 index 0000000..92eb38f --- /dev/null +++ b/sdk/dotnet/Utilities.cs @@ -0,0 +1,83 @@ +// *** 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.Twingate +{ + 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; + 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.Twingate.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 TwingateResourceTypeAttribute : global::Pulumi.ResourceTypeAttribute + { + public TwingateResourceTypeAttribute(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..51cf0e7 --- /dev/null +++ b/sdk/dotnet/pulumi-plugin.json @@ -0,0 +1,4 @@ +{ + "resource": true, + "name": "twingate" +} diff --git a/sdk/go.mod b/sdk/go.mod index f120490..2755616 100644 --- a/sdk/go.mod +++ b/sdk/go.mod @@ -1,4 +1,4 @@ -module github.com/pulumi/pulumi-xyz/sdk +module github.com/Twingate/pulumi-twingate/sdk go 1.17 diff --git a/sdk/go/Pulumi.yaml b/sdk/go/Pulumi.yaml new file mode 100644 index 0000000..e69de29 diff --git a/sdk/go/twingate/config/config.go b/sdk/go/twingate/config/config.go new file mode 100644 index 0000000..9389eee --- /dev/null +++ b/sdk/go/twingate/config/config.go @@ -0,0 +1,43 @@ +// 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/Twingate/pulumi-twingate/sdk/go/twingate/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi/config" +) + +var _ = internal.GetEnvOrDefault + +// The access key for API operations. You can retrieve this from the Twingate Admin Console +// ([documentation](https://docs.twingate.com/docs/api-overview)). Alternatively, this can be specified using the +// TWINGATE_API_TOKEN environment variable. +func GetApiToken(ctx *pulumi.Context) string { + return config.Get(ctx, "twingate:apiToken") +} + +// Specifies a retry limit for the http requests made. The default value is 10. Alternatively, this can be specified using +// the TWINGATE_HTTP_MAX_RETRY environment variable +func GetHttpMaxRetry(ctx *pulumi.Context) int { + return config.GetInt(ctx, "twingate:httpMaxRetry") +} + +// Specifies a time limit in seconds for the http requests made. The default value is 10 seconds. Alternatively, this can +// be specified using the TWINGATE_HTTP_TIMEOUT environment variable +func GetHttpTimeout(ctx *pulumi.Context) int { + return config.GetInt(ctx, "twingate:httpTimeout") +} + +// Your Twingate network ID for API operations. You can find it in the Admin Console URL, for example: +// `autoco.twingate.com`, where `autoco` is your network ID Alternatively, this can be specified using the TWINGATE_NETWORK +// environment variable. +func GetNetwork(ctx *pulumi.Context) string { + return config.Get(ctx, "twingate:network") +} + +// The default is 'twingate.com' This is optional and shouldn't be changed under normal circumstances. +func GetUrl(ctx *pulumi.Context) string { + return config.Get(ctx, "twingate:url") +} diff --git a/sdk/go/twingate/doc.go b/sdk/go/twingate/doc.go new file mode 100644 index 0000000..07b5530 --- /dev/null +++ b/sdk/go/twingate/doc.go @@ -0,0 +1,2 @@ +// A Pulumi package for creating and managing twingate cloud resources. +package twingate diff --git a/sdk/go/twingate/getTwingateConnector.go b/sdk/go/twingate/getTwingateConnector.go new file mode 100644 index 0000000..e0ced2c --- /dev/null +++ b/sdk/go/twingate/getTwingateConnector.go @@ -0,0 +1,129 @@ +// 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 twingate + +import ( + "context" + "reflect" + + "github.com/Twingate/pulumi-twingate/sdk/go/twingate/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// Connectors provide connectivity to Remote Networks. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/understanding-access-nodes). +// +// ## Example Usage +// +// ```go +// package main +// +// import ( +// +// "github.com/Twingate/pulumi-twingate/sdk/go/twingate" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := twingate.LookupTwingateConnector(ctx, &twingate.LookupTwingateConnectorArgs{ +// Id: "", +// }, nil) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +func LookupTwingateConnector(ctx *pulumi.Context, args *LookupTwingateConnectorArgs, opts ...pulumi.InvokeOption) (*LookupTwingateConnectorResult, error) { + opts = internal.PkgInvokeDefaultOpts(opts) + var rv LookupTwingateConnectorResult + err := ctx.Invoke("twingate:index/getTwingateConnector:getTwingateConnector", args, &rv, opts...) + if err != nil { + return nil, err + } + return &rv, nil +} + +// A collection of arguments for invoking getTwingateConnector. +type LookupTwingateConnectorArgs struct { + // The ID of the Connector. The ID for the Connector can be obtained from the Admin API or the URL string in the Admin Console. + Id string `pulumi:"id"` +} + +// A collection of values returned by getTwingateConnector. +type LookupTwingateConnectorResult struct { + // The ID of the Connector. The ID for the Connector can be obtained from the Admin API or the URL string in the Admin Console. + Id string `pulumi:"id"` + // The name of the Connector. + Name string `pulumi:"name"` + // The ID of the Remote Network the Connector is attached to. + RemoteNetworkId string `pulumi:"remoteNetworkId"` + // Determines whether status notifications are enabled for the Connector. + StatusUpdatesEnabled bool `pulumi:"statusUpdatesEnabled"` +} + +func LookupTwingateConnectorOutput(ctx *pulumi.Context, args LookupTwingateConnectorOutputArgs, opts ...pulumi.InvokeOption) LookupTwingateConnectorResultOutput { + return pulumi.ToOutputWithContext(context.Background(), args). + ApplyT(func(v interface{}) (LookupTwingateConnectorResult, error) { + args := v.(LookupTwingateConnectorArgs) + r, err := LookupTwingateConnector(ctx, &args, opts...) + var s LookupTwingateConnectorResult + if r != nil { + s = *r + } + return s, err + }).(LookupTwingateConnectorResultOutput) +} + +// A collection of arguments for invoking getTwingateConnector. +type LookupTwingateConnectorOutputArgs struct { + // The ID of the Connector. The ID for the Connector can be obtained from the Admin API or the URL string in the Admin Console. + Id pulumi.StringInput `pulumi:"id"` +} + +func (LookupTwingateConnectorOutputArgs) ElementType() reflect.Type { + return reflect.TypeOf((*LookupTwingateConnectorArgs)(nil)).Elem() +} + +// A collection of values returned by getTwingateConnector. +type LookupTwingateConnectorResultOutput struct{ *pulumi.OutputState } + +func (LookupTwingateConnectorResultOutput) ElementType() reflect.Type { + return reflect.TypeOf((*LookupTwingateConnectorResult)(nil)).Elem() +} + +func (o LookupTwingateConnectorResultOutput) ToLookupTwingateConnectorResultOutput() LookupTwingateConnectorResultOutput { + return o +} + +func (o LookupTwingateConnectorResultOutput) ToLookupTwingateConnectorResultOutputWithContext(ctx context.Context) LookupTwingateConnectorResultOutput { + return o +} + +// The ID of the Connector. The ID for the Connector can be obtained from the Admin API or the URL string in the Admin Console. +func (o LookupTwingateConnectorResultOutput) Id() pulumi.StringOutput { + return o.ApplyT(func(v LookupTwingateConnectorResult) string { return v.Id }).(pulumi.StringOutput) +} + +// The name of the Connector. +func (o LookupTwingateConnectorResultOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v LookupTwingateConnectorResult) string { return v.Name }).(pulumi.StringOutput) +} + +// The ID of the Remote Network the Connector is attached to. +func (o LookupTwingateConnectorResultOutput) RemoteNetworkId() pulumi.StringOutput { + return o.ApplyT(func(v LookupTwingateConnectorResult) string { return v.RemoteNetworkId }).(pulumi.StringOutput) +} + +// Determines whether status notifications are enabled for the Connector. +func (o LookupTwingateConnectorResultOutput) StatusUpdatesEnabled() pulumi.BoolOutput { + return o.ApplyT(func(v LookupTwingateConnectorResult) bool { return v.StatusUpdatesEnabled }).(pulumi.BoolOutput) +} + +func init() { + pulumi.RegisterOutputType(LookupTwingateConnectorResultOutput{}) +} diff --git a/sdk/go/twingate/getTwingateConnectors.go b/sdk/go/twingate/getTwingateConnectors.go new file mode 100644 index 0000000..3545895 --- /dev/null +++ b/sdk/go/twingate/getTwingateConnectors.go @@ -0,0 +1,113 @@ +// 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 twingate + +import ( + "context" + "reflect" + + "github.com/Twingate/pulumi-twingate/sdk/go/twingate/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// Connectors provide connectivity to Remote Networks. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/understanding-access-nodes). +// +// ## Example Usage +// +// ```go +// package main +// +// import ( +// +// "github.com/Twingate/pulumi-twingate/sdk/go/twingate" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := twingate.GetTwingateConnectors(ctx, nil, nil) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +func GetTwingateConnectors(ctx *pulumi.Context, args *GetTwingateConnectorsArgs, opts ...pulumi.InvokeOption) (*GetTwingateConnectorsResult, error) { + opts = internal.PkgInvokeDefaultOpts(opts) + var rv GetTwingateConnectorsResult + err := ctx.Invoke("twingate:index/getTwingateConnectors:getTwingateConnectors", args, &rv, opts...) + if err != nil { + return nil, err + } + return &rv, nil +} + +// A collection of arguments for invoking getTwingateConnectors. +type GetTwingateConnectorsArgs struct { + // List of Connectors + Connectors []GetTwingateConnectorsConnector `pulumi:"connectors"` +} + +// A collection of values returned by getTwingateConnectors. +type GetTwingateConnectorsResult struct { + // List of Connectors + Connectors []GetTwingateConnectorsConnector `pulumi:"connectors"` + // The provider-assigned unique ID for this managed resource. + Id string `pulumi:"id"` +} + +func GetTwingateConnectorsOutput(ctx *pulumi.Context, args GetTwingateConnectorsOutputArgs, opts ...pulumi.InvokeOption) GetTwingateConnectorsResultOutput { + return pulumi.ToOutputWithContext(context.Background(), args). + ApplyT(func(v interface{}) (GetTwingateConnectorsResult, error) { + args := v.(GetTwingateConnectorsArgs) + r, err := GetTwingateConnectors(ctx, &args, opts...) + var s GetTwingateConnectorsResult + if r != nil { + s = *r + } + return s, err + }).(GetTwingateConnectorsResultOutput) +} + +// A collection of arguments for invoking getTwingateConnectors. +type GetTwingateConnectorsOutputArgs struct { + // List of Connectors + Connectors GetTwingateConnectorsConnectorArrayInput `pulumi:"connectors"` +} + +func (GetTwingateConnectorsOutputArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetTwingateConnectorsArgs)(nil)).Elem() +} + +// A collection of values returned by getTwingateConnectors. +type GetTwingateConnectorsResultOutput struct{ *pulumi.OutputState } + +func (GetTwingateConnectorsResultOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetTwingateConnectorsResult)(nil)).Elem() +} + +func (o GetTwingateConnectorsResultOutput) ToGetTwingateConnectorsResultOutput() GetTwingateConnectorsResultOutput { + return o +} + +func (o GetTwingateConnectorsResultOutput) ToGetTwingateConnectorsResultOutputWithContext(ctx context.Context) GetTwingateConnectorsResultOutput { + return o +} + +// List of Connectors +func (o GetTwingateConnectorsResultOutput) Connectors() GetTwingateConnectorsConnectorArrayOutput { + return o.ApplyT(func(v GetTwingateConnectorsResult) []GetTwingateConnectorsConnector { return v.Connectors }).(GetTwingateConnectorsConnectorArrayOutput) +} + +// The provider-assigned unique ID for this managed resource. +func (o GetTwingateConnectorsResultOutput) Id() pulumi.StringOutput { + return o.ApplyT(func(v GetTwingateConnectorsResult) string { return v.Id }).(pulumi.StringOutput) +} + +func init() { + pulumi.RegisterOutputType(GetTwingateConnectorsResultOutput{}) +} diff --git a/sdk/go/twingate/getTwingateGroup.go b/sdk/go/twingate/getTwingateGroup.go new file mode 100644 index 0000000..cfdc608 --- /dev/null +++ b/sdk/go/twingate/getTwingateGroup.go @@ -0,0 +1,136 @@ +// 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 twingate + +import ( + "context" + "reflect" + + "github.com/Twingate/pulumi-twingate/sdk/go/twingate/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// Groups are how users are authorized to access Resources. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/groups). +// +// ## Example Usage +// +// ```go +// package main +// +// import ( +// +// "github.com/Twingate/pulumi-twingate/sdk/go/twingate" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := twingate.LookupTwingateGroup(ctx, &twingate.LookupTwingateGroupArgs{ +// Id: "", +// }, nil) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +func LookupTwingateGroup(ctx *pulumi.Context, args *LookupTwingateGroupArgs, opts ...pulumi.InvokeOption) (*LookupTwingateGroupResult, error) { + opts = internal.PkgInvokeDefaultOpts(opts) + var rv LookupTwingateGroupResult + err := ctx.Invoke("twingate:index/getTwingateGroup:getTwingateGroup", args, &rv, opts...) + if err != nil { + return nil, err + } + return &rv, nil +} + +// A collection of arguments for invoking getTwingateGroup. +type LookupTwingateGroupArgs struct { + // The ID of the Group. The ID for the Group can be obtained from the Admin API or the URL string in the Admin Console. + Id string `pulumi:"id"` +} + +// A collection of values returned by getTwingateGroup. +type LookupTwingateGroupResult struct { + // The ID of the Group. The ID for the Group can be obtained from the Admin API or the URL string in the Admin Console. + Id string `pulumi:"id"` + // Indicates if the Group is active + IsActive bool `pulumi:"isActive"` + // The name of the Group + Name string `pulumi:"name"` + // The Security Policy assigned to the Group. + SecurityPolicyId string `pulumi:"securityPolicyId"` + // The type of the Group + Type string `pulumi:"type"` +} + +func LookupTwingateGroupOutput(ctx *pulumi.Context, args LookupTwingateGroupOutputArgs, opts ...pulumi.InvokeOption) LookupTwingateGroupResultOutput { + return pulumi.ToOutputWithContext(context.Background(), args). + ApplyT(func(v interface{}) (LookupTwingateGroupResult, error) { + args := v.(LookupTwingateGroupArgs) + r, err := LookupTwingateGroup(ctx, &args, opts...) + var s LookupTwingateGroupResult + if r != nil { + s = *r + } + return s, err + }).(LookupTwingateGroupResultOutput) +} + +// A collection of arguments for invoking getTwingateGroup. +type LookupTwingateGroupOutputArgs struct { + // The ID of the Group. The ID for the Group can be obtained from the Admin API or the URL string in the Admin Console. + Id pulumi.StringInput `pulumi:"id"` +} + +func (LookupTwingateGroupOutputArgs) ElementType() reflect.Type { + return reflect.TypeOf((*LookupTwingateGroupArgs)(nil)).Elem() +} + +// A collection of values returned by getTwingateGroup. +type LookupTwingateGroupResultOutput struct{ *pulumi.OutputState } + +func (LookupTwingateGroupResultOutput) ElementType() reflect.Type { + return reflect.TypeOf((*LookupTwingateGroupResult)(nil)).Elem() +} + +func (o LookupTwingateGroupResultOutput) ToLookupTwingateGroupResultOutput() LookupTwingateGroupResultOutput { + return o +} + +func (o LookupTwingateGroupResultOutput) ToLookupTwingateGroupResultOutputWithContext(ctx context.Context) LookupTwingateGroupResultOutput { + return o +} + +// The ID of the Group. The ID for the Group can be obtained from the Admin API or the URL string in the Admin Console. +func (o LookupTwingateGroupResultOutput) Id() pulumi.StringOutput { + return o.ApplyT(func(v LookupTwingateGroupResult) string { return v.Id }).(pulumi.StringOutput) +} + +// Indicates if the Group is active +func (o LookupTwingateGroupResultOutput) IsActive() pulumi.BoolOutput { + return o.ApplyT(func(v LookupTwingateGroupResult) bool { return v.IsActive }).(pulumi.BoolOutput) +} + +// The name of the Group +func (o LookupTwingateGroupResultOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v LookupTwingateGroupResult) string { return v.Name }).(pulumi.StringOutput) +} + +// The Security Policy assigned to the Group. +func (o LookupTwingateGroupResultOutput) SecurityPolicyId() pulumi.StringOutput { + return o.ApplyT(func(v LookupTwingateGroupResult) string { return v.SecurityPolicyId }).(pulumi.StringOutput) +} + +// The type of the Group +func (o LookupTwingateGroupResultOutput) Type() pulumi.StringOutput { + return o.ApplyT(func(v LookupTwingateGroupResult) string { return v.Type }).(pulumi.StringOutput) +} + +func init() { + pulumi.RegisterOutputType(LookupTwingateGroupResultOutput{}) +} diff --git a/sdk/go/twingate/getTwingateGroups.go b/sdk/go/twingate/getTwingateGroups.go new file mode 100644 index 0000000..9679007 --- /dev/null +++ b/sdk/go/twingate/getTwingateGroups.go @@ -0,0 +1,148 @@ +// 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 twingate + +import ( + "context" + "reflect" + + "github.com/Twingate/pulumi-twingate/sdk/go/twingate/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// Groups are how users are authorized to access Resources. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/groups). +// +// ## Example Usage +// +// ```go +// package main +// +// import ( +// +// "github.com/Twingate/pulumi-twingate/sdk/go/twingate" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := twingate.GetTwingateGroups(ctx, &twingate.GetTwingateGroupsArgs{ +// Name: pulumi.StringRef(""), +// }, nil) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +func GetTwingateGroups(ctx *pulumi.Context, args *GetTwingateGroupsArgs, opts ...pulumi.InvokeOption) (*GetTwingateGroupsResult, error) { + opts = internal.PkgInvokeDefaultOpts(opts) + var rv GetTwingateGroupsResult + err := ctx.Invoke("twingate:index/getTwingateGroups:getTwingateGroups", args, &rv, opts...) + if err != nil { + return nil, err + } + return &rv, nil +} + +// A collection of arguments for invoking getTwingateGroups. +type GetTwingateGroupsArgs struct { + // List of Groups + Groups []GetTwingateGroupsGroup `pulumi:"groups"` + // Indicates if the Group is active + IsActive *bool `pulumi:"isActive"` + // The name of the Group + Name *string `pulumi:"name"` + // The type of the Group + Type *string `pulumi:"type"` +} + +// A collection of values returned by getTwingateGroups. +type GetTwingateGroupsResult struct { + // List of Groups + Groups []GetTwingateGroupsGroup `pulumi:"groups"` + // The provider-assigned unique ID for this managed resource. + Id string `pulumi:"id"` + // Returns only Groups matching the specified state. + IsActive *bool `pulumi:"isActive"` + // Returns only Groups that exactly match this name. + Name *string `pulumi:"name"` + // Returns only Groups of the specified type (valid: `MANUAL`, `SYNCED`, `SYSTEM`). + Type *string `pulumi:"type"` +} + +func GetTwingateGroupsOutput(ctx *pulumi.Context, args GetTwingateGroupsOutputArgs, opts ...pulumi.InvokeOption) GetTwingateGroupsResultOutput { + return pulumi.ToOutputWithContext(context.Background(), args). + ApplyT(func(v interface{}) (GetTwingateGroupsResult, error) { + args := v.(GetTwingateGroupsArgs) + r, err := GetTwingateGroups(ctx, &args, opts...) + var s GetTwingateGroupsResult + if r != nil { + s = *r + } + return s, err + }).(GetTwingateGroupsResultOutput) +} + +// A collection of arguments for invoking getTwingateGroups. +type GetTwingateGroupsOutputArgs struct { + // List of Groups + Groups GetTwingateGroupsGroupArrayInput `pulumi:"groups"` + // Indicates if the Group is active + IsActive pulumi.BoolPtrInput `pulumi:"isActive"` + // The name of the Group + Name pulumi.StringPtrInput `pulumi:"name"` + // The type of the Group + Type pulumi.StringPtrInput `pulumi:"type"` +} + +func (GetTwingateGroupsOutputArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetTwingateGroupsArgs)(nil)).Elem() +} + +// A collection of values returned by getTwingateGroups. +type GetTwingateGroupsResultOutput struct{ *pulumi.OutputState } + +func (GetTwingateGroupsResultOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetTwingateGroupsResult)(nil)).Elem() +} + +func (o GetTwingateGroupsResultOutput) ToGetTwingateGroupsResultOutput() GetTwingateGroupsResultOutput { + return o +} + +func (o GetTwingateGroupsResultOutput) ToGetTwingateGroupsResultOutputWithContext(ctx context.Context) GetTwingateGroupsResultOutput { + return o +} + +// List of Groups +func (o GetTwingateGroupsResultOutput) Groups() GetTwingateGroupsGroupArrayOutput { + return o.ApplyT(func(v GetTwingateGroupsResult) []GetTwingateGroupsGroup { return v.Groups }).(GetTwingateGroupsGroupArrayOutput) +} + +// The provider-assigned unique ID for this managed resource. +func (o GetTwingateGroupsResultOutput) Id() pulumi.StringOutput { + return o.ApplyT(func(v GetTwingateGroupsResult) string { return v.Id }).(pulumi.StringOutput) +} + +// Returns only Groups matching the specified state. +func (o GetTwingateGroupsResultOutput) IsActive() pulumi.BoolPtrOutput { + return o.ApplyT(func(v GetTwingateGroupsResult) *bool { return v.IsActive }).(pulumi.BoolPtrOutput) +} + +// Returns only Groups that exactly match this name. +func (o GetTwingateGroupsResultOutput) Name() pulumi.StringPtrOutput { + return o.ApplyT(func(v GetTwingateGroupsResult) *string { return v.Name }).(pulumi.StringPtrOutput) +} + +// Returns only Groups of the specified type (valid: `MANUAL`, `SYNCED`, `SYSTEM`). +func (o GetTwingateGroupsResultOutput) Type() pulumi.StringPtrOutput { + return o.ApplyT(func(v GetTwingateGroupsResult) *string { return v.Type }).(pulumi.StringPtrOutput) +} + +func init() { + pulumi.RegisterOutputType(GetTwingateGroupsResultOutput{}) +} diff --git a/sdk/go/twingate/getTwingateRemoteNetwork.go b/sdk/go/twingate/getTwingateRemoteNetwork.go new file mode 100644 index 0000000..225adb6 --- /dev/null +++ b/sdk/go/twingate/getTwingateRemoteNetwork.go @@ -0,0 +1,126 @@ +// 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 twingate + +import ( + "context" + "reflect" + + "github.com/Twingate/pulumi-twingate/sdk/go/twingate/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// A Remote Network represents a single private network in Twingate that can have one or more Connectors and Resources assigned to it. You must create a Remote Network before creating Resources and Connectors that belong to it. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/remote-networks). +// +// ## Example Usage +// +// ```go +// package main +// +// import ( +// +// "github.com/Twingate/pulumi-twingate/sdk/go/twingate" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := twingate.LookupTwingateRemoteNetwork(ctx, &twingate.LookupTwingateRemoteNetworkArgs{ +// Name: pulumi.StringRef(""), +// }, nil) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +func LookupTwingateRemoteNetwork(ctx *pulumi.Context, args *LookupTwingateRemoteNetworkArgs, opts ...pulumi.InvokeOption) (*LookupTwingateRemoteNetworkResult, error) { + opts = internal.PkgInvokeDefaultOpts(opts) + var rv LookupTwingateRemoteNetworkResult + err := ctx.Invoke("twingate:index/getTwingateRemoteNetwork:getTwingateRemoteNetwork", args, &rv, opts...) + if err != nil { + return nil, err + } + return &rv, nil +} + +// A collection of arguments for invoking getTwingateRemoteNetwork. +type LookupTwingateRemoteNetworkArgs struct { + // The ID of the Remote Network + Id *string `pulumi:"id"` + // The name of the Remote Network + Name *string `pulumi:"name"` +} + +// A collection of values returned by getTwingateRemoteNetwork. +type LookupTwingateRemoteNetworkResult struct { + // The ID of the Remote Network + Id *string `pulumi:"id"` + // The location of the Remote Network. Must be one of the following: AWS, AZURE, GOOGLE*CLOUD, ON*PREMISE, OTHER. + Location string `pulumi:"location"` + // The name of the Remote Network + Name *string `pulumi:"name"` +} + +func LookupTwingateRemoteNetworkOutput(ctx *pulumi.Context, args LookupTwingateRemoteNetworkOutputArgs, opts ...pulumi.InvokeOption) LookupTwingateRemoteNetworkResultOutput { + return pulumi.ToOutputWithContext(context.Background(), args). + ApplyT(func(v interface{}) (LookupTwingateRemoteNetworkResult, error) { + args := v.(LookupTwingateRemoteNetworkArgs) + r, err := LookupTwingateRemoteNetwork(ctx, &args, opts...) + var s LookupTwingateRemoteNetworkResult + if r != nil { + s = *r + } + return s, err + }).(LookupTwingateRemoteNetworkResultOutput) +} + +// A collection of arguments for invoking getTwingateRemoteNetwork. +type LookupTwingateRemoteNetworkOutputArgs struct { + // The ID of the Remote Network + Id pulumi.StringPtrInput `pulumi:"id"` + // The name of the Remote Network + Name pulumi.StringPtrInput `pulumi:"name"` +} + +func (LookupTwingateRemoteNetworkOutputArgs) ElementType() reflect.Type { + return reflect.TypeOf((*LookupTwingateRemoteNetworkArgs)(nil)).Elem() +} + +// A collection of values returned by getTwingateRemoteNetwork. +type LookupTwingateRemoteNetworkResultOutput struct{ *pulumi.OutputState } + +func (LookupTwingateRemoteNetworkResultOutput) ElementType() reflect.Type { + return reflect.TypeOf((*LookupTwingateRemoteNetworkResult)(nil)).Elem() +} + +func (o LookupTwingateRemoteNetworkResultOutput) ToLookupTwingateRemoteNetworkResultOutput() LookupTwingateRemoteNetworkResultOutput { + return o +} + +func (o LookupTwingateRemoteNetworkResultOutput) ToLookupTwingateRemoteNetworkResultOutputWithContext(ctx context.Context) LookupTwingateRemoteNetworkResultOutput { + return o +} + +// The ID of the Remote Network +func (o LookupTwingateRemoteNetworkResultOutput) Id() pulumi.StringPtrOutput { + return o.ApplyT(func(v LookupTwingateRemoteNetworkResult) *string { return v.Id }).(pulumi.StringPtrOutput) +} + +// The location of the Remote Network. Must be one of the following: AWS, AZURE, GOOGLE*CLOUD, ON*PREMISE, OTHER. +func (o LookupTwingateRemoteNetworkResultOutput) Location() pulumi.StringOutput { + return o.ApplyT(func(v LookupTwingateRemoteNetworkResult) string { return v.Location }).(pulumi.StringOutput) +} + +// The name of the Remote Network +func (o LookupTwingateRemoteNetworkResultOutput) Name() pulumi.StringPtrOutput { + return o.ApplyT(func(v LookupTwingateRemoteNetworkResult) *string { return v.Name }).(pulumi.StringPtrOutput) +} + +func init() { + pulumi.RegisterOutputType(LookupTwingateRemoteNetworkResultOutput{}) +} diff --git a/sdk/go/twingate/getTwingateRemoteNetworks.go b/sdk/go/twingate/getTwingateRemoteNetworks.go new file mode 100644 index 0000000..c5f9a7f --- /dev/null +++ b/sdk/go/twingate/getTwingateRemoteNetworks.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 twingate + +import ( + "context" + "reflect" + + "github.com/Twingate/pulumi-twingate/sdk/go/twingate/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// A Remote Network represents a single private network in Twingate that can have one or more Connectors and Resources assigned to it. You must create a Remote Network before creating Resources and Connectors that belong to it. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/remote-networks). +// +// ## Example Usage +// +// ```go +// package main +// +// import ( +// +// "github.com/Twingate/pulumi-twingate/sdk/go/twingate" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := twingate.GetTwingateRemoteNetworks(ctx, nil, nil) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +func GetTwingateRemoteNetworks(ctx *pulumi.Context, args *GetTwingateRemoteNetworksArgs, opts ...pulumi.InvokeOption) (*GetTwingateRemoteNetworksResult, error) { + opts = internal.PkgInvokeDefaultOpts(opts) + var rv GetTwingateRemoteNetworksResult + err := ctx.Invoke("twingate:index/getTwingateRemoteNetworks:getTwingateRemoteNetworks", args, &rv, opts...) + if err != nil { + return nil, err + } + return &rv, nil +} + +// A collection of arguments for invoking getTwingateRemoteNetworks. +type GetTwingateRemoteNetworksArgs struct { + // List of Remote Networks + RemoteNetworks []GetTwingateRemoteNetworksRemoteNetwork `pulumi:"remoteNetworks"` +} + +// A collection of values returned by getTwingateRemoteNetworks. +type GetTwingateRemoteNetworksResult struct { + // The provider-assigned unique ID for this managed resource. + Id string `pulumi:"id"` + // List of Remote Networks + RemoteNetworks []GetTwingateRemoteNetworksRemoteNetwork `pulumi:"remoteNetworks"` +} + +func GetTwingateRemoteNetworksOutput(ctx *pulumi.Context, args GetTwingateRemoteNetworksOutputArgs, opts ...pulumi.InvokeOption) GetTwingateRemoteNetworksResultOutput { + return pulumi.ToOutputWithContext(context.Background(), args). + ApplyT(func(v interface{}) (GetTwingateRemoteNetworksResult, error) { + args := v.(GetTwingateRemoteNetworksArgs) + r, err := GetTwingateRemoteNetworks(ctx, &args, opts...) + var s GetTwingateRemoteNetworksResult + if r != nil { + s = *r + } + return s, err + }).(GetTwingateRemoteNetworksResultOutput) +} + +// A collection of arguments for invoking getTwingateRemoteNetworks. +type GetTwingateRemoteNetworksOutputArgs struct { + // List of Remote Networks + RemoteNetworks GetTwingateRemoteNetworksRemoteNetworkArrayInput `pulumi:"remoteNetworks"` +} + +func (GetTwingateRemoteNetworksOutputArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetTwingateRemoteNetworksArgs)(nil)).Elem() +} + +// A collection of values returned by getTwingateRemoteNetworks. +type GetTwingateRemoteNetworksResultOutput struct{ *pulumi.OutputState } + +func (GetTwingateRemoteNetworksResultOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetTwingateRemoteNetworksResult)(nil)).Elem() +} + +func (o GetTwingateRemoteNetworksResultOutput) ToGetTwingateRemoteNetworksResultOutput() GetTwingateRemoteNetworksResultOutput { + return o +} + +func (o GetTwingateRemoteNetworksResultOutput) ToGetTwingateRemoteNetworksResultOutputWithContext(ctx context.Context) GetTwingateRemoteNetworksResultOutput { + return o +} + +// The provider-assigned unique ID for this managed resource. +func (o GetTwingateRemoteNetworksResultOutput) Id() pulumi.StringOutput { + return o.ApplyT(func(v GetTwingateRemoteNetworksResult) string { return v.Id }).(pulumi.StringOutput) +} + +// List of Remote Networks +func (o GetTwingateRemoteNetworksResultOutput) RemoteNetworks() GetTwingateRemoteNetworksRemoteNetworkArrayOutput { + return o.ApplyT(func(v GetTwingateRemoteNetworksResult) []GetTwingateRemoteNetworksRemoteNetwork { + return v.RemoteNetworks + }).(GetTwingateRemoteNetworksRemoteNetworkArrayOutput) +} + +func init() { + pulumi.RegisterOutputType(GetTwingateRemoteNetworksResultOutput{}) +} diff --git a/sdk/go/twingate/getTwingateResource.go b/sdk/go/twingate/getTwingateResource.go new file mode 100644 index 0000000..0dc8bc2 --- /dev/null +++ b/sdk/go/twingate/getTwingateResource.go @@ -0,0 +1,140 @@ +// 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 twingate + +import ( + "context" + "reflect" + + "github.com/Twingate/pulumi-twingate/sdk/go/twingate/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// Resources in Twingate represent any network destination address that you wish to provide private access to for users authorized via the Twingate Client application. Resources can be defined by either IP or DNS address, and all private DNS addresses will be automatically resolved with no client configuration changes. For more information, see the Twingate [documentation](https://docs.twingate.com/docs/resources-and-access-nodes). +// +// ## Example Usage +// +// ```go +// package main +// +// import ( +// +// "github.com/Twingate/pulumi-twingate/sdk/go/twingate" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := twingate.LookupTwingateResource(ctx, &twingate.LookupTwingateResourceArgs{ +// Id: "", +// }, nil) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +func LookupTwingateResource(ctx *pulumi.Context, args *LookupTwingateResourceArgs, opts ...pulumi.InvokeOption) (*LookupTwingateResourceResult, error) { + opts = internal.PkgInvokeDefaultOpts(opts) + var rv LookupTwingateResourceResult + err := ctx.Invoke("twingate:index/getTwingateResource:getTwingateResource", args, &rv, opts...) + if err != nil { + return nil, err + } + return &rv, nil +} + +// A collection of arguments for invoking getTwingateResource. +type LookupTwingateResourceArgs struct { + // The ID of the Resource. The ID for the Resource can be obtained from the Admin API or the URL string in the Admin Console. + Id string `pulumi:"id"` + // By default (when this argument is not defined) no restriction is applied, and all protocols and ports are allowed. + Protocols []GetTwingateResourceProtocol `pulumi:"protocols"` +} + +// A collection of values returned by getTwingateResource. +type LookupTwingateResourceResult struct { + // The Resource's address, which may be an IP address, CIDR range, or DNS address + Address string `pulumi:"address"` + // The ID of the Resource. The ID for the Resource can be obtained from the Admin API or the URL string in the Admin Console. + Id string `pulumi:"id"` + // The name of the Resource + Name string `pulumi:"name"` + // By default (when this argument is not defined) no restriction is applied, and all protocols and ports are allowed. + Protocols []GetTwingateResourceProtocol `pulumi:"protocols"` + // The Remote Network ID that the Resource is associated with. Resources may only be associated with a single Remote Network. + RemoteNetworkId string `pulumi:"remoteNetworkId"` +} + +func LookupTwingateResourceOutput(ctx *pulumi.Context, args LookupTwingateResourceOutputArgs, opts ...pulumi.InvokeOption) LookupTwingateResourceResultOutput { + return pulumi.ToOutputWithContext(context.Background(), args). + ApplyT(func(v interface{}) (LookupTwingateResourceResult, error) { + args := v.(LookupTwingateResourceArgs) + r, err := LookupTwingateResource(ctx, &args, opts...) + var s LookupTwingateResourceResult + if r != nil { + s = *r + } + return s, err + }).(LookupTwingateResourceResultOutput) +} + +// A collection of arguments for invoking getTwingateResource. +type LookupTwingateResourceOutputArgs struct { + // The ID of the Resource. The ID for the Resource can be obtained from the Admin API or the URL string in the Admin Console. + Id pulumi.StringInput `pulumi:"id"` + // By default (when this argument is not defined) no restriction is applied, and all protocols and ports are allowed. + Protocols GetTwingateResourceProtocolArrayInput `pulumi:"protocols"` +} + +func (LookupTwingateResourceOutputArgs) ElementType() reflect.Type { + return reflect.TypeOf((*LookupTwingateResourceArgs)(nil)).Elem() +} + +// A collection of values returned by getTwingateResource. +type LookupTwingateResourceResultOutput struct{ *pulumi.OutputState } + +func (LookupTwingateResourceResultOutput) ElementType() reflect.Type { + return reflect.TypeOf((*LookupTwingateResourceResult)(nil)).Elem() +} + +func (o LookupTwingateResourceResultOutput) ToLookupTwingateResourceResultOutput() LookupTwingateResourceResultOutput { + return o +} + +func (o LookupTwingateResourceResultOutput) ToLookupTwingateResourceResultOutputWithContext(ctx context.Context) LookupTwingateResourceResultOutput { + return o +} + +// The Resource's address, which may be an IP address, CIDR range, or DNS address +func (o LookupTwingateResourceResultOutput) Address() pulumi.StringOutput { + return o.ApplyT(func(v LookupTwingateResourceResult) string { return v.Address }).(pulumi.StringOutput) +} + +// The ID of the Resource. The ID for the Resource can be obtained from the Admin API or the URL string in the Admin Console. +func (o LookupTwingateResourceResultOutput) Id() pulumi.StringOutput { + return o.ApplyT(func(v LookupTwingateResourceResult) string { return v.Id }).(pulumi.StringOutput) +} + +// The name of the Resource +func (o LookupTwingateResourceResultOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v LookupTwingateResourceResult) string { return v.Name }).(pulumi.StringOutput) +} + +// By default (when this argument is not defined) no restriction is applied, and all protocols and ports are allowed. +func (o LookupTwingateResourceResultOutput) Protocols() GetTwingateResourceProtocolArrayOutput { + return o.ApplyT(func(v LookupTwingateResourceResult) []GetTwingateResourceProtocol { return v.Protocols }).(GetTwingateResourceProtocolArrayOutput) +} + +// The Remote Network ID that the Resource is associated with. Resources may only be associated with a single Remote Network. +func (o LookupTwingateResourceResultOutput) RemoteNetworkId() pulumi.StringOutput { + return o.ApplyT(func(v LookupTwingateResourceResult) string { return v.RemoteNetworkId }).(pulumi.StringOutput) +} + +func init() { + pulumi.RegisterOutputType(LookupTwingateResourceResultOutput{}) +} diff --git a/sdk/go/twingate/getTwingateResources.go b/sdk/go/twingate/getTwingateResources.go new file mode 100644 index 0000000..49c73ba --- /dev/null +++ b/sdk/go/twingate/getTwingateResources.go @@ -0,0 +1,126 @@ +// 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 twingate + +import ( + "context" + "reflect" + + "github.com/Twingate/pulumi-twingate/sdk/go/twingate/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// Resources in Twingate represent servers on the private network that clients can connect to. Resources can be defined by IP, CIDR range, FQDN, or DNS zone. For more information, see the Twingate [documentation](https://docs.twingate.com/docs/resources-and-access-nodes). +// +// ## Example Usage +// +// ```go +// package main +// +// import ( +// +// "github.com/Twingate/pulumi-twingate/sdk/go/twingate" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := twingate.GetTwingateResources(ctx, &twingate.GetTwingateResourcesArgs{ +// Name: "", +// }, nil) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +func GetTwingateResources(ctx *pulumi.Context, args *GetTwingateResourcesArgs, opts ...pulumi.InvokeOption) (*GetTwingateResourcesResult, error) { + opts = internal.PkgInvokeDefaultOpts(opts) + var rv GetTwingateResourcesResult + err := ctx.Invoke("twingate:index/getTwingateResources:getTwingateResources", args, &rv, opts...) + if err != nil { + return nil, err + } + return &rv, nil +} + +// A collection of arguments for invoking getTwingateResources. +type GetTwingateResourcesArgs struct { + // The name of the Resource + Name string `pulumi:"name"` + // List of Resources + Resources []GetTwingateResourcesResource `pulumi:"resources"` +} + +// A collection of values returned by getTwingateResources. +type GetTwingateResourcesResult struct { + // The provider-assigned unique ID for this managed resource. + Id string `pulumi:"id"` + // The name of the Resource + Name string `pulumi:"name"` + // List of Resources + Resources []GetTwingateResourcesResource `pulumi:"resources"` +} + +func GetTwingateResourcesOutput(ctx *pulumi.Context, args GetTwingateResourcesOutputArgs, opts ...pulumi.InvokeOption) GetTwingateResourcesResultOutput { + return pulumi.ToOutputWithContext(context.Background(), args). + ApplyT(func(v interface{}) (GetTwingateResourcesResult, error) { + args := v.(GetTwingateResourcesArgs) + r, err := GetTwingateResources(ctx, &args, opts...) + var s GetTwingateResourcesResult + if r != nil { + s = *r + } + return s, err + }).(GetTwingateResourcesResultOutput) +} + +// A collection of arguments for invoking getTwingateResources. +type GetTwingateResourcesOutputArgs struct { + // The name of the Resource + Name pulumi.StringInput `pulumi:"name"` + // List of Resources + Resources GetTwingateResourcesResourceArrayInput `pulumi:"resources"` +} + +func (GetTwingateResourcesOutputArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetTwingateResourcesArgs)(nil)).Elem() +} + +// A collection of values returned by getTwingateResources. +type GetTwingateResourcesResultOutput struct{ *pulumi.OutputState } + +func (GetTwingateResourcesResultOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetTwingateResourcesResult)(nil)).Elem() +} + +func (o GetTwingateResourcesResultOutput) ToGetTwingateResourcesResultOutput() GetTwingateResourcesResultOutput { + return o +} + +func (o GetTwingateResourcesResultOutput) ToGetTwingateResourcesResultOutputWithContext(ctx context.Context) GetTwingateResourcesResultOutput { + return o +} + +// The provider-assigned unique ID for this managed resource. +func (o GetTwingateResourcesResultOutput) Id() pulumi.StringOutput { + return o.ApplyT(func(v GetTwingateResourcesResult) string { return v.Id }).(pulumi.StringOutput) +} + +// The name of the Resource +func (o GetTwingateResourcesResultOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v GetTwingateResourcesResult) string { return v.Name }).(pulumi.StringOutput) +} + +// List of Resources +func (o GetTwingateResourcesResultOutput) Resources() GetTwingateResourcesResourceArrayOutput { + return o.ApplyT(func(v GetTwingateResourcesResult) []GetTwingateResourcesResource { return v.Resources }).(GetTwingateResourcesResourceArrayOutput) +} + +func init() { + pulumi.RegisterOutputType(GetTwingateResourcesResultOutput{}) +} diff --git a/sdk/go/twingate/getTwingateSecurityPolicies.go b/sdk/go/twingate/getTwingateSecurityPolicies.go new file mode 100644 index 0000000..5cb75b9 --- /dev/null +++ b/sdk/go/twingate/getTwingateSecurityPolicies.go @@ -0,0 +1,111 @@ +// 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 twingate + +import ( + "context" + "reflect" + + "github.com/Twingate/pulumi-twingate/sdk/go/twingate/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// Security Policies are defined in the Twingate Admin Console and determine user and device authentication requirements for Resources. +// +// ## Example Usage +// +// ```go +// package main +// +// import ( +// +// "github.com/Twingate/pulumi-twingate/sdk/go/twingate" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := twingate.GetTwingateSecurityPolicies(ctx, nil, nil) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +func GetTwingateSecurityPolicies(ctx *pulumi.Context, args *GetTwingateSecurityPoliciesArgs, opts ...pulumi.InvokeOption) (*GetTwingateSecurityPoliciesResult, error) { + opts = internal.PkgInvokeDefaultOpts(opts) + var rv GetTwingateSecurityPoliciesResult + err := ctx.Invoke("twingate:index/getTwingateSecurityPolicies:getTwingateSecurityPolicies", args, &rv, opts...) + if err != nil { + return nil, err + } + return &rv, nil +} + +// A collection of arguments for invoking getTwingateSecurityPolicies. +type GetTwingateSecurityPoliciesArgs struct { + SecurityPolicies []GetTwingateSecurityPoliciesSecurityPolicy `pulumi:"securityPolicies"` +} + +// A collection of values returned by getTwingateSecurityPolicies. +type GetTwingateSecurityPoliciesResult struct { + // The provider-assigned unique ID for this managed resource. + Id string `pulumi:"id"` + SecurityPolicies []GetTwingateSecurityPoliciesSecurityPolicy `pulumi:"securityPolicies"` +} + +func GetTwingateSecurityPoliciesOutput(ctx *pulumi.Context, args GetTwingateSecurityPoliciesOutputArgs, opts ...pulumi.InvokeOption) GetTwingateSecurityPoliciesResultOutput { + return pulumi.ToOutputWithContext(context.Background(), args). + ApplyT(func(v interface{}) (GetTwingateSecurityPoliciesResult, error) { + args := v.(GetTwingateSecurityPoliciesArgs) + r, err := GetTwingateSecurityPolicies(ctx, &args, opts...) + var s GetTwingateSecurityPoliciesResult + if r != nil { + s = *r + } + return s, err + }).(GetTwingateSecurityPoliciesResultOutput) +} + +// A collection of arguments for invoking getTwingateSecurityPolicies. +type GetTwingateSecurityPoliciesOutputArgs struct { + SecurityPolicies GetTwingateSecurityPoliciesSecurityPolicyArrayInput `pulumi:"securityPolicies"` +} + +func (GetTwingateSecurityPoliciesOutputArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetTwingateSecurityPoliciesArgs)(nil)).Elem() +} + +// A collection of values returned by getTwingateSecurityPolicies. +type GetTwingateSecurityPoliciesResultOutput struct{ *pulumi.OutputState } + +func (GetTwingateSecurityPoliciesResultOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetTwingateSecurityPoliciesResult)(nil)).Elem() +} + +func (o GetTwingateSecurityPoliciesResultOutput) ToGetTwingateSecurityPoliciesResultOutput() GetTwingateSecurityPoliciesResultOutput { + return o +} + +func (o GetTwingateSecurityPoliciesResultOutput) ToGetTwingateSecurityPoliciesResultOutputWithContext(ctx context.Context) GetTwingateSecurityPoliciesResultOutput { + return o +} + +// The provider-assigned unique ID for this managed resource. +func (o GetTwingateSecurityPoliciesResultOutput) Id() pulumi.StringOutput { + return o.ApplyT(func(v GetTwingateSecurityPoliciesResult) string { return v.Id }).(pulumi.StringOutput) +} + +func (o GetTwingateSecurityPoliciesResultOutput) SecurityPolicies() GetTwingateSecurityPoliciesSecurityPolicyArrayOutput { + return o.ApplyT(func(v GetTwingateSecurityPoliciesResult) []GetTwingateSecurityPoliciesSecurityPolicy { + return v.SecurityPolicies + }).(GetTwingateSecurityPoliciesSecurityPolicyArrayOutput) +} + +func init() { + pulumi.RegisterOutputType(GetTwingateSecurityPoliciesResultOutput{}) +} diff --git a/sdk/go/twingate/getTwingateSecurityPolicy.go b/sdk/go/twingate/getTwingateSecurityPolicy.go new file mode 100644 index 0000000..f232314 --- /dev/null +++ b/sdk/go/twingate/getTwingateSecurityPolicy.go @@ -0,0 +1,119 @@ +// 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 twingate + +import ( + "context" + "reflect" + + "github.com/Twingate/pulumi-twingate/sdk/go/twingate/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// Security Policies are defined in the Twingate Admin Console and determine user and device authentication requirements for Resources. +// +// ## Example Usage +// +// ```go +// package main +// +// import ( +// +// "github.com/Twingate/pulumi-twingate/sdk/go/twingate" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := twingate.GetTwingateSecurityPolicy(ctx, &twingate.GetTwingateSecurityPolicyArgs{ +// Name: pulumi.StringRef(""), +// }, nil) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +func GetTwingateSecurityPolicy(ctx *pulumi.Context, args *GetTwingateSecurityPolicyArgs, opts ...pulumi.InvokeOption) (*GetTwingateSecurityPolicyResult, error) { + opts = internal.PkgInvokeDefaultOpts(opts) + var rv GetTwingateSecurityPolicyResult + err := ctx.Invoke("twingate:index/getTwingateSecurityPolicy:getTwingateSecurityPolicy", args, &rv, opts...) + if err != nil { + return nil, err + } + return &rv, nil +} + +// A collection of arguments for invoking getTwingateSecurityPolicy. +type GetTwingateSecurityPolicyArgs struct { + // Return a Security Policy by its ID. The ID for the Security Policy can be obtained from the Admin API or the URL string in the Admin Console. + Id *string `pulumi:"id"` + // Return a Security Policy that exactly matches this name. + Name *string `pulumi:"name"` +} + +// A collection of values returned by getTwingateSecurityPolicy. +type GetTwingateSecurityPolicyResult struct { + // Return a Security Policy by its ID. The ID for the Security Policy can be obtained from the Admin API or the URL string in the Admin Console. + Id *string `pulumi:"id"` + // Return a Security Policy that exactly matches this name. + Name *string `pulumi:"name"` +} + +func GetTwingateSecurityPolicyOutput(ctx *pulumi.Context, args GetTwingateSecurityPolicyOutputArgs, opts ...pulumi.InvokeOption) GetTwingateSecurityPolicyResultOutput { + return pulumi.ToOutputWithContext(context.Background(), args). + ApplyT(func(v interface{}) (GetTwingateSecurityPolicyResult, error) { + args := v.(GetTwingateSecurityPolicyArgs) + r, err := GetTwingateSecurityPolicy(ctx, &args, opts...) + var s GetTwingateSecurityPolicyResult + if r != nil { + s = *r + } + return s, err + }).(GetTwingateSecurityPolicyResultOutput) +} + +// A collection of arguments for invoking getTwingateSecurityPolicy. +type GetTwingateSecurityPolicyOutputArgs struct { + // Return a Security Policy by its ID. The ID for the Security Policy can be obtained from the Admin API or the URL string in the Admin Console. + Id pulumi.StringPtrInput `pulumi:"id"` + // Return a Security Policy that exactly matches this name. + Name pulumi.StringPtrInput `pulumi:"name"` +} + +func (GetTwingateSecurityPolicyOutputArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetTwingateSecurityPolicyArgs)(nil)).Elem() +} + +// A collection of values returned by getTwingateSecurityPolicy. +type GetTwingateSecurityPolicyResultOutput struct{ *pulumi.OutputState } + +func (GetTwingateSecurityPolicyResultOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetTwingateSecurityPolicyResult)(nil)).Elem() +} + +func (o GetTwingateSecurityPolicyResultOutput) ToGetTwingateSecurityPolicyResultOutput() GetTwingateSecurityPolicyResultOutput { + return o +} + +func (o GetTwingateSecurityPolicyResultOutput) ToGetTwingateSecurityPolicyResultOutputWithContext(ctx context.Context) GetTwingateSecurityPolicyResultOutput { + return o +} + +// Return a Security Policy by its ID. The ID for the Security Policy can be obtained from the Admin API or the URL string in the Admin Console. +func (o GetTwingateSecurityPolicyResultOutput) Id() pulumi.StringPtrOutput { + return o.ApplyT(func(v GetTwingateSecurityPolicyResult) *string { return v.Id }).(pulumi.StringPtrOutput) +} + +// Return a Security Policy that exactly matches this name. +func (o GetTwingateSecurityPolicyResultOutput) Name() pulumi.StringPtrOutput { + return o.ApplyT(func(v GetTwingateSecurityPolicyResult) *string { return v.Name }).(pulumi.StringPtrOutput) +} + +func init() { + pulumi.RegisterOutputType(GetTwingateSecurityPolicyResultOutput{}) +} diff --git a/sdk/go/twingate/getTwingateServiceAccounts.go b/sdk/go/twingate/getTwingateServiceAccounts.go new file mode 100644 index 0000000..cdfb8f5 --- /dev/null +++ b/sdk/go/twingate/getTwingateServiceAccounts.go @@ -0,0 +1,128 @@ +// 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 twingate + +import ( + "context" + "reflect" + + "github.com/Twingate/pulumi-twingate/sdk/go/twingate/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// Service Accounts offer a way to provide programmatic, centrally-controlled, and consistent access controls. +// +// ## Example Usage +// +// ```go +// package main +// +// import ( +// +// "github.com/Twingate/pulumi-twingate/sdk/go/twingate" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := twingate.GetTwingateServiceAccounts(ctx, &twingate.GetTwingateServiceAccountsArgs{ +// Name: pulumi.StringRef(""), +// }, nil) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +func GetTwingateServiceAccounts(ctx *pulumi.Context, args *GetTwingateServiceAccountsArgs, opts ...pulumi.InvokeOption) (*GetTwingateServiceAccountsResult, error) { + opts = internal.PkgInvokeDefaultOpts(opts) + var rv GetTwingateServiceAccountsResult + err := ctx.Invoke("twingate:index/getTwingateServiceAccounts:getTwingateServiceAccounts", args, &rv, opts...) + if err != nil { + return nil, err + } + return &rv, nil +} + +// A collection of arguments for invoking getTwingateServiceAccounts. +type GetTwingateServiceAccountsArgs struct { + // Name of the Service Account + Name *string `pulumi:"name"` + // List of Service Accounts + ServiceAccounts []GetTwingateServiceAccountsServiceAccount `pulumi:"serviceAccounts"` +} + +// A collection of values returned by getTwingateServiceAccounts. +type GetTwingateServiceAccountsResult struct { + // The provider-assigned unique ID for this managed resource. + Id string `pulumi:"id"` + // Filter results by the name of the Service Account. + Name *string `pulumi:"name"` + // List of Service Accounts + ServiceAccounts []GetTwingateServiceAccountsServiceAccount `pulumi:"serviceAccounts"` +} + +func GetTwingateServiceAccountsOutput(ctx *pulumi.Context, args GetTwingateServiceAccountsOutputArgs, opts ...pulumi.InvokeOption) GetTwingateServiceAccountsResultOutput { + return pulumi.ToOutputWithContext(context.Background(), args). + ApplyT(func(v interface{}) (GetTwingateServiceAccountsResult, error) { + args := v.(GetTwingateServiceAccountsArgs) + r, err := GetTwingateServiceAccounts(ctx, &args, opts...) + var s GetTwingateServiceAccountsResult + if r != nil { + s = *r + } + return s, err + }).(GetTwingateServiceAccountsResultOutput) +} + +// A collection of arguments for invoking getTwingateServiceAccounts. +type GetTwingateServiceAccountsOutputArgs struct { + // Name of the Service Account + Name pulumi.StringPtrInput `pulumi:"name"` + // List of Service Accounts + ServiceAccounts GetTwingateServiceAccountsServiceAccountArrayInput `pulumi:"serviceAccounts"` +} + +func (GetTwingateServiceAccountsOutputArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetTwingateServiceAccountsArgs)(nil)).Elem() +} + +// A collection of values returned by getTwingateServiceAccounts. +type GetTwingateServiceAccountsResultOutput struct{ *pulumi.OutputState } + +func (GetTwingateServiceAccountsResultOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetTwingateServiceAccountsResult)(nil)).Elem() +} + +func (o GetTwingateServiceAccountsResultOutput) ToGetTwingateServiceAccountsResultOutput() GetTwingateServiceAccountsResultOutput { + return o +} + +func (o GetTwingateServiceAccountsResultOutput) ToGetTwingateServiceAccountsResultOutputWithContext(ctx context.Context) GetTwingateServiceAccountsResultOutput { + return o +} + +// The provider-assigned unique ID for this managed resource. +func (o GetTwingateServiceAccountsResultOutput) Id() pulumi.StringOutput { + return o.ApplyT(func(v GetTwingateServiceAccountsResult) string { return v.Id }).(pulumi.StringOutput) +} + +// Filter results by the name of the Service Account. +func (o GetTwingateServiceAccountsResultOutput) Name() pulumi.StringPtrOutput { + return o.ApplyT(func(v GetTwingateServiceAccountsResult) *string { return v.Name }).(pulumi.StringPtrOutput) +} + +// List of Service Accounts +func (o GetTwingateServiceAccountsResultOutput) ServiceAccounts() GetTwingateServiceAccountsServiceAccountArrayOutput { + return o.ApplyT(func(v GetTwingateServiceAccountsResult) []GetTwingateServiceAccountsServiceAccount { + return v.ServiceAccounts + }).(GetTwingateServiceAccountsServiceAccountArrayOutput) +} + +func init() { + pulumi.RegisterOutputType(GetTwingateServiceAccountsResultOutput{}) +} diff --git a/sdk/go/twingate/getTwingateUser.go b/sdk/go/twingate/getTwingateUser.go new file mode 100644 index 0000000..837680f --- /dev/null +++ b/sdk/go/twingate/getTwingateUser.go @@ -0,0 +1,154 @@ +// 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 twingate + +import ( + "context" + "reflect" + + "github.com/Twingate/pulumi-twingate/sdk/go/twingate/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// Users in Twingate can be given access to Twingate Resources and may either be added manually or automatically synchronized with a 3rd party identity provider. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/users). +// +// ## Example Usage +// +// ```go +// package main +// +// import ( +// +// "github.com/Twingate/pulumi-twingate/sdk/go/twingate" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := twingate.LookupTwingateUser(ctx, &twingate.LookupTwingateUserArgs{ +// Id: "", +// }, nil) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +func LookupTwingateUser(ctx *pulumi.Context, args *LookupTwingateUserArgs, opts ...pulumi.InvokeOption) (*LookupTwingateUserResult, error) { + opts = internal.PkgInvokeDefaultOpts(opts) + var rv LookupTwingateUserResult + err := ctx.Invoke("twingate:index/getTwingateUser:getTwingateUser", args, &rv, opts...) + if err != nil { + return nil, err + } + return &rv, nil +} + +// A collection of arguments for invoking getTwingateUser. +type LookupTwingateUserArgs struct { + // The ID of the User. The ID for the User can be obtained from the Admin API or the URL string in the Admin Console. + Id string `pulumi:"id"` +} + +// A collection of values returned by getTwingateUser. +type LookupTwingateUserResult struct { + // The email address of the User + Email string `pulumi:"email"` + // The first name of the User + FirstName string `pulumi:"firstName"` + // The ID of the User. The ID for the User can be obtained from the Admin API or the URL string in the Admin Console. + Id string `pulumi:"id"` + // Indicates whether the User is an admin + // + // Deprecated: This read-only Boolean value will be deprecated in a future release. You may use the `role` value instead. + IsAdmin bool `pulumi:"isAdmin"` + // The last name of the User + LastName string `pulumi:"lastName"` + // Indicates the User's role. Either ADMIN, DEVOPS, SUPPORT, or MEMBER + Role string `pulumi:"role"` + // Indicates the User's type. Either MANUAL or SYNCED. + Type string `pulumi:"type"` +} + +func LookupTwingateUserOutput(ctx *pulumi.Context, args LookupTwingateUserOutputArgs, opts ...pulumi.InvokeOption) LookupTwingateUserResultOutput { + return pulumi.ToOutputWithContext(context.Background(), args). + ApplyT(func(v interface{}) (LookupTwingateUserResult, error) { + args := v.(LookupTwingateUserArgs) + r, err := LookupTwingateUser(ctx, &args, opts...) + var s LookupTwingateUserResult + if r != nil { + s = *r + } + return s, err + }).(LookupTwingateUserResultOutput) +} + +// A collection of arguments for invoking getTwingateUser. +type LookupTwingateUserOutputArgs struct { + // The ID of the User. The ID for the User can be obtained from the Admin API or the URL string in the Admin Console. + Id pulumi.StringInput `pulumi:"id"` +} + +func (LookupTwingateUserOutputArgs) ElementType() reflect.Type { + return reflect.TypeOf((*LookupTwingateUserArgs)(nil)).Elem() +} + +// A collection of values returned by getTwingateUser. +type LookupTwingateUserResultOutput struct{ *pulumi.OutputState } + +func (LookupTwingateUserResultOutput) ElementType() reflect.Type { + return reflect.TypeOf((*LookupTwingateUserResult)(nil)).Elem() +} + +func (o LookupTwingateUserResultOutput) ToLookupTwingateUserResultOutput() LookupTwingateUserResultOutput { + return o +} + +func (o LookupTwingateUserResultOutput) ToLookupTwingateUserResultOutputWithContext(ctx context.Context) LookupTwingateUserResultOutput { + return o +} + +// The email address of the User +func (o LookupTwingateUserResultOutput) Email() pulumi.StringOutput { + return o.ApplyT(func(v LookupTwingateUserResult) string { return v.Email }).(pulumi.StringOutput) +} + +// The first name of the User +func (o LookupTwingateUserResultOutput) FirstName() pulumi.StringOutput { + return o.ApplyT(func(v LookupTwingateUserResult) string { return v.FirstName }).(pulumi.StringOutput) +} + +// The ID of the User. The ID for the User can be obtained from the Admin API or the URL string in the Admin Console. +func (o LookupTwingateUserResultOutput) Id() pulumi.StringOutput { + return o.ApplyT(func(v LookupTwingateUserResult) string { return v.Id }).(pulumi.StringOutput) +} + +// Indicates whether the User is an admin +// +// Deprecated: This read-only Boolean value will be deprecated in a future release. You may use the `role` value instead. +func (o LookupTwingateUserResultOutput) IsAdmin() pulumi.BoolOutput { + return o.ApplyT(func(v LookupTwingateUserResult) bool { return v.IsAdmin }).(pulumi.BoolOutput) +} + +// The last name of the User +func (o LookupTwingateUserResultOutput) LastName() pulumi.StringOutput { + return o.ApplyT(func(v LookupTwingateUserResult) string { return v.LastName }).(pulumi.StringOutput) +} + +// Indicates the User's role. Either ADMIN, DEVOPS, SUPPORT, or MEMBER +func (o LookupTwingateUserResultOutput) Role() pulumi.StringOutput { + return o.ApplyT(func(v LookupTwingateUserResult) string { return v.Role }).(pulumi.StringOutput) +} + +// Indicates the User's type. Either MANUAL or SYNCED. +func (o LookupTwingateUserResultOutput) Type() pulumi.StringOutput { + return o.ApplyT(func(v LookupTwingateUserResult) string { return v.Type }).(pulumi.StringOutput) +} + +func init() { + pulumi.RegisterOutputType(LookupTwingateUserResultOutput{}) +} diff --git a/sdk/go/twingate/getTwingateUsers.go b/sdk/go/twingate/getTwingateUsers.go new file mode 100644 index 0000000..a926321 --- /dev/null +++ b/sdk/go/twingate/getTwingateUsers.go @@ -0,0 +1,109 @@ +// 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 twingate + +import ( + "context" + "reflect" + + "github.com/Twingate/pulumi-twingate/sdk/go/twingate/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// Users in Twingate can be given access to Twingate Resources and may either be added manually or automatically synchronized with a 3rd party identity provider. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/users). +// +// ## Example Usage +// +// ```go +// package main +// +// import ( +// +// "github.com/Twingate/pulumi-twingate/sdk/go/twingate" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := twingate.GetTwingateUsers(ctx, nil, nil) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +func GetTwingateUsers(ctx *pulumi.Context, args *GetTwingateUsersArgs, opts ...pulumi.InvokeOption) (*GetTwingateUsersResult, error) { + opts = internal.PkgInvokeDefaultOpts(opts) + var rv GetTwingateUsersResult + err := ctx.Invoke("twingate:index/getTwingateUsers:getTwingateUsers", args, &rv, opts...) + if err != nil { + return nil, err + } + return &rv, nil +} + +// A collection of arguments for invoking getTwingateUsers. +type GetTwingateUsersArgs struct { + Users []GetTwingateUsersUser `pulumi:"users"` +} + +// A collection of values returned by getTwingateUsers. +type GetTwingateUsersResult struct { + // The provider-assigned unique ID for this managed resource. + Id string `pulumi:"id"` + Users []GetTwingateUsersUser `pulumi:"users"` +} + +func GetTwingateUsersOutput(ctx *pulumi.Context, args GetTwingateUsersOutputArgs, opts ...pulumi.InvokeOption) GetTwingateUsersResultOutput { + return pulumi.ToOutputWithContext(context.Background(), args). + ApplyT(func(v interface{}) (GetTwingateUsersResult, error) { + args := v.(GetTwingateUsersArgs) + r, err := GetTwingateUsers(ctx, &args, opts...) + var s GetTwingateUsersResult + if r != nil { + s = *r + } + return s, err + }).(GetTwingateUsersResultOutput) +} + +// A collection of arguments for invoking getTwingateUsers. +type GetTwingateUsersOutputArgs struct { + Users GetTwingateUsersUserArrayInput `pulumi:"users"` +} + +func (GetTwingateUsersOutputArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetTwingateUsersArgs)(nil)).Elem() +} + +// A collection of values returned by getTwingateUsers. +type GetTwingateUsersResultOutput struct{ *pulumi.OutputState } + +func (GetTwingateUsersResultOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetTwingateUsersResult)(nil)).Elem() +} + +func (o GetTwingateUsersResultOutput) ToGetTwingateUsersResultOutput() GetTwingateUsersResultOutput { + return o +} + +func (o GetTwingateUsersResultOutput) ToGetTwingateUsersResultOutputWithContext(ctx context.Context) GetTwingateUsersResultOutput { + return o +} + +// The provider-assigned unique ID for this managed resource. +func (o GetTwingateUsersResultOutput) Id() pulumi.StringOutput { + return o.ApplyT(func(v GetTwingateUsersResult) string { return v.Id }).(pulumi.StringOutput) +} + +func (o GetTwingateUsersResultOutput) Users() GetTwingateUsersUserArrayOutput { + return o.ApplyT(func(v GetTwingateUsersResult) []GetTwingateUsersUser { return v.Users }).(GetTwingateUsersUserArrayOutput) +} + +func init() { + pulumi.RegisterOutputType(GetTwingateUsersResultOutput{}) +} diff --git a/sdk/go/twingate/init.go b/sdk/go/twingate/init.go new file mode 100644 index 0000000..5bb85ef --- /dev/null +++ b/sdk/go/twingate/init.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 twingate + +import ( + "fmt" + + "github.com/Twingate/pulumi-twingate/sdk/go/twingate/internal" + "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 "twingate:index/twingateConnector:TwingateConnector": + r = &TwingateConnector{} + case "twingate:index/twingateConnectorTokens:TwingateConnectorTokens": + r = &TwingateConnectorTokens{} + case "twingate:index/twingateGroup:TwingateGroup": + r = &TwingateGroup{} + case "twingate:index/twingateRemoteNetwork:TwingateRemoteNetwork": + r = &TwingateRemoteNetwork{} + case "twingate:index/twingateResource:TwingateResource": + r = &TwingateResource{} + case "twingate:index/twingateServiceAccount:TwingateServiceAccount": + r = &TwingateServiceAccount{} + case "twingate:index/twingateServiceAccountKey:TwingateServiceAccountKey": + r = &TwingateServiceAccountKey{} + case "twingate:index/twingateUser:TwingateUser": + r = &TwingateUser{} + 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:twingate" { + 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, err := internal.PkgVersion() + if err != nil { + version = semver.Version{Major: 1} + } + pulumi.RegisterResourceModule( + "twingate", + "index/twingateConnector", + &module{version}, + ) + pulumi.RegisterResourceModule( + "twingate", + "index/twingateConnectorTokens", + &module{version}, + ) + pulumi.RegisterResourceModule( + "twingate", + "index/twingateGroup", + &module{version}, + ) + pulumi.RegisterResourceModule( + "twingate", + "index/twingateRemoteNetwork", + &module{version}, + ) + pulumi.RegisterResourceModule( + "twingate", + "index/twingateResource", + &module{version}, + ) + pulumi.RegisterResourceModule( + "twingate", + "index/twingateServiceAccount", + &module{version}, + ) + pulumi.RegisterResourceModule( + "twingate", + "index/twingateServiceAccountKey", + &module{version}, + ) + pulumi.RegisterResourceModule( + "twingate", + "index/twingateUser", + &module{version}, + ) + pulumi.RegisterResourcePackage( + "twingate", + &pkg{version}, + ) +} diff --git a/sdk/go/twingate/internal/pulumiUtilities.go b/sdk/go/twingate/internal/pulumiUtilities.go new file mode 100644 index 0000000..daebe1e --- /dev/null +++ b/sdk/go/twingate/internal/pulumiUtilities.go @@ -0,0 +1,184 @@ +// 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 internal + +import ( + "fmt" + "os" + "reflect" + "regexp" + "strconv" + "strings" + + "github.com/blang/semver" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +import ( + "github.com/pulumi/pulumi/sdk/v3/go/pulumi/internals" +) + +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, ok := os.LookupEnv(v); ok { + 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) { + // emptyVersion defaults to v0.0.0 + if !SdkVersion.Equals(semver.Version{}) { + return SdkVersion, nil + } + type sentinal struct{} + pkgPath := reflect.TypeOf(sentinal{}).PkgPath() + re := regexp.MustCompile("^.*/pulumi-twingate/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() +} + +func CallPlain( + ctx *pulumi.Context, + tok string, + args pulumi.Input, + output pulumi.Output, + self pulumi.Resource, + property string, + resultPtr reflect.Value, + errorPtr *error, + opts ...pulumi.InvokeOption, +) { + res, err := callPlainInner(ctx, tok, args, output, self, opts...) + if err != nil { + *errorPtr = err + return + } + + v := reflect.ValueOf(res) + + // extract res.property field if asked to do so + if property != "" { + v = v.FieldByName("Res") + } + + // return by setting the result pointer; this style of returns shortens the generated code without generics + resultPtr.Elem().Set(v) +} + +func callPlainInner( + ctx *pulumi.Context, + tok string, + args pulumi.Input, + output pulumi.Output, + self pulumi.Resource, + opts ...pulumi.InvokeOption, +) (any, error) { + o, err := ctx.Call(tok, args, output, self, opts...) + if err != nil { + return nil, err + } + + outputData, err := internals.UnsafeAwaitOutput(ctx.Context(), o) + if err != nil { + return nil, err + } + + // Ingoring deps silently. They are typically non-empty, r.f() calls include r as a dependency. + known := outputData.Known + value := outputData.Value + secret := outputData.Secret + + problem := "" + if !known { + problem = "an unknown value" + } else if secret { + problem = "a secret value" + } + + if problem != "" { + return nil, fmt.Errorf("Plain resource method %q incorrectly returned %s. "+ + "This is an error in the provider, please report this to the provider developer.", + tok, problem) + } + + return value, nil +} + +// PkgResourceDefaultOpts provides package level defaults to pulumi.OptionResource. +func PkgResourceDefaultOpts(opts []pulumi.ResourceOption) []pulumi.ResourceOption { + defaults := []pulumi.ResourceOption{} + + version := SdkVersion + if !version.Equals(semver.Version{}) { + defaults = append(defaults, pulumi.Version(version.String())) + } + return append(defaults, opts...) +} + +// PkgInvokeDefaultOpts provides package level defaults to pulumi.OptionInvoke. +func PkgInvokeDefaultOpts(opts []pulumi.InvokeOption) []pulumi.InvokeOption { + defaults := []pulumi.InvokeOption{} + + version := SdkVersion + if !version.Equals(semver.Version{}) { + defaults = append(defaults, pulumi.Version(version.String())) + } + return append(defaults, opts...) +} diff --git a/sdk/go/twingate/internal/pulumiVersion.go b/sdk/go/twingate/internal/pulumiVersion.go new file mode 100644 index 0000000..d591687 --- /dev/null +++ b/sdk/go/twingate/internal/pulumiVersion.go @@ -0,0 +1,11 @@ +// 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 internal + +import ( + "github.com/blang/semver" +) + +var SdkVersion semver.Version = semver.Version{} +var pluginDownloadURL string = "" diff --git a/sdk/go/twingate/provider.go b/sdk/go/twingate/provider.go new file mode 100644 index 0000000..70f98f1 --- /dev/null +++ b/sdk/go/twingate/provider.go @@ -0,0 +1,154 @@ +// 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 twingate + +import ( + "context" + "reflect" + + "github.com/Twingate/pulumi-twingate/sdk/go/twingate/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// The provider type for the twingate 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 + + // The access key for API operations. You can retrieve this from the Twingate Admin Console + // ([documentation](https://docs.twingate.com/docs/api-overview)). Alternatively, this can be specified using the + // TWINGATE_API_TOKEN environment variable. + ApiToken pulumi.StringPtrOutput `pulumi:"apiToken"` + // Your Twingate network ID for API operations. You can find it in the Admin Console URL, for example: + // `autoco.twingate.com`, where `autoco` is your network ID Alternatively, this can be specified using the TWINGATE_NETWORK + // environment variable. + Network pulumi.StringPtrOutput `pulumi:"network"` + // The default is 'twingate.com' This is optional and shouldn't be changed under normal circumstances. + 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 { + args = &ProviderArgs{} + } + + if args.ApiToken != nil { + args.ApiToken = pulumi.ToSecret(args.ApiToken).(pulumi.StringPtrInput) + } + secrets := pulumi.AdditionalSecretOutputs([]string{ + "apiToken", + }) + opts = append(opts, secrets) + opts = internal.PkgResourceDefaultOpts(opts) + var resource Provider + err := ctx.RegisterResource("pulumi:providers:twingate", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +type providerArgs struct { + // The access key for API operations. You can retrieve this from the Twingate Admin Console + // ([documentation](https://docs.twingate.com/docs/api-overview)). Alternatively, this can be specified using the + // TWINGATE_API_TOKEN environment variable. + ApiToken *string `pulumi:"apiToken"` + // Specifies a retry limit for the http requests made. The default value is 10. Alternatively, this can be specified using + // the TWINGATE_HTTP_MAX_RETRY environment variable + HttpMaxRetry *int `pulumi:"httpMaxRetry"` + // Specifies a time limit in seconds for the http requests made. The default value is 10 seconds. Alternatively, this can + // be specified using the TWINGATE_HTTP_TIMEOUT environment variable + HttpTimeout *int `pulumi:"httpTimeout"` + // Your Twingate network ID for API operations. You can find it in the Admin Console URL, for example: + // `autoco.twingate.com`, where `autoco` is your network ID Alternatively, this can be specified using the TWINGATE_NETWORK + // environment variable. + Network *string `pulumi:"network"` + // The default is 'twingate.com' This is optional and shouldn't be changed under normal circumstances. + Url *string `pulumi:"url"` +} + +// The set of arguments for constructing a Provider resource. +type ProviderArgs struct { + // The access key for API operations. You can retrieve this from the Twingate Admin Console + // ([documentation](https://docs.twingate.com/docs/api-overview)). Alternatively, this can be specified using the + // TWINGATE_API_TOKEN environment variable. + ApiToken pulumi.StringPtrInput + // Specifies a retry limit for the http requests made. The default value is 10. Alternatively, this can be specified using + // the TWINGATE_HTTP_MAX_RETRY environment variable + HttpMaxRetry pulumi.IntPtrInput + // Specifies a time limit in seconds for the http requests made. The default value is 10 seconds. Alternatively, this can + // be specified using the TWINGATE_HTTP_TIMEOUT environment variable + HttpTimeout pulumi.IntPtrInput + // Your Twingate network ID for API operations. You can find it in the Admin Console URL, for example: + // `autoco.twingate.com`, where `autoco` is your network ID Alternatively, this can be specified using the TWINGATE_NETWORK + // environment variable. + Network pulumi.StringPtrInput + // The default is 'twingate.com' This is optional and shouldn't be changed under normal circumstances. + 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 +} + +// The access key for API operations. You can retrieve this from the Twingate Admin Console +// ([documentation](https://docs.twingate.com/docs/api-overview)). Alternatively, this can be specified using the +// TWINGATE_API_TOKEN environment variable. +func (o ProviderOutput) ApiToken() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Provider) pulumi.StringPtrOutput { return v.ApiToken }).(pulumi.StringPtrOutput) +} + +// Your Twingate network ID for API operations. You can find it in the Admin Console URL, for example: +// `autoco.twingate.com`, where `autoco` is your network ID Alternatively, this can be specified using the TWINGATE_NETWORK +// environment variable. +func (o ProviderOutput) Network() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Provider) pulumi.StringPtrOutput { return v.Network }).(pulumi.StringPtrOutput) +} + +// The default is 'twingate.com' This is optional and shouldn't be changed under normal circumstances. +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/twingate/pulumi-plugin.json b/sdk/go/twingate/pulumi-plugin.json new file mode 100644 index 0000000..51cf0e7 --- /dev/null +++ b/sdk/go/twingate/pulumi-plugin.json @@ -0,0 +1,4 @@ +{ + "resource": true, + "name": "twingate" +} diff --git a/sdk/go/twingate/pulumiTypes.go b/sdk/go/twingate/pulumiTypes.go new file mode 100644 index 0000000..f74a7d1 --- /dev/null +++ b/sdk/go/twingate/pulumiTypes.go @@ -0,0 +1,2254 @@ +// 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 twingate + +import ( + "context" + "reflect" + + "github.com/Twingate/pulumi-twingate/sdk/go/twingate/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +var _ = internal.GetEnvOrDefault + +type TwingateResourceAccess struct { + // List of Group IDs that will have permission to access the Resource. + GroupIds []string `pulumi:"groupIds"` + // List of Service Account IDs that will have permission to access the Resource. + ServiceAccountIds []string `pulumi:"serviceAccountIds"` +} + +// TwingateResourceAccessInput is an input type that accepts TwingateResourceAccessArgs and TwingateResourceAccessOutput values. +// You can construct a concrete instance of `TwingateResourceAccessInput` via: +// +// TwingateResourceAccessArgs{...} +type TwingateResourceAccessInput interface { + pulumi.Input + + ToTwingateResourceAccessOutput() TwingateResourceAccessOutput + ToTwingateResourceAccessOutputWithContext(context.Context) TwingateResourceAccessOutput +} + +type TwingateResourceAccessArgs struct { + // List of Group IDs that will have permission to access the Resource. + GroupIds pulumi.StringArrayInput `pulumi:"groupIds"` + // List of Service Account IDs that will have permission to access the Resource. + ServiceAccountIds pulumi.StringArrayInput `pulumi:"serviceAccountIds"` +} + +func (TwingateResourceAccessArgs) ElementType() reflect.Type { + return reflect.TypeOf((*TwingateResourceAccess)(nil)).Elem() +} + +func (i TwingateResourceAccessArgs) ToTwingateResourceAccessOutput() TwingateResourceAccessOutput { + return i.ToTwingateResourceAccessOutputWithContext(context.Background()) +} + +func (i TwingateResourceAccessArgs) ToTwingateResourceAccessOutputWithContext(ctx context.Context) TwingateResourceAccessOutput { + return pulumi.ToOutputWithContext(ctx, i).(TwingateResourceAccessOutput) +} + +func (i TwingateResourceAccessArgs) ToTwingateResourceAccessPtrOutput() TwingateResourceAccessPtrOutput { + return i.ToTwingateResourceAccessPtrOutputWithContext(context.Background()) +} + +func (i TwingateResourceAccessArgs) ToTwingateResourceAccessPtrOutputWithContext(ctx context.Context) TwingateResourceAccessPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(TwingateResourceAccessOutput).ToTwingateResourceAccessPtrOutputWithContext(ctx) +} + +// TwingateResourceAccessPtrInput is an input type that accepts TwingateResourceAccessArgs, TwingateResourceAccessPtr and TwingateResourceAccessPtrOutput values. +// You can construct a concrete instance of `TwingateResourceAccessPtrInput` via: +// +// TwingateResourceAccessArgs{...} +// +// or: +// +// nil +type TwingateResourceAccessPtrInput interface { + pulumi.Input + + ToTwingateResourceAccessPtrOutput() TwingateResourceAccessPtrOutput + ToTwingateResourceAccessPtrOutputWithContext(context.Context) TwingateResourceAccessPtrOutput +} + +type twingateResourceAccessPtrType TwingateResourceAccessArgs + +func TwingateResourceAccessPtr(v *TwingateResourceAccessArgs) TwingateResourceAccessPtrInput { + return (*twingateResourceAccessPtrType)(v) +} + +func (*twingateResourceAccessPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**TwingateResourceAccess)(nil)).Elem() +} + +func (i *twingateResourceAccessPtrType) ToTwingateResourceAccessPtrOutput() TwingateResourceAccessPtrOutput { + return i.ToTwingateResourceAccessPtrOutputWithContext(context.Background()) +} + +func (i *twingateResourceAccessPtrType) ToTwingateResourceAccessPtrOutputWithContext(ctx context.Context) TwingateResourceAccessPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(TwingateResourceAccessPtrOutput) +} + +type TwingateResourceAccessOutput struct{ *pulumi.OutputState } + +func (TwingateResourceAccessOutput) ElementType() reflect.Type { + return reflect.TypeOf((*TwingateResourceAccess)(nil)).Elem() +} + +func (o TwingateResourceAccessOutput) ToTwingateResourceAccessOutput() TwingateResourceAccessOutput { + return o +} + +func (o TwingateResourceAccessOutput) ToTwingateResourceAccessOutputWithContext(ctx context.Context) TwingateResourceAccessOutput { + return o +} + +func (o TwingateResourceAccessOutput) ToTwingateResourceAccessPtrOutput() TwingateResourceAccessPtrOutput { + return o.ToTwingateResourceAccessPtrOutputWithContext(context.Background()) +} + +func (o TwingateResourceAccessOutput) ToTwingateResourceAccessPtrOutputWithContext(ctx context.Context) TwingateResourceAccessPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v TwingateResourceAccess) *TwingateResourceAccess { + return &v + }).(TwingateResourceAccessPtrOutput) +} + +// List of Group IDs that will have permission to access the Resource. +func (o TwingateResourceAccessOutput) GroupIds() pulumi.StringArrayOutput { + return o.ApplyT(func(v TwingateResourceAccess) []string { return v.GroupIds }).(pulumi.StringArrayOutput) +} + +// List of Service Account IDs that will have permission to access the Resource. +func (o TwingateResourceAccessOutput) ServiceAccountIds() pulumi.StringArrayOutput { + return o.ApplyT(func(v TwingateResourceAccess) []string { return v.ServiceAccountIds }).(pulumi.StringArrayOutput) +} + +type TwingateResourceAccessPtrOutput struct{ *pulumi.OutputState } + +func (TwingateResourceAccessPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**TwingateResourceAccess)(nil)).Elem() +} + +func (o TwingateResourceAccessPtrOutput) ToTwingateResourceAccessPtrOutput() TwingateResourceAccessPtrOutput { + return o +} + +func (o TwingateResourceAccessPtrOutput) ToTwingateResourceAccessPtrOutputWithContext(ctx context.Context) TwingateResourceAccessPtrOutput { + return o +} + +func (o TwingateResourceAccessPtrOutput) Elem() TwingateResourceAccessOutput { + return o.ApplyT(func(v *TwingateResourceAccess) TwingateResourceAccess { + if v != nil { + return *v + } + var ret TwingateResourceAccess + return ret + }).(TwingateResourceAccessOutput) +} + +// List of Group IDs that will have permission to access the Resource. +func (o TwingateResourceAccessPtrOutput) GroupIds() pulumi.StringArrayOutput { + return o.ApplyT(func(v *TwingateResourceAccess) []string { + if v == nil { + return nil + } + return v.GroupIds + }).(pulumi.StringArrayOutput) +} + +// List of Service Account IDs that will have permission to access the Resource. +func (o TwingateResourceAccessPtrOutput) ServiceAccountIds() pulumi.StringArrayOutput { + return o.ApplyT(func(v *TwingateResourceAccess) []string { + if v == nil { + return nil + } + return v.ServiceAccountIds + }).(pulumi.StringArrayOutput) +} + +type TwingateResourceProtocols struct { + // Whether to allow ICMP (ping) traffic + AllowIcmp *bool `pulumi:"allowIcmp"` + Tcp TwingateResourceProtocolsTcp `pulumi:"tcp"` + Udp TwingateResourceProtocolsUdp `pulumi:"udp"` +} + +// TwingateResourceProtocolsInput is an input type that accepts TwingateResourceProtocolsArgs and TwingateResourceProtocolsOutput values. +// You can construct a concrete instance of `TwingateResourceProtocolsInput` via: +// +// TwingateResourceProtocolsArgs{...} +type TwingateResourceProtocolsInput interface { + pulumi.Input + + ToTwingateResourceProtocolsOutput() TwingateResourceProtocolsOutput + ToTwingateResourceProtocolsOutputWithContext(context.Context) TwingateResourceProtocolsOutput +} + +type TwingateResourceProtocolsArgs struct { + // Whether to allow ICMP (ping) traffic + AllowIcmp pulumi.BoolPtrInput `pulumi:"allowIcmp"` + Tcp TwingateResourceProtocolsTcpInput `pulumi:"tcp"` + Udp TwingateResourceProtocolsUdpInput `pulumi:"udp"` +} + +func (TwingateResourceProtocolsArgs) ElementType() reflect.Type { + return reflect.TypeOf((*TwingateResourceProtocols)(nil)).Elem() +} + +func (i TwingateResourceProtocolsArgs) ToTwingateResourceProtocolsOutput() TwingateResourceProtocolsOutput { + return i.ToTwingateResourceProtocolsOutputWithContext(context.Background()) +} + +func (i TwingateResourceProtocolsArgs) ToTwingateResourceProtocolsOutputWithContext(ctx context.Context) TwingateResourceProtocolsOutput { + return pulumi.ToOutputWithContext(ctx, i).(TwingateResourceProtocolsOutput) +} + +func (i TwingateResourceProtocolsArgs) ToTwingateResourceProtocolsPtrOutput() TwingateResourceProtocolsPtrOutput { + return i.ToTwingateResourceProtocolsPtrOutputWithContext(context.Background()) +} + +func (i TwingateResourceProtocolsArgs) ToTwingateResourceProtocolsPtrOutputWithContext(ctx context.Context) TwingateResourceProtocolsPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(TwingateResourceProtocolsOutput).ToTwingateResourceProtocolsPtrOutputWithContext(ctx) +} + +// TwingateResourceProtocolsPtrInput is an input type that accepts TwingateResourceProtocolsArgs, TwingateResourceProtocolsPtr and TwingateResourceProtocolsPtrOutput values. +// You can construct a concrete instance of `TwingateResourceProtocolsPtrInput` via: +// +// TwingateResourceProtocolsArgs{...} +// +// or: +// +// nil +type TwingateResourceProtocolsPtrInput interface { + pulumi.Input + + ToTwingateResourceProtocolsPtrOutput() TwingateResourceProtocolsPtrOutput + ToTwingateResourceProtocolsPtrOutputWithContext(context.Context) TwingateResourceProtocolsPtrOutput +} + +type twingateResourceProtocolsPtrType TwingateResourceProtocolsArgs + +func TwingateResourceProtocolsPtr(v *TwingateResourceProtocolsArgs) TwingateResourceProtocolsPtrInput { + return (*twingateResourceProtocolsPtrType)(v) +} + +func (*twingateResourceProtocolsPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**TwingateResourceProtocols)(nil)).Elem() +} + +func (i *twingateResourceProtocolsPtrType) ToTwingateResourceProtocolsPtrOutput() TwingateResourceProtocolsPtrOutput { + return i.ToTwingateResourceProtocolsPtrOutputWithContext(context.Background()) +} + +func (i *twingateResourceProtocolsPtrType) ToTwingateResourceProtocolsPtrOutputWithContext(ctx context.Context) TwingateResourceProtocolsPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(TwingateResourceProtocolsPtrOutput) +} + +type TwingateResourceProtocolsOutput struct{ *pulumi.OutputState } + +func (TwingateResourceProtocolsOutput) ElementType() reflect.Type { + return reflect.TypeOf((*TwingateResourceProtocols)(nil)).Elem() +} + +func (o TwingateResourceProtocolsOutput) ToTwingateResourceProtocolsOutput() TwingateResourceProtocolsOutput { + return o +} + +func (o TwingateResourceProtocolsOutput) ToTwingateResourceProtocolsOutputWithContext(ctx context.Context) TwingateResourceProtocolsOutput { + return o +} + +func (o TwingateResourceProtocolsOutput) ToTwingateResourceProtocolsPtrOutput() TwingateResourceProtocolsPtrOutput { + return o.ToTwingateResourceProtocolsPtrOutputWithContext(context.Background()) +} + +func (o TwingateResourceProtocolsOutput) ToTwingateResourceProtocolsPtrOutputWithContext(ctx context.Context) TwingateResourceProtocolsPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v TwingateResourceProtocols) *TwingateResourceProtocols { + return &v + }).(TwingateResourceProtocolsPtrOutput) +} + +// Whether to allow ICMP (ping) traffic +func (o TwingateResourceProtocolsOutput) AllowIcmp() pulumi.BoolPtrOutput { + return o.ApplyT(func(v TwingateResourceProtocols) *bool { return v.AllowIcmp }).(pulumi.BoolPtrOutput) +} + +func (o TwingateResourceProtocolsOutput) Tcp() TwingateResourceProtocolsTcpOutput { + return o.ApplyT(func(v TwingateResourceProtocols) TwingateResourceProtocolsTcp { return v.Tcp }).(TwingateResourceProtocolsTcpOutput) +} + +func (o TwingateResourceProtocolsOutput) Udp() TwingateResourceProtocolsUdpOutput { + return o.ApplyT(func(v TwingateResourceProtocols) TwingateResourceProtocolsUdp { return v.Udp }).(TwingateResourceProtocolsUdpOutput) +} + +type TwingateResourceProtocolsPtrOutput struct{ *pulumi.OutputState } + +func (TwingateResourceProtocolsPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**TwingateResourceProtocols)(nil)).Elem() +} + +func (o TwingateResourceProtocolsPtrOutput) ToTwingateResourceProtocolsPtrOutput() TwingateResourceProtocolsPtrOutput { + return o +} + +func (o TwingateResourceProtocolsPtrOutput) ToTwingateResourceProtocolsPtrOutputWithContext(ctx context.Context) TwingateResourceProtocolsPtrOutput { + return o +} + +func (o TwingateResourceProtocolsPtrOutput) Elem() TwingateResourceProtocolsOutput { + return o.ApplyT(func(v *TwingateResourceProtocols) TwingateResourceProtocols { + if v != nil { + return *v + } + var ret TwingateResourceProtocols + return ret + }).(TwingateResourceProtocolsOutput) +} + +// Whether to allow ICMP (ping) traffic +func (o TwingateResourceProtocolsPtrOutput) AllowIcmp() pulumi.BoolPtrOutput { + return o.ApplyT(func(v *TwingateResourceProtocols) *bool { + if v == nil { + return nil + } + return v.AllowIcmp + }).(pulumi.BoolPtrOutput) +} + +func (o TwingateResourceProtocolsPtrOutput) Tcp() TwingateResourceProtocolsTcpPtrOutput { + return o.ApplyT(func(v *TwingateResourceProtocols) *TwingateResourceProtocolsTcp { + if v == nil { + return nil + } + return &v.Tcp + }).(TwingateResourceProtocolsTcpPtrOutput) +} + +func (o TwingateResourceProtocolsPtrOutput) Udp() TwingateResourceProtocolsUdpPtrOutput { + return o.ApplyT(func(v *TwingateResourceProtocols) *TwingateResourceProtocolsUdp { + if v == nil { + return nil + } + return &v.Udp + }).(TwingateResourceProtocolsUdpPtrOutput) +} + +type TwingateResourceProtocolsTcp struct { + // Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + Policy string `pulumi:"policy"` + // List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + Ports []string `pulumi:"ports"` +} + +// TwingateResourceProtocolsTcpInput is an input type that accepts TwingateResourceProtocolsTcpArgs and TwingateResourceProtocolsTcpOutput values. +// You can construct a concrete instance of `TwingateResourceProtocolsTcpInput` via: +// +// TwingateResourceProtocolsTcpArgs{...} +type TwingateResourceProtocolsTcpInput interface { + pulumi.Input + + ToTwingateResourceProtocolsTcpOutput() TwingateResourceProtocolsTcpOutput + ToTwingateResourceProtocolsTcpOutputWithContext(context.Context) TwingateResourceProtocolsTcpOutput +} + +type TwingateResourceProtocolsTcpArgs struct { + // Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + Policy pulumi.StringInput `pulumi:"policy"` + // List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + Ports pulumi.StringArrayInput `pulumi:"ports"` +} + +func (TwingateResourceProtocolsTcpArgs) ElementType() reflect.Type { + return reflect.TypeOf((*TwingateResourceProtocolsTcp)(nil)).Elem() +} + +func (i TwingateResourceProtocolsTcpArgs) ToTwingateResourceProtocolsTcpOutput() TwingateResourceProtocolsTcpOutput { + return i.ToTwingateResourceProtocolsTcpOutputWithContext(context.Background()) +} + +func (i TwingateResourceProtocolsTcpArgs) ToTwingateResourceProtocolsTcpOutputWithContext(ctx context.Context) TwingateResourceProtocolsTcpOutput { + return pulumi.ToOutputWithContext(ctx, i).(TwingateResourceProtocolsTcpOutput) +} + +func (i TwingateResourceProtocolsTcpArgs) ToTwingateResourceProtocolsTcpPtrOutput() TwingateResourceProtocolsTcpPtrOutput { + return i.ToTwingateResourceProtocolsTcpPtrOutputWithContext(context.Background()) +} + +func (i TwingateResourceProtocolsTcpArgs) ToTwingateResourceProtocolsTcpPtrOutputWithContext(ctx context.Context) TwingateResourceProtocolsTcpPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(TwingateResourceProtocolsTcpOutput).ToTwingateResourceProtocolsTcpPtrOutputWithContext(ctx) +} + +// TwingateResourceProtocolsTcpPtrInput is an input type that accepts TwingateResourceProtocolsTcpArgs, TwingateResourceProtocolsTcpPtr and TwingateResourceProtocolsTcpPtrOutput values. +// You can construct a concrete instance of `TwingateResourceProtocolsTcpPtrInput` via: +// +// TwingateResourceProtocolsTcpArgs{...} +// +// or: +// +// nil +type TwingateResourceProtocolsTcpPtrInput interface { + pulumi.Input + + ToTwingateResourceProtocolsTcpPtrOutput() TwingateResourceProtocolsTcpPtrOutput + ToTwingateResourceProtocolsTcpPtrOutputWithContext(context.Context) TwingateResourceProtocolsTcpPtrOutput +} + +type twingateResourceProtocolsTcpPtrType TwingateResourceProtocolsTcpArgs + +func TwingateResourceProtocolsTcpPtr(v *TwingateResourceProtocolsTcpArgs) TwingateResourceProtocolsTcpPtrInput { + return (*twingateResourceProtocolsTcpPtrType)(v) +} + +func (*twingateResourceProtocolsTcpPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**TwingateResourceProtocolsTcp)(nil)).Elem() +} + +func (i *twingateResourceProtocolsTcpPtrType) ToTwingateResourceProtocolsTcpPtrOutput() TwingateResourceProtocolsTcpPtrOutput { + return i.ToTwingateResourceProtocolsTcpPtrOutputWithContext(context.Background()) +} + +func (i *twingateResourceProtocolsTcpPtrType) ToTwingateResourceProtocolsTcpPtrOutputWithContext(ctx context.Context) TwingateResourceProtocolsTcpPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(TwingateResourceProtocolsTcpPtrOutput) +} + +type TwingateResourceProtocolsTcpOutput struct{ *pulumi.OutputState } + +func (TwingateResourceProtocolsTcpOutput) ElementType() reflect.Type { + return reflect.TypeOf((*TwingateResourceProtocolsTcp)(nil)).Elem() +} + +func (o TwingateResourceProtocolsTcpOutput) ToTwingateResourceProtocolsTcpOutput() TwingateResourceProtocolsTcpOutput { + return o +} + +func (o TwingateResourceProtocolsTcpOutput) ToTwingateResourceProtocolsTcpOutputWithContext(ctx context.Context) TwingateResourceProtocolsTcpOutput { + return o +} + +func (o TwingateResourceProtocolsTcpOutput) ToTwingateResourceProtocolsTcpPtrOutput() TwingateResourceProtocolsTcpPtrOutput { + return o.ToTwingateResourceProtocolsTcpPtrOutputWithContext(context.Background()) +} + +func (o TwingateResourceProtocolsTcpOutput) ToTwingateResourceProtocolsTcpPtrOutputWithContext(ctx context.Context) TwingateResourceProtocolsTcpPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v TwingateResourceProtocolsTcp) *TwingateResourceProtocolsTcp { + return &v + }).(TwingateResourceProtocolsTcpPtrOutput) +} + +// Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` +func (o TwingateResourceProtocolsTcpOutput) Policy() pulumi.StringOutput { + return o.ApplyT(func(v TwingateResourceProtocolsTcp) string { return v.Policy }).(pulumi.StringOutput) +} + +// List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port +func (o TwingateResourceProtocolsTcpOutput) Ports() pulumi.StringArrayOutput { + return o.ApplyT(func(v TwingateResourceProtocolsTcp) []string { return v.Ports }).(pulumi.StringArrayOutput) +} + +type TwingateResourceProtocolsTcpPtrOutput struct{ *pulumi.OutputState } + +func (TwingateResourceProtocolsTcpPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**TwingateResourceProtocolsTcp)(nil)).Elem() +} + +func (o TwingateResourceProtocolsTcpPtrOutput) ToTwingateResourceProtocolsTcpPtrOutput() TwingateResourceProtocolsTcpPtrOutput { + return o +} + +func (o TwingateResourceProtocolsTcpPtrOutput) ToTwingateResourceProtocolsTcpPtrOutputWithContext(ctx context.Context) TwingateResourceProtocolsTcpPtrOutput { + return o +} + +func (o TwingateResourceProtocolsTcpPtrOutput) Elem() TwingateResourceProtocolsTcpOutput { + return o.ApplyT(func(v *TwingateResourceProtocolsTcp) TwingateResourceProtocolsTcp { + if v != nil { + return *v + } + var ret TwingateResourceProtocolsTcp + return ret + }).(TwingateResourceProtocolsTcpOutput) +} + +// Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` +func (o TwingateResourceProtocolsTcpPtrOutput) Policy() pulumi.StringPtrOutput { + return o.ApplyT(func(v *TwingateResourceProtocolsTcp) *string { + if v == nil { + return nil + } + return &v.Policy + }).(pulumi.StringPtrOutput) +} + +// List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port +func (o TwingateResourceProtocolsTcpPtrOutput) Ports() pulumi.StringArrayOutput { + return o.ApplyT(func(v *TwingateResourceProtocolsTcp) []string { + if v == nil { + return nil + } + return v.Ports + }).(pulumi.StringArrayOutput) +} + +type TwingateResourceProtocolsUdp struct { + // Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + Policy string `pulumi:"policy"` + // List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + Ports []string `pulumi:"ports"` +} + +// TwingateResourceProtocolsUdpInput is an input type that accepts TwingateResourceProtocolsUdpArgs and TwingateResourceProtocolsUdpOutput values. +// You can construct a concrete instance of `TwingateResourceProtocolsUdpInput` via: +// +// TwingateResourceProtocolsUdpArgs{...} +type TwingateResourceProtocolsUdpInput interface { + pulumi.Input + + ToTwingateResourceProtocolsUdpOutput() TwingateResourceProtocolsUdpOutput + ToTwingateResourceProtocolsUdpOutputWithContext(context.Context) TwingateResourceProtocolsUdpOutput +} + +type TwingateResourceProtocolsUdpArgs struct { + // Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + Policy pulumi.StringInput `pulumi:"policy"` + // List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + Ports pulumi.StringArrayInput `pulumi:"ports"` +} + +func (TwingateResourceProtocolsUdpArgs) ElementType() reflect.Type { + return reflect.TypeOf((*TwingateResourceProtocolsUdp)(nil)).Elem() +} + +func (i TwingateResourceProtocolsUdpArgs) ToTwingateResourceProtocolsUdpOutput() TwingateResourceProtocolsUdpOutput { + return i.ToTwingateResourceProtocolsUdpOutputWithContext(context.Background()) +} + +func (i TwingateResourceProtocolsUdpArgs) ToTwingateResourceProtocolsUdpOutputWithContext(ctx context.Context) TwingateResourceProtocolsUdpOutput { + return pulumi.ToOutputWithContext(ctx, i).(TwingateResourceProtocolsUdpOutput) +} + +func (i TwingateResourceProtocolsUdpArgs) ToTwingateResourceProtocolsUdpPtrOutput() TwingateResourceProtocolsUdpPtrOutput { + return i.ToTwingateResourceProtocolsUdpPtrOutputWithContext(context.Background()) +} + +func (i TwingateResourceProtocolsUdpArgs) ToTwingateResourceProtocolsUdpPtrOutputWithContext(ctx context.Context) TwingateResourceProtocolsUdpPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(TwingateResourceProtocolsUdpOutput).ToTwingateResourceProtocolsUdpPtrOutputWithContext(ctx) +} + +// TwingateResourceProtocolsUdpPtrInput is an input type that accepts TwingateResourceProtocolsUdpArgs, TwingateResourceProtocolsUdpPtr and TwingateResourceProtocolsUdpPtrOutput values. +// You can construct a concrete instance of `TwingateResourceProtocolsUdpPtrInput` via: +// +// TwingateResourceProtocolsUdpArgs{...} +// +// or: +// +// nil +type TwingateResourceProtocolsUdpPtrInput interface { + pulumi.Input + + ToTwingateResourceProtocolsUdpPtrOutput() TwingateResourceProtocolsUdpPtrOutput + ToTwingateResourceProtocolsUdpPtrOutputWithContext(context.Context) TwingateResourceProtocolsUdpPtrOutput +} + +type twingateResourceProtocolsUdpPtrType TwingateResourceProtocolsUdpArgs + +func TwingateResourceProtocolsUdpPtr(v *TwingateResourceProtocolsUdpArgs) TwingateResourceProtocolsUdpPtrInput { + return (*twingateResourceProtocolsUdpPtrType)(v) +} + +func (*twingateResourceProtocolsUdpPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**TwingateResourceProtocolsUdp)(nil)).Elem() +} + +func (i *twingateResourceProtocolsUdpPtrType) ToTwingateResourceProtocolsUdpPtrOutput() TwingateResourceProtocolsUdpPtrOutput { + return i.ToTwingateResourceProtocolsUdpPtrOutputWithContext(context.Background()) +} + +func (i *twingateResourceProtocolsUdpPtrType) ToTwingateResourceProtocolsUdpPtrOutputWithContext(ctx context.Context) TwingateResourceProtocolsUdpPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(TwingateResourceProtocolsUdpPtrOutput) +} + +type TwingateResourceProtocolsUdpOutput struct{ *pulumi.OutputState } + +func (TwingateResourceProtocolsUdpOutput) ElementType() reflect.Type { + return reflect.TypeOf((*TwingateResourceProtocolsUdp)(nil)).Elem() +} + +func (o TwingateResourceProtocolsUdpOutput) ToTwingateResourceProtocolsUdpOutput() TwingateResourceProtocolsUdpOutput { + return o +} + +func (o TwingateResourceProtocolsUdpOutput) ToTwingateResourceProtocolsUdpOutputWithContext(ctx context.Context) TwingateResourceProtocolsUdpOutput { + return o +} + +func (o TwingateResourceProtocolsUdpOutput) ToTwingateResourceProtocolsUdpPtrOutput() TwingateResourceProtocolsUdpPtrOutput { + return o.ToTwingateResourceProtocolsUdpPtrOutputWithContext(context.Background()) +} + +func (o TwingateResourceProtocolsUdpOutput) ToTwingateResourceProtocolsUdpPtrOutputWithContext(ctx context.Context) TwingateResourceProtocolsUdpPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v TwingateResourceProtocolsUdp) *TwingateResourceProtocolsUdp { + return &v + }).(TwingateResourceProtocolsUdpPtrOutput) +} + +// Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` +func (o TwingateResourceProtocolsUdpOutput) Policy() pulumi.StringOutput { + return o.ApplyT(func(v TwingateResourceProtocolsUdp) string { return v.Policy }).(pulumi.StringOutput) +} + +// List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port +func (o TwingateResourceProtocolsUdpOutput) Ports() pulumi.StringArrayOutput { + return o.ApplyT(func(v TwingateResourceProtocolsUdp) []string { return v.Ports }).(pulumi.StringArrayOutput) +} + +type TwingateResourceProtocolsUdpPtrOutput struct{ *pulumi.OutputState } + +func (TwingateResourceProtocolsUdpPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**TwingateResourceProtocolsUdp)(nil)).Elem() +} + +func (o TwingateResourceProtocolsUdpPtrOutput) ToTwingateResourceProtocolsUdpPtrOutput() TwingateResourceProtocolsUdpPtrOutput { + return o +} + +func (o TwingateResourceProtocolsUdpPtrOutput) ToTwingateResourceProtocolsUdpPtrOutputWithContext(ctx context.Context) TwingateResourceProtocolsUdpPtrOutput { + return o +} + +func (o TwingateResourceProtocolsUdpPtrOutput) Elem() TwingateResourceProtocolsUdpOutput { + return o.ApplyT(func(v *TwingateResourceProtocolsUdp) TwingateResourceProtocolsUdp { + if v != nil { + return *v + } + var ret TwingateResourceProtocolsUdp + return ret + }).(TwingateResourceProtocolsUdpOutput) +} + +// Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` +func (o TwingateResourceProtocolsUdpPtrOutput) Policy() pulumi.StringPtrOutput { + return o.ApplyT(func(v *TwingateResourceProtocolsUdp) *string { + if v == nil { + return nil + } + return &v.Policy + }).(pulumi.StringPtrOutput) +} + +// List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port +func (o TwingateResourceProtocolsUdpPtrOutput) Ports() pulumi.StringArrayOutput { + return o.ApplyT(func(v *TwingateResourceProtocolsUdp) []string { + if v == nil { + return nil + } + return v.Ports + }).(pulumi.StringArrayOutput) +} + +type GetTwingateConnectorsConnector struct { + // The ID of the Connector. + Id string `pulumi:"id"` + // The Name of the Connector. + Name string `pulumi:"name"` + // The ID of the Remote Network attached to the Connector. + RemoteNetworkId string `pulumi:"remoteNetworkId"` + // Determines whether status notifications are enabled for the Connector. + StatusUpdatesEnabled bool `pulumi:"statusUpdatesEnabled"` +} + +// GetTwingateConnectorsConnectorInput is an input type that accepts GetTwingateConnectorsConnectorArgs and GetTwingateConnectorsConnectorOutput values. +// You can construct a concrete instance of `GetTwingateConnectorsConnectorInput` via: +// +// GetTwingateConnectorsConnectorArgs{...} +type GetTwingateConnectorsConnectorInput interface { + pulumi.Input + + ToGetTwingateConnectorsConnectorOutput() GetTwingateConnectorsConnectorOutput + ToGetTwingateConnectorsConnectorOutputWithContext(context.Context) GetTwingateConnectorsConnectorOutput +} + +type GetTwingateConnectorsConnectorArgs struct { + // The ID of the Connector. + Id pulumi.StringInput `pulumi:"id"` + // The Name of the Connector. + Name pulumi.StringInput `pulumi:"name"` + // The ID of the Remote Network attached to the Connector. + RemoteNetworkId pulumi.StringInput `pulumi:"remoteNetworkId"` + // Determines whether status notifications are enabled for the Connector. + StatusUpdatesEnabled pulumi.BoolInput `pulumi:"statusUpdatesEnabled"` +} + +func (GetTwingateConnectorsConnectorArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetTwingateConnectorsConnector)(nil)).Elem() +} + +func (i GetTwingateConnectorsConnectorArgs) ToGetTwingateConnectorsConnectorOutput() GetTwingateConnectorsConnectorOutput { + return i.ToGetTwingateConnectorsConnectorOutputWithContext(context.Background()) +} + +func (i GetTwingateConnectorsConnectorArgs) ToGetTwingateConnectorsConnectorOutputWithContext(ctx context.Context) GetTwingateConnectorsConnectorOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetTwingateConnectorsConnectorOutput) +} + +// GetTwingateConnectorsConnectorArrayInput is an input type that accepts GetTwingateConnectorsConnectorArray and GetTwingateConnectorsConnectorArrayOutput values. +// You can construct a concrete instance of `GetTwingateConnectorsConnectorArrayInput` via: +// +// GetTwingateConnectorsConnectorArray{ GetTwingateConnectorsConnectorArgs{...} } +type GetTwingateConnectorsConnectorArrayInput interface { + pulumi.Input + + ToGetTwingateConnectorsConnectorArrayOutput() GetTwingateConnectorsConnectorArrayOutput + ToGetTwingateConnectorsConnectorArrayOutputWithContext(context.Context) GetTwingateConnectorsConnectorArrayOutput +} + +type GetTwingateConnectorsConnectorArray []GetTwingateConnectorsConnectorInput + +func (GetTwingateConnectorsConnectorArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetTwingateConnectorsConnector)(nil)).Elem() +} + +func (i GetTwingateConnectorsConnectorArray) ToGetTwingateConnectorsConnectorArrayOutput() GetTwingateConnectorsConnectorArrayOutput { + return i.ToGetTwingateConnectorsConnectorArrayOutputWithContext(context.Background()) +} + +func (i GetTwingateConnectorsConnectorArray) ToGetTwingateConnectorsConnectorArrayOutputWithContext(ctx context.Context) GetTwingateConnectorsConnectorArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetTwingateConnectorsConnectorArrayOutput) +} + +type GetTwingateConnectorsConnectorOutput struct{ *pulumi.OutputState } + +func (GetTwingateConnectorsConnectorOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetTwingateConnectorsConnector)(nil)).Elem() +} + +func (o GetTwingateConnectorsConnectorOutput) ToGetTwingateConnectorsConnectorOutput() GetTwingateConnectorsConnectorOutput { + return o +} + +func (o GetTwingateConnectorsConnectorOutput) ToGetTwingateConnectorsConnectorOutputWithContext(ctx context.Context) GetTwingateConnectorsConnectorOutput { + return o +} + +// The ID of the Connector. +func (o GetTwingateConnectorsConnectorOutput) Id() pulumi.StringOutput { + return o.ApplyT(func(v GetTwingateConnectorsConnector) string { return v.Id }).(pulumi.StringOutput) +} + +// The Name of the Connector. +func (o GetTwingateConnectorsConnectorOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v GetTwingateConnectorsConnector) string { return v.Name }).(pulumi.StringOutput) +} + +// The ID of the Remote Network attached to the Connector. +func (o GetTwingateConnectorsConnectorOutput) RemoteNetworkId() pulumi.StringOutput { + return o.ApplyT(func(v GetTwingateConnectorsConnector) string { return v.RemoteNetworkId }).(pulumi.StringOutput) +} + +// Determines whether status notifications are enabled for the Connector. +func (o GetTwingateConnectorsConnectorOutput) StatusUpdatesEnabled() pulumi.BoolOutput { + return o.ApplyT(func(v GetTwingateConnectorsConnector) bool { return v.StatusUpdatesEnabled }).(pulumi.BoolOutput) +} + +type GetTwingateConnectorsConnectorArrayOutput struct{ *pulumi.OutputState } + +func (GetTwingateConnectorsConnectorArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetTwingateConnectorsConnector)(nil)).Elem() +} + +func (o GetTwingateConnectorsConnectorArrayOutput) ToGetTwingateConnectorsConnectorArrayOutput() GetTwingateConnectorsConnectorArrayOutput { + return o +} + +func (o GetTwingateConnectorsConnectorArrayOutput) ToGetTwingateConnectorsConnectorArrayOutputWithContext(ctx context.Context) GetTwingateConnectorsConnectorArrayOutput { + return o +} + +func (o GetTwingateConnectorsConnectorArrayOutput) Index(i pulumi.IntInput) GetTwingateConnectorsConnectorOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetTwingateConnectorsConnector { + return vs[0].([]GetTwingateConnectorsConnector)[vs[1].(int)] + }).(GetTwingateConnectorsConnectorOutput) +} + +type GetTwingateGroupsGroup struct { + // The ID of the Group + Id string `pulumi:"id"` + // Indicates if the Group is active + IsActive bool `pulumi:"isActive"` + // The name of the Group + Name string `pulumi:"name"` + // The Security Policy assigned to the Group. + SecurityPolicyId string `pulumi:"securityPolicyId"` + // The type of the Group + Type string `pulumi:"type"` +} + +// GetTwingateGroupsGroupInput is an input type that accepts GetTwingateGroupsGroupArgs and GetTwingateGroupsGroupOutput values. +// You can construct a concrete instance of `GetTwingateGroupsGroupInput` via: +// +// GetTwingateGroupsGroupArgs{...} +type GetTwingateGroupsGroupInput interface { + pulumi.Input + + ToGetTwingateGroupsGroupOutput() GetTwingateGroupsGroupOutput + ToGetTwingateGroupsGroupOutputWithContext(context.Context) GetTwingateGroupsGroupOutput +} + +type GetTwingateGroupsGroupArgs struct { + // The ID of the Group + Id pulumi.StringInput `pulumi:"id"` + // Indicates if the Group is active + IsActive pulumi.BoolInput `pulumi:"isActive"` + // The name of the Group + Name pulumi.StringInput `pulumi:"name"` + // The Security Policy assigned to the Group. + SecurityPolicyId pulumi.StringInput `pulumi:"securityPolicyId"` + // The type of the Group + Type pulumi.StringInput `pulumi:"type"` +} + +func (GetTwingateGroupsGroupArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetTwingateGroupsGroup)(nil)).Elem() +} + +func (i GetTwingateGroupsGroupArgs) ToGetTwingateGroupsGroupOutput() GetTwingateGroupsGroupOutput { + return i.ToGetTwingateGroupsGroupOutputWithContext(context.Background()) +} + +func (i GetTwingateGroupsGroupArgs) ToGetTwingateGroupsGroupOutputWithContext(ctx context.Context) GetTwingateGroupsGroupOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetTwingateGroupsGroupOutput) +} + +// GetTwingateGroupsGroupArrayInput is an input type that accepts GetTwingateGroupsGroupArray and GetTwingateGroupsGroupArrayOutput values. +// You can construct a concrete instance of `GetTwingateGroupsGroupArrayInput` via: +// +// GetTwingateGroupsGroupArray{ GetTwingateGroupsGroupArgs{...} } +type GetTwingateGroupsGroupArrayInput interface { + pulumi.Input + + ToGetTwingateGroupsGroupArrayOutput() GetTwingateGroupsGroupArrayOutput + ToGetTwingateGroupsGroupArrayOutputWithContext(context.Context) GetTwingateGroupsGroupArrayOutput +} + +type GetTwingateGroupsGroupArray []GetTwingateGroupsGroupInput + +func (GetTwingateGroupsGroupArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetTwingateGroupsGroup)(nil)).Elem() +} + +func (i GetTwingateGroupsGroupArray) ToGetTwingateGroupsGroupArrayOutput() GetTwingateGroupsGroupArrayOutput { + return i.ToGetTwingateGroupsGroupArrayOutputWithContext(context.Background()) +} + +func (i GetTwingateGroupsGroupArray) ToGetTwingateGroupsGroupArrayOutputWithContext(ctx context.Context) GetTwingateGroupsGroupArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetTwingateGroupsGroupArrayOutput) +} + +type GetTwingateGroupsGroupOutput struct{ *pulumi.OutputState } + +func (GetTwingateGroupsGroupOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetTwingateGroupsGroup)(nil)).Elem() +} + +func (o GetTwingateGroupsGroupOutput) ToGetTwingateGroupsGroupOutput() GetTwingateGroupsGroupOutput { + return o +} + +func (o GetTwingateGroupsGroupOutput) ToGetTwingateGroupsGroupOutputWithContext(ctx context.Context) GetTwingateGroupsGroupOutput { + return o +} + +// The ID of the Group +func (o GetTwingateGroupsGroupOutput) Id() pulumi.StringOutput { + return o.ApplyT(func(v GetTwingateGroupsGroup) string { return v.Id }).(pulumi.StringOutput) +} + +// Indicates if the Group is active +func (o GetTwingateGroupsGroupOutput) IsActive() pulumi.BoolOutput { + return o.ApplyT(func(v GetTwingateGroupsGroup) bool { return v.IsActive }).(pulumi.BoolOutput) +} + +// The name of the Group +func (o GetTwingateGroupsGroupOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v GetTwingateGroupsGroup) string { return v.Name }).(pulumi.StringOutput) +} + +// The Security Policy assigned to the Group. +func (o GetTwingateGroupsGroupOutput) SecurityPolicyId() pulumi.StringOutput { + return o.ApplyT(func(v GetTwingateGroupsGroup) string { return v.SecurityPolicyId }).(pulumi.StringOutput) +} + +// The type of the Group +func (o GetTwingateGroupsGroupOutput) Type() pulumi.StringOutput { + return o.ApplyT(func(v GetTwingateGroupsGroup) string { return v.Type }).(pulumi.StringOutput) +} + +type GetTwingateGroupsGroupArrayOutput struct{ *pulumi.OutputState } + +func (GetTwingateGroupsGroupArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetTwingateGroupsGroup)(nil)).Elem() +} + +func (o GetTwingateGroupsGroupArrayOutput) ToGetTwingateGroupsGroupArrayOutput() GetTwingateGroupsGroupArrayOutput { + return o +} + +func (o GetTwingateGroupsGroupArrayOutput) ToGetTwingateGroupsGroupArrayOutputWithContext(ctx context.Context) GetTwingateGroupsGroupArrayOutput { + return o +} + +func (o GetTwingateGroupsGroupArrayOutput) Index(i pulumi.IntInput) GetTwingateGroupsGroupOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetTwingateGroupsGroup { + return vs[0].([]GetTwingateGroupsGroup)[vs[1].(int)] + }).(GetTwingateGroupsGroupOutput) +} + +type GetTwingateRemoteNetworksRemoteNetwork struct { + // The ID of the Remote Network + Id string `pulumi:"id"` + // The location of the Remote Network. Must be one of the following: AWS, AZURE, GOOGLE*CLOUD, ON*PREMISE, OTHER. + Location string `pulumi:"location"` + // The name of the Remote Network + Name string `pulumi:"name"` +} + +// GetTwingateRemoteNetworksRemoteNetworkInput is an input type that accepts GetTwingateRemoteNetworksRemoteNetworkArgs and GetTwingateRemoteNetworksRemoteNetworkOutput values. +// You can construct a concrete instance of `GetTwingateRemoteNetworksRemoteNetworkInput` via: +// +// GetTwingateRemoteNetworksRemoteNetworkArgs{...} +type GetTwingateRemoteNetworksRemoteNetworkInput interface { + pulumi.Input + + ToGetTwingateRemoteNetworksRemoteNetworkOutput() GetTwingateRemoteNetworksRemoteNetworkOutput + ToGetTwingateRemoteNetworksRemoteNetworkOutputWithContext(context.Context) GetTwingateRemoteNetworksRemoteNetworkOutput +} + +type GetTwingateRemoteNetworksRemoteNetworkArgs struct { + // The ID of the Remote Network + Id pulumi.StringInput `pulumi:"id"` + // The location of the Remote Network. Must be one of the following: AWS, AZURE, GOOGLE*CLOUD, ON*PREMISE, OTHER. + Location pulumi.StringInput `pulumi:"location"` + // The name of the Remote Network + Name pulumi.StringInput `pulumi:"name"` +} + +func (GetTwingateRemoteNetworksRemoteNetworkArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetTwingateRemoteNetworksRemoteNetwork)(nil)).Elem() +} + +func (i GetTwingateRemoteNetworksRemoteNetworkArgs) ToGetTwingateRemoteNetworksRemoteNetworkOutput() GetTwingateRemoteNetworksRemoteNetworkOutput { + return i.ToGetTwingateRemoteNetworksRemoteNetworkOutputWithContext(context.Background()) +} + +func (i GetTwingateRemoteNetworksRemoteNetworkArgs) ToGetTwingateRemoteNetworksRemoteNetworkOutputWithContext(ctx context.Context) GetTwingateRemoteNetworksRemoteNetworkOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetTwingateRemoteNetworksRemoteNetworkOutput) +} + +// GetTwingateRemoteNetworksRemoteNetworkArrayInput is an input type that accepts GetTwingateRemoteNetworksRemoteNetworkArray and GetTwingateRemoteNetworksRemoteNetworkArrayOutput values. +// You can construct a concrete instance of `GetTwingateRemoteNetworksRemoteNetworkArrayInput` via: +// +// GetTwingateRemoteNetworksRemoteNetworkArray{ GetTwingateRemoteNetworksRemoteNetworkArgs{...} } +type GetTwingateRemoteNetworksRemoteNetworkArrayInput interface { + pulumi.Input + + ToGetTwingateRemoteNetworksRemoteNetworkArrayOutput() GetTwingateRemoteNetworksRemoteNetworkArrayOutput + ToGetTwingateRemoteNetworksRemoteNetworkArrayOutputWithContext(context.Context) GetTwingateRemoteNetworksRemoteNetworkArrayOutput +} + +type GetTwingateRemoteNetworksRemoteNetworkArray []GetTwingateRemoteNetworksRemoteNetworkInput + +func (GetTwingateRemoteNetworksRemoteNetworkArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetTwingateRemoteNetworksRemoteNetwork)(nil)).Elem() +} + +func (i GetTwingateRemoteNetworksRemoteNetworkArray) ToGetTwingateRemoteNetworksRemoteNetworkArrayOutput() GetTwingateRemoteNetworksRemoteNetworkArrayOutput { + return i.ToGetTwingateRemoteNetworksRemoteNetworkArrayOutputWithContext(context.Background()) +} + +func (i GetTwingateRemoteNetworksRemoteNetworkArray) ToGetTwingateRemoteNetworksRemoteNetworkArrayOutputWithContext(ctx context.Context) GetTwingateRemoteNetworksRemoteNetworkArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetTwingateRemoteNetworksRemoteNetworkArrayOutput) +} + +type GetTwingateRemoteNetworksRemoteNetworkOutput struct{ *pulumi.OutputState } + +func (GetTwingateRemoteNetworksRemoteNetworkOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetTwingateRemoteNetworksRemoteNetwork)(nil)).Elem() +} + +func (o GetTwingateRemoteNetworksRemoteNetworkOutput) ToGetTwingateRemoteNetworksRemoteNetworkOutput() GetTwingateRemoteNetworksRemoteNetworkOutput { + return o +} + +func (o GetTwingateRemoteNetworksRemoteNetworkOutput) ToGetTwingateRemoteNetworksRemoteNetworkOutputWithContext(ctx context.Context) GetTwingateRemoteNetworksRemoteNetworkOutput { + return o +} + +// The ID of the Remote Network +func (o GetTwingateRemoteNetworksRemoteNetworkOutput) Id() pulumi.StringOutput { + return o.ApplyT(func(v GetTwingateRemoteNetworksRemoteNetwork) string { return v.Id }).(pulumi.StringOutput) +} + +// The location of the Remote Network. Must be one of the following: AWS, AZURE, GOOGLE*CLOUD, ON*PREMISE, OTHER. +func (o GetTwingateRemoteNetworksRemoteNetworkOutput) Location() pulumi.StringOutput { + return o.ApplyT(func(v GetTwingateRemoteNetworksRemoteNetwork) string { return v.Location }).(pulumi.StringOutput) +} + +// The name of the Remote Network +func (o GetTwingateRemoteNetworksRemoteNetworkOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v GetTwingateRemoteNetworksRemoteNetwork) string { return v.Name }).(pulumi.StringOutput) +} + +type GetTwingateRemoteNetworksRemoteNetworkArrayOutput struct{ *pulumi.OutputState } + +func (GetTwingateRemoteNetworksRemoteNetworkArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetTwingateRemoteNetworksRemoteNetwork)(nil)).Elem() +} + +func (o GetTwingateRemoteNetworksRemoteNetworkArrayOutput) ToGetTwingateRemoteNetworksRemoteNetworkArrayOutput() GetTwingateRemoteNetworksRemoteNetworkArrayOutput { + return o +} + +func (o GetTwingateRemoteNetworksRemoteNetworkArrayOutput) ToGetTwingateRemoteNetworksRemoteNetworkArrayOutputWithContext(ctx context.Context) GetTwingateRemoteNetworksRemoteNetworkArrayOutput { + return o +} + +func (o GetTwingateRemoteNetworksRemoteNetworkArrayOutput) Index(i pulumi.IntInput) GetTwingateRemoteNetworksRemoteNetworkOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetTwingateRemoteNetworksRemoteNetwork { + return vs[0].([]GetTwingateRemoteNetworksRemoteNetwork)[vs[1].(int)] + }).(GetTwingateRemoteNetworksRemoteNetworkOutput) +} + +type GetTwingateResourceProtocol struct { + // Whether to allow ICMP (ping) traffic + AllowIcmp bool `pulumi:"allowIcmp"` + Tcps []GetTwingateResourceProtocolTcp `pulumi:"tcps"` + Udps []GetTwingateResourceProtocolUdp `pulumi:"udps"` +} + +// GetTwingateResourceProtocolInput is an input type that accepts GetTwingateResourceProtocolArgs and GetTwingateResourceProtocolOutput values. +// You can construct a concrete instance of `GetTwingateResourceProtocolInput` via: +// +// GetTwingateResourceProtocolArgs{...} +type GetTwingateResourceProtocolInput interface { + pulumi.Input + + ToGetTwingateResourceProtocolOutput() GetTwingateResourceProtocolOutput + ToGetTwingateResourceProtocolOutputWithContext(context.Context) GetTwingateResourceProtocolOutput +} + +type GetTwingateResourceProtocolArgs struct { + // Whether to allow ICMP (ping) traffic + AllowIcmp pulumi.BoolInput `pulumi:"allowIcmp"` + Tcps GetTwingateResourceProtocolTcpArrayInput `pulumi:"tcps"` + Udps GetTwingateResourceProtocolUdpArrayInput `pulumi:"udps"` +} + +func (GetTwingateResourceProtocolArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetTwingateResourceProtocol)(nil)).Elem() +} + +func (i GetTwingateResourceProtocolArgs) ToGetTwingateResourceProtocolOutput() GetTwingateResourceProtocolOutput { + return i.ToGetTwingateResourceProtocolOutputWithContext(context.Background()) +} + +func (i GetTwingateResourceProtocolArgs) ToGetTwingateResourceProtocolOutputWithContext(ctx context.Context) GetTwingateResourceProtocolOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetTwingateResourceProtocolOutput) +} + +// GetTwingateResourceProtocolArrayInput is an input type that accepts GetTwingateResourceProtocolArray and GetTwingateResourceProtocolArrayOutput values. +// You can construct a concrete instance of `GetTwingateResourceProtocolArrayInput` via: +// +// GetTwingateResourceProtocolArray{ GetTwingateResourceProtocolArgs{...} } +type GetTwingateResourceProtocolArrayInput interface { + pulumi.Input + + ToGetTwingateResourceProtocolArrayOutput() GetTwingateResourceProtocolArrayOutput + ToGetTwingateResourceProtocolArrayOutputWithContext(context.Context) GetTwingateResourceProtocolArrayOutput +} + +type GetTwingateResourceProtocolArray []GetTwingateResourceProtocolInput + +func (GetTwingateResourceProtocolArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetTwingateResourceProtocol)(nil)).Elem() +} + +func (i GetTwingateResourceProtocolArray) ToGetTwingateResourceProtocolArrayOutput() GetTwingateResourceProtocolArrayOutput { + return i.ToGetTwingateResourceProtocolArrayOutputWithContext(context.Background()) +} + +func (i GetTwingateResourceProtocolArray) ToGetTwingateResourceProtocolArrayOutputWithContext(ctx context.Context) GetTwingateResourceProtocolArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetTwingateResourceProtocolArrayOutput) +} + +type GetTwingateResourceProtocolOutput struct{ *pulumi.OutputState } + +func (GetTwingateResourceProtocolOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetTwingateResourceProtocol)(nil)).Elem() +} + +func (o GetTwingateResourceProtocolOutput) ToGetTwingateResourceProtocolOutput() GetTwingateResourceProtocolOutput { + return o +} + +func (o GetTwingateResourceProtocolOutput) ToGetTwingateResourceProtocolOutputWithContext(ctx context.Context) GetTwingateResourceProtocolOutput { + return o +} + +// Whether to allow ICMP (ping) traffic +func (o GetTwingateResourceProtocolOutput) AllowIcmp() pulumi.BoolOutput { + return o.ApplyT(func(v GetTwingateResourceProtocol) bool { return v.AllowIcmp }).(pulumi.BoolOutput) +} + +func (o GetTwingateResourceProtocolOutput) Tcps() GetTwingateResourceProtocolTcpArrayOutput { + return o.ApplyT(func(v GetTwingateResourceProtocol) []GetTwingateResourceProtocolTcp { return v.Tcps }).(GetTwingateResourceProtocolTcpArrayOutput) +} + +func (o GetTwingateResourceProtocolOutput) Udps() GetTwingateResourceProtocolUdpArrayOutput { + return o.ApplyT(func(v GetTwingateResourceProtocol) []GetTwingateResourceProtocolUdp { return v.Udps }).(GetTwingateResourceProtocolUdpArrayOutput) +} + +type GetTwingateResourceProtocolArrayOutput struct{ *pulumi.OutputState } + +func (GetTwingateResourceProtocolArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetTwingateResourceProtocol)(nil)).Elem() +} + +func (o GetTwingateResourceProtocolArrayOutput) ToGetTwingateResourceProtocolArrayOutput() GetTwingateResourceProtocolArrayOutput { + return o +} + +func (o GetTwingateResourceProtocolArrayOutput) ToGetTwingateResourceProtocolArrayOutputWithContext(ctx context.Context) GetTwingateResourceProtocolArrayOutput { + return o +} + +func (o GetTwingateResourceProtocolArrayOutput) Index(i pulumi.IntInput) GetTwingateResourceProtocolOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetTwingateResourceProtocol { + return vs[0].([]GetTwingateResourceProtocol)[vs[1].(int)] + }).(GetTwingateResourceProtocolOutput) +} + +type GetTwingateResourceProtocolTcp struct { + // Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + Policy string `pulumi:"policy"` + // List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + Ports []string `pulumi:"ports"` +} + +// GetTwingateResourceProtocolTcpInput is an input type that accepts GetTwingateResourceProtocolTcpArgs and GetTwingateResourceProtocolTcpOutput values. +// You can construct a concrete instance of `GetTwingateResourceProtocolTcpInput` via: +// +// GetTwingateResourceProtocolTcpArgs{...} +type GetTwingateResourceProtocolTcpInput interface { + pulumi.Input + + ToGetTwingateResourceProtocolTcpOutput() GetTwingateResourceProtocolTcpOutput + ToGetTwingateResourceProtocolTcpOutputWithContext(context.Context) GetTwingateResourceProtocolTcpOutput +} + +type GetTwingateResourceProtocolTcpArgs struct { + // Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + Policy pulumi.StringInput `pulumi:"policy"` + // List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + Ports pulumi.StringArrayInput `pulumi:"ports"` +} + +func (GetTwingateResourceProtocolTcpArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetTwingateResourceProtocolTcp)(nil)).Elem() +} + +func (i GetTwingateResourceProtocolTcpArgs) ToGetTwingateResourceProtocolTcpOutput() GetTwingateResourceProtocolTcpOutput { + return i.ToGetTwingateResourceProtocolTcpOutputWithContext(context.Background()) +} + +func (i GetTwingateResourceProtocolTcpArgs) ToGetTwingateResourceProtocolTcpOutputWithContext(ctx context.Context) GetTwingateResourceProtocolTcpOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetTwingateResourceProtocolTcpOutput) +} + +// GetTwingateResourceProtocolTcpArrayInput is an input type that accepts GetTwingateResourceProtocolTcpArray and GetTwingateResourceProtocolTcpArrayOutput values. +// You can construct a concrete instance of `GetTwingateResourceProtocolTcpArrayInput` via: +// +// GetTwingateResourceProtocolTcpArray{ GetTwingateResourceProtocolTcpArgs{...} } +type GetTwingateResourceProtocolTcpArrayInput interface { + pulumi.Input + + ToGetTwingateResourceProtocolTcpArrayOutput() GetTwingateResourceProtocolTcpArrayOutput + ToGetTwingateResourceProtocolTcpArrayOutputWithContext(context.Context) GetTwingateResourceProtocolTcpArrayOutput +} + +type GetTwingateResourceProtocolTcpArray []GetTwingateResourceProtocolTcpInput + +func (GetTwingateResourceProtocolTcpArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetTwingateResourceProtocolTcp)(nil)).Elem() +} + +func (i GetTwingateResourceProtocolTcpArray) ToGetTwingateResourceProtocolTcpArrayOutput() GetTwingateResourceProtocolTcpArrayOutput { + return i.ToGetTwingateResourceProtocolTcpArrayOutputWithContext(context.Background()) +} + +func (i GetTwingateResourceProtocolTcpArray) ToGetTwingateResourceProtocolTcpArrayOutputWithContext(ctx context.Context) GetTwingateResourceProtocolTcpArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetTwingateResourceProtocolTcpArrayOutput) +} + +type GetTwingateResourceProtocolTcpOutput struct{ *pulumi.OutputState } + +func (GetTwingateResourceProtocolTcpOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetTwingateResourceProtocolTcp)(nil)).Elem() +} + +func (o GetTwingateResourceProtocolTcpOutput) ToGetTwingateResourceProtocolTcpOutput() GetTwingateResourceProtocolTcpOutput { + return o +} + +func (o GetTwingateResourceProtocolTcpOutput) ToGetTwingateResourceProtocolTcpOutputWithContext(ctx context.Context) GetTwingateResourceProtocolTcpOutput { + return o +} + +// Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` +func (o GetTwingateResourceProtocolTcpOutput) Policy() pulumi.StringOutput { + return o.ApplyT(func(v GetTwingateResourceProtocolTcp) string { return v.Policy }).(pulumi.StringOutput) +} + +// List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port +func (o GetTwingateResourceProtocolTcpOutput) Ports() pulumi.StringArrayOutput { + return o.ApplyT(func(v GetTwingateResourceProtocolTcp) []string { return v.Ports }).(pulumi.StringArrayOutput) +} + +type GetTwingateResourceProtocolTcpArrayOutput struct{ *pulumi.OutputState } + +func (GetTwingateResourceProtocolTcpArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetTwingateResourceProtocolTcp)(nil)).Elem() +} + +func (o GetTwingateResourceProtocolTcpArrayOutput) ToGetTwingateResourceProtocolTcpArrayOutput() GetTwingateResourceProtocolTcpArrayOutput { + return o +} + +func (o GetTwingateResourceProtocolTcpArrayOutput) ToGetTwingateResourceProtocolTcpArrayOutputWithContext(ctx context.Context) GetTwingateResourceProtocolTcpArrayOutput { + return o +} + +func (o GetTwingateResourceProtocolTcpArrayOutput) Index(i pulumi.IntInput) GetTwingateResourceProtocolTcpOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetTwingateResourceProtocolTcp { + return vs[0].([]GetTwingateResourceProtocolTcp)[vs[1].(int)] + }).(GetTwingateResourceProtocolTcpOutput) +} + +type GetTwingateResourceProtocolUdp struct { + // Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + Policy string `pulumi:"policy"` + // List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + Ports []string `pulumi:"ports"` +} + +// GetTwingateResourceProtocolUdpInput is an input type that accepts GetTwingateResourceProtocolUdpArgs and GetTwingateResourceProtocolUdpOutput values. +// You can construct a concrete instance of `GetTwingateResourceProtocolUdpInput` via: +// +// GetTwingateResourceProtocolUdpArgs{...} +type GetTwingateResourceProtocolUdpInput interface { + pulumi.Input + + ToGetTwingateResourceProtocolUdpOutput() GetTwingateResourceProtocolUdpOutput + ToGetTwingateResourceProtocolUdpOutputWithContext(context.Context) GetTwingateResourceProtocolUdpOutput +} + +type GetTwingateResourceProtocolUdpArgs struct { + // Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + Policy pulumi.StringInput `pulumi:"policy"` + // List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + Ports pulumi.StringArrayInput `pulumi:"ports"` +} + +func (GetTwingateResourceProtocolUdpArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetTwingateResourceProtocolUdp)(nil)).Elem() +} + +func (i GetTwingateResourceProtocolUdpArgs) ToGetTwingateResourceProtocolUdpOutput() GetTwingateResourceProtocolUdpOutput { + return i.ToGetTwingateResourceProtocolUdpOutputWithContext(context.Background()) +} + +func (i GetTwingateResourceProtocolUdpArgs) ToGetTwingateResourceProtocolUdpOutputWithContext(ctx context.Context) GetTwingateResourceProtocolUdpOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetTwingateResourceProtocolUdpOutput) +} + +// GetTwingateResourceProtocolUdpArrayInput is an input type that accepts GetTwingateResourceProtocolUdpArray and GetTwingateResourceProtocolUdpArrayOutput values. +// You can construct a concrete instance of `GetTwingateResourceProtocolUdpArrayInput` via: +// +// GetTwingateResourceProtocolUdpArray{ GetTwingateResourceProtocolUdpArgs{...} } +type GetTwingateResourceProtocolUdpArrayInput interface { + pulumi.Input + + ToGetTwingateResourceProtocolUdpArrayOutput() GetTwingateResourceProtocolUdpArrayOutput + ToGetTwingateResourceProtocolUdpArrayOutputWithContext(context.Context) GetTwingateResourceProtocolUdpArrayOutput +} + +type GetTwingateResourceProtocolUdpArray []GetTwingateResourceProtocolUdpInput + +func (GetTwingateResourceProtocolUdpArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetTwingateResourceProtocolUdp)(nil)).Elem() +} + +func (i GetTwingateResourceProtocolUdpArray) ToGetTwingateResourceProtocolUdpArrayOutput() GetTwingateResourceProtocolUdpArrayOutput { + return i.ToGetTwingateResourceProtocolUdpArrayOutputWithContext(context.Background()) +} + +func (i GetTwingateResourceProtocolUdpArray) ToGetTwingateResourceProtocolUdpArrayOutputWithContext(ctx context.Context) GetTwingateResourceProtocolUdpArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetTwingateResourceProtocolUdpArrayOutput) +} + +type GetTwingateResourceProtocolUdpOutput struct{ *pulumi.OutputState } + +func (GetTwingateResourceProtocolUdpOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetTwingateResourceProtocolUdp)(nil)).Elem() +} + +func (o GetTwingateResourceProtocolUdpOutput) ToGetTwingateResourceProtocolUdpOutput() GetTwingateResourceProtocolUdpOutput { + return o +} + +func (o GetTwingateResourceProtocolUdpOutput) ToGetTwingateResourceProtocolUdpOutputWithContext(ctx context.Context) GetTwingateResourceProtocolUdpOutput { + return o +} + +// Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` +func (o GetTwingateResourceProtocolUdpOutput) Policy() pulumi.StringOutput { + return o.ApplyT(func(v GetTwingateResourceProtocolUdp) string { return v.Policy }).(pulumi.StringOutput) +} + +// List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port +func (o GetTwingateResourceProtocolUdpOutput) Ports() pulumi.StringArrayOutput { + return o.ApplyT(func(v GetTwingateResourceProtocolUdp) []string { return v.Ports }).(pulumi.StringArrayOutput) +} + +type GetTwingateResourceProtocolUdpArrayOutput struct{ *pulumi.OutputState } + +func (GetTwingateResourceProtocolUdpArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetTwingateResourceProtocolUdp)(nil)).Elem() +} + +func (o GetTwingateResourceProtocolUdpArrayOutput) ToGetTwingateResourceProtocolUdpArrayOutput() GetTwingateResourceProtocolUdpArrayOutput { + return o +} + +func (o GetTwingateResourceProtocolUdpArrayOutput) ToGetTwingateResourceProtocolUdpArrayOutputWithContext(ctx context.Context) GetTwingateResourceProtocolUdpArrayOutput { + return o +} + +func (o GetTwingateResourceProtocolUdpArrayOutput) Index(i pulumi.IntInput) GetTwingateResourceProtocolUdpOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetTwingateResourceProtocolUdp { + return vs[0].([]GetTwingateResourceProtocolUdp)[vs[1].(int)] + }).(GetTwingateResourceProtocolUdpOutput) +} + +type GetTwingateResourcesResource struct { + // The Resource's IP/CIDR or FQDN/DNS zone + Address string `pulumi:"address"` + // The id of the Resource + Id string `pulumi:"id"` + // The name of the Resource + Name string `pulumi:"name"` + // Restrict access to certain protocols and ports. By default or when this argument is not defined, there is no restriction, and all protocols and ports are allowed. + Protocols []GetTwingateResourcesResourceProtocol `pulumi:"protocols"` + // Remote Network ID where the Resource lives + RemoteNetworkId string `pulumi:"remoteNetworkId"` +} + +// GetTwingateResourcesResourceInput is an input type that accepts GetTwingateResourcesResourceArgs and GetTwingateResourcesResourceOutput values. +// You can construct a concrete instance of `GetTwingateResourcesResourceInput` via: +// +// GetTwingateResourcesResourceArgs{...} +type GetTwingateResourcesResourceInput interface { + pulumi.Input + + ToGetTwingateResourcesResourceOutput() GetTwingateResourcesResourceOutput + ToGetTwingateResourcesResourceOutputWithContext(context.Context) GetTwingateResourcesResourceOutput +} + +type GetTwingateResourcesResourceArgs struct { + // The Resource's IP/CIDR or FQDN/DNS zone + Address pulumi.StringInput `pulumi:"address"` + // The id of the Resource + Id pulumi.StringInput `pulumi:"id"` + // The name of the Resource + Name pulumi.StringInput `pulumi:"name"` + // Restrict access to certain protocols and ports. By default or when this argument is not defined, there is no restriction, and all protocols and ports are allowed. + Protocols GetTwingateResourcesResourceProtocolArrayInput `pulumi:"protocols"` + // Remote Network ID where the Resource lives + RemoteNetworkId pulumi.StringInput `pulumi:"remoteNetworkId"` +} + +func (GetTwingateResourcesResourceArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetTwingateResourcesResource)(nil)).Elem() +} + +func (i GetTwingateResourcesResourceArgs) ToGetTwingateResourcesResourceOutput() GetTwingateResourcesResourceOutput { + return i.ToGetTwingateResourcesResourceOutputWithContext(context.Background()) +} + +func (i GetTwingateResourcesResourceArgs) ToGetTwingateResourcesResourceOutputWithContext(ctx context.Context) GetTwingateResourcesResourceOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetTwingateResourcesResourceOutput) +} + +// GetTwingateResourcesResourceArrayInput is an input type that accepts GetTwingateResourcesResourceArray and GetTwingateResourcesResourceArrayOutput values. +// You can construct a concrete instance of `GetTwingateResourcesResourceArrayInput` via: +// +// GetTwingateResourcesResourceArray{ GetTwingateResourcesResourceArgs{...} } +type GetTwingateResourcesResourceArrayInput interface { + pulumi.Input + + ToGetTwingateResourcesResourceArrayOutput() GetTwingateResourcesResourceArrayOutput + ToGetTwingateResourcesResourceArrayOutputWithContext(context.Context) GetTwingateResourcesResourceArrayOutput +} + +type GetTwingateResourcesResourceArray []GetTwingateResourcesResourceInput + +func (GetTwingateResourcesResourceArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetTwingateResourcesResource)(nil)).Elem() +} + +func (i GetTwingateResourcesResourceArray) ToGetTwingateResourcesResourceArrayOutput() GetTwingateResourcesResourceArrayOutput { + return i.ToGetTwingateResourcesResourceArrayOutputWithContext(context.Background()) +} + +func (i GetTwingateResourcesResourceArray) ToGetTwingateResourcesResourceArrayOutputWithContext(ctx context.Context) GetTwingateResourcesResourceArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetTwingateResourcesResourceArrayOutput) +} + +type GetTwingateResourcesResourceOutput struct{ *pulumi.OutputState } + +func (GetTwingateResourcesResourceOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetTwingateResourcesResource)(nil)).Elem() +} + +func (o GetTwingateResourcesResourceOutput) ToGetTwingateResourcesResourceOutput() GetTwingateResourcesResourceOutput { + return o +} + +func (o GetTwingateResourcesResourceOutput) ToGetTwingateResourcesResourceOutputWithContext(ctx context.Context) GetTwingateResourcesResourceOutput { + return o +} + +// The Resource's IP/CIDR or FQDN/DNS zone +func (o GetTwingateResourcesResourceOutput) Address() pulumi.StringOutput { + return o.ApplyT(func(v GetTwingateResourcesResource) string { return v.Address }).(pulumi.StringOutput) +} + +// The id of the Resource +func (o GetTwingateResourcesResourceOutput) Id() pulumi.StringOutput { + return o.ApplyT(func(v GetTwingateResourcesResource) string { return v.Id }).(pulumi.StringOutput) +} + +// The name of the Resource +func (o GetTwingateResourcesResourceOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v GetTwingateResourcesResource) string { return v.Name }).(pulumi.StringOutput) +} + +// Restrict access to certain protocols and ports. By default or when this argument is not defined, there is no restriction, and all protocols and ports are allowed. +func (o GetTwingateResourcesResourceOutput) Protocols() GetTwingateResourcesResourceProtocolArrayOutput { + return o.ApplyT(func(v GetTwingateResourcesResource) []GetTwingateResourcesResourceProtocol { return v.Protocols }).(GetTwingateResourcesResourceProtocolArrayOutput) +} + +// Remote Network ID where the Resource lives +func (o GetTwingateResourcesResourceOutput) RemoteNetworkId() pulumi.StringOutput { + return o.ApplyT(func(v GetTwingateResourcesResource) string { return v.RemoteNetworkId }).(pulumi.StringOutput) +} + +type GetTwingateResourcesResourceArrayOutput struct{ *pulumi.OutputState } + +func (GetTwingateResourcesResourceArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetTwingateResourcesResource)(nil)).Elem() +} + +func (o GetTwingateResourcesResourceArrayOutput) ToGetTwingateResourcesResourceArrayOutput() GetTwingateResourcesResourceArrayOutput { + return o +} + +func (o GetTwingateResourcesResourceArrayOutput) ToGetTwingateResourcesResourceArrayOutputWithContext(ctx context.Context) GetTwingateResourcesResourceArrayOutput { + return o +} + +func (o GetTwingateResourcesResourceArrayOutput) Index(i pulumi.IntInput) GetTwingateResourcesResourceOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetTwingateResourcesResource { + return vs[0].([]GetTwingateResourcesResource)[vs[1].(int)] + }).(GetTwingateResourcesResourceOutput) +} + +type GetTwingateResourcesResourceProtocol struct { + // Whether to allow ICMP (ping) traffic + AllowIcmp bool `pulumi:"allowIcmp"` + Tcps []GetTwingateResourcesResourceProtocolTcp `pulumi:"tcps"` + Udps []GetTwingateResourcesResourceProtocolUdp `pulumi:"udps"` +} + +// GetTwingateResourcesResourceProtocolInput is an input type that accepts GetTwingateResourcesResourceProtocolArgs and GetTwingateResourcesResourceProtocolOutput values. +// You can construct a concrete instance of `GetTwingateResourcesResourceProtocolInput` via: +// +// GetTwingateResourcesResourceProtocolArgs{...} +type GetTwingateResourcesResourceProtocolInput interface { + pulumi.Input + + ToGetTwingateResourcesResourceProtocolOutput() GetTwingateResourcesResourceProtocolOutput + ToGetTwingateResourcesResourceProtocolOutputWithContext(context.Context) GetTwingateResourcesResourceProtocolOutput +} + +type GetTwingateResourcesResourceProtocolArgs struct { + // Whether to allow ICMP (ping) traffic + AllowIcmp pulumi.BoolInput `pulumi:"allowIcmp"` + Tcps GetTwingateResourcesResourceProtocolTcpArrayInput `pulumi:"tcps"` + Udps GetTwingateResourcesResourceProtocolUdpArrayInput `pulumi:"udps"` +} + +func (GetTwingateResourcesResourceProtocolArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetTwingateResourcesResourceProtocol)(nil)).Elem() +} + +func (i GetTwingateResourcesResourceProtocolArgs) ToGetTwingateResourcesResourceProtocolOutput() GetTwingateResourcesResourceProtocolOutput { + return i.ToGetTwingateResourcesResourceProtocolOutputWithContext(context.Background()) +} + +func (i GetTwingateResourcesResourceProtocolArgs) ToGetTwingateResourcesResourceProtocolOutputWithContext(ctx context.Context) GetTwingateResourcesResourceProtocolOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetTwingateResourcesResourceProtocolOutput) +} + +// GetTwingateResourcesResourceProtocolArrayInput is an input type that accepts GetTwingateResourcesResourceProtocolArray and GetTwingateResourcesResourceProtocolArrayOutput values. +// You can construct a concrete instance of `GetTwingateResourcesResourceProtocolArrayInput` via: +// +// GetTwingateResourcesResourceProtocolArray{ GetTwingateResourcesResourceProtocolArgs{...} } +type GetTwingateResourcesResourceProtocolArrayInput interface { + pulumi.Input + + ToGetTwingateResourcesResourceProtocolArrayOutput() GetTwingateResourcesResourceProtocolArrayOutput + ToGetTwingateResourcesResourceProtocolArrayOutputWithContext(context.Context) GetTwingateResourcesResourceProtocolArrayOutput +} + +type GetTwingateResourcesResourceProtocolArray []GetTwingateResourcesResourceProtocolInput + +func (GetTwingateResourcesResourceProtocolArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetTwingateResourcesResourceProtocol)(nil)).Elem() +} + +func (i GetTwingateResourcesResourceProtocolArray) ToGetTwingateResourcesResourceProtocolArrayOutput() GetTwingateResourcesResourceProtocolArrayOutput { + return i.ToGetTwingateResourcesResourceProtocolArrayOutputWithContext(context.Background()) +} + +func (i GetTwingateResourcesResourceProtocolArray) ToGetTwingateResourcesResourceProtocolArrayOutputWithContext(ctx context.Context) GetTwingateResourcesResourceProtocolArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetTwingateResourcesResourceProtocolArrayOutput) +} + +type GetTwingateResourcesResourceProtocolOutput struct{ *pulumi.OutputState } + +func (GetTwingateResourcesResourceProtocolOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetTwingateResourcesResourceProtocol)(nil)).Elem() +} + +func (o GetTwingateResourcesResourceProtocolOutput) ToGetTwingateResourcesResourceProtocolOutput() GetTwingateResourcesResourceProtocolOutput { + return o +} + +func (o GetTwingateResourcesResourceProtocolOutput) ToGetTwingateResourcesResourceProtocolOutputWithContext(ctx context.Context) GetTwingateResourcesResourceProtocolOutput { + return o +} + +// Whether to allow ICMP (ping) traffic +func (o GetTwingateResourcesResourceProtocolOutput) AllowIcmp() pulumi.BoolOutput { + return o.ApplyT(func(v GetTwingateResourcesResourceProtocol) bool { return v.AllowIcmp }).(pulumi.BoolOutput) +} + +func (o GetTwingateResourcesResourceProtocolOutput) Tcps() GetTwingateResourcesResourceProtocolTcpArrayOutput { + return o.ApplyT(func(v GetTwingateResourcesResourceProtocol) []GetTwingateResourcesResourceProtocolTcp { return v.Tcps }).(GetTwingateResourcesResourceProtocolTcpArrayOutput) +} + +func (o GetTwingateResourcesResourceProtocolOutput) Udps() GetTwingateResourcesResourceProtocolUdpArrayOutput { + return o.ApplyT(func(v GetTwingateResourcesResourceProtocol) []GetTwingateResourcesResourceProtocolUdp { return v.Udps }).(GetTwingateResourcesResourceProtocolUdpArrayOutput) +} + +type GetTwingateResourcesResourceProtocolArrayOutput struct{ *pulumi.OutputState } + +func (GetTwingateResourcesResourceProtocolArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetTwingateResourcesResourceProtocol)(nil)).Elem() +} + +func (o GetTwingateResourcesResourceProtocolArrayOutput) ToGetTwingateResourcesResourceProtocolArrayOutput() GetTwingateResourcesResourceProtocolArrayOutput { + return o +} + +func (o GetTwingateResourcesResourceProtocolArrayOutput) ToGetTwingateResourcesResourceProtocolArrayOutputWithContext(ctx context.Context) GetTwingateResourcesResourceProtocolArrayOutput { + return o +} + +func (o GetTwingateResourcesResourceProtocolArrayOutput) Index(i pulumi.IntInput) GetTwingateResourcesResourceProtocolOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetTwingateResourcesResourceProtocol { + return vs[0].([]GetTwingateResourcesResourceProtocol)[vs[1].(int)] + }).(GetTwingateResourcesResourceProtocolOutput) +} + +type GetTwingateResourcesResourceProtocolTcp struct { + // Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + Policy string `pulumi:"policy"` + // List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + Ports []string `pulumi:"ports"` +} + +// GetTwingateResourcesResourceProtocolTcpInput is an input type that accepts GetTwingateResourcesResourceProtocolTcpArgs and GetTwingateResourcesResourceProtocolTcpOutput values. +// You can construct a concrete instance of `GetTwingateResourcesResourceProtocolTcpInput` via: +// +// GetTwingateResourcesResourceProtocolTcpArgs{...} +type GetTwingateResourcesResourceProtocolTcpInput interface { + pulumi.Input + + ToGetTwingateResourcesResourceProtocolTcpOutput() GetTwingateResourcesResourceProtocolTcpOutput + ToGetTwingateResourcesResourceProtocolTcpOutputWithContext(context.Context) GetTwingateResourcesResourceProtocolTcpOutput +} + +type GetTwingateResourcesResourceProtocolTcpArgs struct { + // Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + Policy pulumi.StringInput `pulumi:"policy"` + // List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + Ports pulumi.StringArrayInput `pulumi:"ports"` +} + +func (GetTwingateResourcesResourceProtocolTcpArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetTwingateResourcesResourceProtocolTcp)(nil)).Elem() +} + +func (i GetTwingateResourcesResourceProtocolTcpArgs) ToGetTwingateResourcesResourceProtocolTcpOutput() GetTwingateResourcesResourceProtocolTcpOutput { + return i.ToGetTwingateResourcesResourceProtocolTcpOutputWithContext(context.Background()) +} + +func (i GetTwingateResourcesResourceProtocolTcpArgs) ToGetTwingateResourcesResourceProtocolTcpOutputWithContext(ctx context.Context) GetTwingateResourcesResourceProtocolTcpOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetTwingateResourcesResourceProtocolTcpOutput) +} + +// GetTwingateResourcesResourceProtocolTcpArrayInput is an input type that accepts GetTwingateResourcesResourceProtocolTcpArray and GetTwingateResourcesResourceProtocolTcpArrayOutput values. +// You can construct a concrete instance of `GetTwingateResourcesResourceProtocolTcpArrayInput` via: +// +// GetTwingateResourcesResourceProtocolTcpArray{ GetTwingateResourcesResourceProtocolTcpArgs{...} } +type GetTwingateResourcesResourceProtocolTcpArrayInput interface { + pulumi.Input + + ToGetTwingateResourcesResourceProtocolTcpArrayOutput() GetTwingateResourcesResourceProtocolTcpArrayOutput + ToGetTwingateResourcesResourceProtocolTcpArrayOutputWithContext(context.Context) GetTwingateResourcesResourceProtocolTcpArrayOutput +} + +type GetTwingateResourcesResourceProtocolTcpArray []GetTwingateResourcesResourceProtocolTcpInput + +func (GetTwingateResourcesResourceProtocolTcpArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetTwingateResourcesResourceProtocolTcp)(nil)).Elem() +} + +func (i GetTwingateResourcesResourceProtocolTcpArray) ToGetTwingateResourcesResourceProtocolTcpArrayOutput() GetTwingateResourcesResourceProtocolTcpArrayOutput { + return i.ToGetTwingateResourcesResourceProtocolTcpArrayOutputWithContext(context.Background()) +} + +func (i GetTwingateResourcesResourceProtocolTcpArray) ToGetTwingateResourcesResourceProtocolTcpArrayOutputWithContext(ctx context.Context) GetTwingateResourcesResourceProtocolTcpArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetTwingateResourcesResourceProtocolTcpArrayOutput) +} + +type GetTwingateResourcesResourceProtocolTcpOutput struct{ *pulumi.OutputState } + +func (GetTwingateResourcesResourceProtocolTcpOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetTwingateResourcesResourceProtocolTcp)(nil)).Elem() +} + +func (o GetTwingateResourcesResourceProtocolTcpOutput) ToGetTwingateResourcesResourceProtocolTcpOutput() GetTwingateResourcesResourceProtocolTcpOutput { + return o +} + +func (o GetTwingateResourcesResourceProtocolTcpOutput) ToGetTwingateResourcesResourceProtocolTcpOutputWithContext(ctx context.Context) GetTwingateResourcesResourceProtocolTcpOutput { + return o +} + +// Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` +func (o GetTwingateResourcesResourceProtocolTcpOutput) Policy() pulumi.StringOutput { + return o.ApplyT(func(v GetTwingateResourcesResourceProtocolTcp) string { return v.Policy }).(pulumi.StringOutput) +} + +// List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port +func (o GetTwingateResourcesResourceProtocolTcpOutput) Ports() pulumi.StringArrayOutput { + return o.ApplyT(func(v GetTwingateResourcesResourceProtocolTcp) []string { return v.Ports }).(pulumi.StringArrayOutput) +} + +type GetTwingateResourcesResourceProtocolTcpArrayOutput struct{ *pulumi.OutputState } + +func (GetTwingateResourcesResourceProtocolTcpArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetTwingateResourcesResourceProtocolTcp)(nil)).Elem() +} + +func (o GetTwingateResourcesResourceProtocolTcpArrayOutput) ToGetTwingateResourcesResourceProtocolTcpArrayOutput() GetTwingateResourcesResourceProtocolTcpArrayOutput { + return o +} + +func (o GetTwingateResourcesResourceProtocolTcpArrayOutput) ToGetTwingateResourcesResourceProtocolTcpArrayOutputWithContext(ctx context.Context) GetTwingateResourcesResourceProtocolTcpArrayOutput { + return o +} + +func (o GetTwingateResourcesResourceProtocolTcpArrayOutput) Index(i pulumi.IntInput) GetTwingateResourcesResourceProtocolTcpOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetTwingateResourcesResourceProtocolTcp { + return vs[0].([]GetTwingateResourcesResourceProtocolTcp)[vs[1].(int)] + }).(GetTwingateResourcesResourceProtocolTcpOutput) +} + +type GetTwingateResourcesResourceProtocolUdp struct { + // Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + Policy string `pulumi:"policy"` + // List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + Ports []string `pulumi:"ports"` +} + +// GetTwingateResourcesResourceProtocolUdpInput is an input type that accepts GetTwingateResourcesResourceProtocolUdpArgs and GetTwingateResourcesResourceProtocolUdpOutput values. +// You can construct a concrete instance of `GetTwingateResourcesResourceProtocolUdpInput` via: +// +// GetTwingateResourcesResourceProtocolUdpArgs{...} +type GetTwingateResourcesResourceProtocolUdpInput interface { + pulumi.Input + + ToGetTwingateResourcesResourceProtocolUdpOutput() GetTwingateResourcesResourceProtocolUdpOutput + ToGetTwingateResourcesResourceProtocolUdpOutputWithContext(context.Context) GetTwingateResourcesResourceProtocolUdpOutput +} + +type GetTwingateResourcesResourceProtocolUdpArgs struct { + // Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + Policy pulumi.StringInput `pulumi:"policy"` + // List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + Ports pulumi.StringArrayInput `pulumi:"ports"` +} + +func (GetTwingateResourcesResourceProtocolUdpArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetTwingateResourcesResourceProtocolUdp)(nil)).Elem() +} + +func (i GetTwingateResourcesResourceProtocolUdpArgs) ToGetTwingateResourcesResourceProtocolUdpOutput() GetTwingateResourcesResourceProtocolUdpOutput { + return i.ToGetTwingateResourcesResourceProtocolUdpOutputWithContext(context.Background()) +} + +func (i GetTwingateResourcesResourceProtocolUdpArgs) ToGetTwingateResourcesResourceProtocolUdpOutputWithContext(ctx context.Context) GetTwingateResourcesResourceProtocolUdpOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetTwingateResourcesResourceProtocolUdpOutput) +} + +// GetTwingateResourcesResourceProtocolUdpArrayInput is an input type that accepts GetTwingateResourcesResourceProtocolUdpArray and GetTwingateResourcesResourceProtocolUdpArrayOutput values. +// You can construct a concrete instance of `GetTwingateResourcesResourceProtocolUdpArrayInput` via: +// +// GetTwingateResourcesResourceProtocolUdpArray{ GetTwingateResourcesResourceProtocolUdpArgs{...} } +type GetTwingateResourcesResourceProtocolUdpArrayInput interface { + pulumi.Input + + ToGetTwingateResourcesResourceProtocolUdpArrayOutput() GetTwingateResourcesResourceProtocolUdpArrayOutput + ToGetTwingateResourcesResourceProtocolUdpArrayOutputWithContext(context.Context) GetTwingateResourcesResourceProtocolUdpArrayOutput +} + +type GetTwingateResourcesResourceProtocolUdpArray []GetTwingateResourcesResourceProtocolUdpInput + +func (GetTwingateResourcesResourceProtocolUdpArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetTwingateResourcesResourceProtocolUdp)(nil)).Elem() +} + +func (i GetTwingateResourcesResourceProtocolUdpArray) ToGetTwingateResourcesResourceProtocolUdpArrayOutput() GetTwingateResourcesResourceProtocolUdpArrayOutput { + return i.ToGetTwingateResourcesResourceProtocolUdpArrayOutputWithContext(context.Background()) +} + +func (i GetTwingateResourcesResourceProtocolUdpArray) ToGetTwingateResourcesResourceProtocolUdpArrayOutputWithContext(ctx context.Context) GetTwingateResourcesResourceProtocolUdpArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetTwingateResourcesResourceProtocolUdpArrayOutput) +} + +type GetTwingateResourcesResourceProtocolUdpOutput struct{ *pulumi.OutputState } + +func (GetTwingateResourcesResourceProtocolUdpOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetTwingateResourcesResourceProtocolUdp)(nil)).Elem() +} + +func (o GetTwingateResourcesResourceProtocolUdpOutput) ToGetTwingateResourcesResourceProtocolUdpOutput() GetTwingateResourcesResourceProtocolUdpOutput { + return o +} + +func (o GetTwingateResourcesResourceProtocolUdpOutput) ToGetTwingateResourcesResourceProtocolUdpOutputWithContext(ctx context.Context) GetTwingateResourcesResourceProtocolUdpOutput { + return o +} + +// Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` +func (o GetTwingateResourcesResourceProtocolUdpOutput) Policy() pulumi.StringOutput { + return o.ApplyT(func(v GetTwingateResourcesResourceProtocolUdp) string { return v.Policy }).(pulumi.StringOutput) +} + +// List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port +func (o GetTwingateResourcesResourceProtocolUdpOutput) Ports() pulumi.StringArrayOutput { + return o.ApplyT(func(v GetTwingateResourcesResourceProtocolUdp) []string { return v.Ports }).(pulumi.StringArrayOutput) +} + +type GetTwingateResourcesResourceProtocolUdpArrayOutput struct{ *pulumi.OutputState } + +func (GetTwingateResourcesResourceProtocolUdpArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetTwingateResourcesResourceProtocolUdp)(nil)).Elem() +} + +func (o GetTwingateResourcesResourceProtocolUdpArrayOutput) ToGetTwingateResourcesResourceProtocolUdpArrayOutput() GetTwingateResourcesResourceProtocolUdpArrayOutput { + return o +} + +func (o GetTwingateResourcesResourceProtocolUdpArrayOutput) ToGetTwingateResourcesResourceProtocolUdpArrayOutputWithContext(ctx context.Context) GetTwingateResourcesResourceProtocolUdpArrayOutput { + return o +} + +func (o GetTwingateResourcesResourceProtocolUdpArrayOutput) Index(i pulumi.IntInput) GetTwingateResourcesResourceProtocolUdpOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetTwingateResourcesResourceProtocolUdp { + return vs[0].([]GetTwingateResourcesResourceProtocolUdp)[vs[1].(int)] + }).(GetTwingateResourcesResourceProtocolUdpOutput) +} + +type GetTwingateSecurityPoliciesSecurityPolicy struct { + // Return a matching Security Policy by its ID. The ID for the Security Policy can be obtained from the Admin API or the URL string in the Admin Console. + Id string `pulumi:"id"` + // Return a Security Policy that exactly matches this name. + Name string `pulumi:"name"` +} + +// GetTwingateSecurityPoliciesSecurityPolicyInput is an input type that accepts GetTwingateSecurityPoliciesSecurityPolicyArgs and GetTwingateSecurityPoliciesSecurityPolicyOutput values. +// You can construct a concrete instance of `GetTwingateSecurityPoliciesSecurityPolicyInput` via: +// +// GetTwingateSecurityPoliciesSecurityPolicyArgs{...} +type GetTwingateSecurityPoliciesSecurityPolicyInput interface { + pulumi.Input + + ToGetTwingateSecurityPoliciesSecurityPolicyOutput() GetTwingateSecurityPoliciesSecurityPolicyOutput + ToGetTwingateSecurityPoliciesSecurityPolicyOutputWithContext(context.Context) GetTwingateSecurityPoliciesSecurityPolicyOutput +} + +type GetTwingateSecurityPoliciesSecurityPolicyArgs struct { + // Return a matching Security Policy by its ID. The ID for the Security Policy can be obtained from the Admin API or the URL string in the Admin Console. + Id pulumi.StringInput `pulumi:"id"` + // Return a Security Policy that exactly matches this name. + Name pulumi.StringInput `pulumi:"name"` +} + +func (GetTwingateSecurityPoliciesSecurityPolicyArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetTwingateSecurityPoliciesSecurityPolicy)(nil)).Elem() +} + +func (i GetTwingateSecurityPoliciesSecurityPolicyArgs) ToGetTwingateSecurityPoliciesSecurityPolicyOutput() GetTwingateSecurityPoliciesSecurityPolicyOutput { + return i.ToGetTwingateSecurityPoliciesSecurityPolicyOutputWithContext(context.Background()) +} + +func (i GetTwingateSecurityPoliciesSecurityPolicyArgs) ToGetTwingateSecurityPoliciesSecurityPolicyOutputWithContext(ctx context.Context) GetTwingateSecurityPoliciesSecurityPolicyOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetTwingateSecurityPoliciesSecurityPolicyOutput) +} + +// GetTwingateSecurityPoliciesSecurityPolicyArrayInput is an input type that accepts GetTwingateSecurityPoliciesSecurityPolicyArray and GetTwingateSecurityPoliciesSecurityPolicyArrayOutput values. +// You can construct a concrete instance of `GetTwingateSecurityPoliciesSecurityPolicyArrayInput` via: +// +// GetTwingateSecurityPoliciesSecurityPolicyArray{ GetTwingateSecurityPoliciesSecurityPolicyArgs{...} } +type GetTwingateSecurityPoliciesSecurityPolicyArrayInput interface { + pulumi.Input + + ToGetTwingateSecurityPoliciesSecurityPolicyArrayOutput() GetTwingateSecurityPoliciesSecurityPolicyArrayOutput + ToGetTwingateSecurityPoliciesSecurityPolicyArrayOutputWithContext(context.Context) GetTwingateSecurityPoliciesSecurityPolicyArrayOutput +} + +type GetTwingateSecurityPoliciesSecurityPolicyArray []GetTwingateSecurityPoliciesSecurityPolicyInput + +func (GetTwingateSecurityPoliciesSecurityPolicyArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetTwingateSecurityPoliciesSecurityPolicy)(nil)).Elem() +} + +func (i GetTwingateSecurityPoliciesSecurityPolicyArray) ToGetTwingateSecurityPoliciesSecurityPolicyArrayOutput() GetTwingateSecurityPoliciesSecurityPolicyArrayOutput { + return i.ToGetTwingateSecurityPoliciesSecurityPolicyArrayOutputWithContext(context.Background()) +} + +func (i GetTwingateSecurityPoliciesSecurityPolicyArray) ToGetTwingateSecurityPoliciesSecurityPolicyArrayOutputWithContext(ctx context.Context) GetTwingateSecurityPoliciesSecurityPolicyArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetTwingateSecurityPoliciesSecurityPolicyArrayOutput) +} + +type GetTwingateSecurityPoliciesSecurityPolicyOutput struct{ *pulumi.OutputState } + +func (GetTwingateSecurityPoliciesSecurityPolicyOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetTwingateSecurityPoliciesSecurityPolicy)(nil)).Elem() +} + +func (o GetTwingateSecurityPoliciesSecurityPolicyOutput) ToGetTwingateSecurityPoliciesSecurityPolicyOutput() GetTwingateSecurityPoliciesSecurityPolicyOutput { + return o +} + +func (o GetTwingateSecurityPoliciesSecurityPolicyOutput) ToGetTwingateSecurityPoliciesSecurityPolicyOutputWithContext(ctx context.Context) GetTwingateSecurityPoliciesSecurityPolicyOutput { + return o +} + +// Return a matching Security Policy by its ID. The ID for the Security Policy can be obtained from the Admin API or the URL string in the Admin Console. +func (o GetTwingateSecurityPoliciesSecurityPolicyOutput) Id() pulumi.StringOutput { + return o.ApplyT(func(v GetTwingateSecurityPoliciesSecurityPolicy) string { return v.Id }).(pulumi.StringOutput) +} + +// Return a Security Policy that exactly matches this name. +func (o GetTwingateSecurityPoliciesSecurityPolicyOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v GetTwingateSecurityPoliciesSecurityPolicy) string { return v.Name }).(pulumi.StringOutput) +} + +type GetTwingateSecurityPoliciesSecurityPolicyArrayOutput struct{ *pulumi.OutputState } + +func (GetTwingateSecurityPoliciesSecurityPolicyArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetTwingateSecurityPoliciesSecurityPolicy)(nil)).Elem() +} + +func (o GetTwingateSecurityPoliciesSecurityPolicyArrayOutput) ToGetTwingateSecurityPoliciesSecurityPolicyArrayOutput() GetTwingateSecurityPoliciesSecurityPolicyArrayOutput { + return o +} + +func (o GetTwingateSecurityPoliciesSecurityPolicyArrayOutput) ToGetTwingateSecurityPoliciesSecurityPolicyArrayOutputWithContext(ctx context.Context) GetTwingateSecurityPoliciesSecurityPolicyArrayOutput { + return o +} + +func (o GetTwingateSecurityPoliciesSecurityPolicyArrayOutput) Index(i pulumi.IntInput) GetTwingateSecurityPoliciesSecurityPolicyOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetTwingateSecurityPoliciesSecurityPolicy { + return vs[0].([]GetTwingateSecurityPoliciesSecurityPolicy)[vs[1].(int)] + }).(GetTwingateSecurityPoliciesSecurityPolicyOutput) +} + +type GetTwingateServiceAccountsServiceAccount struct { + // ID of the Service Account resource + Id string `pulumi:"id"` + // List of twingate*service*account_key IDs that are assigned to the Service Account. + KeyIds []string `pulumi:"keyIds"` + // Name of the Service Account + Name string `pulumi:"name"` + // List of TwingateResource IDs that the Service Account is assigned to. + ResourceIds []string `pulumi:"resourceIds"` +} + +// GetTwingateServiceAccountsServiceAccountInput is an input type that accepts GetTwingateServiceAccountsServiceAccountArgs and GetTwingateServiceAccountsServiceAccountOutput values. +// You can construct a concrete instance of `GetTwingateServiceAccountsServiceAccountInput` via: +// +// GetTwingateServiceAccountsServiceAccountArgs{...} +type GetTwingateServiceAccountsServiceAccountInput interface { + pulumi.Input + + ToGetTwingateServiceAccountsServiceAccountOutput() GetTwingateServiceAccountsServiceAccountOutput + ToGetTwingateServiceAccountsServiceAccountOutputWithContext(context.Context) GetTwingateServiceAccountsServiceAccountOutput +} + +type GetTwingateServiceAccountsServiceAccountArgs struct { + // ID of the Service Account resource + Id pulumi.StringInput `pulumi:"id"` + // List of twingate*service*account_key IDs that are assigned to the Service Account. + KeyIds pulumi.StringArrayInput `pulumi:"keyIds"` + // Name of the Service Account + Name pulumi.StringInput `pulumi:"name"` + // List of TwingateResource IDs that the Service Account is assigned to. + ResourceIds pulumi.StringArrayInput `pulumi:"resourceIds"` +} + +func (GetTwingateServiceAccountsServiceAccountArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetTwingateServiceAccountsServiceAccount)(nil)).Elem() +} + +func (i GetTwingateServiceAccountsServiceAccountArgs) ToGetTwingateServiceAccountsServiceAccountOutput() GetTwingateServiceAccountsServiceAccountOutput { + return i.ToGetTwingateServiceAccountsServiceAccountOutputWithContext(context.Background()) +} + +func (i GetTwingateServiceAccountsServiceAccountArgs) ToGetTwingateServiceAccountsServiceAccountOutputWithContext(ctx context.Context) GetTwingateServiceAccountsServiceAccountOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetTwingateServiceAccountsServiceAccountOutput) +} + +// GetTwingateServiceAccountsServiceAccountArrayInput is an input type that accepts GetTwingateServiceAccountsServiceAccountArray and GetTwingateServiceAccountsServiceAccountArrayOutput values. +// You can construct a concrete instance of `GetTwingateServiceAccountsServiceAccountArrayInput` via: +// +// GetTwingateServiceAccountsServiceAccountArray{ GetTwingateServiceAccountsServiceAccountArgs{...} } +type GetTwingateServiceAccountsServiceAccountArrayInput interface { + pulumi.Input + + ToGetTwingateServiceAccountsServiceAccountArrayOutput() GetTwingateServiceAccountsServiceAccountArrayOutput + ToGetTwingateServiceAccountsServiceAccountArrayOutputWithContext(context.Context) GetTwingateServiceAccountsServiceAccountArrayOutput +} + +type GetTwingateServiceAccountsServiceAccountArray []GetTwingateServiceAccountsServiceAccountInput + +func (GetTwingateServiceAccountsServiceAccountArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetTwingateServiceAccountsServiceAccount)(nil)).Elem() +} + +func (i GetTwingateServiceAccountsServiceAccountArray) ToGetTwingateServiceAccountsServiceAccountArrayOutput() GetTwingateServiceAccountsServiceAccountArrayOutput { + return i.ToGetTwingateServiceAccountsServiceAccountArrayOutputWithContext(context.Background()) +} + +func (i GetTwingateServiceAccountsServiceAccountArray) ToGetTwingateServiceAccountsServiceAccountArrayOutputWithContext(ctx context.Context) GetTwingateServiceAccountsServiceAccountArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetTwingateServiceAccountsServiceAccountArrayOutput) +} + +type GetTwingateServiceAccountsServiceAccountOutput struct{ *pulumi.OutputState } + +func (GetTwingateServiceAccountsServiceAccountOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetTwingateServiceAccountsServiceAccount)(nil)).Elem() +} + +func (o GetTwingateServiceAccountsServiceAccountOutput) ToGetTwingateServiceAccountsServiceAccountOutput() GetTwingateServiceAccountsServiceAccountOutput { + return o +} + +func (o GetTwingateServiceAccountsServiceAccountOutput) ToGetTwingateServiceAccountsServiceAccountOutputWithContext(ctx context.Context) GetTwingateServiceAccountsServiceAccountOutput { + return o +} + +// ID of the Service Account resource +func (o GetTwingateServiceAccountsServiceAccountOutput) Id() pulumi.StringOutput { + return o.ApplyT(func(v GetTwingateServiceAccountsServiceAccount) string { return v.Id }).(pulumi.StringOutput) +} + +// List of twingate*service*account_key IDs that are assigned to the Service Account. +func (o GetTwingateServiceAccountsServiceAccountOutput) KeyIds() pulumi.StringArrayOutput { + return o.ApplyT(func(v GetTwingateServiceAccountsServiceAccount) []string { return v.KeyIds }).(pulumi.StringArrayOutput) +} + +// Name of the Service Account +func (o GetTwingateServiceAccountsServiceAccountOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v GetTwingateServiceAccountsServiceAccount) string { return v.Name }).(pulumi.StringOutput) +} + +// List of TwingateResource IDs that the Service Account is assigned to. +func (o GetTwingateServiceAccountsServiceAccountOutput) ResourceIds() pulumi.StringArrayOutput { + return o.ApplyT(func(v GetTwingateServiceAccountsServiceAccount) []string { return v.ResourceIds }).(pulumi.StringArrayOutput) +} + +type GetTwingateServiceAccountsServiceAccountArrayOutput struct{ *pulumi.OutputState } + +func (GetTwingateServiceAccountsServiceAccountArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetTwingateServiceAccountsServiceAccount)(nil)).Elem() +} + +func (o GetTwingateServiceAccountsServiceAccountArrayOutput) ToGetTwingateServiceAccountsServiceAccountArrayOutput() GetTwingateServiceAccountsServiceAccountArrayOutput { + return o +} + +func (o GetTwingateServiceAccountsServiceAccountArrayOutput) ToGetTwingateServiceAccountsServiceAccountArrayOutputWithContext(ctx context.Context) GetTwingateServiceAccountsServiceAccountArrayOutput { + return o +} + +func (o GetTwingateServiceAccountsServiceAccountArrayOutput) Index(i pulumi.IntInput) GetTwingateServiceAccountsServiceAccountOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetTwingateServiceAccountsServiceAccount { + return vs[0].([]GetTwingateServiceAccountsServiceAccount)[vs[1].(int)] + }).(GetTwingateServiceAccountsServiceAccountOutput) +} + +type GetTwingateUsersUser struct { + // The email address of the User + Email string `pulumi:"email"` + // The first name of the User + FirstName string `pulumi:"firstName"` + // The ID of the User + Id string `pulumi:"id"` + // Indicates whether the User is an admin + // + // Deprecated: This read-only Boolean value will be deprecated in a future release. You may use the `role` value instead. + IsAdmin bool `pulumi:"isAdmin"` + // The last name of the User + LastName string `pulumi:"lastName"` + // Indicates the User's role. Either ADMIN, DEVOPS, SUPPORT, or MEMBER. + Role string `pulumi:"role"` + // Indicates the User's type. Either MANUAL or SYNCED. + Type string `pulumi:"type"` +} + +// GetTwingateUsersUserInput is an input type that accepts GetTwingateUsersUserArgs and GetTwingateUsersUserOutput values. +// You can construct a concrete instance of `GetTwingateUsersUserInput` via: +// +// GetTwingateUsersUserArgs{...} +type GetTwingateUsersUserInput interface { + pulumi.Input + + ToGetTwingateUsersUserOutput() GetTwingateUsersUserOutput + ToGetTwingateUsersUserOutputWithContext(context.Context) GetTwingateUsersUserOutput +} + +type GetTwingateUsersUserArgs struct { + // The email address of the User + Email pulumi.StringInput `pulumi:"email"` + // The first name of the User + FirstName pulumi.StringInput `pulumi:"firstName"` + // The ID of the User + Id pulumi.StringInput `pulumi:"id"` + // Indicates whether the User is an admin + // + // Deprecated: This read-only Boolean value will be deprecated in a future release. You may use the `role` value instead. + IsAdmin pulumi.BoolInput `pulumi:"isAdmin"` + // The last name of the User + LastName pulumi.StringInput `pulumi:"lastName"` + // Indicates the User's role. Either ADMIN, DEVOPS, SUPPORT, or MEMBER. + Role pulumi.StringInput `pulumi:"role"` + // Indicates the User's type. Either MANUAL or SYNCED. + Type pulumi.StringInput `pulumi:"type"` +} + +func (GetTwingateUsersUserArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetTwingateUsersUser)(nil)).Elem() +} + +func (i GetTwingateUsersUserArgs) ToGetTwingateUsersUserOutput() GetTwingateUsersUserOutput { + return i.ToGetTwingateUsersUserOutputWithContext(context.Background()) +} + +func (i GetTwingateUsersUserArgs) ToGetTwingateUsersUserOutputWithContext(ctx context.Context) GetTwingateUsersUserOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetTwingateUsersUserOutput) +} + +// GetTwingateUsersUserArrayInput is an input type that accepts GetTwingateUsersUserArray and GetTwingateUsersUserArrayOutput values. +// You can construct a concrete instance of `GetTwingateUsersUserArrayInput` via: +// +// GetTwingateUsersUserArray{ GetTwingateUsersUserArgs{...} } +type GetTwingateUsersUserArrayInput interface { + pulumi.Input + + ToGetTwingateUsersUserArrayOutput() GetTwingateUsersUserArrayOutput + ToGetTwingateUsersUserArrayOutputWithContext(context.Context) GetTwingateUsersUserArrayOutput +} + +type GetTwingateUsersUserArray []GetTwingateUsersUserInput + +func (GetTwingateUsersUserArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetTwingateUsersUser)(nil)).Elem() +} + +func (i GetTwingateUsersUserArray) ToGetTwingateUsersUserArrayOutput() GetTwingateUsersUserArrayOutput { + return i.ToGetTwingateUsersUserArrayOutputWithContext(context.Background()) +} + +func (i GetTwingateUsersUserArray) ToGetTwingateUsersUserArrayOutputWithContext(ctx context.Context) GetTwingateUsersUserArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetTwingateUsersUserArrayOutput) +} + +type GetTwingateUsersUserOutput struct{ *pulumi.OutputState } + +func (GetTwingateUsersUserOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetTwingateUsersUser)(nil)).Elem() +} + +func (o GetTwingateUsersUserOutput) ToGetTwingateUsersUserOutput() GetTwingateUsersUserOutput { + return o +} + +func (o GetTwingateUsersUserOutput) ToGetTwingateUsersUserOutputWithContext(ctx context.Context) GetTwingateUsersUserOutput { + return o +} + +// The email address of the User +func (o GetTwingateUsersUserOutput) Email() pulumi.StringOutput { + return o.ApplyT(func(v GetTwingateUsersUser) string { return v.Email }).(pulumi.StringOutput) +} + +// The first name of the User +func (o GetTwingateUsersUserOutput) FirstName() pulumi.StringOutput { + return o.ApplyT(func(v GetTwingateUsersUser) string { return v.FirstName }).(pulumi.StringOutput) +} + +// The ID of the User +func (o GetTwingateUsersUserOutput) Id() pulumi.StringOutput { + return o.ApplyT(func(v GetTwingateUsersUser) string { return v.Id }).(pulumi.StringOutput) +} + +// Indicates whether the User is an admin +// +// Deprecated: This read-only Boolean value will be deprecated in a future release. You may use the `role` value instead. +func (o GetTwingateUsersUserOutput) IsAdmin() pulumi.BoolOutput { + return o.ApplyT(func(v GetTwingateUsersUser) bool { return v.IsAdmin }).(pulumi.BoolOutput) +} + +// The last name of the User +func (o GetTwingateUsersUserOutput) LastName() pulumi.StringOutput { + return o.ApplyT(func(v GetTwingateUsersUser) string { return v.LastName }).(pulumi.StringOutput) +} + +// Indicates the User's role. Either ADMIN, DEVOPS, SUPPORT, or MEMBER. +func (o GetTwingateUsersUserOutput) Role() pulumi.StringOutput { + return o.ApplyT(func(v GetTwingateUsersUser) string { return v.Role }).(pulumi.StringOutput) +} + +// Indicates the User's type. Either MANUAL or SYNCED. +func (o GetTwingateUsersUserOutput) Type() pulumi.StringOutput { + return o.ApplyT(func(v GetTwingateUsersUser) string { return v.Type }).(pulumi.StringOutput) +} + +type GetTwingateUsersUserArrayOutput struct{ *pulumi.OutputState } + +func (GetTwingateUsersUserArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetTwingateUsersUser)(nil)).Elem() +} + +func (o GetTwingateUsersUserArrayOutput) ToGetTwingateUsersUserArrayOutput() GetTwingateUsersUserArrayOutput { + return o +} + +func (o GetTwingateUsersUserArrayOutput) ToGetTwingateUsersUserArrayOutputWithContext(ctx context.Context) GetTwingateUsersUserArrayOutput { + return o +} + +func (o GetTwingateUsersUserArrayOutput) Index(i pulumi.IntInput) GetTwingateUsersUserOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetTwingateUsersUser { + return vs[0].([]GetTwingateUsersUser)[vs[1].(int)] + }).(GetTwingateUsersUserOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*TwingateResourceAccessInput)(nil)).Elem(), TwingateResourceAccessArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*TwingateResourceAccessPtrInput)(nil)).Elem(), TwingateResourceAccessArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*TwingateResourceProtocolsInput)(nil)).Elem(), TwingateResourceProtocolsArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*TwingateResourceProtocolsPtrInput)(nil)).Elem(), TwingateResourceProtocolsArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*TwingateResourceProtocolsTcpInput)(nil)).Elem(), TwingateResourceProtocolsTcpArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*TwingateResourceProtocolsTcpPtrInput)(nil)).Elem(), TwingateResourceProtocolsTcpArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*TwingateResourceProtocolsUdpInput)(nil)).Elem(), TwingateResourceProtocolsUdpArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*TwingateResourceProtocolsUdpPtrInput)(nil)).Elem(), TwingateResourceProtocolsUdpArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetTwingateConnectorsConnectorInput)(nil)).Elem(), GetTwingateConnectorsConnectorArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetTwingateConnectorsConnectorArrayInput)(nil)).Elem(), GetTwingateConnectorsConnectorArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetTwingateGroupsGroupInput)(nil)).Elem(), GetTwingateGroupsGroupArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetTwingateGroupsGroupArrayInput)(nil)).Elem(), GetTwingateGroupsGroupArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetTwingateRemoteNetworksRemoteNetworkInput)(nil)).Elem(), GetTwingateRemoteNetworksRemoteNetworkArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetTwingateRemoteNetworksRemoteNetworkArrayInput)(nil)).Elem(), GetTwingateRemoteNetworksRemoteNetworkArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetTwingateResourceProtocolInput)(nil)).Elem(), GetTwingateResourceProtocolArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetTwingateResourceProtocolArrayInput)(nil)).Elem(), GetTwingateResourceProtocolArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetTwingateResourceProtocolTcpInput)(nil)).Elem(), GetTwingateResourceProtocolTcpArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetTwingateResourceProtocolTcpArrayInput)(nil)).Elem(), GetTwingateResourceProtocolTcpArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetTwingateResourceProtocolUdpInput)(nil)).Elem(), GetTwingateResourceProtocolUdpArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetTwingateResourceProtocolUdpArrayInput)(nil)).Elem(), GetTwingateResourceProtocolUdpArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetTwingateResourcesResourceInput)(nil)).Elem(), GetTwingateResourcesResourceArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetTwingateResourcesResourceArrayInput)(nil)).Elem(), GetTwingateResourcesResourceArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetTwingateResourcesResourceProtocolInput)(nil)).Elem(), GetTwingateResourcesResourceProtocolArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetTwingateResourcesResourceProtocolArrayInput)(nil)).Elem(), GetTwingateResourcesResourceProtocolArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetTwingateResourcesResourceProtocolTcpInput)(nil)).Elem(), GetTwingateResourcesResourceProtocolTcpArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetTwingateResourcesResourceProtocolTcpArrayInput)(nil)).Elem(), GetTwingateResourcesResourceProtocolTcpArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetTwingateResourcesResourceProtocolUdpInput)(nil)).Elem(), GetTwingateResourcesResourceProtocolUdpArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetTwingateResourcesResourceProtocolUdpArrayInput)(nil)).Elem(), GetTwingateResourcesResourceProtocolUdpArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetTwingateSecurityPoliciesSecurityPolicyInput)(nil)).Elem(), GetTwingateSecurityPoliciesSecurityPolicyArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetTwingateSecurityPoliciesSecurityPolicyArrayInput)(nil)).Elem(), GetTwingateSecurityPoliciesSecurityPolicyArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetTwingateServiceAccountsServiceAccountInput)(nil)).Elem(), GetTwingateServiceAccountsServiceAccountArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetTwingateServiceAccountsServiceAccountArrayInput)(nil)).Elem(), GetTwingateServiceAccountsServiceAccountArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetTwingateUsersUserInput)(nil)).Elem(), GetTwingateUsersUserArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetTwingateUsersUserArrayInput)(nil)).Elem(), GetTwingateUsersUserArray{}) + pulumi.RegisterOutputType(TwingateResourceAccessOutput{}) + pulumi.RegisterOutputType(TwingateResourceAccessPtrOutput{}) + pulumi.RegisterOutputType(TwingateResourceProtocolsOutput{}) + pulumi.RegisterOutputType(TwingateResourceProtocolsPtrOutput{}) + pulumi.RegisterOutputType(TwingateResourceProtocolsTcpOutput{}) + pulumi.RegisterOutputType(TwingateResourceProtocolsTcpPtrOutput{}) + pulumi.RegisterOutputType(TwingateResourceProtocolsUdpOutput{}) + pulumi.RegisterOutputType(TwingateResourceProtocolsUdpPtrOutput{}) + pulumi.RegisterOutputType(GetTwingateConnectorsConnectorOutput{}) + pulumi.RegisterOutputType(GetTwingateConnectorsConnectorArrayOutput{}) + pulumi.RegisterOutputType(GetTwingateGroupsGroupOutput{}) + pulumi.RegisterOutputType(GetTwingateGroupsGroupArrayOutput{}) + pulumi.RegisterOutputType(GetTwingateRemoteNetworksRemoteNetworkOutput{}) + pulumi.RegisterOutputType(GetTwingateRemoteNetworksRemoteNetworkArrayOutput{}) + pulumi.RegisterOutputType(GetTwingateResourceProtocolOutput{}) + pulumi.RegisterOutputType(GetTwingateResourceProtocolArrayOutput{}) + pulumi.RegisterOutputType(GetTwingateResourceProtocolTcpOutput{}) + pulumi.RegisterOutputType(GetTwingateResourceProtocolTcpArrayOutput{}) + pulumi.RegisterOutputType(GetTwingateResourceProtocolUdpOutput{}) + pulumi.RegisterOutputType(GetTwingateResourceProtocolUdpArrayOutput{}) + pulumi.RegisterOutputType(GetTwingateResourcesResourceOutput{}) + pulumi.RegisterOutputType(GetTwingateResourcesResourceArrayOutput{}) + pulumi.RegisterOutputType(GetTwingateResourcesResourceProtocolOutput{}) + pulumi.RegisterOutputType(GetTwingateResourcesResourceProtocolArrayOutput{}) + pulumi.RegisterOutputType(GetTwingateResourcesResourceProtocolTcpOutput{}) + pulumi.RegisterOutputType(GetTwingateResourcesResourceProtocolTcpArrayOutput{}) + pulumi.RegisterOutputType(GetTwingateResourcesResourceProtocolUdpOutput{}) + pulumi.RegisterOutputType(GetTwingateResourcesResourceProtocolUdpArrayOutput{}) + pulumi.RegisterOutputType(GetTwingateSecurityPoliciesSecurityPolicyOutput{}) + pulumi.RegisterOutputType(GetTwingateSecurityPoliciesSecurityPolicyArrayOutput{}) + pulumi.RegisterOutputType(GetTwingateServiceAccountsServiceAccountOutput{}) + pulumi.RegisterOutputType(GetTwingateServiceAccountsServiceAccountArrayOutput{}) + pulumi.RegisterOutputType(GetTwingateUsersUserOutput{}) + pulumi.RegisterOutputType(GetTwingateUsersUserArrayOutput{}) +} diff --git a/sdk/go/twingate/twingateConnector.go b/sdk/go/twingate/twingateConnector.go new file mode 100644 index 0000000..50d1ea5 --- /dev/null +++ b/sdk/go/twingate/twingateConnector.go @@ -0,0 +1,287 @@ +// 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 twingate + +import ( + "context" + "reflect" + + "errors" + "github.com/Twingate/pulumi-twingate/sdk/go/twingate/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// Connectors provide connectivity to Remote Networks. This resource type will create the Connector in the Twingate Admin Console, but in order to successfully deploy it, you must also generate Connector tokens that authenticate the Connector with Twingate. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/understanding-access-nodes). +// +// ## Example Usage +// +// ```go +// package main +// +// import ( +// +// "github.com/Twingate/pulumi-twingate/sdk/go/twingate" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// awsNetwork, err := twingate.NewTwingateRemoteNetwork(ctx, "awsNetwork", nil) +// if err != nil { +// return err +// } +// _, err = twingate.NewTwingateConnector(ctx, "awsConnector", &twingate.TwingateConnectorArgs{ +// RemoteNetworkId: awsNetwork.ID(), +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +// +// ## Import +// +// ```sh +// +// $ pulumi import twingate:index/twingateConnector:TwingateConnector aws_connector Q29ubmVjdG9yOjI2NzM= +// +// ``` +type TwingateConnector struct { + pulumi.CustomResourceState + + // Name of the Connector, if not provided one will be generated. + Name pulumi.StringOutput `pulumi:"name"` + // The ID of the Remote Network the Connector is attached to. + RemoteNetworkId pulumi.StringOutput `pulumi:"remoteNetworkId"` + // Determines whether status notifications are enabled for the Connector. + StatusUpdatesEnabled pulumi.BoolOutput `pulumi:"statusUpdatesEnabled"` +} + +// NewTwingateConnector registers a new resource with the given unique name, arguments, and options. +func NewTwingateConnector(ctx *pulumi.Context, + name string, args *TwingateConnectorArgs, opts ...pulumi.ResourceOption) (*TwingateConnector, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.RemoteNetworkId == nil { + return nil, errors.New("invalid value for required argument 'RemoteNetworkId'") + } + opts = internal.PkgResourceDefaultOpts(opts) + var resource TwingateConnector + err := ctx.RegisterResource("twingate:index/twingateConnector:TwingateConnector", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetTwingateConnector gets an existing TwingateConnector 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 GetTwingateConnector(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *TwingateConnectorState, opts ...pulumi.ResourceOption) (*TwingateConnector, error) { + var resource TwingateConnector + err := ctx.ReadResource("twingate:index/twingateConnector:TwingateConnector", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering TwingateConnector resources. +type twingateConnectorState struct { + // Name of the Connector, if not provided one will be generated. + Name *string `pulumi:"name"` + // The ID of the Remote Network the Connector is attached to. + RemoteNetworkId *string `pulumi:"remoteNetworkId"` + // Determines whether status notifications are enabled for the Connector. + StatusUpdatesEnabled *bool `pulumi:"statusUpdatesEnabled"` +} + +type TwingateConnectorState struct { + // Name of the Connector, if not provided one will be generated. + Name pulumi.StringPtrInput + // The ID of the Remote Network the Connector is attached to. + RemoteNetworkId pulumi.StringPtrInput + // Determines whether status notifications are enabled for the Connector. + StatusUpdatesEnabled pulumi.BoolPtrInput +} + +func (TwingateConnectorState) ElementType() reflect.Type { + return reflect.TypeOf((*twingateConnectorState)(nil)).Elem() +} + +type twingateConnectorArgs struct { + // Name of the Connector, if not provided one will be generated. + Name *string `pulumi:"name"` + // The ID of the Remote Network the Connector is attached to. + RemoteNetworkId string `pulumi:"remoteNetworkId"` + // Determines whether status notifications are enabled for the Connector. + StatusUpdatesEnabled *bool `pulumi:"statusUpdatesEnabled"` +} + +// The set of arguments for constructing a TwingateConnector resource. +type TwingateConnectorArgs struct { + // Name of the Connector, if not provided one will be generated. + Name pulumi.StringPtrInput + // The ID of the Remote Network the Connector is attached to. + RemoteNetworkId pulumi.StringInput + // Determines whether status notifications are enabled for the Connector. + StatusUpdatesEnabled pulumi.BoolPtrInput +} + +func (TwingateConnectorArgs) ElementType() reflect.Type { + return reflect.TypeOf((*twingateConnectorArgs)(nil)).Elem() +} + +type TwingateConnectorInput interface { + pulumi.Input + + ToTwingateConnectorOutput() TwingateConnectorOutput + ToTwingateConnectorOutputWithContext(ctx context.Context) TwingateConnectorOutput +} + +func (*TwingateConnector) ElementType() reflect.Type { + return reflect.TypeOf((**TwingateConnector)(nil)).Elem() +} + +func (i *TwingateConnector) ToTwingateConnectorOutput() TwingateConnectorOutput { + return i.ToTwingateConnectorOutputWithContext(context.Background()) +} + +func (i *TwingateConnector) ToTwingateConnectorOutputWithContext(ctx context.Context) TwingateConnectorOutput { + return pulumi.ToOutputWithContext(ctx, i).(TwingateConnectorOutput) +} + +// TwingateConnectorArrayInput is an input type that accepts TwingateConnectorArray and TwingateConnectorArrayOutput values. +// You can construct a concrete instance of `TwingateConnectorArrayInput` via: +// +// TwingateConnectorArray{ TwingateConnectorArgs{...} } +type TwingateConnectorArrayInput interface { + pulumi.Input + + ToTwingateConnectorArrayOutput() TwingateConnectorArrayOutput + ToTwingateConnectorArrayOutputWithContext(context.Context) TwingateConnectorArrayOutput +} + +type TwingateConnectorArray []TwingateConnectorInput + +func (TwingateConnectorArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*TwingateConnector)(nil)).Elem() +} + +func (i TwingateConnectorArray) ToTwingateConnectorArrayOutput() TwingateConnectorArrayOutput { + return i.ToTwingateConnectorArrayOutputWithContext(context.Background()) +} + +func (i TwingateConnectorArray) ToTwingateConnectorArrayOutputWithContext(ctx context.Context) TwingateConnectorArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(TwingateConnectorArrayOutput) +} + +// TwingateConnectorMapInput is an input type that accepts TwingateConnectorMap and TwingateConnectorMapOutput values. +// You can construct a concrete instance of `TwingateConnectorMapInput` via: +// +// TwingateConnectorMap{ "key": TwingateConnectorArgs{...} } +type TwingateConnectorMapInput interface { + pulumi.Input + + ToTwingateConnectorMapOutput() TwingateConnectorMapOutput + ToTwingateConnectorMapOutputWithContext(context.Context) TwingateConnectorMapOutput +} + +type TwingateConnectorMap map[string]TwingateConnectorInput + +func (TwingateConnectorMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*TwingateConnector)(nil)).Elem() +} + +func (i TwingateConnectorMap) ToTwingateConnectorMapOutput() TwingateConnectorMapOutput { + return i.ToTwingateConnectorMapOutputWithContext(context.Background()) +} + +func (i TwingateConnectorMap) ToTwingateConnectorMapOutputWithContext(ctx context.Context) TwingateConnectorMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(TwingateConnectorMapOutput) +} + +type TwingateConnectorOutput struct{ *pulumi.OutputState } + +func (TwingateConnectorOutput) ElementType() reflect.Type { + return reflect.TypeOf((**TwingateConnector)(nil)).Elem() +} + +func (o TwingateConnectorOutput) ToTwingateConnectorOutput() TwingateConnectorOutput { + return o +} + +func (o TwingateConnectorOutput) ToTwingateConnectorOutputWithContext(ctx context.Context) TwingateConnectorOutput { + return o +} + +// Name of the Connector, if not provided one will be generated. +func (o TwingateConnectorOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v *TwingateConnector) pulumi.StringOutput { return v.Name }).(pulumi.StringOutput) +} + +// The ID of the Remote Network the Connector is attached to. +func (o TwingateConnectorOutput) RemoteNetworkId() pulumi.StringOutput { + return o.ApplyT(func(v *TwingateConnector) pulumi.StringOutput { return v.RemoteNetworkId }).(pulumi.StringOutput) +} + +// Determines whether status notifications are enabled for the Connector. +func (o TwingateConnectorOutput) StatusUpdatesEnabled() pulumi.BoolOutput { + return o.ApplyT(func(v *TwingateConnector) pulumi.BoolOutput { return v.StatusUpdatesEnabled }).(pulumi.BoolOutput) +} + +type TwingateConnectorArrayOutput struct{ *pulumi.OutputState } + +func (TwingateConnectorArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*TwingateConnector)(nil)).Elem() +} + +func (o TwingateConnectorArrayOutput) ToTwingateConnectorArrayOutput() TwingateConnectorArrayOutput { + return o +} + +func (o TwingateConnectorArrayOutput) ToTwingateConnectorArrayOutputWithContext(ctx context.Context) TwingateConnectorArrayOutput { + return o +} + +func (o TwingateConnectorArrayOutput) Index(i pulumi.IntInput) TwingateConnectorOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *TwingateConnector { + return vs[0].([]*TwingateConnector)[vs[1].(int)] + }).(TwingateConnectorOutput) +} + +type TwingateConnectorMapOutput struct{ *pulumi.OutputState } + +func (TwingateConnectorMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*TwingateConnector)(nil)).Elem() +} + +func (o TwingateConnectorMapOutput) ToTwingateConnectorMapOutput() TwingateConnectorMapOutput { + return o +} + +func (o TwingateConnectorMapOutput) ToTwingateConnectorMapOutputWithContext(ctx context.Context) TwingateConnectorMapOutput { + return o +} + +func (o TwingateConnectorMapOutput) MapIndex(k pulumi.StringInput) TwingateConnectorOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *TwingateConnector { + return vs[0].(map[string]*TwingateConnector)[vs[1].(string)] + }).(TwingateConnectorOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*TwingateConnectorInput)(nil)).Elem(), &TwingateConnector{}) + pulumi.RegisterInputType(reflect.TypeOf((*TwingateConnectorArrayInput)(nil)).Elem(), TwingateConnectorArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*TwingateConnectorMapInput)(nil)).Elem(), TwingateConnectorMap{}) + pulumi.RegisterOutputType(TwingateConnectorOutput{}) + pulumi.RegisterOutputType(TwingateConnectorArrayOutput{}) + pulumi.RegisterOutputType(TwingateConnectorMapOutput{}) +} diff --git a/sdk/go/twingate/twingateConnectorTokens.go b/sdk/go/twingate/twingateConnectorTokens.go new file mode 100644 index 0000000..8e25b7a --- /dev/null +++ b/sdk/go/twingate/twingateConnectorTokens.go @@ -0,0 +1,297 @@ +// 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 twingate + +import ( + "context" + "reflect" + + "errors" + "github.com/Twingate/pulumi-twingate/sdk/go/twingate/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// This resource type will generate tokens for a Connector, which are needed to successfully provision one on your network. The Connector itself has its own resource type and must be created before you can provision tokens. +// +// ## Example Usage +// +// ```go +// package main +// +// import ( +// +// "github.com/Twingate/pulumi-twingate/sdk/go/twingate" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// awsNetwork, err := twingate.NewTwingateRemoteNetwork(ctx, "awsNetwork", nil) +// if err != nil { +// return err +// } +// awsConnector, err := twingate.NewTwingateConnector(ctx, "awsConnector", &twingate.TwingateConnectorArgs{ +// RemoteNetworkId: awsNetwork.ID(), +// }) +// if err != nil { +// return err +// } +// _, err = twingate.NewTwingateConnectorTokens(ctx, "awsConnectorTokens", &twingate.TwingateConnectorTokensArgs{ +// ConnectorId: awsConnector.ID(), +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +type TwingateConnectorTokens struct { + pulumi.CustomResourceState + + // The Access Token of the parent Connector + AccessToken pulumi.StringOutput `pulumi:"accessToken"` + // The ID of the parent Connector + ConnectorId pulumi.StringOutput `pulumi:"connectorId"` + // Arbitrary map of values that, when changed, will trigger recreation of resource. Use this to automatically rotate Connector tokens on a schedule. + Keepers pulumi.MapOutput `pulumi:"keepers"` + // The Refresh Token of the parent Connector + RefreshToken pulumi.StringOutput `pulumi:"refreshToken"` +} + +// NewTwingateConnectorTokens registers a new resource with the given unique name, arguments, and options. +func NewTwingateConnectorTokens(ctx *pulumi.Context, + name string, args *TwingateConnectorTokensArgs, opts ...pulumi.ResourceOption) (*TwingateConnectorTokens, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.ConnectorId == nil { + return nil, errors.New("invalid value for required argument 'ConnectorId'") + } + secrets := pulumi.AdditionalSecretOutputs([]string{ + "accessToken", + "refreshToken", + }) + opts = append(opts, secrets) + opts = internal.PkgResourceDefaultOpts(opts) + var resource TwingateConnectorTokens + err := ctx.RegisterResource("twingate:index/twingateConnectorTokens:TwingateConnectorTokens", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetTwingateConnectorTokens gets an existing TwingateConnectorTokens 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 GetTwingateConnectorTokens(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *TwingateConnectorTokensState, opts ...pulumi.ResourceOption) (*TwingateConnectorTokens, error) { + var resource TwingateConnectorTokens + err := ctx.ReadResource("twingate:index/twingateConnectorTokens:TwingateConnectorTokens", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering TwingateConnectorTokens resources. +type twingateConnectorTokensState struct { + // The Access Token of the parent Connector + AccessToken *string `pulumi:"accessToken"` + // The ID of the parent Connector + ConnectorId *string `pulumi:"connectorId"` + // Arbitrary map of values that, when changed, will trigger recreation of resource. Use this to automatically rotate Connector tokens on a schedule. + Keepers map[string]interface{} `pulumi:"keepers"` + // The Refresh Token of the parent Connector + RefreshToken *string `pulumi:"refreshToken"` +} + +type TwingateConnectorTokensState struct { + // The Access Token of the parent Connector + AccessToken pulumi.StringPtrInput + // The ID of the parent Connector + ConnectorId pulumi.StringPtrInput + // Arbitrary map of values that, when changed, will trigger recreation of resource. Use this to automatically rotate Connector tokens on a schedule. + Keepers pulumi.MapInput + // The Refresh Token of the parent Connector + RefreshToken pulumi.StringPtrInput +} + +func (TwingateConnectorTokensState) ElementType() reflect.Type { + return reflect.TypeOf((*twingateConnectorTokensState)(nil)).Elem() +} + +type twingateConnectorTokensArgs struct { + // The ID of the parent Connector + ConnectorId string `pulumi:"connectorId"` + // Arbitrary map of values that, when changed, will trigger recreation of resource. Use this to automatically rotate Connector tokens on a schedule. + Keepers map[string]interface{} `pulumi:"keepers"` +} + +// The set of arguments for constructing a TwingateConnectorTokens resource. +type TwingateConnectorTokensArgs struct { + // The ID of the parent Connector + ConnectorId pulumi.StringInput + // Arbitrary map of values that, when changed, will trigger recreation of resource. Use this to automatically rotate Connector tokens on a schedule. + Keepers pulumi.MapInput +} + +func (TwingateConnectorTokensArgs) ElementType() reflect.Type { + return reflect.TypeOf((*twingateConnectorTokensArgs)(nil)).Elem() +} + +type TwingateConnectorTokensInput interface { + pulumi.Input + + ToTwingateConnectorTokensOutput() TwingateConnectorTokensOutput + ToTwingateConnectorTokensOutputWithContext(ctx context.Context) TwingateConnectorTokensOutput +} + +func (*TwingateConnectorTokens) ElementType() reflect.Type { + return reflect.TypeOf((**TwingateConnectorTokens)(nil)).Elem() +} + +func (i *TwingateConnectorTokens) ToTwingateConnectorTokensOutput() TwingateConnectorTokensOutput { + return i.ToTwingateConnectorTokensOutputWithContext(context.Background()) +} + +func (i *TwingateConnectorTokens) ToTwingateConnectorTokensOutputWithContext(ctx context.Context) TwingateConnectorTokensOutput { + return pulumi.ToOutputWithContext(ctx, i).(TwingateConnectorTokensOutput) +} + +// TwingateConnectorTokensArrayInput is an input type that accepts TwingateConnectorTokensArray and TwingateConnectorTokensArrayOutput values. +// You can construct a concrete instance of `TwingateConnectorTokensArrayInput` via: +// +// TwingateConnectorTokensArray{ TwingateConnectorTokensArgs{...} } +type TwingateConnectorTokensArrayInput interface { + pulumi.Input + + ToTwingateConnectorTokensArrayOutput() TwingateConnectorTokensArrayOutput + ToTwingateConnectorTokensArrayOutputWithContext(context.Context) TwingateConnectorTokensArrayOutput +} + +type TwingateConnectorTokensArray []TwingateConnectorTokensInput + +func (TwingateConnectorTokensArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*TwingateConnectorTokens)(nil)).Elem() +} + +func (i TwingateConnectorTokensArray) ToTwingateConnectorTokensArrayOutput() TwingateConnectorTokensArrayOutput { + return i.ToTwingateConnectorTokensArrayOutputWithContext(context.Background()) +} + +func (i TwingateConnectorTokensArray) ToTwingateConnectorTokensArrayOutputWithContext(ctx context.Context) TwingateConnectorTokensArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(TwingateConnectorTokensArrayOutput) +} + +// TwingateConnectorTokensMapInput is an input type that accepts TwingateConnectorTokensMap and TwingateConnectorTokensMapOutput values. +// You can construct a concrete instance of `TwingateConnectorTokensMapInput` via: +// +// TwingateConnectorTokensMap{ "key": TwingateConnectorTokensArgs{...} } +type TwingateConnectorTokensMapInput interface { + pulumi.Input + + ToTwingateConnectorTokensMapOutput() TwingateConnectorTokensMapOutput + ToTwingateConnectorTokensMapOutputWithContext(context.Context) TwingateConnectorTokensMapOutput +} + +type TwingateConnectorTokensMap map[string]TwingateConnectorTokensInput + +func (TwingateConnectorTokensMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*TwingateConnectorTokens)(nil)).Elem() +} + +func (i TwingateConnectorTokensMap) ToTwingateConnectorTokensMapOutput() TwingateConnectorTokensMapOutput { + return i.ToTwingateConnectorTokensMapOutputWithContext(context.Background()) +} + +func (i TwingateConnectorTokensMap) ToTwingateConnectorTokensMapOutputWithContext(ctx context.Context) TwingateConnectorTokensMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(TwingateConnectorTokensMapOutput) +} + +type TwingateConnectorTokensOutput struct{ *pulumi.OutputState } + +func (TwingateConnectorTokensOutput) ElementType() reflect.Type { + return reflect.TypeOf((**TwingateConnectorTokens)(nil)).Elem() +} + +func (o TwingateConnectorTokensOutput) ToTwingateConnectorTokensOutput() TwingateConnectorTokensOutput { + return o +} + +func (o TwingateConnectorTokensOutput) ToTwingateConnectorTokensOutputWithContext(ctx context.Context) TwingateConnectorTokensOutput { + return o +} + +// The Access Token of the parent Connector +func (o TwingateConnectorTokensOutput) AccessToken() pulumi.StringOutput { + return o.ApplyT(func(v *TwingateConnectorTokens) pulumi.StringOutput { return v.AccessToken }).(pulumi.StringOutput) +} + +// The ID of the parent Connector +func (o TwingateConnectorTokensOutput) ConnectorId() pulumi.StringOutput { + return o.ApplyT(func(v *TwingateConnectorTokens) pulumi.StringOutput { return v.ConnectorId }).(pulumi.StringOutput) +} + +// Arbitrary map of values that, when changed, will trigger recreation of resource. Use this to automatically rotate Connector tokens on a schedule. +func (o TwingateConnectorTokensOutput) Keepers() pulumi.MapOutput { + return o.ApplyT(func(v *TwingateConnectorTokens) pulumi.MapOutput { return v.Keepers }).(pulumi.MapOutput) +} + +// The Refresh Token of the parent Connector +func (o TwingateConnectorTokensOutput) RefreshToken() pulumi.StringOutput { + return o.ApplyT(func(v *TwingateConnectorTokens) pulumi.StringOutput { return v.RefreshToken }).(pulumi.StringOutput) +} + +type TwingateConnectorTokensArrayOutput struct{ *pulumi.OutputState } + +func (TwingateConnectorTokensArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*TwingateConnectorTokens)(nil)).Elem() +} + +func (o TwingateConnectorTokensArrayOutput) ToTwingateConnectorTokensArrayOutput() TwingateConnectorTokensArrayOutput { + return o +} + +func (o TwingateConnectorTokensArrayOutput) ToTwingateConnectorTokensArrayOutputWithContext(ctx context.Context) TwingateConnectorTokensArrayOutput { + return o +} + +func (o TwingateConnectorTokensArrayOutput) Index(i pulumi.IntInput) TwingateConnectorTokensOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *TwingateConnectorTokens { + return vs[0].([]*TwingateConnectorTokens)[vs[1].(int)] + }).(TwingateConnectorTokensOutput) +} + +type TwingateConnectorTokensMapOutput struct{ *pulumi.OutputState } + +func (TwingateConnectorTokensMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*TwingateConnectorTokens)(nil)).Elem() +} + +func (o TwingateConnectorTokensMapOutput) ToTwingateConnectorTokensMapOutput() TwingateConnectorTokensMapOutput { + return o +} + +func (o TwingateConnectorTokensMapOutput) ToTwingateConnectorTokensMapOutputWithContext(ctx context.Context) TwingateConnectorTokensMapOutput { + return o +} + +func (o TwingateConnectorTokensMapOutput) MapIndex(k pulumi.StringInput) TwingateConnectorTokensOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *TwingateConnectorTokens { + return vs[0].(map[string]*TwingateConnectorTokens)[vs[1].(string)] + }).(TwingateConnectorTokensOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*TwingateConnectorTokensInput)(nil)).Elem(), &TwingateConnectorTokens{}) + pulumi.RegisterInputType(reflect.TypeOf((*TwingateConnectorTokensArrayInput)(nil)).Elem(), TwingateConnectorTokensArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*TwingateConnectorTokensMapInput)(nil)).Elem(), TwingateConnectorTokensMap{}) + pulumi.RegisterOutputType(TwingateConnectorTokensOutput{}) + pulumi.RegisterOutputType(TwingateConnectorTokensArrayOutput{}) + pulumi.RegisterOutputType(TwingateConnectorTokensMapOutput{}) +} diff --git a/sdk/go/twingate/twingateGroup.go b/sdk/go/twingate/twingateGroup.go new file mode 100644 index 0000000..f3a37e2 --- /dev/null +++ b/sdk/go/twingate/twingateGroup.go @@ -0,0 +1,298 @@ +// 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 twingate + +import ( + "context" + "reflect" + + "github.com/Twingate/pulumi-twingate/sdk/go/twingate/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// Groups are how users are authorized to access Resources. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/groups). +// +// ## Example Usage +// +// ```go +// package main +// +// import ( +// +// "github.com/Twingate/pulumi-twingate/sdk/go/twingate" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := twingate.NewTwingateGroup(ctx, "aws", nil) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +// +// ## Import +// +// ```sh +// +// $ pulumi import twingate:index/twingateGroup:TwingateGroup aws R3JvdXA6MzQ4OTE= +// +// ``` +type TwingateGroup struct { + pulumi.CustomResourceState + + // Determines whether User assignments to this Group will override any existing assignments. Default is `true`. If set to + // `false`, assignments made outside of Terraform will be ignored. + IsAuthoritative pulumi.BoolOutput `pulumi:"isAuthoritative"` + // The name of the group + Name pulumi.StringOutput `pulumi:"name"` + // Defines which Security Policy applies to this Group. The Security Policy ID can be obtained from the `getTwingateSecurityPolicy` and `getTwingateSecurityPolicies` data sources. + SecurityPolicyId pulumi.StringOutput `pulumi:"securityPolicyId"` + // List of User IDs that have permission to access the Group. + UserIds pulumi.StringArrayOutput `pulumi:"userIds"` +} + +// NewTwingateGroup registers a new resource with the given unique name, arguments, and options. +func NewTwingateGroup(ctx *pulumi.Context, + name string, args *TwingateGroupArgs, opts ...pulumi.ResourceOption) (*TwingateGroup, error) { + if args == nil { + args = &TwingateGroupArgs{} + } + + opts = internal.PkgResourceDefaultOpts(opts) + var resource TwingateGroup + err := ctx.RegisterResource("twingate:index/twingateGroup:TwingateGroup", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetTwingateGroup gets an existing TwingateGroup 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 GetTwingateGroup(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *TwingateGroupState, opts ...pulumi.ResourceOption) (*TwingateGroup, error) { + var resource TwingateGroup + err := ctx.ReadResource("twingate:index/twingateGroup:TwingateGroup", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering TwingateGroup resources. +type twingateGroupState struct { + // Determines whether User assignments to this Group will override any existing assignments. Default is `true`. If set to + // `false`, assignments made outside of Terraform will be ignored. + IsAuthoritative *bool `pulumi:"isAuthoritative"` + // The name of the group + Name *string `pulumi:"name"` + // Defines which Security Policy applies to this Group. The Security Policy ID can be obtained from the `getTwingateSecurityPolicy` and `getTwingateSecurityPolicies` data sources. + SecurityPolicyId *string `pulumi:"securityPolicyId"` + // List of User IDs that have permission to access the Group. + UserIds []string `pulumi:"userIds"` +} + +type TwingateGroupState struct { + // Determines whether User assignments to this Group will override any existing assignments. Default is `true`. If set to + // `false`, assignments made outside of Terraform will be ignored. + IsAuthoritative pulumi.BoolPtrInput + // The name of the group + Name pulumi.StringPtrInput + // Defines which Security Policy applies to this Group. The Security Policy ID can be obtained from the `getTwingateSecurityPolicy` and `getTwingateSecurityPolicies` data sources. + SecurityPolicyId pulumi.StringPtrInput + // List of User IDs that have permission to access the Group. + UserIds pulumi.StringArrayInput +} + +func (TwingateGroupState) ElementType() reflect.Type { + return reflect.TypeOf((*twingateGroupState)(nil)).Elem() +} + +type twingateGroupArgs struct { + // Determines whether User assignments to this Group will override any existing assignments. Default is `true`. If set to + // `false`, assignments made outside of Terraform will be ignored. + IsAuthoritative *bool `pulumi:"isAuthoritative"` + // The name of the group + Name *string `pulumi:"name"` + // Defines which Security Policy applies to this Group. The Security Policy ID can be obtained from the `getTwingateSecurityPolicy` and `getTwingateSecurityPolicies` data sources. + SecurityPolicyId *string `pulumi:"securityPolicyId"` + // List of User IDs that have permission to access the Group. + UserIds []string `pulumi:"userIds"` +} + +// The set of arguments for constructing a TwingateGroup resource. +type TwingateGroupArgs struct { + // Determines whether User assignments to this Group will override any existing assignments. Default is `true`. If set to + // `false`, assignments made outside of Terraform will be ignored. + IsAuthoritative pulumi.BoolPtrInput + // The name of the group + Name pulumi.StringPtrInput + // Defines which Security Policy applies to this Group. The Security Policy ID can be obtained from the `getTwingateSecurityPolicy` and `getTwingateSecurityPolicies` data sources. + SecurityPolicyId pulumi.StringPtrInput + // List of User IDs that have permission to access the Group. + UserIds pulumi.StringArrayInput +} + +func (TwingateGroupArgs) ElementType() reflect.Type { + return reflect.TypeOf((*twingateGroupArgs)(nil)).Elem() +} + +type TwingateGroupInput interface { + pulumi.Input + + ToTwingateGroupOutput() TwingateGroupOutput + ToTwingateGroupOutputWithContext(ctx context.Context) TwingateGroupOutput +} + +func (*TwingateGroup) ElementType() reflect.Type { + return reflect.TypeOf((**TwingateGroup)(nil)).Elem() +} + +func (i *TwingateGroup) ToTwingateGroupOutput() TwingateGroupOutput { + return i.ToTwingateGroupOutputWithContext(context.Background()) +} + +func (i *TwingateGroup) ToTwingateGroupOutputWithContext(ctx context.Context) TwingateGroupOutput { + return pulumi.ToOutputWithContext(ctx, i).(TwingateGroupOutput) +} + +// TwingateGroupArrayInput is an input type that accepts TwingateGroupArray and TwingateGroupArrayOutput values. +// You can construct a concrete instance of `TwingateGroupArrayInput` via: +// +// TwingateGroupArray{ TwingateGroupArgs{...} } +type TwingateGroupArrayInput interface { + pulumi.Input + + ToTwingateGroupArrayOutput() TwingateGroupArrayOutput + ToTwingateGroupArrayOutputWithContext(context.Context) TwingateGroupArrayOutput +} + +type TwingateGroupArray []TwingateGroupInput + +func (TwingateGroupArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*TwingateGroup)(nil)).Elem() +} + +func (i TwingateGroupArray) ToTwingateGroupArrayOutput() TwingateGroupArrayOutput { + return i.ToTwingateGroupArrayOutputWithContext(context.Background()) +} + +func (i TwingateGroupArray) ToTwingateGroupArrayOutputWithContext(ctx context.Context) TwingateGroupArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(TwingateGroupArrayOutput) +} + +// TwingateGroupMapInput is an input type that accepts TwingateGroupMap and TwingateGroupMapOutput values. +// You can construct a concrete instance of `TwingateGroupMapInput` via: +// +// TwingateGroupMap{ "key": TwingateGroupArgs{...} } +type TwingateGroupMapInput interface { + pulumi.Input + + ToTwingateGroupMapOutput() TwingateGroupMapOutput + ToTwingateGroupMapOutputWithContext(context.Context) TwingateGroupMapOutput +} + +type TwingateGroupMap map[string]TwingateGroupInput + +func (TwingateGroupMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*TwingateGroup)(nil)).Elem() +} + +func (i TwingateGroupMap) ToTwingateGroupMapOutput() TwingateGroupMapOutput { + return i.ToTwingateGroupMapOutputWithContext(context.Background()) +} + +func (i TwingateGroupMap) ToTwingateGroupMapOutputWithContext(ctx context.Context) TwingateGroupMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(TwingateGroupMapOutput) +} + +type TwingateGroupOutput struct{ *pulumi.OutputState } + +func (TwingateGroupOutput) ElementType() reflect.Type { + return reflect.TypeOf((**TwingateGroup)(nil)).Elem() +} + +func (o TwingateGroupOutput) ToTwingateGroupOutput() TwingateGroupOutput { + return o +} + +func (o TwingateGroupOutput) ToTwingateGroupOutputWithContext(ctx context.Context) TwingateGroupOutput { + return o +} + +// Determines whether User assignments to this Group will override any existing assignments. Default is `true`. If set to +// `false`, assignments made outside of Terraform will be ignored. +func (o TwingateGroupOutput) IsAuthoritative() pulumi.BoolOutput { + return o.ApplyT(func(v *TwingateGroup) pulumi.BoolOutput { return v.IsAuthoritative }).(pulumi.BoolOutput) +} + +// The name of the group +func (o TwingateGroupOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v *TwingateGroup) pulumi.StringOutput { return v.Name }).(pulumi.StringOutput) +} + +// Defines which Security Policy applies to this Group. The Security Policy ID can be obtained from the `getTwingateSecurityPolicy` and `getTwingateSecurityPolicies` data sources. +func (o TwingateGroupOutput) SecurityPolicyId() pulumi.StringOutput { + return o.ApplyT(func(v *TwingateGroup) pulumi.StringOutput { return v.SecurityPolicyId }).(pulumi.StringOutput) +} + +// List of User IDs that have permission to access the Group. +func (o TwingateGroupOutput) UserIds() pulumi.StringArrayOutput { + return o.ApplyT(func(v *TwingateGroup) pulumi.StringArrayOutput { return v.UserIds }).(pulumi.StringArrayOutput) +} + +type TwingateGroupArrayOutput struct{ *pulumi.OutputState } + +func (TwingateGroupArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*TwingateGroup)(nil)).Elem() +} + +func (o TwingateGroupArrayOutput) ToTwingateGroupArrayOutput() TwingateGroupArrayOutput { + return o +} + +func (o TwingateGroupArrayOutput) ToTwingateGroupArrayOutputWithContext(ctx context.Context) TwingateGroupArrayOutput { + return o +} + +func (o TwingateGroupArrayOutput) Index(i pulumi.IntInput) TwingateGroupOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *TwingateGroup { + return vs[0].([]*TwingateGroup)[vs[1].(int)] + }).(TwingateGroupOutput) +} + +type TwingateGroupMapOutput struct{ *pulumi.OutputState } + +func (TwingateGroupMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*TwingateGroup)(nil)).Elem() +} + +func (o TwingateGroupMapOutput) ToTwingateGroupMapOutput() TwingateGroupMapOutput { + return o +} + +func (o TwingateGroupMapOutput) ToTwingateGroupMapOutputWithContext(ctx context.Context) TwingateGroupMapOutput { + return o +} + +func (o TwingateGroupMapOutput) MapIndex(k pulumi.StringInput) TwingateGroupOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *TwingateGroup { + return vs[0].(map[string]*TwingateGroup)[vs[1].(string)] + }).(TwingateGroupOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*TwingateGroupInput)(nil)).Elem(), &TwingateGroup{}) + pulumi.RegisterInputType(reflect.TypeOf((*TwingateGroupArrayInput)(nil)).Elem(), TwingateGroupArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*TwingateGroupMapInput)(nil)).Elem(), TwingateGroupMap{}) + pulumi.RegisterOutputType(TwingateGroupOutput{}) + pulumi.RegisterOutputType(TwingateGroupArrayOutput{}) + pulumi.RegisterOutputType(TwingateGroupMapOutput{}) +} diff --git a/sdk/go/twingate/twingateRemoteNetwork.go b/sdk/go/twingate/twingateRemoteNetwork.go new file mode 100644 index 0000000..1ec2bb8 --- /dev/null +++ b/sdk/go/twingate/twingateRemoteNetwork.go @@ -0,0 +1,262 @@ +// 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 twingate + +import ( + "context" + "reflect" + + "github.com/Twingate/pulumi-twingate/sdk/go/twingate/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// A Remote Network represents a single private network in Twingate that can have one or more Connectors and Resources assigned to it. You must create a Remote Network before creating Resources and Connectors that belong to it. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/remote-networks). +// +// ## Example Usage +// +// ```go +// package main +// +// import ( +// +// "github.com/Twingate/pulumi-twingate/sdk/go/twingate" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := twingate.NewTwingateRemoteNetwork(ctx, "awsNetwork", nil) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +// +// ## Import +// +// ```sh +// +// $ pulumi import twingate:index/twingateRemoteNetwork:TwingateRemoteNetwork network UmVtb3RlTmV0d29zaipgMKIkNg== +// +// ``` +type TwingateRemoteNetwork struct { + pulumi.CustomResourceState + + // The location of the Remote Network. Must be one of the following: AWS, AZURE, GOOGLE*CLOUD, ON*PREMISE, OTHER. + Location pulumi.StringPtrOutput `pulumi:"location"` + // The name of the Remote Network + Name pulumi.StringOutput `pulumi:"name"` +} + +// NewTwingateRemoteNetwork registers a new resource with the given unique name, arguments, and options. +func NewTwingateRemoteNetwork(ctx *pulumi.Context, + name string, args *TwingateRemoteNetworkArgs, opts ...pulumi.ResourceOption) (*TwingateRemoteNetwork, error) { + if args == nil { + args = &TwingateRemoteNetworkArgs{} + } + + opts = internal.PkgResourceDefaultOpts(opts) + var resource TwingateRemoteNetwork + err := ctx.RegisterResource("twingate:index/twingateRemoteNetwork:TwingateRemoteNetwork", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetTwingateRemoteNetwork gets an existing TwingateRemoteNetwork 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 GetTwingateRemoteNetwork(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *TwingateRemoteNetworkState, opts ...pulumi.ResourceOption) (*TwingateRemoteNetwork, error) { + var resource TwingateRemoteNetwork + err := ctx.ReadResource("twingate:index/twingateRemoteNetwork:TwingateRemoteNetwork", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering TwingateRemoteNetwork resources. +type twingateRemoteNetworkState struct { + // The location of the Remote Network. Must be one of the following: AWS, AZURE, GOOGLE*CLOUD, ON*PREMISE, OTHER. + Location *string `pulumi:"location"` + // The name of the Remote Network + Name *string `pulumi:"name"` +} + +type TwingateRemoteNetworkState struct { + // The location of the Remote Network. Must be one of the following: AWS, AZURE, GOOGLE*CLOUD, ON*PREMISE, OTHER. + Location pulumi.StringPtrInput + // The name of the Remote Network + Name pulumi.StringPtrInput +} + +func (TwingateRemoteNetworkState) ElementType() reflect.Type { + return reflect.TypeOf((*twingateRemoteNetworkState)(nil)).Elem() +} + +type twingateRemoteNetworkArgs struct { + // The location of the Remote Network. Must be one of the following: AWS, AZURE, GOOGLE*CLOUD, ON*PREMISE, OTHER. + Location *string `pulumi:"location"` + // The name of the Remote Network + Name *string `pulumi:"name"` +} + +// The set of arguments for constructing a TwingateRemoteNetwork resource. +type TwingateRemoteNetworkArgs struct { + // The location of the Remote Network. Must be one of the following: AWS, AZURE, GOOGLE*CLOUD, ON*PREMISE, OTHER. + Location pulumi.StringPtrInput + // The name of the Remote Network + Name pulumi.StringPtrInput +} + +func (TwingateRemoteNetworkArgs) ElementType() reflect.Type { + return reflect.TypeOf((*twingateRemoteNetworkArgs)(nil)).Elem() +} + +type TwingateRemoteNetworkInput interface { + pulumi.Input + + ToTwingateRemoteNetworkOutput() TwingateRemoteNetworkOutput + ToTwingateRemoteNetworkOutputWithContext(ctx context.Context) TwingateRemoteNetworkOutput +} + +func (*TwingateRemoteNetwork) ElementType() reflect.Type { + return reflect.TypeOf((**TwingateRemoteNetwork)(nil)).Elem() +} + +func (i *TwingateRemoteNetwork) ToTwingateRemoteNetworkOutput() TwingateRemoteNetworkOutput { + return i.ToTwingateRemoteNetworkOutputWithContext(context.Background()) +} + +func (i *TwingateRemoteNetwork) ToTwingateRemoteNetworkOutputWithContext(ctx context.Context) TwingateRemoteNetworkOutput { + return pulumi.ToOutputWithContext(ctx, i).(TwingateRemoteNetworkOutput) +} + +// TwingateRemoteNetworkArrayInput is an input type that accepts TwingateRemoteNetworkArray and TwingateRemoteNetworkArrayOutput values. +// You can construct a concrete instance of `TwingateRemoteNetworkArrayInput` via: +// +// TwingateRemoteNetworkArray{ TwingateRemoteNetworkArgs{...} } +type TwingateRemoteNetworkArrayInput interface { + pulumi.Input + + ToTwingateRemoteNetworkArrayOutput() TwingateRemoteNetworkArrayOutput + ToTwingateRemoteNetworkArrayOutputWithContext(context.Context) TwingateRemoteNetworkArrayOutput +} + +type TwingateRemoteNetworkArray []TwingateRemoteNetworkInput + +func (TwingateRemoteNetworkArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*TwingateRemoteNetwork)(nil)).Elem() +} + +func (i TwingateRemoteNetworkArray) ToTwingateRemoteNetworkArrayOutput() TwingateRemoteNetworkArrayOutput { + return i.ToTwingateRemoteNetworkArrayOutputWithContext(context.Background()) +} + +func (i TwingateRemoteNetworkArray) ToTwingateRemoteNetworkArrayOutputWithContext(ctx context.Context) TwingateRemoteNetworkArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(TwingateRemoteNetworkArrayOutput) +} + +// TwingateRemoteNetworkMapInput is an input type that accepts TwingateRemoteNetworkMap and TwingateRemoteNetworkMapOutput values. +// You can construct a concrete instance of `TwingateRemoteNetworkMapInput` via: +// +// TwingateRemoteNetworkMap{ "key": TwingateRemoteNetworkArgs{...} } +type TwingateRemoteNetworkMapInput interface { + pulumi.Input + + ToTwingateRemoteNetworkMapOutput() TwingateRemoteNetworkMapOutput + ToTwingateRemoteNetworkMapOutputWithContext(context.Context) TwingateRemoteNetworkMapOutput +} + +type TwingateRemoteNetworkMap map[string]TwingateRemoteNetworkInput + +func (TwingateRemoteNetworkMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*TwingateRemoteNetwork)(nil)).Elem() +} + +func (i TwingateRemoteNetworkMap) ToTwingateRemoteNetworkMapOutput() TwingateRemoteNetworkMapOutput { + return i.ToTwingateRemoteNetworkMapOutputWithContext(context.Background()) +} + +func (i TwingateRemoteNetworkMap) ToTwingateRemoteNetworkMapOutputWithContext(ctx context.Context) TwingateRemoteNetworkMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(TwingateRemoteNetworkMapOutput) +} + +type TwingateRemoteNetworkOutput struct{ *pulumi.OutputState } + +func (TwingateRemoteNetworkOutput) ElementType() reflect.Type { + return reflect.TypeOf((**TwingateRemoteNetwork)(nil)).Elem() +} + +func (o TwingateRemoteNetworkOutput) ToTwingateRemoteNetworkOutput() TwingateRemoteNetworkOutput { + return o +} + +func (o TwingateRemoteNetworkOutput) ToTwingateRemoteNetworkOutputWithContext(ctx context.Context) TwingateRemoteNetworkOutput { + return o +} + +// The location of the Remote Network. Must be one of the following: AWS, AZURE, GOOGLE*CLOUD, ON*PREMISE, OTHER. +func (o TwingateRemoteNetworkOutput) Location() pulumi.StringPtrOutput { + return o.ApplyT(func(v *TwingateRemoteNetwork) pulumi.StringPtrOutput { return v.Location }).(pulumi.StringPtrOutput) +} + +// The name of the Remote Network +func (o TwingateRemoteNetworkOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v *TwingateRemoteNetwork) pulumi.StringOutput { return v.Name }).(pulumi.StringOutput) +} + +type TwingateRemoteNetworkArrayOutput struct{ *pulumi.OutputState } + +func (TwingateRemoteNetworkArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*TwingateRemoteNetwork)(nil)).Elem() +} + +func (o TwingateRemoteNetworkArrayOutput) ToTwingateRemoteNetworkArrayOutput() TwingateRemoteNetworkArrayOutput { + return o +} + +func (o TwingateRemoteNetworkArrayOutput) ToTwingateRemoteNetworkArrayOutputWithContext(ctx context.Context) TwingateRemoteNetworkArrayOutput { + return o +} + +func (o TwingateRemoteNetworkArrayOutput) Index(i pulumi.IntInput) TwingateRemoteNetworkOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *TwingateRemoteNetwork { + return vs[0].([]*TwingateRemoteNetwork)[vs[1].(int)] + }).(TwingateRemoteNetworkOutput) +} + +type TwingateRemoteNetworkMapOutput struct{ *pulumi.OutputState } + +func (TwingateRemoteNetworkMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*TwingateRemoteNetwork)(nil)).Elem() +} + +func (o TwingateRemoteNetworkMapOutput) ToTwingateRemoteNetworkMapOutput() TwingateRemoteNetworkMapOutput { + return o +} + +func (o TwingateRemoteNetworkMapOutput) ToTwingateRemoteNetworkMapOutputWithContext(ctx context.Context) TwingateRemoteNetworkMapOutput { + return o +} + +func (o TwingateRemoteNetworkMapOutput) MapIndex(k pulumi.StringInput) TwingateRemoteNetworkOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *TwingateRemoteNetwork { + return vs[0].(map[string]*TwingateRemoteNetwork)[vs[1].(string)] + }).(TwingateRemoteNetworkOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*TwingateRemoteNetworkInput)(nil)).Elem(), &TwingateRemoteNetwork{}) + pulumi.RegisterInputType(reflect.TypeOf((*TwingateRemoteNetworkArrayInput)(nil)).Elem(), TwingateRemoteNetworkArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*TwingateRemoteNetworkMapInput)(nil)).Elem(), TwingateRemoteNetworkMap{}) + pulumi.RegisterOutputType(TwingateRemoteNetworkOutput{}) + pulumi.RegisterOutputType(TwingateRemoteNetworkArrayOutput{}) + pulumi.RegisterOutputType(TwingateRemoteNetworkMapOutput{}) +} diff --git a/sdk/go/twingate/twingateResource.go b/sdk/go/twingate/twingateResource.go new file mode 100644 index 0000000..4bb619a --- /dev/null +++ b/sdk/go/twingate/twingateResource.go @@ -0,0 +1,416 @@ +// 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 twingate + +import ( + "context" + "reflect" + + "errors" + "github.com/Twingate/pulumi-twingate/sdk/go/twingate/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// Resources in Twingate represent servers on the private network that clients can connect to. Resources can be defined by IP, CIDR range, FQDN, or DNS zone. For more information, see the Twingate [documentation](https://docs.twingate.com/docs/resources-and-access-nodes). +// +// ## Example Usage +// +// ```go +// package main +// +// import ( +// +// "github.com/Twingate/pulumi-twingate/sdk/go/twingate" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// awsNetwork, err := twingate.NewTwingateRemoteNetwork(ctx, "awsNetwork", nil) +// if err != nil { +// return err +// } +// aws, err := twingate.NewTwingateGroup(ctx, "aws", nil) +// if err != nil { +// return err +// } +// githubActionsProd, err := twingate.NewTwingateServiceAccount(ctx, "githubActionsProd", nil) +// if err != nil { +// return err +// } +// _, err = twingate.NewTwingateResource(ctx, "resource", &twingate.TwingateResourceArgs{ +// Address: pulumi.String("internal.int"), +// RemoteNetworkId: awsNetwork.ID(), +// Protocols: &twingate.TwingateResourceProtocolsArgs{ +// AllowIcmp: pulumi.Bool(true), +// Tcp: &twingate.TwingateResourceProtocolsTcpArgs{ +// Policy: pulumi.String("RESTRICTED"), +// Ports: pulumi.StringArray{ +// pulumi.String("80"), +// pulumi.String("82-83"), +// }, +// }, +// Udp: &twingate.TwingateResourceProtocolsUdpArgs{ +// Policy: pulumi.String("ALLOW_ALL"), +// }, +// }, +// Access: &twingate.TwingateResourceAccessArgs{ +// GroupIds: pulumi.StringArray{ +// aws.ID(), +// }, +// ServiceAccountIds: pulumi.StringArray{ +// githubActionsProd.ID(), +// }, +// }, +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +// +// ## Import +// +// ```sh +// +// $ pulumi import twingate:index/twingateResource:TwingateResource resource UmVzb3VyY2U6MzQwNDQ3 +// +// ``` +type TwingateResource struct { + pulumi.CustomResourceState + + // Restrict access to certain groups or service accounts + Access TwingateResourceAccessPtrOutput `pulumi:"access"` + // The Resource's IP/CIDR or FQDN/DNS zone + Address pulumi.StringOutput `pulumi:"address"` + // Set a DNS alias address for the Resource. Must be a DNS-valid name string. + Alias pulumi.StringPtrOutput `pulumi:"alias"` + // Determines whether assignments in the access block will override any existing assignments. Default is `true`. If set to + // `false`, assignments made outside of Terraform will be ignored. + IsAuthoritative pulumi.BoolOutput `pulumi:"isAuthoritative"` + // Controls whether an "Open in Browser" shortcut will be shown for this Resource in the Twingate Client. + IsBrowserShortcutEnabled pulumi.BoolOutput `pulumi:"isBrowserShortcutEnabled"` + // Controls whether this Resource will be visible in the main Resource list in the Twingate Client. + IsVisible pulumi.BoolOutput `pulumi:"isVisible"` + // The name of the Resource + Name pulumi.StringOutput `pulumi:"name"` + // Restrict access to certain protocols and ports. By default or when this argument is not defined, there is no restriction, and all protocols and ports are allowed. + Protocols TwingateResourceProtocolsPtrOutput `pulumi:"protocols"` + // Remote Network ID where the Resource lives + RemoteNetworkId pulumi.StringOutput `pulumi:"remoteNetworkId"` +} + +// NewTwingateResource registers a new resource with the given unique name, arguments, and options. +func NewTwingateResource(ctx *pulumi.Context, + name string, args *TwingateResourceArgs, opts ...pulumi.ResourceOption) (*TwingateResource, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.Address == nil { + return nil, errors.New("invalid value for required argument 'Address'") + } + if args.RemoteNetworkId == nil { + return nil, errors.New("invalid value for required argument 'RemoteNetworkId'") + } + opts = internal.PkgResourceDefaultOpts(opts) + var resource TwingateResource + err := ctx.RegisterResource("twingate:index/twingateResource:TwingateResource", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetTwingateResource gets an existing TwingateResource 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 GetTwingateResource(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *TwingateResourceState, opts ...pulumi.ResourceOption) (*TwingateResource, error) { + var resource TwingateResource + err := ctx.ReadResource("twingate:index/twingateResource:TwingateResource", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering TwingateResource resources. +type twingateResourceState struct { + // Restrict access to certain groups or service accounts + Access *TwingateResourceAccess `pulumi:"access"` + // The Resource's IP/CIDR or FQDN/DNS zone + Address *string `pulumi:"address"` + // Set a DNS alias address for the Resource. Must be a DNS-valid name string. + Alias *string `pulumi:"alias"` + // Determines whether assignments in the access block will override any existing assignments. Default is `true`. If set to + // `false`, assignments made outside of Terraform will be ignored. + IsAuthoritative *bool `pulumi:"isAuthoritative"` + // Controls whether an "Open in Browser" shortcut will be shown for this Resource in the Twingate Client. + IsBrowserShortcutEnabled *bool `pulumi:"isBrowserShortcutEnabled"` + // Controls whether this Resource will be visible in the main Resource list in the Twingate Client. + IsVisible *bool `pulumi:"isVisible"` + // The name of the Resource + Name *string `pulumi:"name"` + // Restrict access to certain protocols and ports. By default or when this argument is not defined, there is no restriction, and all protocols and ports are allowed. + Protocols *TwingateResourceProtocols `pulumi:"protocols"` + // Remote Network ID where the Resource lives + RemoteNetworkId *string `pulumi:"remoteNetworkId"` +} + +type TwingateResourceState struct { + // Restrict access to certain groups or service accounts + Access TwingateResourceAccessPtrInput + // The Resource's IP/CIDR or FQDN/DNS zone + Address pulumi.StringPtrInput + // Set a DNS alias address for the Resource. Must be a DNS-valid name string. + Alias pulumi.StringPtrInput + // Determines whether assignments in the access block will override any existing assignments. Default is `true`. If set to + // `false`, assignments made outside of Terraform will be ignored. + IsAuthoritative pulumi.BoolPtrInput + // Controls whether an "Open in Browser" shortcut will be shown for this Resource in the Twingate Client. + IsBrowserShortcutEnabled pulumi.BoolPtrInput + // Controls whether this Resource will be visible in the main Resource list in the Twingate Client. + IsVisible pulumi.BoolPtrInput + // The name of the Resource + Name pulumi.StringPtrInput + // Restrict access to certain protocols and ports. By default or when this argument is not defined, there is no restriction, and all protocols and ports are allowed. + Protocols TwingateResourceProtocolsPtrInput + // Remote Network ID where the Resource lives + RemoteNetworkId pulumi.StringPtrInput +} + +func (TwingateResourceState) ElementType() reflect.Type { + return reflect.TypeOf((*twingateResourceState)(nil)).Elem() +} + +type twingateResourceArgs struct { + // Restrict access to certain groups or service accounts + Access *TwingateResourceAccess `pulumi:"access"` + // The Resource's IP/CIDR or FQDN/DNS zone + Address string `pulumi:"address"` + // Set a DNS alias address for the Resource. Must be a DNS-valid name string. + Alias *string `pulumi:"alias"` + // Determines whether assignments in the access block will override any existing assignments. Default is `true`. If set to + // `false`, assignments made outside of Terraform will be ignored. + IsAuthoritative *bool `pulumi:"isAuthoritative"` + // Controls whether an "Open in Browser" shortcut will be shown for this Resource in the Twingate Client. + IsBrowserShortcutEnabled *bool `pulumi:"isBrowserShortcutEnabled"` + // Controls whether this Resource will be visible in the main Resource list in the Twingate Client. + IsVisible *bool `pulumi:"isVisible"` + // The name of the Resource + Name *string `pulumi:"name"` + // Restrict access to certain protocols and ports. By default or when this argument is not defined, there is no restriction, and all protocols and ports are allowed. + Protocols *TwingateResourceProtocols `pulumi:"protocols"` + // Remote Network ID where the Resource lives + RemoteNetworkId string `pulumi:"remoteNetworkId"` +} + +// The set of arguments for constructing a TwingateResource resource. +type TwingateResourceArgs struct { + // Restrict access to certain groups or service accounts + Access TwingateResourceAccessPtrInput + // The Resource's IP/CIDR or FQDN/DNS zone + Address pulumi.StringInput + // Set a DNS alias address for the Resource. Must be a DNS-valid name string. + Alias pulumi.StringPtrInput + // Determines whether assignments in the access block will override any existing assignments. Default is `true`. If set to + // `false`, assignments made outside of Terraform will be ignored. + IsAuthoritative pulumi.BoolPtrInput + // Controls whether an "Open in Browser" shortcut will be shown for this Resource in the Twingate Client. + IsBrowserShortcutEnabled pulumi.BoolPtrInput + // Controls whether this Resource will be visible in the main Resource list in the Twingate Client. + IsVisible pulumi.BoolPtrInput + // The name of the Resource + Name pulumi.StringPtrInput + // Restrict access to certain protocols and ports. By default or when this argument is not defined, there is no restriction, and all protocols and ports are allowed. + Protocols TwingateResourceProtocolsPtrInput + // Remote Network ID where the Resource lives + RemoteNetworkId pulumi.StringInput +} + +func (TwingateResourceArgs) ElementType() reflect.Type { + return reflect.TypeOf((*twingateResourceArgs)(nil)).Elem() +} + +type TwingateResourceInput interface { + pulumi.Input + + ToTwingateResourceOutput() TwingateResourceOutput + ToTwingateResourceOutputWithContext(ctx context.Context) TwingateResourceOutput +} + +func (*TwingateResource) ElementType() reflect.Type { + return reflect.TypeOf((**TwingateResource)(nil)).Elem() +} + +func (i *TwingateResource) ToTwingateResourceOutput() TwingateResourceOutput { + return i.ToTwingateResourceOutputWithContext(context.Background()) +} + +func (i *TwingateResource) ToTwingateResourceOutputWithContext(ctx context.Context) TwingateResourceOutput { + return pulumi.ToOutputWithContext(ctx, i).(TwingateResourceOutput) +} + +// TwingateResourceArrayInput is an input type that accepts TwingateResourceArray and TwingateResourceArrayOutput values. +// You can construct a concrete instance of `TwingateResourceArrayInput` via: +// +// TwingateResourceArray{ TwingateResourceArgs{...} } +type TwingateResourceArrayInput interface { + pulumi.Input + + ToTwingateResourceArrayOutput() TwingateResourceArrayOutput + ToTwingateResourceArrayOutputWithContext(context.Context) TwingateResourceArrayOutput +} + +type TwingateResourceArray []TwingateResourceInput + +func (TwingateResourceArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*TwingateResource)(nil)).Elem() +} + +func (i TwingateResourceArray) ToTwingateResourceArrayOutput() TwingateResourceArrayOutput { + return i.ToTwingateResourceArrayOutputWithContext(context.Background()) +} + +func (i TwingateResourceArray) ToTwingateResourceArrayOutputWithContext(ctx context.Context) TwingateResourceArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(TwingateResourceArrayOutput) +} + +// TwingateResourceMapInput is an input type that accepts TwingateResourceMap and TwingateResourceMapOutput values. +// You can construct a concrete instance of `TwingateResourceMapInput` via: +// +// TwingateResourceMap{ "key": TwingateResourceArgs{...} } +type TwingateResourceMapInput interface { + pulumi.Input + + ToTwingateResourceMapOutput() TwingateResourceMapOutput + ToTwingateResourceMapOutputWithContext(context.Context) TwingateResourceMapOutput +} + +type TwingateResourceMap map[string]TwingateResourceInput + +func (TwingateResourceMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*TwingateResource)(nil)).Elem() +} + +func (i TwingateResourceMap) ToTwingateResourceMapOutput() TwingateResourceMapOutput { + return i.ToTwingateResourceMapOutputWithContext(context.Background()) +} + +func (i TwingateResourceMap) ToTwingateResourceMapOutputWithContext(ctx context.Context) TwingateResourceMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(TwingateResourceMapOutput) +} + +type TwingateResourceOutput struct{ *pulumi.OutputState } + +func (TwingateResourceOutput) ElementType() reflect.Type { + return reflect.TypeOf((**TwingateResource)(nil)).Elem() +} + +func (o TwingateResourceOutput) ToTwingateResourceOutput() TwingateResourceOutput { + return o +} + +func (o TwingateResourceOutput) ToTwingateResourceOutputWithContext(ctx context.Context) TwingateResourceOutput { + return o +} + +// Restrict access to certain groups or service accounts +func (o TwingateResourceOutput) Access() TwingateResourceAccessPtrOutput { + return o.ApplyT(func(v *TwingateResource) TwingateResourceAccessPtrOutput { return v.Access }).(TwingateResourceAccessPtrOutput) +} + +// The Resource's IP/CIDR or FQDN/DNS zone +func (o TwingateResourceOutput) Address() pulumi.StringOutput { + return o.ApplyT(func(v *TwingateResource) pulumi.StringOutput { return v.Address }).(pulumi.StringOutput) +} + +// Set a DNS alias address for the Resource. Must be a DNS-valid name string. +func (o TwingateResourceOutput) Alias() pulumi.StringPtrOutput { + return o.ApplyT(func(v *TwingateResource) pulumi.StringPtrOutput { return v.Alias }).(pulumi.StringPtrOutput) +} + +// Determines whether assignments in the access block will override any existing assignments. Default is `true`. If set to +// `false`, assignments made outside of Terraform will be ignored. +func (o TwingateResourceOutput) IsAuthoritative() pulumi.BoolOutput { + return o.ApplyT(func(v *TwingateResource) pulumi.BoolOutput { return v.IsAuthoritative }).(pulumi.BoolOutput) +} + +// Controls whether an "Open in Browser" shortcut will be shown for this Resource in the Twingate Client. +func (o TwingateResourceOutput) IsBrowserShortcutEnabled() pulumi.BoolOutput { + return o.ApplyT(func(v *TwingateResource) pulumi.BoolOutput { return v.IsBrowserShortcutEnabled }).(pulumi.BoolOutput) +} + +// Controls whether this Resource will be visible in the main Resource list in the Twingate Client. +func (o TwingateResourceOutput) IsVisible() pulumi.BoolOutput { + return o.ApplyT(func(v *TwingateResource) pulumi.BoolOutput { return v.IsVisible }).(pulumi.BoolOutput) +} + +// The name of the Resource +func (o TwingateResourceOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v *TwingateResource) pulumi.StringOutput { return v.Name }).(pulumi.StringOutput) +} + +// Restrict access to certain protocols and ports. By default or when this argument is not defined, there is no restriction, and all protocols and ports are allowed. +func (o TwingateResourceOutput) Protocols() TwingateResourceProtocolsPtrOutput { + return o.ApplyT(func(v *TwingateResource) TwingateResourceProtocolsPtrOutput { return v.Protocols }).(TwingateResourceProtocolsPtrOutput) +} + +// Remote Network ID where the Resource lives +func (o TwingateResourceOutput) RemoteNetworkId() pulumi.StringOutput { + return o.ApplyT(func(v *TwingateResource) pulumi.StringOutput { return v.RemoteNetworkId }).(pulumi.StringOutput) +} + +type TwingateResourceArrayOutput struct{ *pulumi.OutputState } + +func (TwingateResourceArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*TwingateResource)(nil)).Elem() +} + +func (o TwingateResourceArrayOutput) ToTwingateResourceArrayOutput() TwingateResourceArrayOutput { + return o +} + +func (o TwingateResourceArrayOutput) ToTwingateResourceArrayOutputWithContext(ctx context.Context) TwingateResourceArrayOutput { + return o +} + +func (o TwingateResourceArrayOutput) Index(i pulumi.IntInput) TwingateResourceOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *TwingateResource { + return vs[0].([]*TwingateResource)[vs[1].(int)] + }).(TwingateResourceOutput) +} + +type TwingateResourceMapOutput struct{ *pulumi.OutputState } + +func (TwingateResourceMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*TwingateResource)(nil)).Elem() +} + +func (o TwingateResourceMapOutput) ToTwingateResourceMapOutput() TwingateResourceMapOutput { + return o +} + +func (o TwingateResourceMapOutput) ToTwingateResourceMapOutputWithContext(ctx context.Context) TwingateResourceMapOutput { + return o +} + +func (o TwingateResourceMapOutput) MapIndex(k pulumi.StringInput) TwingateResourceOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *TwingateResource { + return vs[0].(map[string]*TwingateResource)[vs[1].(string)] + }).(TwingateResourceOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*TwingateResourceInput)(nil)).Elem(), &TwingateResource{}) + pulumi.RegisterInputType(reflect.TypeOf((*TwingateResourceArrayInput)(nil)).Elem(), TwingateResourceArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*TwingateResourceMapInput)(nil)).Elem(), TwingateResourceMap{}) + pulumi.RegisterOutputType(TwingateResourceOutput{}) + pulumi.RegisterOutputType(TwingateResourceArrayOutput{}) + pulumi.RegisterOutputType(TwingateResourceMapOutput{}) +} diff --git a/sdk/go/twingate/twingateServiceAccount.go b/sdk/go/twingate/twingateServiceAccount.go new file mode 100644 index 0000000..fcccc85 --- /dev/null +++ b/sdk/go/twingate/twingateServiceAccount.go @@ -0,0 +1,239 @@ +// 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 twingate + +import ( + "context" + "reflect" + + "github.com/Twingate/pulumi-twingate/sdk/go/twingate/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// Service Accounts offer a way to provide programmatic, centrally-controlled, and consistent access controls. +// +// ## Example Usage +// +// ```go +// package main +// +// import ( +// +// "github.com/Twingate/pulumi-twingate/sdk/go/twingate" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := twingate.NewTwingateServiceAccount(ctx, "githubActionsProd", nil) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +type TwingateServiceAccount struct { + pulumi.CustomResourceState + + // The name of the Service Account in Twingate + Name pulumi.StringOutput `pulumi:"name"` +} + +// NewTwingateServiceAccount registers a new resource with the given unique name, arguments, and options. +func NewTwingateServiceAccount(ctx *pulumi.Context, + name string, args *TwingateServiceAccountArgs, opts ...pulumi.ResourceOption) (*TwingateServiceAccount, error) { + if args == nil { + args = &TwingateServiceAccountArgs{} + } + + opts = internal.PkgResourceDefaultOpts(opts) + var resource TwingateServiceAccount + err := ctx.RegisterResource("twingate:index/twingateServiceAccount:TwingateServiceAccount", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetTwingateServiceAccount gets an existing TwingateServiceAccount 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 GetTwingateServiceAccount(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *TwingateServiceAccountState, opts ...pulumi.ResourceOption) (*TwingateServiceAccount, error) { + var resource TwingateServiceAccount + err := ctx.ReadResource("twingate:index/twingateServiceAccount:TwingateServiceAccount", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering TwingateServiceAccount resources. +type twingateServiceAccountState struct { + // The name of the Service Account in Twingate + Name *string `pulumi:"name"` +} + +type TwingateServiceAccountState struct { + // The name of the Service Account in Twingate + Name pulumi.StringPtrInput +} + +func (TwingateServiceAccountState) ElementType() reflect.Type { + return reflect.TypeOf((*twingateServiceAccountState)(nil)).Elem() +} + +type twingateServiceAccountArgs struct { + // The name of the Service Account in Twingate + Name *string `pulumi:"name"` +} + +// The set of arguments for constructing a TwingateServiceAccount resource. +type TwingateServiceAccountArgs struct { + // The name of the Service Account in Twingate + Name pulumi.StringPtrInput +} + +func (TwingateServiceAccountArgs) ElementType() reflect.Type { + return reflect.TypeOf((*twingateServiceAccountArgs)(nil)).Elem() +} + +type TwingateServiceAccountInput interface { + pulumi.Input + + ToTwingateServiceAccountOutput() TwingateServiceAccountOutput + ToTwingateServiceAccountOutputWithContext(ctx context.Context) TwingateServiceAccountOutput +} + +func (*TwingateServiceAccount) ElementType() reflect.Type { + return reflect.TypeOf((**TwingateServiceAccount)(nil)).Elem() +} + +func (i *TwingateServiceAccount) ToTwingateServiceAccountOutput() TwingateServiceAccountOutput { + return i.ToTwingateServiceAccountOutputWithContext(context.Background()) +} + +func (i *TwingateServiceAccount) ToTwingateServiceAccountOutputWithContext(ctx context.Context) TwingateServiceAccountOutput { + return pulumi.ToOutputWithContext(ctx, i).(TwingateServiceAccountOutput) +} + +// TwingateServiceAccountArrayInput is an input type that accepts TwingateServiceAccountArray and TwingateServiceAccountArrayOutput values. +// You can construct a concrete instance of `TwingateServiceAccountArrayInput` via: +// +// TwingateServiceAccountArray{ TwingateServiceAccountArgs{...} } +type TwingateServiceAccountArrayInput interface { + pulumi.Input + + ToTwingateServiceAccountArrayOutput() TwingateServiceAccountArrayOutput + ToTwingateServiceAccountArrayOutputWithContext(context.Context) TwingateServiceAccountArrayOutput +} + +type TwingateServiceAccountArray []TwingateServiceAccountInput + +func (TwingateServiceAccountArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*TwingateServiceAccount)(nil)).Elem() +} + +func (i TwingateServiceAccountArray) ToTwingateServiceAccountArrayOutput() TwingateServiceAccountArrayOutput { + return i.ToTwingateServiceAccountArrayOutputWithContext(context.Background()) +} + +func (i TwingateServiceAccountArray) ToTwingateServiceAccountArrayOutputWithContext(ctx context.Context) TwingateServiceAccountArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(TwingateServiceAccountArrayOutput) +} + +// TwingateServiceAccountMapInput is an input type that accepts TwingateServiceAccountMap and TwingateServiceAccountMapOutput values. +// You can construct a concrete instance of `TwingateServiceAccountMapInput` via: +// +// TwingateServiceAccountMap{ "key": TwingateServiceAccountArgs{...} } +type TwingateServiceAccountMapInput interface { + pulumi.Input + + ToTwingateServiceAccountMapOutput() TwingateServiceAccountMapOutput + ToTwingateServiceAccountMapOutputWithContext(context.Context) TwingateServiceAccountMapOutput +} + +type TwingateServiceAccountMap map[string]TwingateServiceAccountInput + +func (TwingateServiceAccountMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*TwingateServiceAccount)(nil)).Elem() +} + +func (i TwingateServiceAccountMap) ToTwingateServiceAccountMapOutput() TwingateServiceAccountMapOutput { + return i.ToTwingateServiceAccountMapOutputWithContext(context.Background()) +} + +func (i TwingateServiceAccountMap) ToTwingateServiceAccountMapOutputWithContext(ctx context.Context) TwingateServiceAccountMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(TwingateServiceAccountMapOutput) +} + +type TwingateServiceAccountOutput struct{ *pulumi.OutputState } + +func (TwingateServiceAccountOutput) ElementType() reflect.Type { + return reflect.TypeOf((**TwingateServiceAccount)(nil)).Elem() +} + +func (o TwingateServiceAccountOutput) ToTwingateServiceAccountOutput() TwingateServiceAccountOutput { + return o +} + +func (o TwingateServiceAccountOutput) ToTwingateServiceAccountOutputWithContext(ctx context.Context) TwingateServiceAccountOutput { + return o +} + +// The name of the Service Account in Twingate +func (o TwingateServiceAccountOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v *TwingateServiceAccount) pulumi.StringOutput { return v.Name }).(pulumi.StringOutput) +} + +type TwingateServiceAccountArrayOutput struct{ *pulumi.OutputState } + +func (TwingateServiceAccountArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*TwingateServiceAccount)(nil)).Elem() +} + +func (o TwingateServiceAccountArrayOutput) ToTwingateServiceAccountArrayOutput() TwingateServiceAccountArrayOutput { + return o +} + +func (o TwingateServiceAccountArrayOutput) ToTwingateServiceAccountArrayOutputWithContext(ctx context.Context) TwingateServiceAccountArrayOutput { + return o +} + +func (o TwingateServiceAccountArrayOutput) Index(i pulumi.IntInput) TwingateServiceAccountOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *TwingateServiceAccount { + return vs[0].([]*TwingateServiceAccount)[vs[1].(int)] + }).(TwingateServiceAccountOutput) +} + +type TwingateServiceAccountMapOutput struct{ *pulumi.OutputState } + +func (TwingateServiceAccountMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*TwingateServiceAccount)(nil)).Elem() +} + +func (o TwingateServiceAccountMapOutput) ToTwingateServiceAccountMapOutput() TwingateServiceAccountMapOutput { + return o +} + +func (o TwingateServiceAccountMapOutput) ToTwingateServiceAccountMapOutputWithContext(ctx context.Context) TwingateServiceAccountMapOutput { + return o +} + +func (o TwingateServiceAccountMapOutput) MapIndex(k pulumi.StringInput) TwingateServiceAccountOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *TwingateServiceAccount { + return vs[0].(map[string]*TwingateServiceAccount)[vs[1].(string)] + }).(TwingateServiceAccountOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*TwingateServiceAccountInput)(nil)).Elem(), &TwingateServiceAccount{}) + pulumi.RegisterInputType(reflect.TypeOf((*TwingateServiceAccountArrayInput)(nil)).Elem(), TwingateServiceAccountArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*TwingateServiceAccountMapInput)(nil)).Elem(), TwingateServiceAccountMap{}) + pulumi.RegisterOutputType(TwingateServiceAccountOutput{}) + pulumi.RegisterOutputType(TwingateServiceAccountArrayOutput{}) + pulumi.RegisterOutputType(TwingateServiceAccountMapOutput{}) +} diff --git a/sdk/go/twingate/twingateServiceAccountKey.go b/sdk/go/twingate/twingateServiceAccountKey.go new file mode 100644 index 0000000..204cca3 --- /dev/null +++ b/sdk/go/twingate/twingateServiceAccountKey.go @@ -0,0 +1,279 @@ +// 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 twingate + +import ( + "context" + "reflect" + + "errors" + "github.com/Twingate/pulumi-twingate/sdk/go/twingate/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// A Service Key authorizes access to all Resources assigned to a Service Account. +// +// ## Example Usage +// +// ```go +// package main +// +// import ( +// +// "github.com/Twingate/pulumi-twingate/sdk/go/twingate" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// githubActionsProd, err := twingate.NewTwingateServiceAccount(ctx, "githubActionsProd", nil) +// if err != nil { +// return err +// } +// _, err = twingate.NewTwingateServiceAccountKey(ctx, "githubKey", &twingate.TwingateServiceAccountKeyArgs{ +// ServiceAccountId: githubActionsProd.ID(), +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +type TwingateServiceAccountKey struct { + pulumi.CustomResourceState + + // The name of the Service Key + Name pulumi.StringOutput `pulumi:"name"` + // The id of the Service Account + ServiceAccountId pulumi.StringOutput `pulumi:"serviceAccountId"` + // Autogenerated Service Key token. Used to configure a Twingate Client running in headless mode. + Token pulumi.StringOutput `pulumi:"token"` +} + +// NewTwingateServiceAccountKey registers a new resource with the given unique name, arguments, and options. +func NewTwingateServiceAccountKey(ctx *pulumi.Context, + name string, args *TwingateServiceAccountKeyArgs, opts ...pulumi.ResourceOption) (*TwingateServiceAccountKey, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.ServiceAccountId == nil { + return nil, errors.New("invalid value for required argument 'ServiceAccountId'") + } + secrets := pulumi.AdditionalSecretOutputs([]string{ + "token", + }) + opts = append(opts, secrets) + opts = internal.PkgResourceDefaultOpts(opts) + var resource TwingateServiceAccountKey + err := ctx.RegisterResource("twingate:index/twingateServiceAccountKey:TwingateServiceAccountKey", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetTwingateServiceAccountKey gets an existing TwingateServiceAccountKey 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 GetTwingateServiceAccountKey(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *TwingateServiceAccountKeyState, opts ...pulumi.ResourceOption) (*TwingateServiceAccountKey, error) { + var resource TwingateServiceAccountKey + err := ctx.ReadResource("twingate:index/twingateServiceAccountKey:TwingateServiceAccountKey", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering TwingateServiceAccountKey resources. +type twingateServiceAccountKeyState struct { + // The name of the Service Key + Name *string `pulumi:"name"` + // The id of the Service Account + ServiceAccountId *string `pulumi:"serviceAccountId"` + // Autogenerated Service Key token. Used to configure a Twingate Client running in headless mode. + Token *string `pulumi:"token"` +} + +type TwingateServiceAccountKeyState struct { + // The name of the Service Key + Name pulumi.StringPtrInput + // The id of the Service Account + ServiceAccountId pulumi.StringPtrInput + // Autogenerated Service Key token. Used to configure a Twingate Client running in headless mode. + Token pulumi.StringPtrInput +} + +func (TwingateServiceAccountKeyState) ElementType() reflect.Type { + return reflect.TypeOf((*twingateServiceAccountKeyState)(nil)).Elem() +} + +type twingateServiceAccountKeyArgs struct { + // The name of the Service Key + Name *string `pulumi:"name"` + // The id of the Service Account + ServiceAccountId string `pulumi:"serviceAccountId"` +} + +// The set of arguments for constructing a TwingateServiceAccountKey resource. +type TwingateServiceAccountKeyArgs struct { + // The name of the Service Key + Name pulumi.StringPtrInput + // The id of the Service Account + ServiceAccountId pulumi.StringInput +} + +func (TwingateServiceAccountKeyArgs) ElementType() reflect.Type { + return reflect.TypeOf((*twingateServiceAccountKeyArgs)(nil)).Elem() +} + +type TwingateServiceAccountKeyInput interface { + pulumi.Input + + ToTwingateServiceAccountKeyOutput() TwingateServiceAccountKeyOutput + ToTwingateServiceAccountKeyOutputWithContext(ctx context.Context) TwingateServiceAccountKeyOutput +} + +func (*TwingateServiceAccountKey) ElementType() reflect.Type { + return reflect.TypeOf((**TwingateServiceAccountKey)(nil)).Elem() +} + +func (i *TwingateServiceAccountKey) ToTwingateServiceAccountKeyOutput() TwingateServiceAccountKeyOutput { + return i.ToTwingateServiceAccountKeyOutputWithContext(context.Background()) +} + +func (i *TwingateServiceAccountKey) ToTwingateServiceAccountKeyOutputWithContext(ctx context.Context) TwingateServiceAccountKeyOutput { + return pulumi.ToOutputWithContext(ctx, i).(TwingateServiceAccountKeyOutput) +} + +// TwingateServiceAccountKeyArrayInput is an input type that accepts TwingateServiceAccountKeyArray and TwingateServiceAccountKeyArrayOutput values. +// You can construct a concrete instance of `TwingateServiceAccountKeyArrayInput` via: +// +// TwingateServiceAccountKeyArray{ TwingateServiceAccountKeyArgs{...} } +type TwingateServiceAccountKeyArrayInput interface { + pulumi.Input + + ToTwingateServiceAccountKeyArrayOutput() TwingateServiceAccountKeyArrayOutput + ToTwingateServiceAccountKeyArrayOutputWithContext(context.Context) TwingateServiceAccountKeyArrayOutput +} + +type TwingateServiceAccountKeyArray []TwingateServiceAccountKeyInput + +func (TwingateServiceAccountKeyArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*TwingateServiceAccountKey)(nil)).Elem() +} + +func (i TwingateServiceAccountKeyArray) ToTwingateServiceAccountKeyArrayOutput() TwingateServiceAccountKeyArrayOutput { + return i.ToTwingateServiceAccountKeyArrayOutputWithContext(context.Background()) +} + +func (i TwingateServiceAccountKeyArray) ToTwingateServiceAccountKeyArrayOutputWithContext(ctx context.Context) TwingateServiceAccountKeyArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(TwingateServiceAccountKeyArrayOutput) +} + +// TwingateServiceAccountKeyMapInput is an input type that accepts TwingateServiceAccountKeyMap and TwingateServiceAccountKeyMapOutput values. +// You can construct a concrete instance of `TwingateServiceAccountKeyMapInput` via: +// +// TwingateServiceAccountKeyMap{ "key": TwingateServiceAccountKeyArgs{...} } +type TwingateServiceAccountKeyMapInput interface { + pulumi.Input + + ToTwingateServiceAccountKeyMapOutput() TwingateServiceAccountKeyMapOutput + ToTwingateServiceAccountKeyMapOutputWithContext(context.Context) TwingateServiceAccountKeyMapOutput +} + +type TwingateServiceAccountKeyMap map[string]TwingateServiceAccountKeyInput + +func (TwingateServiceAccountKeyMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*TwingateServiceAccountKey)(nil)).Elem() +} + +func (i TwingateServiceAccountKeyMap) ToTwingateServiceAccountKeyMapOutput() TwingateServiceAccountKeyMapOutput { + return i.ToTwingateServiceAccountKeyMapOutputWithContext(context.Background()) +} + +func (i TwingateServiceAccountKeyMap) ToTwingateServiceAccountKeyMapOutputWithContext(ctx context.Context) TwingateServiceAccountKeyMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(TwingateServiceAccountKeyMapOutput) +} + +type TwingateServiceAccountKeyOutput struct{ *pulumi.OutputState } + +func (TwingateServiceAccountKeyOutput) ElementType() reflect.Type { + return reflect.TypeOf((**TwingateServiceAccountKey)(nil)).Elem() +} + +func (o TwingateServiceAccountKeyOutput) ToTwingateServiceAccountKeyOutput() TwingateServiceAccountKeyOutput { + return o +} + +func (o TwingateServiceAccountKeyOutput) ToTwingateServiceAccountKeyOutputWithContext(ctx context.Context) TwingateServiceAccountKeyOutput { + return o +} + +// The name of the Service Key +func (o TwingateServiceAccountKeyOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v *TwingateServiceAccountKey) pulumi.StringOutput { return v.Name }).(pulumi.StringOutput) +} + +// The id of the Service Account +func (o TwingateServiceAccountKeyOutput) ServiceAccountId() pulumi.StringOutput { + return o.ApplyT(func(v *TwingateServiceAccountKey) pulumi.StringOutput { return v.ServiceAccountId }).(pulumi.StringOutput) +} + +// Autogenerated Service Key token. Used to configure a Twingate Client running in headless mode. +func (o TwingateServiceAccountKeyOutput) Token() pulumi.StringOutput { + return o.ApplyT(func(v *TwingateServiceAccountKey) pulumi.StringOutput { return v.Token }).(pulumi.StringOutput) +} + +type TwingateServiceAccountKeyArrayOutput struct{ *pulumi.OutputState } + +func (TwingateServiceAccountKeyArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*TwingateServiceAccountKey)(nil)).Elem() +} + +func (o TwingateServiceAccountKeyArrayOutput) ToTwingateServiceAccountKeyArrayOutput() TwingateServiceAccountKeyArrayOutput { + return o +} + +func (o TwingateServiceAccountKeyArrayOutput) ToTwingateServiceAccountKeyArrayOutputWithContext(ctx context.Context) TwingateServiceAccountKeyArrayOutput { + return o +} + +func (o TwingateServiceAccountKeyArrayOutput) Index(i pulumi.IntInput) TwingateServiceAccountKeyOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *TwingateServiceAccountKey { + return vs[0].([]*TwingateServiceAccountKey)[vs[1].(int)] + }).(TwingateServiceAccountKeyOutput) +} + +type TwingateServiceAccountKeyMapOutput struct{ *pulumi.OutputState } + +func (TwingateServiceAccountKeyMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*TwingateServiceAccountKey)(nil)).Elem() +} + +func (o TwingateServiceAccountKeyMapOutput) ToTwingateServiceAccountKeyMapOutput() TwingateServiceAccountKeyMapOutput { + return o +} + +func (o TwingateServiceAccountKeyMapOutput) ToTwingateServiceAccountKeyMapOutputWithContext(ctx context.Context) TwingateServiceAccountKeyMapOutput { + return o +} + +func (o TwingateServiceAccountKeyMapOutput) MapIndex(k pulumi.StringInput) TwingateServiceAccountKeyOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *TwingateServiceAccountKey { + return vs[0].(map[string]*TwingateServiceAccountKey)[vs[1].(string)] + }).(TwingateServiceAccountKeyOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*TwingateServiceAccountKeyInput)(nil)).Elem(), &TwingateServiceAccountKey{}) + pulumi.RegisterInputType(reflect.TypeOf((*TwingateServiceAccountKeyArrayInput)(nil)).Elem(), TwingateServiceAccountKeyArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*TwingateServiceAccountKeyMapInput)(nil)).Elem(), TwingateServiceAccountKeyMap{}) + pulumi.RegisterOutputType(TwingateServiceAccountKeyOutput{}) + pulumi.RegisterOutputType(TwingateServiceAccountKeyArrayOutput{}) + pulumi.RegisterOutputType(TwingateServiceAccountKeyMapOutput{}) +} diff --git a/sdk/go/twingate/twingateUser.go b/sdk/go/twingate/twingateUser.go new file mode 100644 index 0000000..7e5a520 --- /dev/null +++ b/sdk/go/twingate/twingateUser.go @@ -0,0 +1,335 @@ +// 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 twingate + +import ( + "context" + "reflect" + + "errors" + "github.com/Twingate/pulumi-twingate/sdk/go/twingate/internal" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// Users provides different levels of write capabilities across the Twingate Admin Console. For more information, see Twingate's [documentation](https://www.twingate.com/docs/users). +// +// ## Example Usage +// +// ```go +// package main +// +// import ( +// +// "github.com/Twingate/pulumi-twingate/sdk/go/twingate" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := twingate.NewTwingateUser(ctx, "user", &twingate.TwingateUserArgs{ +// Email: pulumi.String("sample@company.com"), +// FirstName: pulumi.String("Twin"), +// LastName: pulumi.String("Gate"), +// Role: pulumi.String("DEVOPS"), +// SendInvite: pulumi.Bool(true), +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +type TwingateUser struct { + pulumi.CustomResourceState + + // The User's email address + Email pulumi.StringOutput `pulumi:"email"` + // The User's first name + FirstName pulumi.StringOutput `pulumi:"firstName"` + // Determines whether the User is active or not. Inactive users will be not able to sign in. + IsActive pulumi.BoolOutput `pulumi:"isActive"` + // The User's last name + LastName pulumi.StringOutput `pulumi:"lastName"` + // Determines the User's role. Either ADMIN, DEVOPS, SUPPORT or MEMBER. + Role pulumi.StringOutput `pulumi:"role"` + // Determines whether to send an email invitation to the User. True by default. + SendInvite pulumi.BoolOutput `pulumi:"sendInvite"` + // Indicates the User's type. Either MANUAL or SYNCED. + Type pulumi.StringOutput `pulumi:"type"` +} + +// NewTwingateUser registers a new resource with the given unique name, arguments, and options. +func NewTwingateUser(ctx *pulumi.Context, + name string, args *TwingateUserArgs, opts ...pulumi.ResourceOption) (*TwingateUser, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.Email == nil { + return nil, errors.New("invalid value for required argument 'Email'") + } + opts = internal.PkgResourceDefaultOpts(opts) + var resource TwingateUser + err := ctx.RegisterResource("twingate:index/twingateUser:TwingateUser", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetTwingateUser gets an existing TwingateUser 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 GetTwingateUser(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *TwingateUserState, opts ...pulumi.ResourceOption) (*TwingateUser, error) { + var resource TwingateUser + err := ctx.ReadResource("twingate:index/twingateUser:TwingateUser", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering TwingateUser resources. +type twingateUserState struct { + // The User's email address + Email *string `pulumi:"email"` + // The User's first name + FirstName *string `pulumi:"firstName"` + // Determines whether the User is active or not. Inactive users will be not able to sign in. + IsActive *bool `pulumi:"isActive"` + // The User's last name + LastName *string `pulumi:"lastName"` + // Determines the User's role. Either ADMIN, DEVOPS, SUPPORT or MEMBER. + Role *string `pulumi:"role"` + // Determines whether to send an email invitation to the User. True by default. + SendInvite *bool `pulumi:"sendInvite"` + // Indicates the User's type. Either MANUAL or SYNCED. + Type *string `pulumi:"type"` +} + +type TwingateUserState struct { + // The User's email address + Email pulumi.StringPtrInput + // The User's first name + FirstName pulumi.StringPtrInput + // Determines whether the User is active or not. Inactive users will be not able to sign in. + IsActive pulumi.BoolPtrInput + // The User's last name + LastName pulumi.StringPtrInput + // Determines the User's role. Either ADMIN, DEVOPS, SUPPORT or MEMBER. + Role pulumi.StringPtrInput + // Determines whether to send an email invitation to the User. True by default. + SendInvite pulumi.BoolPtrInput + // Indicates the User's type. Either MANUAL or SYNCED. + Type pulumi.StringPtrInput +} + +func (TwingateUserState) ElementType() reflect.Type { + return reflect.TypeOf((*twingateUserState)(nil)).Elem() +} + +type twingateUserArgs struct { + // The User's email address + Email string `pulumi:"email"` + // The User's first name + FirstName *string `pulumi:"firstName"` + // Determines whether the User is active or not. Inactive users will be not able to sign in. + IsActive *bool `pulumi:"isActive"` + // The User's last name + LastName *string `pulumi:"lastName"` + // Determines the User's role. Either ADMIN, DEVOPS, SUPPORT or MEMBER. + Role *string `pulumi:"role"` + // Determines whether to send an email invitation to the User. True by default. + SendInvite *bool `pulumi:"sendInvite"` +} + +// The set of arguments for constructing a TwingateUser resource. +type TwingateUserArgs struct { + // The User's email address + Email pulumi.StringInput + // The User's first name + FirstName pulumi.StringPtrInput + // Determines whether the User is active or not. Inactive users will be not able to sign in. + IsActive pulumi.BoolPtrInput + // The User's last name + LastName pulumi.StringPtrInput + // Determines the User's role. Either ADMIN, DEVOPS, SUPPORT or MEMBER. + Role pulumi.StringPtrInput + // Determines whether to send an email invitation to the User. True by default. + SendInvite pulumi.BoolPtrInput +} + +func (TwingateUserArgs) ElementType() reflect.Type { + return reflect.TypeOf((*twingateUserArgs)(nil)).Elem() +} + +type TwingateUserInput interface { + pulumi.Input + + ToTwingateUserOutput() TwingateUserOutput + ToTwingateUserOutputWithContext(ctx context.Context) TwingateUserOutput +} + +func (*TwingateUser) ElementType() reflect.Type { + return reflect.TypeOf((**TwingateUser)(nil)).Elem() +} + +func (i *TwingateUser) ToTwingateUserOutput() TwingateUserOutput { + return i.ToTwingateUserOutputWithContext(context.Background()) +} + +func (i *TwingateUser) ToTwingateUserOutputWithContext(ctx context.Context) TwingateUserOutput { + return pulumi.ToOutputWithContext(ctx, i).(TwingateUserOutput) +} + +// TwingateUserArrayInput is an input type that accepts TwingateUserArray and TwingateUserArrayOutput values. +// You can construct a concrete instance of `TwingateUserArrayInput` via: +// +// TwingateUserArray{ TwingateUserArgs{...} } +type TwingateUserArrayInput interface { + pulumi.Input + + ToTwingateUserArrayOutput() TwingateUserArrayOutput + ToTwingateUserArrayOutputWithContext(context.Context) TwingateUserArrayOutput +} + +type TwingateUserArray []TwingateUserInput + +func (TwingateUserArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*TwingateUser)(nil)).Elem() +} + +func (i TwingateUserArray) ToTwingateUserArrayOutput() TwingateUserArrayOutput { + return i.ToTwingateUserArrayOutputWithContext(context.Background()) +} + +func (i TwingateUserArray) ToTwingateUserArrayOutputWithContext(ctx context.Context) TwingateUserArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(TwingateUserArrayOutput) +} + +// TwingateUserMapInput is an input type that accepts TwingateUserMap and TwingateUserMapOutput values. +// You can construct a concrete instance of `TwingateUserMapInput` via: +// +// TwingateUserMap{ "key": TwingateUserArgs{...} } +type TwingateUserMapInput interface { + pulumi.Input + + ToTwingateUserMapOutput() TwingateUserMapOutput + ToTwingateUserMapOutputWithContext(context.Context) TwingateUserMapOutput +} + +type TwingateUserMap map[string]TwingateUserInput + +func (TwingateUserMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*TwingateUser)(nil)).Elem() +} + +func (i TwingateUserMap) ToTwingateUserMapOutput() TwingateUserMapOutput { + return i.ToTwingateUserMapOutputWithContext(context.Background()) +} + +func (i TwingateUserMap) ToTwingateUserMapOutputWithContext(ctx context.Context) TwingateUserMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(TwingateUserMapOutput) +} + +type TwingateUserOutput struct{ *pulumi.OutputState } + +func (TwingateUserOutput) ElementType() reflect.Type { + return reflect.TypeOf((**TwingateUser)(nil)).Elem() +} + +func (o TwingateUserOutput) ToTwingateUserOutput() TwingateUserOutput { + return o +} + +func (o TwingateUserOutput) ToTwingateUserOutputWithContext(ctx context.Context) TwingateUserOutput { + return o +} + +// The User's email address +func (o TwingateUserOutput) Email() pulumi.StringOutput { + return o.ApplyT(func(v *TwingateUser) pulumi.StringOutput { return v.Email }).(pulumi.StringOutput) +} + +// The User's first name +func (o TwingateUserOutput) FirstName() pulumi.StringOutput { + return o.ApplyT(func(v *TwingateUser) pulumi.StringOutput { return v.FirstName }).(pulumi.StringOutput) +} + +// Determines whether the User is active or not. Inactive users will be not able to sign in. +func (o TwingateUserOutput) IsActive() pulumi.BoolOutput { + return o.ApplyT(func(v *TwingateUser) pulumi.BoolOutput { return v.IsActive }).(pulumi.BoolOutput) +} + +// The User's last name +func (o TwingateUserOutput) LastName() pulumi.StringOutput { + return o.ApplyT(func(v *TwingateUser) pulumi.StringOutput { return v.LastName }).(pulumi.StringOutput) +} + +// Determines the User's role. Either ADMIN, DEVOPS, SUPPORT or MEMBER. +func (o TwingateUserOutput) Role() pulumi.StringOutput { + return o.ApplyT(func(v *TwingateUser) pulumi.StringOutput { return v.Role }).(pulumi.StringOutput) +} + +// Determines whether to send an email invitation to the User. True by default. +func (o TwingateUserOutput) SendInvite() pulumi.BoolOutput { + return o.ApplyT(func(v *TwingateUser) pulumi.BoolOutput { return v.SendInvite }).(pulumi.BoolOutput) +} + +// Indicates the User's type. Either MANUAL or SYNCED. +func (o TwingateUserOutput) Type() pulumi.StringOutput { + return o.ApplyT(func(v *TwingateUser) pulumi.StringOutput { return v.Type }).(pulumi.StringOutput) +} + +type TwingateUserArrayOutput struct{ *pulumi.OutputState } + +func (TwingateUserArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*TwingateUser)(nil)).Elem() +} + +func (o TwingateUserArrayOutput) ToTwingateUserArrayOutput() TwingateUserArrayOutput { + return o +} + +func (o TwingateUserArrayOutput) ToTwingateUserArrayOutputWithContext(ctx context.Context) TwingateUserArrayOutput { + return o +} + +func (o TwingateUserArrayOutput) Index(i pulumi.IntInput) TwingateUserOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *TwingateUser { + return vs[0].([]*TwingateUser)[vs[1].(int)] + }).(TwingateUserOutput) +} + +type TwingateUserMapOutput struct{ *pulumi.OutputState } + +func (TwingateUserMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*TwingateUser)(nil)).Elem() +} + +func (o TwingateUserMapOutput) ToTwingateUserMapOutput() TwingateUserMapOutput { + return o +} + +func (o TwingateUserMapOutput) ToTwingateUserMapOutputWithContext(ctx context.Context) TwingateUserMapOutput { + return o +} + +func (o TwingateUserMapOutput) MapIndex(k pulumi.StringInput) TwingateUserOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *TwingateUser { + return vs[0].(map[string]*TwingateUser)[vs[1].(string)] + }).(TwingateUserOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*TwingateUserInput)(nil)).Elem(), &TwingateUser{}) + pulumi.RegisterInputType(reflect.TypeOf((*TwingateUserArrayInput)(nil)).Elem(), TwingateUserArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*TwingateUserMapInput)(nil)).Elem(), TwingateUserMap{}) + pulumi.RegisterOutputType(TwingateUserOutput{}) + pulumi.RegisterOutputType(TwingateUserArrayOutput{}) + pulumi.RegisterOutputType(TwingateUserMapOutput{}) +} 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..d6278a1 --- /dev/null +++ b/sdk/nodejs/README.md @@ -0,0 +1,4 @@ +> This provider is a derived work of the [Terraform Provider](https://github.com/Twingate/terraform-provider-twingate) +> 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-twingate` repo](https://github.com/Twingate/pulumi-twingate/issues); however, if that doesn't turn up anything, +> please consult the source [`terraform-provider-twingate` repo](https://github.com/Twingate/terraform-provider-twingate/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..12c9919 --- /dev/null +++ b/sdk/nodejs/config/vars.ts @@ -0,0 +1,70 @@ +// *** 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("twingate"); + +/** + * The access key for API operations. You can retrieve this from the Twingate Admin Console + * ([documentation](https://docs.twingate.com/docs/api-overview)). Alternatively, this can be specified using the + * TWINGATE_API_TOKEN environment variable. + */ +export declare const apiToken: string | undefined; +Object.defineProperty(exports, "apiToken", { + get() { + return __config.get("apiToken"); + }, + enumerable: true, +}); + +/** + * Specifies a retry limit for the http requests made. The default value is 10. Alternatively, this can be specified using + * the TWINGATE_HTTP_MAX_RETRY environment variable + */ +export declare const httpMaxRetry: number | undefined; +Object.defineProperty(exports, "httpMaxRetry", { + get() { + return __config.getObject("httpMaxRetry"); + }, + enumerable: true, +}); + +/** + * Specifies a time limit in seconds for the http requests made. The default value is 10 seconds. Alternatively, this can + * be specified using the TWINGATE_HTTP_TIMEOUT environment variable + */ +export declare const httpTimeout: number | undefined; +Object.defineProperty(exports, "httpTimeout", { + get() { + return __config.getObject("httpTimeout"); + }, + enumerable: true, +}); + +/** + * Your Twingate network ID for API operations. You can find it in the Admin Console URL, for example: + * `autoco.twingate.com`, where `autoco` is your network ID Alternatively, this can be specified using the TWINGATE_NETWORK + * environment variable. + */ +export declare const network: string | undefined; +Object.defineProperty(exports, "network", { + get() { + return __config.get("network"); + }, + enumerable: true, +}); + +/** + * The default is 'twingate.com' This is optional and shouldn't be changed under normal circumstances. + */ +export declare const url: string | undefined; +Object.defineProperty(exports, "url", { + get() { + return __config.get("url"); + }, + enumerable: true, +}); + diff --git a/sdk/nodejs/getTwingateConnector.ts b/sdk/nodejs/getTwingateConnector.ts new file mode 100644 index 0000000..76617ec --- /dev/null +++ b/sdk/nodejs/getTwingateConnector.ts @@ -0,0 +1,86 @@ +// *** 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"; + +/** + * Connectors provide connectivity to Remote Networks. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/understanding-access-nodes). + * + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as twingate from "@pulumi/twingate"; + * + * const foo = twingate.getTwingateConnector({ + * id: "", + * }); + * ``` + */ +export function getTwingateConnector(args: GetTwingateConnectorArgs, opts?: pulumi.InvokeOptions): Promise { + + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts || {}); + return pulumi.runtime.invoke("twingate:index/getTwingateConnector:getTwingateConnector", { + "id": args.id, + }, opts); +} + +/** + * A collection of arguments for invoking getTwingateConnector. + */ +export interface GetTwingateConnectorArgs { + /** + * The ID of the Connector. The ID for the Connector can be obtained from the Admin API or the URL string in the Admin Console. + */ + id: string; +} + +/** + * A collection of values returned by getTwingateConnector. + */ +export interface GetTwingateConnectorResult { + /** + * The ID of the Connector. The ID for the Connector can be obtained from the Admin API or the URL string in the Admin Console. + */ + readonly id: string; + /** + * The name of the Connector. + */ + readonly name: string; + /** + * The ID of the Remote Network the Connector is attached to. + */ + readonly remoteNetworkId: string; + /** + * Determines whether status notifications are enabled for the Connector. + */ + readonly statusUpdatesEnabled: boolean; +} +/** + * Connectors provide connectivity to Remote Networks. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/understanding-access-nodes). + * + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as twingate from "@pulumi/twingate"; + * + * const foo = twingate.getTwingateConnector({ + * id: "", + * }); + * ``` + */ +export function getTwingateConnectorOutput(args: GetTwingateConnectorOutputArgs, opts?: pulumi.InvokeOptions): pulumi.Output { + return pulumi.output(args).apply((a: any) => getTwingateConnector(a, opts)) +} + +/** + * A collection of arguments for invoking getTwingateConnector. + */ +export interface GetTwingateConnectorOutputArgs { + /** + * The ID of the Connector. The ID for the Connector can be obtained from the Admin API or the URL string in the Admin Console. + */ + id: pulumi.Input; +} diff --git a/sdk/nodejs/getTwingateConnectors.ts b/sdk/nodejs/getTwingateConnectors.ts new file mode 100644 index 0000000..998e92c --- /dev/null +++ b/sdk/nodejs/getTwingateConnectors.ts @@ -0,0 +1,77 @@ +// *** 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 inputs from "./types/input"; +import * as outputs from "./types/output"; +import * as utilities from "./utilities"; + +/** + * Connectors provide connectivity to Remote Networks. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/understanding-access-nodes). + * + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as twingate from "@pulumi/twingate"; + * + * const all = twingate.getTwingateConnectors({}); + * ``` + */ +export function getTwingateConnectors(args?: GetTwingateConnectorsArgs, opts?: pulumi.InvokeOptions): Promise { + args = args || {}; + + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts || {}); + return pulumi.runtime.invoke("twingate:index/getTwingateConnectors:getTwingateConnectors", { + "connectors": args.connectors, + }, opts); +} + +/** + * A collection of arguments for invoking getTwingateConnectors. + */ +export interface GetTwingateConnectorsArgs { + /** + * List of Connectors + */ + connectors?: inputs.GetTwingateConnectorsConnector[]; +} + +/** + * A collection of values returned by getTwingateConnectors. + */ +export interface GetTwingateConnectorsResult { + /** + * List of Connectors + */ + readonly connectors?: outputs.GetTwingateConnectorsConnector[]; + /** + * The provider-assigned unique ID for this managed resource. + */ + readonly id: string; +} +/** + * Connectors provide connectivity to Remote Networks. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/understanding-access-nodes). + * + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as twingate from "@pulumi/twingate"; + * + * const all = twingate.getTwingateConnectors({}); + * ``` + */ +export function getTwingateConnectorsOutput(args?: GetTwingateConnectorsOutputArgs, opts?: pulumi.InvokeOptions): pulumi.Output { + return pulumi.output(args).apply((a: any) => getTwingateConnectors(a, opts)) +} + +/** + * A collection of arguments for invoking getTwingateConnectors. + */ +export interface GetTwingateConnectorsOutputArgs { + /** + * List of Connectors + */ + connectors?: pulumi.Input[]>; +} diff --git a/sdk/nodejs/getTwingateGroup.ts b/sdk/nodejs/getTwingateGroup.ts new file mode 100644 index 0000000..bb68f0d --- /dev/null +++ b/sdk/nodejs/getTwingateGroup.ts @@ -0,0 +1,90 @@ +// *** 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"; + +/** + * Groups are how users are authorized to access Resources. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/groups). + * + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as twingate from "@pulumi/twingate"; + * + * const foo = twingate.getTwingateGroup({ + * id: "", + * }); + * ``` + */ +export function getTwingateGroup(args: GetTwingateGroupArgs, opts?: pulumi.InvokeOptions): Promise { + + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts || {}); + return pulumi.runtime.invoke("twingate:index/getTwingateGroup:getTwingateGroup", { + "id": args.id, + }, opts); +} + +/** + * A collection of arguments for invoking getTwingateGroup. + */ +export interface GetTwingateGroupArgs { + /** + * The ID of the Group. The ID for the Group can be obtained from the Admin API or the URL string in the Admin Console. + */ + id: string; +} + +/** + * A collection of values returned by getTwingateGroup. + */ +export interface GetTwingateGroupResult { + /** + * The ID of the Group. The ID for the Group can be obtained from the Admin API or the URL string in the Admin Console. + */ + readonly id: string; + /** + * Indicates if the Group is active + */ + readonly isActive: boolean; + /** + * The name of the Group + */ + readonly name: string; + /** + * The Security Policy assigned to the Group. + */ + readonly securityPolicyId: string; + /** + * The type of the Group + */ + readonly type: string; +} +/** + * Groups are how users are authorized to access Resources. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/groups). + * + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as twingate from "@pulumi/twingate"; + * + * const foo = twingate.getTwingateGroup({ + * id: "", + * }); + * ``` + */ +export function getTwingateGroupOutput(args: GetTwingateGroupOutputArgs, opts?: pulumi.InvokeOptions): pulumi.Output { + return pulumi.output(args).apply((a: any) => getTwingateGroup(a, opts)) +} + +/** + * A collection of arguments for invoking getTwingateGroup. + */ +export interface GetTwingateGroupOutputArgs { + /** + * The ID of the Group. The ID for the Group can be obtained from the Admin API or the URL string in the Admin Console. + */ + id: pulumi.Input; +} diff --git a/sdk/nodejs/getTwingateGroups.ts b/sdk/nodejs/getTwingateGroups.ts new file mode 100644 index 0000000..ccb7228 --- /dev/null +++ b/sdk/nodejs/getTwingateGroups.ts @@ -0,0 +1,120 @@ +// *** 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 inputs from "./types/input"; +import * as outputs from "./types/output"; +import * as utilities from "./utilities"; + +/** + * Groups are how users are authorized to access Resources. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/groups). + * + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as twingate from "@pulumi/twingate"; + * + * const foo = twingate.getTwingateGroups({ + * name: "", + * }); + * ``` + */ +export function getTwingateGroups(args?: GetTwingateGroupsArgs, opts?: pulumi.InvokeOptions): Promise { + args = args || {}; + + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts || {}); + return pulumi.runtime.invoke("twingate:index/getTwingateGroups:getTwingateGroups", { + "groups": args.groups, + "isActive": args.isActive, + "name": args.name, + "type": args.type, + }, opts); +} + +/** + * A collection of arguments for invoking getTwingateGroups. + */ +export interface GetTwingateGroupsArgs { + /** + * List of Groups + */ + groups?: inputs.GetTwingateGroupsGroup[]; + /** + * Indicates if the Group is active + */ + isActive?: boolean; + /** + * The name of the Group + */ + name?: string; + /** + * The type of the Group + */ + type?: string; +} + +/** + * A collection of values returned by getTwingateGroups. + */ +export interface GetTwingateGroupsResult { + /** + * List of Groups + */ + readonly groups?: outputs.GetTwingateGroupsGroup[]; + /** + * The provider-assigned unique ID for this managed resource. + */ + readonly id: string; + /** + * Returns only Groups matching the specified state. + */ + readonly isActive?: boolean; + /** + * Returns only Groups that exactly match this name. + */ + readonly name?: string; + /** + * Returns only Groups of the specified type (valid: `MANUAL`, `SYNCED`, `SYSTEM`). + */ + readonly type?: string; +} +/** + * Groups are how users are authorized to access Resources. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/groups). + * + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as twingate from "@pulumi/twingate"; + * + * const foo = twingate.getTwingateGroups({ + * name: "", + * }); + * ``` + */ +export function getTwingateGroupsOutput(args?: GetTwingateGroupsOutputArgs, opts?: pulumi.InvokeOptions): pulumi.Output { + return pulumi.output(args).apply((a: any) => getTwingateGroups(a, opts)) +} + +/** + * A collection of arguments for invoking getTwingateGroups. + */ +export interface GetTwingateGroupsOutputArgs { + /** + * List of Groups + */ + groups?: pulumi.Input[]>; + /** + * Indicates if the Group is active + */ + isActive?: pulumi.Input; + /** + * The name of the Group + */ + name?: pulumi.Input; + /** + * The type of the Group + */ + type?: pulumi.Input; +} diff --git a/sdk/nodejs/getTwingateRemoteNetwork.ts b/sdk/nodejs/getTwingateRemoteNetwork.ts new file mode 100644 index 0000000..229c0c0 --- /dev/null +++ b/sdk/nodejs/getTwingateRemoteNetwork.ts @@ -0,0 +1,92 @@ +// *** 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"; + +/** + * A Remote Network represents a single private network in Twingate that can have one or more Connectors and Resources assigned to it. You must create a Remote Network before creating Resources and Connectors that belong to it. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/remote-networks). + * + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as twingate from "@pulumi/twingate"; + * + * const foo = twingate.getTwingateRemoteNetwork({ + * name: "", + * }); + * ``` + */ +export function getTwingateRemoteNetwork(args?: GetTwingateRemoteNetworkArgs, opts?: pulumi.InvokeOptions): Promise { + args = args || {}; + + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts || {}); + return pulumi.runtime.invoke("twingate:index/getTwingateRemoteNetwork:getTwingateRemoteNetwork", { + "id": args.id, + "name": args.name, + }, opts); +} + +/** + * A collection of arguments for invoking getTwingateRemoteNetwork. + */ +export interface GetTwingateRemoteNetworkArgs { + /** + * The ID of the Remote Network + */ + id?: string; + /** + * The name of the Remote Network + */ + name?: string; +} + +/** + * A collection of values returned by getTwingateRemoteNetwork. + */ +export interface GetTwingateRemoteNetworkResult { + /** + * The ID of the Remote Network + */ + readonly id?: string; + /** + * The location of the Remote Network. Must be one of the following: AWS, AZURE, GOOGLE*CLOUD, ON*PREMISE, OTHER. + */ + readonly location: string; + /** + * The name of the Remote Network + */ + readonly name?: string; +} +/** + * A Remote Network represents a single private network in Twingate that can have one or more Connectors and Resources assigned to it. You must create a Remote Network before creating Resources and Connectors that belong to it. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/remote-networks). + * + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as twingate from "@pulumi/twingate"; + * + * const foo = twingate.getTwingateRemoteNetwork({ + * name: "", + * }); + * ``` + */ +export function getTwingateRemoteNetworkOutput(args?: GetTwingateRemoteNetworkOutputArgs, opts?: pulumi.InvokeOptions): pulumi.Output { + return pulumi.output(args).apply((a: any) => getTwingateRemoteNetwork(a, opts)) +} + +/** + * A collection of arguments for invoking getTwingateRemoteNetwork. + */ +export interface GetTwingateRemoteNetworkOutputArgs { + /** + * The ID of the Remote Network + */ + id?: pulumi.Input; + /** + * The name of the Remote Network + */ + name?: pulumi.Input; +} diff --git a/sdk/nodejs/getTwingateRemoteNetworks.ts b/sdk/nodejs/getTwingateRemoteNetworks.ts new file mode 100644 index 0000000..46515a8 --- /dev/null +++ b/sdk/nodejs/getTwingateRemoteNetworks.ts @@ -0,0 +1,77 @@ +// *** 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 inputs from "./types/input"; +import * as outputs from "./types/output"; +import * as utilities from "./utilities"; + +/** + * A Remote Network represents a single private network in Twingate that can have one or more Connectors and Resources assigned to it. You must create a Remote Network before creating Resources and Connectors that belong to it. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/remote-networks). + * + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as twingate from "@pulumi/twingate"; + * + * const all = twingate.getTwingateRemoteNetworks({}); + * ``` + */ +export function getTwingateRemoteNetworks(args?: GetTwingateRemoteNetworksArgs, opts?: pulumi.InvokeOptions): Promise { + args = args || {}; + + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts || {}); + return pulumi.runtime.invoke("twingate:index/getTwingateRemoteNetworks:getTwingateRemoteNetworks", { + "remoteNetworks": args.remoteNetworks, + }, opts); +} + +/** + * A collection of arguments for invoking getTwingateRemoteNetworks. + */ +export interface GetTwingateRemoteNetworksArgs { + /** + * List of Remote Networks + */ + remoteNetworks?: inputs.GetTwingateRemoteNetworksRemoteNetwork[]; +} + +/** + * A collection of values returned by getTwingateRemoteNetworks. + */ +export interface GetTwingateRemoteNetworksResult { + /** + * The provider-assigned unique ID for this managed resource. + */ + readonly id: string; + /** + * List of Remote Networks + */ + readonly remoteNetworks?: outputs.GetTwingateRemoteNetworksRemoteNetwork[]; +} +/** + * A Remote Network represents a single private network in Twingate that can have one or more Connectors and Resources assigned to it. You must create a Remote Network before creating Resources and Connectors that belong to it. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/remote-networks). + * + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as twingate from "@pulumi/twingate"; + * + * const all = twingate.getTwingateRemoteNetworks({}); + * ``` + */ +export function getTwingateRemoteNetworksOutput(args?: GetTwingateRemoteNetworksOutputArgs, opts?: pulumi.InvokeOptions): pulumi.Output { + return pulumi.output(args).apply((a: any) => getTwingateRemoteNetworks(a, opts)) +} + +/** + * A collection of arguments for invoking getTwingateRemoteNetworks. + */ +export interface GetTwingateRemoteNetworksOutputArgs { + /** + * List of Remote Networks + */ + remoteNetworks?: pulumi.Input[]>; +} diff --git a/sdk/nodejs/getTwingateResource.ts b/sdk/nodejs/getTwingateResource.ts new file mode 100644 index 0000000..f059e47 --- /dev/null +++ b/sdk/nodejs/getTwingateResource.ts @@ -0,0 +1,101 @@ +// *** 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 inputs from "./types/input"; +import * as outputs from "./types/output"; +import * as utilities from "./utilities"; + +/** + * Resources in Twingate represent any network destination address that you wish to provide private access to for users authorized via the Twingate Client application. Resources can be defined by either IP or DNS address, and all private DNS addresses will be automatically resolved with no client configuration changes. For more information, see the Twingate [documentation](https://docs.twingate.com/docs/resources-and-access-nodes). + * + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as twingate from "@pulumi/twingate"; + * + * const foo = twingate.getTwingateResource({ + * id: "", + * }); + * ``` + */ +export function getTwingateResource(args: GetTwingateResourceArgs, opts?: pulumi.InvokeOptions): Promise { + + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts || {}); + return pulumi.runtime.invoke("twingate:index/getTwingateResource:getTwingateResource", { + "id": args.id, + "protocols": args.protocols, + }, opts); +} + +/** + * A collection of arguments for invoking getTwingateResource. + */ +export interface GetTwingateResourceArgs { + /** + * The ID of the Resource. The ID for the Resource can be obtained from the Admin API or the URL string in the Admin Console. + */ + id: string; + /** + * By default (when this argument is not defined) no restriction is applied, and all protocols and ports are allowed. + */ + protocols?: inputs.GetTwingateResourceProtocol[]; +} + +/** + * A collection of values returned by getTwingateResource. + */ +export interface GetTwingateResourceResult { + /** + * The Resource's address, which may be an IP address, CIDR range, or DNS address + */ + readonly address: string; + /** + * The ID of the Resource. The ID for the Resource can be obtained from the Admin API or the URL string in the Admin Console. + */ + readonly id: string; + /** + * The name of the Resource + */ + readonly name: string; + /** + * By default (when this argument is not defined) no restriction is applied, and all protocols and ports are allowed. + */ + readonly protocols?: outputs.GetTwingateResourceProtocol[]; + /** + * The Remote Network ID that the Resource is associated with. Resources may only be associated with a single Remote Network. + */ + readonly remoteNetworkId: string; +} +/** + * Resources in Twingate represent any network destination address that you wish to provide private access to for users authorized via the Twingate Client application. Resources can be defined by either IP or DNS address, and all private DNS addresses will be automatically resolved with no client configuration changes. For more information, see the Twingate [documentation](https://docs.twingate.com/docs/resources-and-access-nodes). + * + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as twingate from "@pulumi/twingate"; + * + * const foo = twingate.getTwingateResource({ + * id: "", + * }); + * ``` + */ +export function getTwingateResourceOutput(args: GetTwingateResourceOutputArgs, opts?: pulumi.InvokeOptions): pulumi.Output { + return pulumi.output(args).apply((a: any) => getTwingateResource(a, opts)) +} + +/** + * A collection of arguments for invoking getTwingateResource. + */ +export interface GetTwingateResourceOutputArgs { + /** + * The ID of the Resource. The ID for the Resource can be obtained from the Admin API or the URL string in the Admin Console. + */ + id: pulumi.Input; + /** + * By default (when this argument is not defined) no restriction is applied, and all protocols and ports are allowed. + */ + protocols?: pulumi.Input[]>; +} diff --git a/sdk/nodejs/getTwingateResources.ts b/sdk/nodejs/getTwingateResources.ts new file mode 100644 index 0000000..9dd0e96 --- /dev/null +++ b/sdk/nodejs/getTwingateResources.ts @@ -0,0 +1,93 @@ +// *** 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 inputs from "./types/input"; +import * as outputs from "./types/output"; +import * as utilities from "./utilities"; + +/** + * Resources in Twingate represent servers on the private network that clients can connect to. Resources can be defined by IP, CIDR range, FQDN, or DNS zone. For more information, see the Twingate [documentation](https://docs.twingate.com/docs/resources-and-access-nodes). + * + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as twingate from "@pulumi/twingate"; + * + * const foo = twingate.getTwingateResources({ + * name: "", + * }); + * ``` + */ +export function getTwingateResources(args: GetTwingateResourcesArgs, opts?: pulumi.InvokeOptions): Promise { + + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts || {}); + return pulumi.runtime.invoke("twingate:index/getTwingateResources:getTwingateResources", { + "name": args.name, + "resources": args.resources, + }, opts); +} + +/** + * A collection of arguments for invoking getTwingateResources. + */ +export interface GetTwingateResourcesArgs { + /** + * The name of the Resource + */ + name: string; + /** + * List of Resources + */ + resources?: inputs.GetTwingateResourcesResource[]; +} + +/** + * A collection of values returned by getTwingateResources. + */ +export interface GetTwingateResourcesResult { + /** + * The provider-assigned unique ID for this managed resource. + */ + readonly id: string; + /** + * The name of the Resource + */ + readonly name: string; + /** + * List of Resources + */ + readonly resources?: outputs.GetTwingateResourcesResource[]; +} +/** + * Resources in Twingate represent servers on the private network that clients can connect to. Resources can be defined by IP, CIDR range, FQDN, or DNS zone. For more information, see the Twingate [documentation](https://docs.twingate.com/docs/resources-and-access-nodes). + * + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as twingate from "@pulumi/twingate"; + * + * const foo = twingate.getTwingateResources({ + * name: "", + * }); + * ``` + */ +export function getTwingateResourcesOutput(args: GetTwingateResourcesOutputArgs, opts?: pulumi.InvokeOptions): pulumi.Output { + return pulumi.output(args).apply((a: any) => getTwingateResources(a, opts)) +} + +/** + * A collection of arguments for invoking getTwingateResources. + */ +export interface GetTwingateResourcesOutputArgs { + /** + * The name of the Resource + */ + name: pulumi.Input; + /** + * List of Resources + */ + resources?: pulumi.Input[]>; +} diff --git a/sdk/nodejs/getTwingateSecurityPolicies.ts b/sdk/nodejs/getTwingateSecurityPolicies.ts new file mode 100644 index 0000000..0e8556f --- /dev/null +++ b/sdk/nodejs/getTwingateSecurityPolicies.ts @@ -0,0 +1,68 @@ +// *** 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 inputs from "./types/input"; +import * as outputs from "./types/output"; +import * as utilities from "./utilities"; + +/** + * Security Policies are defined in the Twingate Admin Console and determine user and device authentication requirements for Resources. + * + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as twingate from "@pulumi/twingate"; + * + * const all = twingate.getTwingateSecurityPolicies({}); + * ``` + */ +export function getTwingateSecurityPolicies(args?: GetTwingateSecurityPoliciesArgs, opts?: pulumi.InvokeOptions): Promise { + args = args || {}; + + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts || {}); + return pulumi.runtime.invoke("twingate:index/getTwingateSecurityPolicies:getTwingateSecurityPolicies", { + "securityPolicies": args.securityPolicies, + }, opts); +} + +/** + * A collection of arguments for invoking getTwingateSecurityPolicies. + */ +export interface GetTwingateSecurityPoliciesArgs { + securityPolicies?: inputs.GetTwingateSecurityPoliciesSecurityPolicy[]; +} + +/** + * A collection of values returned by getTwingateSecurityPolicies. + */ +export interface GetTwingateSecurityPoliciesResult { + /** + * The provider-assigned unique ID for this managed resource. + */ + readonly id: string; + readonly securityPolicies?: outputs.GetTwingateSecurityPoliciesSecurityPolicy[]; +} +/** + * Security Policies are defined in the Twingate Admin Console and determine user and device authentication requirements for Resources. + * + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as twingate from "@pulumi/twingate"; + * + * const all = twingate.getTwingateSecurityPolicies({}); + * ``` + */ +export function getTwingateSecurityPoliciesOutput(args?: GetTwingateSecurityPoliciesOutputArgs, opts?: pulumi.InvokeOptions): pulumi.Output { + return pulumi.output(args).apply((a: any) => getTwingateSecurityPolicies(a, opts)) +} + +/** + * A collection of arguments for invoking getTwingateSecurityPolicies. + */ +export interface GetTwingateSecurityPoliciesOutputArgs { + securityPolicies?: pulumi.Input[]>; +} diff --git a/sdk/nodejs/getTwingateSecurityPolicy.ts b/sdk/nodejs/getTwingateSecurityPolicy.ts new file mode 100644 index 0000000..e27c593 --- /dev/null +++ b/sdk/nodejs/getTwingateSecurityPolicy.ts @@ -0,0 +1,88 @@ +// *** 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"; + +/** + * Security Policies are defined in the Twingate Admin Console and determine user and device authentication requirements for Resources. + * + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as twingate from "@pulumi/twingate"; + * + * const foo = twingate.getTwingateSecurityPolicy({ + * name: "", + * }); + * ``` + */ +export function getTwingateSecurityPolicy(args?: GetTwingateSecurityPolicyArgs, opts?: pulumi.InvokeOptions): Promise { + args = args || {}; + + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts || {}); + return pulumi.runtime.invoke("twingate:index/getTwingateSecurityPolicy:getTwingateSecurityPolicy", { + "id": args.id, + "name": args.name, + }, opts); +} + +/** + * A collection of arguments for invoking getTwingateSecurityPolicy. + */ +export interface GetTwingateSecurityPolicyArgs { + /** + * Return a Security Policy by its ID. The ID for the Security Policy can be obtained from the Admin API or the URL string in the Admin Console. + */ + id?: string; + /** + * Return a Security Policy that exactly matches this name. + */ + name?: string; +} + +/** + * A collection of values returned by getTwingateSecurityPolicy. + */ +export interface GetTwingateSecurityPolicyResult { + /** + * Return a Security Policy by its ID. The ID for the Security Policy can be obtained from the Admin API or the URL string in the Admin Console. + */ + readonly id?: string; + /** + * Return a Security Policy that exactly matches this name. + */ + readonly name?: string; +} +/** + * Security Policies are defined in the Twingate Admin Console and determine user and device authentication requirements for Resources. + * + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as twingate from "@pulumi/twingate"; + * + * const foo = twingate.getTwingateSecurityPolicy({ + * name: "", + * }); + * ``` + */ +export function getTwingateSecurityPolicyOutput(args?: GetTwingateSecurityPolicyOutputArgs, opts?: pulumi.InvokeOptions): pulumi.Output { + return pulumi.output(args).apply((a: any) => getTwingateSecurityPolicy(a, opts)) +} + +/** + * A collection of arguments for invoking getTwingateSecurityPolicy. + */ +export interface GetTwingateSecurityPolicyOutputArgs { + /** + * Return a Security Policy by its ID. The ID for the Security Policy can be obtained from the Admin API or the URL string in the Admin Console. + */ + id?: pulumi.Input; + /** + * Return a Security Policy that exactly matches this name. + */ + name?: pulumi.Input; +} diff --git a/sdk/nodejs/getTwingateServiceAccounts.ts b/sdk/nodejs/getTwingateServiceAccounts.ts new file mode 100644 index 0000000..af83352 --- /dev/null +++ b/sdk/nodejs/getTwingateServiceAccounts.ts @@ -0,0 +1,94 @@ +// *** 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 inputs from "./types/input"; +import * as outputs from "./types/output"; +import * as utilities from "./utilities"; + +/** + * Service Accounts offer a way to provide programmatic, centrally-controlled, and consistent access controls. + * + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as twingate from "@pulumi/twingate"; + * + * const foo = twingate.getTwingateServiceAccounts({ + * name: "", + * }); + * ``` + */ +export function getTwingateServiceAccounts(args?: GetTwingateServiceAccountsArgs, opts?: pulumi.InvokeOptions): Promise { + args = args || {}; + + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts || {}); + return pulumi.runtime.invoke("twingate:index/getTwingateServiceAccounts:getTwingateServiceAccounts", { + "name": args.name, + "serviceAccounts": args.serviceAccounts, + }, opts); +} + +/** + * A collection of arguments for invoking getTwingateServiceAccounts. + */ +export interface GetTwingateServiceAccountsArgs { + /** + * Name of the Service Account + */ + name?: string; + /** + * List of Service Accounts + */ + serviceAccounts?: inputs.GetTwingateServiceAccountsServiceAccount[]; +} + +/** + * A collection of values returned by getTwingateServiceAccounts. + */ +export interface GetTwingateServiceAccountsResult { + /** + * The provider-assigned unique ID for this managed resource. + */ + readonly id: string; + /** + * Filter results by the name of the Service Account. + */ + readonly name?: string; + /** + * List of Service Accounts + */ + readonly serviceAccounts?: outputs.GetTwingateServiceAccountsServiceAccount[]; +} +/** + * Service Accounts offer a way to provide programmatic, centrally-controlled, and consistent access controls. + * + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as twingate from "@pulumi/twingate"; + * + * const foo = twingate.getTwingateServiceAccounts({ + * name: "", + * }); + * ``` + */ +export function getTwingateServiceAccountsOutput(args?: GetTwingateServiceAccountsOutputArgs, opts?: pulumi.InvokeOptions): pulumi.Output { + return pulumi.output(args).apply((a: any) => getTwingateServiceAccounts(a, opts)) +} + +/** + * A collection of arguments for invoking getTwingateServiceAccounts. + */ +export interface GetTwingateServiceAccountsOutputArgs { + /** + * Name of the Service Account + */ + name?: pulumi.Input; + /** + * List of Service Accounts + */ + serviceAccounts?: pulumi.Input[]>; +} diff --git a/sdk/nodejs/getTwingateUser.ts b/sdk/nodejs/getTwingateUser.ts new file mode 100644 index 0000000..17a02b7 --- /dev/null +++ b/sdk/nodejs/getTwingateUser.ts @@ -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! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as utilities from "./utilities"; + +/** + * Users in Twingate can be given access to Twingate Resources and may either be added manually or automatically synchronized with a 3rd party identity provider. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/users). + * + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as twingate from "@pulumi/twingate"; + * + * const foo = twingate.getTwingateUser({ + * id: "", + * }); + * ``` + */ +export function getTwingateUser(args: GetTwingateUserArgs, opts?: pulumi.InvokeOptions): Promise { + + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts || {}); + return pulumi.runtime.invoke("twingate:index/getTwingateUser:getTwingateUser", { + "id": args.id, + }, opts); +} + +/** + * A collection of arguments for invoking getTwingateUser. + */ +export interface GetTwingateUserArgs { + /** + * The ID of the User. The ID for the User can be obtained from the Admin API or the URL string in the Admin Console. + */ + id: string; +} + +/** + * A collection of values returned by getTwingateUser. + */ +export interface GetTwingateUserResult { + /** + * The email address of the User + */ + readonly email: string; + /** + * The first name of the User + */ + readonly firstName: string; + /** + * The ID of the User. The ID for the User can be obtained from the Admin API or the URL string in the Admin Console. + */ + readonly id: string; + /** + * Indicates whether the User is an admin + * + * @deprecated This read-only Boolean value will be deprecated in a future release. You may use the `role` value instead. + */ + readonly isAdmin: boolean; + /** + * The last name of the User + */ + readonly lastName: string; + /** + * Indicates the User's role. Either ADMIN, DEVOPS, SUPPORT, or MEMBER + */ + readonly role: string; + /** + * Indicates the User's type. Either MANUAL or SYNCED. + */ + readonly type: string; +} +/** + * Users in Twingate can be given access to Twingate Resources and may either be added manually or automatically synchronized with a 3rd party identity provider. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/users). + * + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as twingate from "@pulumi/twingate"; + * + * const foo = twingate.getTwingateUser({ + * id: "", + * }); + * ``` + */ +export function getTwingateUserOutput(args: GetTwingateUserOutputArgs, opts?: pulumi.InvokeOptions): pulumi.Output { + return pulumi.output(args).apply((a: any) => getTwingateUser(a, opts)) +} + +/** + * A collection of arguments for invoking getTwingateUser. + */ +export interface GetTwingateUserOutputArgs { + /** + * The ID of the User. The ID for the User can be obtained from the Admin API or the URL string in the Admin Console. + */ + id: pulumi.Input; +} diff --git a/sdk/nodejs/getTwingateUsers.ts b/sdk/nodejs/getTwingateUsers.ts new file mode 100644 index 0000000..85de849 --- /dev/null +++ b/sdk/nodejs/getTwingateUsers.ts @@ -0,0 +1,68 @@ +// *** 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 inputs from "./types/input"; +import * as outputs from "./types/output"; +import * as utilities from "./utilities"; + +/** + * Users in Twingate can be given access to Twingate Resources and may either be added manually or automatically synchronized with a 3rd party identity provider. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/users). + * + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as twingate from "@pulumi/twingate"; + * + * const all = twingate.getTwingateUsers({}); + * ``` + */ +export function getTwingateUsers(args?: GetTwingateUsersArgs, opts?: pulumi.InvokeOptions): Promise { + args = args || {}; + + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts || {}); + return pulumi.runtime.invoke("twingate:index/getTwingateUsers:getTwingateUsers", { + "users": args.users, + }, opts); +} + +/** + * A collection of arguments for invoking getTwingateUsers. + */ +export interface GetTwingateUsersArgs { + users?: inputs.GetTwingateUsersUser[]; +} + +/** + * A collection of values returned by getTwingateUsers. + */ +export interface GetTwingateUsersResult { + /** + * The provider-assigned unique ID for this managed resource. + */ + readonly id: string; + readonly users?: outputs.GetTwingateUsersUser[]; +} +/** + * Users in Twingate can be given access to Twingate Resources and may either be added manually or automatically synchronized with a 3rd party identity provider. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/users). + * + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as twingate from "@pulumi/twingate"; + * + * const all = twingate.getTwingateUsers({}); + * ``` + */ +export function getTwingateUsersOutput(args?: GetTwingateUsersOutputArgs, opts?: pulumi.InvokeOptions): pulumi.Output { + return pulumi.output(args).apply((a: any) => getTwingateUsers(a, opts)) +} + +/** + * A collection of arguments for invoking getTwingateUsers. + */ +export interface GetTwingateUsersOutputArgs { + users?: pulumi.Input[]>; +} diff --git a/sdk/nodejs/index.ts b/sdk/nodejs/index.ts new file mode 100644 index 0000000..2802d60 --- /dev/null +++ b/sdk/nodejs/index.ts @@ -0,0 +1,169 @@ +// *** 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 { GetTwingateConnectorArgs, GetTwingateConnectorResult, GetTwingateConnectorOutputArgs } from "./getTwingateConnector"; +export const getTwingateConnector: typeof import("./getTwingateConnector").getTwingateConnector = null as any; +export const getTwingateConnectorOutput: typeof import("./getTwingateConnector").getTwingateConnectorOutput = null as any; +utilities.lazyLoad(exports, ["getTwingateConnector","getTwingateConnectorOutput"], () => require("./getTwingateConnector")); + +export { GetTwingateConnectorsArgs, GetTwingateConnectorsResult, GetTwingateConnectorsOutputArgs } from "./getTwingateConnectors"; +export const getTwingateConnectors: typeof import("./getTwingateConnectors").getTwingateConnectors = null as any; +export const getTwingateConnectorsOutput: typeof import("./getTwingateConnectors").getTwingateConnectorsOutput = null as any; +utilities.lazyLoad(exports, ["getTwingateConnectors","getTwingateConnectorsOutput"], () => require("./getTwingateConnectors")); + +export { GetTwingateGroupArgs, GetTwingateGroupResult, GetTwingateGroupOutputArgs } from "./getTwingateGroup"; +export const getTwingateGroup: typeof import("./getTwingateGroup").getTwingateGroup = null as any; +export const getTwingateGroupOutput: typeof import("./getTwingateGroup").getTwingateGroupOutput = null as any; +utilities.lazyLoad(exports, ["getTwingateGroup","getTwingateGroupOutput"], () => require("./getTwingateGroup")); + +export { GetTwingateGroupsArgs, GetTwingateGroupsResult, GetTwingateGroupsOutputArgs } from "./getTwingateGroups"; +export const getTwingateGroups: typeof import("./getTwingateGroups").getTwingateGroups = null as any; +export const getTwingateGroupsOutput: typeof import("./getTwingateGroups").getTwingateGroupsOutput = null as any; +utilities.lazyLoad(exports, ["getTwingateGroups","getTwingateGroupsOutput"], () => require("./getTwingateGroups")); + +export { GetTwingateRemoteNetworkArgs, GetTwingateRemoteNetworkResult, GetTwingateRemoteNetworkOutputArgs } from "./getTwingateRemoteNetwork"; +export const getTwingateRemoteNetwork: typeof import("./getTwingateRemoteNetwork").getTwingateRemoteNetwork = null as any; +export const getTwingateRemoteNetworkOutput: typeof import("./getTwingateRemoteNetwork").getTwingateRemoteNetworkOutput = null as any; +utilities.lazyLoad(exports, ["getTwingateRemoteNetwork","getTwingateRemoteNetworkOutput"], () => require("./getTwingateRemoteNetwork")); + +export { GetTwingateRemoteNetworksArgs, GetTwingateRemoteNetworksResult, GetTwingateRemoteNetworksOutputArgs } from "./getTwingateRemoteNetworks"; +export const getTwingateRemoteNetworks: typeof import("./getTwingateRemoteNetworks").getTwingateRemoteNetworks = null as any; +export const getTwingateRemoteNetworksOutput: typeof import("./getTwingateRemoteNetworks").getTwingateRemoteNetworksOutput = null as any; +utilities.lazyLoad(exports, ["getTwingateRemoteNetworks","getTwingateRemoteNetworksOutput"], () => require("./getTwingateRemoteNetworks")); + +export { GetTwingateResourceArgs, GetTwingateResourceResult, GetTwingateResourceOutputArgs } from "./getTwingateResource"; +export const getTwingateResource: typeof import("./getTwingateResource").getTwingateResource = null as any; +export const getTwingateResourceOutput: typeof import("./getTwingateResource").getTwingateResourceOutput = null as any; +utilities.lazyLoad(exports, ["getTwingateResource","getTwingateResourceOutput"], () => require("./getTwingateResource")); + +export { GetTwingateResourcesArgs, GetTwingateResourcesResult, GetTwingateResourcesOutputArgs } from "./getTwingateResources"; +export const getTwingateResources: typeof import("./getTwingateResources").getTwingateResources = null as any; +export const getTwingateResourcesOutput: typeof import("./getTwingateResources").getTwingateResourcesOutput = null as any; +utilities.lazyLoad(exports, ["getTwingateResources","getTwingateResourcesOutput"], () => require("./getTwingateResources")); + +export { GetTwingateSecurityPoliciesArgs, GetTwingateSecurityPoliciesResult, GetTwingateSecurityPoliciesOutputArgs } from "./getTwingateSecurityPolicies"; +export const getTwingateSecurityPolicies: typeof import("./getTwingateSecurityPolicies").getTwingateSecurityPolicies = null as any; +export const getTwingateSecurityPoliciesOutput: typeof import("./getTwingateSecurityPolicies").getTwingateSecurityPoliciesOutput = null as any; +utilities.lazyLoad(exports, ["getTwingateSecurityPolicies","getTwingateSecurityPoliciesOutput"], () => require("./getTwingateSecurityPolicies")); + +export { GetTwingateSecurityPolicyArgs, GetTwingateSecurityPolicyResult, GetTwingateSecurityPolicyOutputArgs } from "./getTwingateSecurityPolicy"; +export const getTwingateSecurityPolicy: typeof import("./getTwingateSecurityPolicy").getTwingateSecurityPolicy = null as any; +export const getTwingateSecurityPolicyOutput: typeof import("./getTwingateSecurityPolicy").getTwingateSecurityPolicyOutput = null as any; +utilities.lazyLoad(exports, ["getTwingateSecurityPolicy","getTwingateSecurityPolicyOutput"], () => require("./getTwingateSecurityPolicy")); + +export { GetTwingateServiceAccountsArgs, GetTwingateServiceAccountsResult, GetTwingateServiceAccountsOutputArgs } from "./getTwingateServiceAccounts"; +export const getTwingateServiceAccounts: typeof import("./getTwingateServiceAccounts").getTwingateServiceAccounts = null as any; +export const getTwingateServiceAccountsOutput: typeof import("./getTwingateServiceAccounts").getTwingateServiceAccountsOutput = null as any; +utilities.lazyLoad(exports, ["getTwingateServiceAccounts","getTwingateServiceAccountsOutput"], () => require("./getTwingateServiceAccounts")); + +export { GetTwingateUserArgs, GetTwingateUserResult, GetTwingateUserOutputArgs } from "./getTwingateUser"; +export const getTwingateUser: typeof import("./getTwingateUser").getTwingateUser = null as any; +export const getTwingateUserOutput: typeof import("./getTwingateUser").getTwingateUserOutput = null as any; +utilities.lazyLoad(exports, ["getTwingateUser","getTwingateUserOutput"], () => require("./getTwingateUser")); + +export { GetTwingateUsersArgs, GetTwingateUsersResult, GetTwingateUsersOutputArgs } from "./getTwingateUsers"; +export const getTwingateUsers: typeof import("./getTwingateUsers").getTwingateUsers = null as any; +export const getTwingateUsersOutput: typeof import("./getTwingateUsers").getTwingateUsersOutput = null as any; +utilities.lazyLoad(exports, ["getTwingateUsers","getTwingateUsersOutput"], () => require("./getTwingateUsers")); + +export { ProviderArgs } from "./provider"; +export type Provider = import("./provider").Provider; +export const Provider: typeof import("./provider").Provider = null as any; +utilities.lazyLoad(exports, ["Provider"], () => require("./provider")); + +export { TwingateConnectorArgs, TwingateConnectorState } from "./twingateConnector"; +export type TwingateConnector = import("./twingateConnector").TwingateConnector; +export const TwingateConnector: typeof import("./twingateConnector").TwingateConnector = null as any; +utilities.lazyLoad(exports, ["TwingateConnector"], () => require("./twingateConnector")); + +export { TwingateConnectorTokensArgs, TwingateConnectorTokensState } from "./twingateConnectorTokens"; +export type TwingateConnectorTokens = import("./twingateConnectorTokens").TwingateConnectorTokens; +export const TwingateConnectorTokens: typeof import("./twingateConnectorTokens").TwingateConnectorTokens = null as any; +utilities.lazyLoad(exports, ["TwingateConnectorTokens"], () => require("./twingateConnectorTokens")); + +export { TwingateGroupArgs, TwingateGroupState } from "./twingateGroup"; +export type TwingateGroup = import("./twingateGroup").TwingateGroup; +export const TwingateGroup: typeof import("./twingateGroup").TwingateGroup = null as any; +utilities.lazyLoad(exports, ["TwingateGroup"], () => require("./twingateGroup")); + +export { TwingateRemoteNetworkArgs, TwingateRemoteNetworkState } from "./twingateRemoteNetwork"; +export type TwingateRemoteNetwork = import("./twingateRemoteNetwork").TwingateRemoteNetwork; +export const TwingateRemoteNetwork: typeof import("./twingateRemoteNetwork").TwingateRemoteNetwork = null as any; +utilities.lazyLoad(exports, ["TwingateRemoteNetwork"], () => require("./twingateRemoteNetwork")); + +export { TwingateResourceArgs, TwingateResourceState } from "./twingateResource"; +export type TwingateResource = import("./twingateResource").TwingateResource; +export const TwingateResource: typeof import("./twingateResource").TwingateResource = null as any; +utilities.lazyLoad(exports, ["TwingateResource"], () => require("./twingateResource")); + +export { TwingateServiceAccountArgs, TwingateServiceAccountState } from "./twingateServiceAccount"; +export type TwingateServiceAccount = import("./twingateServiceAccount").TwingateServiceAccount; +export const TwingateServiceAccount: typeof import("./twingateServiceAccount").TwingateServiceAccount = null as any; +utilities.lazyLoad(exports, ["TwingateServiceAccount"], () => require("./twingateServiceAccount")); + +export { TwingateServiceAccountKeyArgs, TwingateServiceAccountKeyState } from "./twingateServiceAccountKey"; +export type TwingateServiceAccountKey = import("./twingateServiceAccountKey").TwingateServiceAccountKey; +export const TwingateServiceAccountKey: typeof import("./twingateServiceAccountKey").TwingateServiceAccountKey = null as any; +utilities.lazyLoad(exports, ["TwingateServiceAccountKey"], () => require("./twingateServiceAccountKey")); + +export { TwingateUserArgs, TwingateUserState } from "./twingateUser"; +export type TwingateUser = import("./twingateUser").TwingateUser; +export const TwingateUser: typeof import("./twingateUser").TwingateUser = null as any; +utilities.lazyLoad(exports, ["TwingateUser"], () => require("./twingateUser")); + + +// Export sub-modules: +import * as config from "./config"; +import * as types from "./types"; + +export { + config, + types, +}; + +const _module = { + version: utilities.getVersion(), + construct: (name: string, type: string, urn: string): pulumi.Resource => { + switch (type) { + case "twingate:index/twingateConnector:TwingateConnector": + return new TwingateConnector(name, undefined, { urn }) + case "twingate:index/twingateConnectorTokens:TwingateConnectorTokens": + return new TwingateConnectorTokens(name, undefined, { urn }) + case "twingate:index/twingateGroup:TwingateGroup": + return new TwingateGroup(name, undefined, { urn }) + case "twingate:index/twingateRemoteNetwork:TwingateRemoteNetwork": + return new TwingateRemoteNetwork(name, undefined, { urn }) + case "twingate:index/twingateResource:TwingateResource": + return new TwingateResource(name, undefined, { urn }) + case "twingate:index/twingateServiceAccount:TwingateServiceAccount": + return new TwingateServiceAccount(name, undefined, { urn }) + case "twingate:index/twingateServiceAccountKey:TwingateServiceAccountKey": + return new TwingateServiceAccountKey(name, undefined, { urn }) + case "twingate:index/twingateUser:TwingateUser": + return new TwingateUser(name, undefined, { urn }) + default: + throw new Error(`unknown resource type ${type}`); + } + }, +}; +pulumi.runtime.registerResourceModule("twingate", "index/twingateConnector", _module) +pulumi.runtime.registerResourceModule("twingate", "index/twingateConnectorTokens", _module) +pulumi.runtime.registerResourceModule("twingate", "index/twingateGroup", _module) +pulumi.runtime.registerResourceModule("twingate", "index/twingateRemoteNetwork", _module) +pulumi.runtime.registerResourceModule("twingate", "index/twingateResource", _module) +pulumi.runtime.registerResourceModule("twingate", "index/twingateServiceAccount", _module) +pulumi.runtime.registerResourceModule("twingate", "index/twingateServiceAccountKey", _module) +pulumi.runtime.registerResourceModule("twingate", "index/twingateUser", _module) +pulumi.runtime.registerResourcePackage("twingate", { + version: utilities.getVersion(), + constructProvider: (name: string, type: string, urn: string): pulumi.ProviderResource => { + if (type !== "pulumi:providers:twingate") { + throw new Error(`unknown provider type ${type}`); + } + return new Provider(name, undefined, { urn }); + }, +}); diff --git a/sdk/nodejs/package.json b/sdk/nodejs/package.json new file mode 100644 index 0000000..8020b63 --- /dev/null +++ b/sdk/nodejs/package.json @@ -0,0 +1,28 @@ +{ + "name": "@pulumi/twingate", + "version": "${VERSION}", + "description": "A Pulumi package for creating and managing twingate cloud resources.", + "keywords": [ + "pulumi", + "twingate", + "category/infrastructure" + ], + "homepage": "https://www.twingate.com", + "repository": "https://github.com/Twingate/pulumi-twingate", + "license": "Apache-2.0", + "scripts": { + "build": "tsc" + }, + "dependencies": { + "@pulumi/pulumi": "^3.0.0" + }, + "devDependencies": { + "@types/mime": "^2.0.0", + "@types/node": "^10.0.0", + "typescript": "^4.3.5" + }, + "pulumi": { + "resource": true, + "name": "twingate" + } +} diff --git a/sdk/nodejs/provider.ts b/sdk/nodejs/provider.ts new file mode 100644 index 0000000..0d9c426 --- /dev/null +++ b/sdk/nodejs/provider.ts @@ -0,0 +1,99 @@ +// *** 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 twingate 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 = 'twingate'; + + /** + * 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'] === "pulumi:providers:" + Provider.__pulumiType; + } + + /** + * The access key for API operations. You can retrieve this from the Twingate Admin Console + * ([documentation](https://docs.twingate.com/docs/api-overview)). Alternatively, this can be specified using the + * TWINGATE_API_TOKEN environment variable. + */ + public readonly apiToken!: pulumi.Output; + /** + * Your Twingate network ID for API operations. You can find it in the Admin Console URL, for example: + * `autoco.twingate.com`, where `autoco` is your network ID Alternatively, this can be specified using the TWINGATE_NETWORK + * environment variable. + */ + public readonly network!: pulumi.Output; + /** + * The default is 'twingate.com' This is optional and shouldn't be changed under normal circumstances. + */ + 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 || {}; + { + resourceInputs["apiToken"] = args?.apiToken ? pulumi.secret(args.apiToken) : undefined; + resourceInputs["httpMaxRetry"] = pulumi.output(args ? args.httpMaxRetry : undefined).apply(JSON.stringify); + resourceInputs["httpTimeout"] = pulumi.output(args ? args.httpTimeout : undefined).apply(JSON.stringify); + resourceInputs["network"] = args ? args.network : undefined; + resourceInputs["url"] = args ? args.url : undefined; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + const secretOpts = { additionalSecretOutputs: ["apiToken"] }; + opts = pulumi.mergeOptions(opts, secretOpts); + super(Provider.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * The set of arguments for constructing a Provider resource. + */ +export interface ProviderArgs { + /** + * The access key for API operations. You can retrieve this from the Twingate Admin Console + * ([documentation](https://docs.twingate.com/docs/api-overview)). Alternatively, this can be specified using the + * TWINGATE_API_TOKEN environment variable. + */ + apiToken?: pulumi.Input; + /** + * Specifies a retry limit for the http requests made. The default value is 10. Alternatively, this can be specified using + * the TWINGATE_HTTP_MAX_RETRY environment variable + */ + httpMaxRetry?: pulumi.Input; + /** + * Specifies a time limit in seconds for the http requests made. The default value is 10 seconds. Alternatively, this can + * be specified using the TWINGATE_HTTP_TIMEOUT environment variable + */ + httpTimeout?: pulumi.Input; + /** + * Your Twingate network ID for API operations. You can find it in the Admin Console URL, for example: + * `autoco.twingate.com`, where `autoco` is your network ID Alternatively, this can be specified using the TWINGATE_NETWORK + * environment variable. + */ + network?: pulumi.Input; + /** + * The default is 'twingate.com' This is optional and shouldn't be changed under normal circumstances. + */ + url?: pulumi.Input; +} diff --git a/sdk/nodejs/tsconfig.json b/sdk/nodejs/tsconfig.json new file mode 100644 index 0000000..2154dd5 --- /dev/null +++ b/sdk/nodejs/tsconfig.json @@ -0,0 +1,46 @@ +{ + "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", + "getTwingateConnector.ts", + "getTwingateConnectors.ts", + "getTwingateGroup.ts", + "getTwingateGroups.ts", + "getTwingateRemoteNetwork.ts", + "getTwingateRemoteNetworks.ts", + "getTwingateResource.ts", + "getTwingateResources.ts", + "getTwingateSecurityPolicies.ts", + "getTwingateSecurityPolicy.ts", + "getTwingateServiceAccounts.ts", + "getTwingateUser.ts", + "getTwingateUsers.ts", + "index.ts", + "provider.ts", + "twingateConnector.ts", + "twingateConnectorTokens.ts", + "twingateGroup.ts", + "twingateRemoteNetwork.ts", + "twingateResource.ts", + "twingateServiceAccount.ts", + "twingateServiceAccountKey.ts", + "twingateUser.ts", + "types/index.ts", + "types/input.ts", + "types/output.ts", + "utilities.ts" + ] +} diff --git a/sdk/nodejs/twingateConnector.ts b/sdk/nodejs/twingateConnector.ts new file mode 100644 index 0000000..2ebb0d9 --- /dev/null +++ b/sdk/nodejs/twingateConnector.ts @@ -0,0 +1,131 @@ +// *** 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"; + +/** + * Connectors provide connectivity to Remote Networks. This resource type will create the Connector in the Twingate Admin Console, but in order to successfully deploy it, you must also generate Connector tokens that authenticate the Connector with Twingate. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/understanding-access-nodes). + * + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as twingate from "@pulumi/twingate"; + * + * const awsNetwork = new twingate.TwingateRemoteNetwork("awsNetwork", {}); + * const awsConnector = new twingate.TwingateConnector("awsConnector", {remoteNetworkId: awsNetwork.id}); + * ``` + * + * ## Import + * + * ```sh + * $ pulumi import twingate:index/twingateConnector:TwingateConnector aws_connector Q29ubmVjdG9yOjI2NzM= + * ``` + */ +export class TwingateConnector extends pulumi.CustomResource { + /** + * Get an existing TwingateConnector 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?: TwingateConnectorState, opts?: pulumi.CustomResourceOptions): TwingateConnector { + return new TwingateConnector(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'twingate:index/twingateConnector:TwingateConnector'; + + /** + * Returns true if the given object is an instance of TwingateConnector. 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 TwingateConnector { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === TwingateConnector.__pulumiType; + } + + /** + * Name of the Connector, if not provided one will be generated. + */ + public readonly name!: pulumi.Output; + /** + * The ID of the Remote Network the Connector is attached to. + */ + public readonly remoteNetworkId!: pulumi.Output; + /** + * Determines whether status notifications are enabled for the Connector. + */ + public readonly statusUpdatesEnabled!: pulumi.Output; + + /** + * Create a TwingateConnector 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: TwingateConnectorArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: TwingateConnectorArgs | TwingateConnectorState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as TwingateConnectorState | undefined; + resourceInputs["name"] = state ? state.name : undefined; + resourceInputs["remoteNetworkId"] = state ? state.remoteNetworkId : undefined; + resourceInputs["statusUpdatesEnabled"] = state ? state.statusUpdatesEnabled : undefined; + } else { + const args = argsOrState as TwingateConnectorArgs | undefined; + if ((!args || args.remoteNetworkId === undefined) && !opts.urn) { + throw new Error("Missing required property 'remoteNetworkId'"); + } + resourceInputs["name"] = args ? args.name : undefined; + resourceInputs["remoteNetworkId"] = args ? args.remoteNetworkId : undefined; + resourceInputs["statusUpdatesEnabled"] = args ? args.statusUpdatesEnabled : undefined; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + super(TwingateConnector.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering TwingateConnector resources. + */ +export interface TwingateConnectorState { + /** + * Name of the Connector, if not provided one will be generated. + */ + name?: pulumi.Input; + /** + * The ID of the Remote Network the Connector is attached to. + */ + remoteNetworkId?: pulumi.Input; + /** + * Determines whether status notifications are enabled for the Connector. + */ + statusUpdatesEnabled?: pulumi.Input; +} + +/** + * The set of arguments for constructing a TwingateConnector resource. + */ +export interface TwingateConnectorArgs { + /** + * Name of the Connector, if not provided one will be generated. + */ + name?: pulumi.Input; + /** + * The ID of the Remote Network the Connector is attached to. + */ + remoteNetworkId: pulumi.Input; + /** + * Determines whether status notifications are enabled for the Connector. + */ + statusUpdatesEnabled?: pulumi.Input; +} diff --git a/sdk/nodejs/twingateConnectorTokens.ts b/sdk/nodejs/twingateConnectorTokens.ts new file mode 100644 index 0000000..e62ebeb --- /dev/null +++ b/sdk/nodejs/twingateConnectorTokens.ts @@ -0,0 +1,134 @@ +// *** 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"; + +/** + * This resource type will generate tokens for a Connector, which are needed to successfully provision one on your network. The Connector itself has its own resource type and must be created before you can provision tokens. + * + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as twingate from "@pulumi/twingate"; + * + * const awsNetwork = new twingate.TwingateRemoteNetwork("awsNetwork", {}); + * const awsConnector = new twingate.TwingateConnector("awsConnector", {remoteNetworkId: awsNetwork.id}); + * const awsConnectorTokens = new twingate.TwingateConnectorTokens("awsConnectorTokens", {connectorId: awsConnector.id}); + * ``` + */ +export class TwingateConnectorTokens extends pulumi.CustomResource { + /** + * Get an existing TwingateConnectorTokens 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?: TwingateConnectorTokensState, opts?: pulumi.CustomResourceOptions): TwingateConnectorTokens { + return new TwingateConnectorTokens(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'twingate:index/twingateConnectorTokens:TwingateConnectorTokens'; + + /** + * Returns true if the given object is an instance of TwingateConnectorTokens. 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 TwingateConnectorTokens { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === TwingateConnectorTokens.__pulumiType; + } + + /** + * The Access Token of the parent Connector + */ + public /*out*/ readonly accessToken!: pulumi.Output; + /** + * The ID of the parent Connector + */ + public readonly connectorId!: pulumi.Output; + /** + * Arbitrary map of values that, when changed, will trigger recreation of resource. Use this to automatically rotate Connector tokens on a schedule. + */ + public readonly keepers!: pulumi.Output<{[key: string]: any} | undefined>; + /** + * The Refresh Token of the parent Connector + */ + public /*out*/ readonly refreshToken!: pulumi.Output; + + /** + * Create a TwingateConnectorTokens 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: TwingateConnectorTokensArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: TwingateConnectorTokensArgs | TwingateConnectorTokensState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as TwingateConnectorTokensState | undefined; + resourceInputs["accessToken"] = state ? state.accessToken : undefined; + resourceInputs["connectorId"] = state ? state.connectorId : undefined; + resourceInputs["keepers"] = state ? state.keepers : undefined; + resourceInputs["refreshToken"] = state ? state.refreshToken : undefined; + } else { + const args = argsOrState as TwingateConnectorTokensArgs | undefined; + if ((!args || args.connectorId === undefined) && !opts.urn) { + throw new Error("Missing required property 'connectorId'"); + } + resourceInputs["connectorId"] = args ? args.connectorId : undefined; + resourceInputs["keepers"] = args ? args.keepers : undefined; + resourceInputs["accessToken"] = undefined /*out*/; + resourceInputs["refreshToken"] = undefined /*out*/; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + const secretOpts = { additionalSecretOutputs: ["accessToken", "refreshToken"] }; + opts = pulumi.mergeOptions(opts, secretOpts); + super(TwingateConnectorTokens.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering TwingateConnectorTokens resources. + */ +export interface TwingateConnectorTokensState { + /** + * The Access Token of the parent Connector + */ + accessToken?: pulumi.Input; + /** + * The ID of the parent Connector + */ + connectorId?: pulumi.Input; + /** + * Arbitrary map of values that, when changed, will trigger recreation of resource. Use this to automatically rotate Connector tokens on a schedule. + */ + keepers?: pulumi.Input<{[key: string]: any}>; + /** + * The Refresh Token of the parent Connector + */ + refreshToken?: pulumi.Input; +} + +/** + * The set of arguments for constructing a TwingateConnectorTokens resource. + */ +export interface TwingateConnectorTokensArgs { + /** + * The ID of the parent Connector + */ + connectorId: pulumi.Input; + /** + * Arbitrary map of values that, when changed, will trigger recreation of resource. Use this to automatically rotate Connector tokens on a schedule. + */ + keepers?: pulumi.Input<{[key: string]: any}>; +} diff --git a/sdk/nodejs/twingateGroup.ts b/sdk/nodejs/twingateGroup.ts new file mode 100644 index 0000000..19b4452 --- /dev/null +++ b/sdk/nodejs/twingateGroup.ts @@ -0,0 +1,144 @@ +// *** 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"; + +/** + * Groups are how users are authorized to access Resources. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/groups). + * + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as twingate from "@pulumi/twingate"; + * + * const aws = new twingate.TwingateGroup("aws", {}); + * ``` + * + * ## Import + * + * ```sh + * $ pulumi import twingate:index/twingateGroup:TwingateGroup aws R3JvdXA6MzQ4OTE= + * ``` + */ +export class TwingateGroup extends pulumi.CustomResource { + /** + * Get an existing TwingateGroup 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?: TwingateGroupState, opts?: pulumi.CustomResourceOptions): TwingateGroup { + return new TwingateGroup(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'twingate:index/twingateGroup:TwingateGroup'; + + /** + * Returns true if the given object is an instance of TwingateGroup. 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 TwingateGroup { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === TwingateGroup.__pulumiType; + } + + /** + * Determines whether User assignments to this Group will override any existing assignments. Default is `true`. If set to + * `false`, assignments made outside of Terraform will be ignored. + */ + public readonly isAuthoritative!: pulumi.Output; + /** + * The name of the group + */ + public readonly name!: pulumi.Output; + /** + * Defines which Security Policy applies to this Group. The Security Policy ID can be obtained from the `twingate.getTwingateSecurityPolicy` and `twingate.getTwingateSecurityPolicies` data sources. + */ + public readonly securityPolicyId!: pulumi.Output; + /** + * List of User IDs that have permission to access the Group. + */ + public readonly userIds!: pulumi.Output; + + /** + * Create a TwingateGroup 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?: TwingateGroupArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: TwingateGroupArgs | TwingateGroupState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as TwingateGroupState | undefined; + resourceInputs["isAuthoritative"] = state ? state.isAuthoritative : undefined; + resourceInputs["name"] = state ? state.name : undefined; + resourceInputs["securityPolicyId"] = state ? state.securityPolicyId : undefined; + resourceInputs["userIds"] = state ? state.userIds : undefined; + } else { + const args = argsOrState as TwingateGroupArgs | undefined; + resourceInputs["isAuthoritative"] = args ? args.isAuthoritative : undefined; + resourceInputs["name"] = args ? args.name : undefined; + resourceInputs["securityPolicyId"] = args ? args.securityPolicyId : undefined; + resourceInputs["userIds"] = args ? args.userIds : undefined; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + super(TwingateGroup.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering TwingateGroup resources. + */ +export interface TwingateGroupState { + /** + * Determines whether User assignments to this Group will override any existing assignments. Default is `true`. If set to + * `false`, assignments made outside of Terraform will be ignored. + */ + isAuthoritative?: pulumi.Input; + /** + * The name of the group + */ + name?: pulumi.Input; + /** + * Defines which Security Policy applies to this Group. The Security Policy ID can be obtained from the `twingate.getTwingateSecurityPolicy` and `twingate.getTwingateSecurityPolicies` data sources. + */ + securityPolicyId?: pulumi.Input; + /** + * List of User IDs that have permission to access the Group. + */ + userIds?: pulumi.Input[]>; +} + +/** + * The set of arguments for constructing a TwingateGroup resource. + */ +export interface TwingateGroupArgs { + /** + * Determines whether User assignments to this Group will override any existing assignments. Default is `true`. If set to + * `false`, assignments made outside of Terraform will be ignored. + */ + isAuthoritative?: pulumi.Input; + /** + * The name of the group + */ + name?: pulumi.Input; + /** + * Defines which Security Policy applies to this Group. The Security Policy ID can be obtained from the `twingate.getTwingateSecurityPolicy` and `twingate.getTwingateSecurityPolicies` data sources. + */ + securityPolicyId?: pulumi.Input; + /** + * List of User IDs that have permission to access the Group. + */ + userIds?: pulumi.Input[]>; +} diff --git a/sdk/nodejs/twingateRemoteNetwork.ts b/sdk/nodejs/twingateRemoteNetwork.ts new file mode 100644 index 0000000..7f1850f --- /dev/null +++ b/sdk/nodejs/twingateRemoteNetwork.ts @@ -0,0 +1,113 @@ +// *** 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"; + +/** + * A Remote Network represents a single private network in Twingate that can have one or more Connectors and Resources assigned to it. You must create a Remote Network before creating Resources and Connectors that belong to it. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/remote-networks). + * + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as twingate from "@pulumi/twingate"; + * + * const awsNetwork = new twingate.TwingateRemoteNetwork("awsNetwork", {}); + * ``` + * + * ## Import + * + * ```sh + * $ pulumi import twingate:index/twingateRemoteNetwork:TwingateRemoteNetwork network UmVtb3RlTmV0d29zaipgMKIkNg== + * ``` + */ +export class TwingateRemoteNetwork extends pulumi.CustomResource { + /** + * Get an existing TwingateRemoteNetwork 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?: TwingateRemoteNetworkState, opts?: pulumi.CustomResourceOptions): TwingateRemoteNetwork { + return new TwingateRemoteNetwork(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'twingate:index/twingateRemoteNetwork:TwingateRemoteNetwork'; + + /** + * Returns true if the given object is an instance of TwingateRemoteNetwork. 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 TwingateRemoteNetwork { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === TwingateRemoteNetwork.__pulumiType; + } + + /** + * The location of the Remote Network. Must be one of the following: AWS, AZURE, GOOGLE*CLOUD, ON*PREMISE, OTHER. + */ + public readonly location!: pulumi.Output; + /** + * The name of the Remote Network + */ + public readonly name!: pulumi.Output; + + /** + * Create a TwingateRemoteNetwork 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?: TwingateRemoteNetworkArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: TwingateRemoteNetworkArgs | TwingateRemoteNetworkState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as TwingateRemoteNetworkState | undefined; + resourceInputs["location"] = state ? state.location : undefined; + resourceInputs["name"] = state ? state.name : undefined; + } else { + const args = argsOrState as TwingateRemoteNetworkArgs | undefined; + resourceInputs["location"] = args ? args.location : undefined; + resourceInputs["name"] = args ? args.name : undefined; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + super(TwingateRemoteNetwork.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering TwingateRemoteNetwork resources. + */ +export interface TwingateRemoteNetworkState { + /** + * The location of the Remote Network. Must be one of the following: AWS, AZURE, GOOGLE*CLOUD, ON*PREMISE, OTHER. + */ + location?: pulumi.Input; + /** + * The name of the Remote Network + */ + name?: pulumi.Input; +} + +/** + * The set of arguments for constructing a TwingateRemoteNetwork resource. + */ +export interface TwingateRemoteNetworkArgs { + /** + * The location of the Remote Network. Must be one of the following: AWS, AZURE, GOOGLE*CLOUD, ON*PREMISE, OTHER. + */ + location?: pulumi.Input; + /** + * The name of the Remote Network + */ + name?: pulumi.Input; +} diff --git a/sdk/nodejs/twingateResource.ts b/sdk/nodejs/twingateResource.ts new file mode 100644 index 0000000..df7580c --- /dev/null +++ b/sdk/nodejs/twingateResource.ts @@ -0,0 +1,245 @@ +// *** 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 inputs from "./types/input"; +import * as outputs from "./types/output"; +import * as utilities from "./utilities"; + +/** + * Resources in Twingate represent servers on the private network that clients can connect to. Resources can be defined by IP, CIDR range, FQDN, or DNS zone. For more information, see the Twingate [documentation](https://docs.twingate.com/docs/resources-and-access-nodes). + * + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as twingate from "@pulumi/twingate"; + * + * const awsNetwork = new twingate.TwingateRemoteNetwork("awsNetwork", {}); + * const aws = new twingate.TwingateGroup("aws", {}); + * const githubActionsProd = new twingate.TwingateServiceAccount("githubActionsProd", {}); + * const resource = new twingate.TwingateResource("resource", { + * address: "internal.int", + * remoteNetworkId: awsNetwork.id, + * protocols: { + * allowIcmp: true, + * tcp: { + * policy: "RESTRICTED", + * ports: [ + * "80", + * "82-83", + * ], + * }, + * udp: { + * policy: "ALLOW_ALL", + * }, + * }, + * access: { + * groupIds: [aws.id], + * serviceAccountIds: [githubActionsProd.id], + * }, + * }); + * ``` + * + * ## Import + * + * ```sh + * $ pulumi import twingate:index/twingateResource:TwingateResource resource UmVzb3VyY2U6MzQwNDQ3 + * ``` + */ +export class TwingateResource extends pulumi.CustomResource { + /** + * Get an existing TwingateResource 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?: TwingateResourceState, opts?: pulumi.CustomResourceOptions): TwingateResource { + return new TwingateResource(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'twingate:index/twingateResource:TwingateResource'; + + /** + * Returns true if the given object is an instance of TwingateResource. 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 TwingateResource { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === TwingateResource.__pulumiType; + } + + /** + * Restrict access to certain groups or service accounts + */ + public readonly access!: pulumi.Output; + /** + * The Resource's IP/CIDR or FQDN/DNS zone + */ + public readonly address!: pulumi.Output; + /** + * Set a DNS alias address for the Resource. Must be a DNS-valid name string. + */ + public readonly alias!: pulumi.Output; + /** + * Determines whether assignments in the access block will override any existing assignments. Default is `true`. If set to + * `false`, assignments made outside of Terraform will be ignored. + */ + public readonly isAuthoritative!: pulumi.Output; + /** + * Controls whether an "Open in Browser" shortcut will be shown for this Resource in the Twingate Client. + */ + public readonly isBrowserShortcutEnabled!: pulumi.Output; + /** + * Controls whether this Resource will be visible in the main Resource list in the Twingate Client. + */ + public readonly isVisible!: pulumi.Output; + /** + * The name of the Resource + */ + public readonly name!: pulumi.Output; + /** + * Restrict access to certain protocols and ports. By default or when this argument is not defined, there is no restriction, and all protocols and ports are allowed. + */ + public readonly protocols!: pulumi.Output; + /** + * Remote Network ID where the Resource lives + */ + public readonly remoteNetworkId!: pulumi.Output; + + /** + * Create a TwingateResource 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: TwingateResourceArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: TwingateResourceArgs | TwingateResourceState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as TwingateResourceState | undefined; + resourceInputs["access"] = state ? state.access : undefined; + resourceInputs["address"] = state ? state.address : undefined; + resourceInputs["alias"] = state ? state.alias : undefined; + resourceInputs["isAuthoritative"] = state ? state.isAuthoritative : undefined; + resourceInputs["isBrowserShortcutEnabled"] = state ? state.isBrowserShortcutEnabled : undefined; + resourceInputs["isVisible"] = state ? state.isVisible : undefined; + resourceInputs["name"] = state ? state.name : undefined; + resourceInputs["protocols"] = state ? state.protocols : undefined; + resourceInputs["remoteNetworkId"] = state ? state.remoteNetworkId : undefined; + } else { + const args = argsOrState as TwingateResourceArgs | undefined; + if ((!args || args.address === undefined) && !opts.urn) { + throw new Error("Missing required property 'address'"); + } + if ((!args || args.remoteNetworkId === undefined) && !opts.urn) { + throw new Error("Missing required property 'remoteNetworkId'"); + } + resourceInputs["access"] = args ? args.access : undefined; + resourceInputs["address"] = args ? args.address : undefined; + resourceInputs["alias"] = args ? args.alias : undefined; + resourceInputs["isAuthoritative"] = args ? args.isAuthoritative : undefined; + resourceInputs["isBrowserShortcutEnabled"] = args ? args.isBrowserShortcutEnabled : undefined; + resourceInputs["isVisible"] = args ? args.isVisible : undefined; + resourceInputs["name"] = args ? args.name : undefined; + resourceInputs["protocols"] = args ? args.protocols : undefined; + resourceInputs["remoteNetworkId"] = args ? args.remoteNetworkId : undefined; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + super(TwingateResource.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering TwingateResource resources. + */ +export interface TwingateResourceState { + /** + * Restrict access to certain groups or service accounts + */ + access?: pulumi.Input; + /** + * The Resource's IP/CIDR or FQDN/DNS zone + */ + address?: pulumi.Input; + /** + * Set a DNS alias address for the Resource. Must be a DNS-valid name string. + */ + alias?: pulumi.Input; + /** + * Determines whether assignments in the access block will override any existing assignments. Default is `true`. If set to + * `false`, assignments made outside of Terraform will be ignored. + */ + isAuthoritative?: pulumi.Input; + /** + * Controls whether an "Open in Browser" shortcut will be shown for this Resource in the Twingate Client. + */ + isBrowserShortcutEnabled?: pulumi.Input; + /** + * Controls whether this Resource will be visible in the main Resource list in the Twingate Client. + */ + isVisible?: pulumi.Input; + /** + * The name of the Resource + */ + name?: pulumi.Input; + /** + * Restrict access to certain protocols and ports. By default or when this argument is not defined, there is no restriction, and all protocols and ports are allowed. + */ + protocols?: pulumi.Input; + /** + * Remote Network ID where the Resource lives + */ + remoteNetworkId?: pulumi.Input; +} + +/** + * The set of arguments for constructing a TwingateResource resource. + */ +export interface TwingateResourceArgs { + /** + * Restrict access to certain groups or service accounts + */ + access?: pulumi.Input; + /** + * The Resource's IP/CIDR or FQDN/DNS zone + */ + address: pulumi.Input; + /** + * Set a DNS alias address for the Resource. Must be a DNS-valid name string. + */ + alias?: pulumi.Input; + /** + * Determines whether assignments in the access block will override any existing assignments. Default is `true`. If set to + * `false`, assignments made outside of Terraform will be ignored. + */ + isAuthoritative?: pulumi.Input; + /** + * Controls whether an "Open in Browser" shortcut will be shown for this Resource in the Twingate Client. + */ + isBrowserShortcutEnabled?: pulumi.Input; + /** + * Controls whether this Resource will be visible in the main Resource list in the Twingate Client. + */ + isVisible?: pulumi.Input; + /** + * The name of the Resource + */ + name?: pulumi.Input; + /** + * Restrict access to certain protocols and ports. By default or when this argument is not defined, there is no restriction, and all protocols and ports are allowed. + */ + protocols?: pulumi.Input; + /** + * Remote Network ID where the Resource lives + */ + remoteNetworkId: pulumi.Input; +} diff --git a/sdk/nodejs/twingateServiceAccount.ts b/sdk/nodejs/twingateServiceAccount.ts new file mode 100644 index 0000000..ccc1882 --- /dev/null +++ b/sdk/nodejs/twingateServiceAccount.ts @@ -0,0 +1,93 @@ +// *** 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"; + +/** + * Service Accounts offer a way to provide programmatic, centrally-controlled, and consistent access controls. + * + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as twingate from "@pulumi/twingate"; + * + * const githubActionsProd = new twingate.TwingateServiceAccount("githubActionsProd", {}); + * ``` + */ +export class TwingateServiceAccount extends pulumi.CustomResource { + /** + * Get an existing TwingateServiceAccount 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?: TwingateServiceAccountState, opts?: pulumi.CustomResourceOptions): TwingateServiceAccount { + return new TwingateServiceAccount(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'twingate:index/twingateServiceAccount:TwingateServiceAccount'; + + /** + * Returns true if the given object is an instance of TwingateServiceAccount. 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 TwingateServiceAccount { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === TwingateServiceAccount.__pulumiType; + } + + /** + * The name of the Service Account in Twingate + */ + public readonly name!: pulumi.Output; + + /** + * Create a TwingateServiceAccount 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?: TwingateServiceAccountArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: TwingateServiceAccountArgs | TwingateServiceAccountState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as TwingateServiceAccountState | undefined; + resourceInputs["name"] = state ? state.name : undefined; + } else { + const args = argsOrState as TwingateServiceAccountArgs | undefined; + resourceInputs["name"] = args ? args.name : undefined; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + super(TwingateServiceAccount.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering TwingateServiceAccount resources. + */ +export interface TwingateServiceAccountState { + /** + * The name of the Service Account in Twingate + */ + name?: pulumi.Input; +} + +/** + * The set of arguments for constructing a TwingateServiceAccount resource. + */ +export interface TwingateServiceAccountArgs { + /** + * The name of the Service Account in Twingate + */ + name?: pulumi.Input; +} diff --git a/sdk/nodejs/twingateServiceAccountKey.ts b/sdk/nodejs/twingateServiceAccountKey.ts new file mode 100644 index 0000000..4cdc67f --- /dev/null +++ b/sdk/nodejs/twingateServiceAccountKey.ts @@ -0,0 +1,123 @@ +// *** 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"; + +/** + * A Service Key authorizes access to all Resources assigned to a Service Account. + * + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as twingate from "@pulumi/twingate"; + * + * const githubActionsProd = new twingate.TwingateServiceAccount("githubActionsProd", {}); + * const githubKey = new twingate.TwingateServiceAccountKey("githubKey", {serviceAccountId: githubActionsProd.id}); + * ``` + */ +export class TwingateServiceAccountKey extends pulumi.CustomResource { + /** + * Get an existing TwingateServiceAccountKey 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?: TwingateServiceAccountKeyState, opts?: pulumi.CustomResourceOptions): TwingateServiceAccountKey { + return new TwingateServiceAccountKey(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'twingate:index/twingateServiceAccountKey:TwingateServiceAccountKey'; + + /** + * Returns true if the given object is an instance of TwingateServiceAccountKey. 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 TwingateServiceAccountKey { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === TwingateServiceAccountKey.__pulumiType; + } + + /** + * The name of the Service Key + */ + public readonly name!: pulumi.Output; + /** + * The id of the Service Account + */ + public readonly serviceAccountId!: pulumi.Output; + /** + * Autogenerated Service Key token. Used to configure a Twingate Client running in headless mode. + */ + public /*out*/ readonly token!: pulumi.Output; + + /** + * Create a TwingateServiceAccountKey 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: TwingateServiceAccountKeyArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: TwingateServiceAccountKeyArgs | TwingateServiceAccountKeyState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as TwingateServiceAccountKeyState | undefined; + resourceInputs["name"] = state ? state.name : undefined; + resourceInputs["serviceAccountId"] = state ? state.serviceAccountId : undefined; + resourceInputs["token"] = state ? state.token : undefined; + } else { + const args = argsOrState as TwingateServiceAccountKeyArgs | undefined; + if ((!args || args.serviceAccountId === undefined) && !opts.urn) { + throw new Error("Missing required property 'serviceAccountId'"); + } + resourceInputs["name"] = args ? args.name : undefined; + resourceInputs["serviceAccountId"] = args ? args.serviceAccountId : undefined; + resourceInputs["token"] = undefined /*out*/; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + const secretOpts = { additionalSecretOutputs: ["token"] }; + opts = pulumi.mergeOptions(opts, secretOpts); + super(TwingateServiceAccountKey.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering TwingateServiceAccountKey resources. + */ +export interface TwingateServiceAccountKeyState { + /** + * The name of the Service Key + */ + name?: pulumi.Input; + /** + * The id of the Service Account + */ + serviceAccountId?: pulumi.Input; + /** + * Autogenerated Service Key token. Used to configure a Twingate Client running in headless mode. + */ + token?: pulumi.Input; +} + +/** + * The set of arguments for constructing a TwingateServiceAccountKey resource. + */ +export interface TwingateServiceAccountKeyArgs { + /** + * The name of the Service Key + */ + name?: pulumi.Input; + /** + * The id of the Service Account + */ + serviceAccountId: pulumi.Input; +} diff --git a/sdk/nodejs/twingateUser.ts b/sdk/nodejs/twingateUser.ts new file mode 100644 index 0000000..a196687 --- /dev/null +++ b/sdk/nodejs/twingateUser.ts @@ -0,0 +1,182 @@ +// *** 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"; + +/** + * Users provides different levels of write capabilities across the Twingate Admin Console. For more information, see Twingate's [documentation](https://www.twingate.com/docs/users). + * + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as twingate from "@pulumi/twingate"; + * + * const user = new twingate.TwingateUser("user", { + * email: "sample@company.com", + * firstName: "Twin", + * lastName: "Gate", + * role: "DEVOPS", + * sendInvite: true, + * }); + * ``` + */ +export class TwingateUser extends pulumi.CustomResource { + /** + * Get an existing TwingateUser 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?: TwingateUserState, opts?: pulumi.CustomResourceOptions): TwingateUser { + return new TwingateUser(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'twingate:index/twingateUser:TwingateUser'; + + /** + * Returns true if the given object is an instance of TwingateUser. 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 TwingateUser { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === TwingateUser.__pulumiType; + } + + /** + * The User's email address + */ + public readonly email!: pulumi.Output; + /** + * The User's first name + */ + public readonly firstName!: pulumi.Output; + /** + * Determines whether the User is active or not. Inactive users will be not able to sign in. + */ + public readonly isActive!: pulumi.Output; + /** + * The User's last name + */ + public readonly lastName!: pulumi.Output; + /** + * Determines the User's role. Either ADMIN, DEVOPS, SUPPORT or MEMBER. + */ + public readonly role!: pulumi.Output; + /** + * Determines whether to send an email invitation to the User. True by default. + */ + public readonly sendInvite!: pulumi.Output; + /** + * Indicates the User's type. Either MANUAL or SYNCED. + */ + public /*out*/ readonly type!: pulumi.Output; + + /** + * Create a TwingateUser 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: TwingateUserArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: TwingateUserArgs | TwingateUserState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as TwingateUserState | undefined; + resourceInputs["email"] = state ? state.email : undefined; + resourceInputs["firstName"] = state ? state.firstName : undefined; + resourceInputs["isActive"] = state ? state.isActive : undefined; + resourceInputs["lastName"] = state ? state.lastName : undefined; + resourceInputs["role"] = state ? state.role : undefined; + resourceInputs["sendInvite"] = state ? state.sendInvite : undefined; + resourceInputs["type"] = state ? state.type : undefined; + } else { + const args = argsOrState as TwingateUserArgs | undefined; + if ((!args || args.email === undefined) && !opts.urn) { + throw new Error("Missing required property 'email'"); + } + resourceInputs["email"] = args ? args.email : undefined; + resourceInputs["firstName"] = args ? args.firstName : undefined; + resourceInputs["isActive"] = args ? args.isActive : undefined; + resourceInputs["lastName"] = args ? args.lastName : undefined; + resourceInputs["role"] = args ? args.role : undefined; + resourceInputs["sendInvite"] = args ? args.sendInvite : undefined; + resourceInputs["type"] = undefined /*out*/; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + super(TwingateUser.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering TwingateUser resources. + */ +export interface TwingateUserState { + /** + * The User's email address + */ + email?: pulumi.Input; + /** + * The User's first name + */ + firstName?: pulumi.Input; + /** + * Determines whether the User is active or not. Inactive users will be not able to sign in. + */ + isActive?: pulumi.Input; + /** + * The User's last name + */ + lastName?: pulumi.Input; + /** + * Determines the User's role. Either ADMIN, DEVOPS, SUPPORT or MEMBER. + */ + role?: pulumi.Input; + /** + * Determines whether to send an email invitation to the User. True by default. + */ + sendInvite?: pulumi.Input; + /** + * Indicates the User's type. Either MANUAL or SYNCED. + */ + type?: pulumi.Input; +} + +/** + * The set of arguments for constructing a TwingateUser resource. + */ +export interface TwingateUserArgs { + /** + * The User's email address + */ + email: pulumi.Input; + /** + * The User's first name + */ + firstName?: pulumi.Input; + /** + * Determines whether the User is active or not. Inactive users will be not able to sign in. + */ + isActive?: pulumi.Input; + /** + * The User's last name + */ + lastName?: pulumi.Input; + /** + * Determines the User's role. Either ADMIN, DEVOPS, SUPPORT or MEMBER. + */ + role?: pulumi.Input; + /** + * Determines whether to send an email invitation to the User. True by default. + */ + sendInvite?: pulumi.Input; +} diff --git a/sdk/nodejs/types/index.ts b/sdk/nodejs/types/index.ts new file mode 100644 index 0000000..c7b9909 --- /dev/null +++ b/sdk/nodejs/types/index.ts @@ -0,0 +1,13 @@ +// *** 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 utilities from "../utilities"; + +// 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..8a9ffe6 --- /dev/null +++ b/sdk/nodejs/types/input.ts @@ -0,0 +1,458 @@ +// *** 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 inputs from "../types/input"; +import * as outputs from "../types/output"; + +export interface GetTwingateConnectorsConnector { + /** + * The ID of the Connector. + */ + id?: string; + /** + * The Name of the Connector. + */ + name?: string; + /** + * The ID of the Remote Network attached to the Connector. + */ + remoteNetworkId?: string; + /** + * Determines whether status notifications are enabled for the Connector. + */ + statusUpdatesEnabled?: boolean; +} + +export interface GetTwingateConnectorsConnectorArgs { + /** + * The ID of the Connector. + */ + id?: pulumi.Input; + /** + * The Name of the Connector. + */ + name?: pulumi.Input; + /** + * The ID of the Remote Network attached to the Connector. + */ + remoteNetworkId?: pulumi.Input; + /** + * Determines whether status notifications are enabled for the Connector. + */ + statusUpdatesEnabled?: pulumi.Input; +} + +export interface GetTwingateGroupsGroup { + /** + * The ID of the Group + */ + id?: string; + /** + * Indicates if the Group is active + */ + isActive?: boolean; + /** + * The name of the Group + */ + name?: string; + /** + * The Security Policy assigned to the Group. + */ + securityPolicyId?: string; + /** + * The type of the Group + */ + type?: string; +} + +export interface GetTwingateGroupsGroupArgs { + /** + * The ID of the Group + */ + id?: pulumi.Input; + /** + * Indicates if the Group is active + */ + isActive?: pulumi.Input; + /** + * The name of the Group + */ + name?: pulumi.Input; + /** + * The Security Policy assigned to the Group. + */ + securityPolicyId?: pulumi.Input; + /** + * The type of the Group + */ + type?: pulumi.Input; +} + +export interface GetTwingateRemoteNetworksRemoteNetwork { + /** + * The ID of the Remote Network + */ + id?: string; + /** + * The location of the Remote Network. Must be one of the following: AWS, AZURE, GOOGLE*CLOUD, ON*PREMISE, OTHER. + */ + location?: string; + /** + * The name of the Remote Network + */ + name?: string; +} + +export interface GetTwingateRemoteNetworksRemoteNetworkArgs { + /** + * The ID of the Remote Network + */ + id?: pulumi.Input; + /** + * The location of the Remote Network. Must be one of the following: AWS, AZURE, GOOGLE*CLOUD, ON*PREMISE, OTHER. + */ + location?: pulumi.Input; + /** + * The name of the Remote Network + */ + name?: pulumi.Input; +} + +export interface GetTwingateResourceProtocol { + /** + * Whether to allow ICMP (ping) traffic + */ + allowIcmp?: boolean; + tcps?: inputs.GetTwingateResourceProtocolTcp[]; + udps?: inputs.GetTwingateResourceProtocolUdp[]; +} + +export interface GetTwingateResourceProtocolArgs { + /** + * Whether to allow ICMP (ping) traffic + */ + allowIcmp?: pulumi.Input; + tcps?: pulumi.Input[]>; + udps?: pulumi.Input[]>; +} + +export interface GetTwingateResourceProtocolTcp { + /** + * Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + */ + policy?: string; + /** + * List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + */ + ports?: string[]; +} + +export interface GetTwingateResourceProtocolTcpArgs { + /** + * Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + */ + policy?: pulumi.Input; + /** + * List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + */ + ports?: pulumi.Input[]>; +} + +export interface GetTwingateResourceProtocolUdp { + /** + * Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + */ + policy?: string; + /** + * List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + */ + ports?: string[]; +} + +export interface GetTwingateResourceProtocolUdpArgs { + /** + * Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + */ + policy?: pulumi.Input; + /** + * List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + */ + ports?: pulumi.Input[]>; +} + +export interface GetTwingateResourcesResource { + /** + * The Resource's IP/CIDR or FQDN/DNS zone + */ + address?: string; + /** + * The id of the Resource + */ + id?: string; + /** + * The name of the Resource + */ + name?: string; + /** + * Restrict access to certain protocols and ports. By default or when this argument is not defined, there is no restriction, and all protocols and ports are allowed. + */ + protocols?: inputs.GetTwingateResourcesResourceProtocol[]; + /** + * Remote Network ID where the Resource lives + */ + remoteNetworkId?: string; +} + +export interface GetTwingateResourcesResourceArgs { + /** + * The Resource's IP/CIDR or FQDN/DNS zone + */ + address?: pulumi.Input; + /** + * The id of the Resource + */ + id?: pulumi.Input; + /** + * The name of the Resource + */ + name?: pulumi.Input; + /** + * Restrict access to certain protocols and ports. By default or when this argument is not defined, there is no restriction, and all protocols and ports are allowed. + */ + protocols?: pulumi.Input[]>; + /** + * Remote Network ID where the Resource lives + */ + remoteNetworkId?: pulumi.Input; +} + +export interface GetTwingateResourcesResourceProtocol { + /** + * Whether to allow ICMP (ping) traffic + */ + allowIcmp?: boolean; + tcps?: inputs.GetTwingateResourcesResourceProtocolTcp[]; + udps?: inputs.GetTwingateResourcesResourceProtocolUdp[]; +} + +export interface GetTwingateResourcesResourceProtocolArgs { + /** + * Whether to allow ICMP (ping) traffic + */ + allowIcmp?: pulumi.Input; + tcps?: pulumi.Input[]>; + udps?: pulumi.Input[]>; +} + +export interface GetTwingateResourcesResourceProtocolTcp { + /** + * Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + */ + policy?: string; + /** + * List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + */ + ports?: string[]; +} + +export interface GetTwingateResourcesResourceProtocolTcpArgs { + /** + * Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + */ + policy?: pulumi.Input; + /** + * List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + */ + ports?: pulumi.Input[]>; +} + +export interface GetTwingateResourcesResourceProtocolUdp { + /** + * Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + */ + policy?: string; + /** + * List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + */ + ports?: string[]; +} + +export interface GetTwingateResourcesResourceProtocolUdpArgs { + /** + * Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + */ + policy?: pulumi.Input; + /** + * List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + */ + ports?: pulumi.Input[]>; +} + +export interface GetTwingateSecurityPoliciesSecurityPolicy { + /** + * Return a matching Security Policy by its ID. The ID for the Security Policy can be obtained from the Admin API or the URL string in the Admin Console. + */ + id?: string; + /** + * Return a Security Policy that exactly matches this name. + */ + name?: string; +} + +export interface GetTwingateSecurityPoliciesSecurityPolicyArgs { + /** + * Return a matching Security Policy by its ID. The ID for the Security Policy can be obtained from the Admin API or the URL string in the Admin Console. + */ + id?: pulumi.Input; + /** + * Return a Security Policy that exactly matches this name. + */ + name?: pulumi.Input; +} + +export interface GetTwingateServiceAccountsServiceAccount { + /** + * ID of the Service Account resource + */ + id?: string; + /** + * List of twingate*service*account_key IDs that are assigned to the Service Account. + */ + keyIds?: string[]; + /** + * Name of the Service Account + */ + name?: string; + /** + * List of twingate.TwingateResource IDs that the Service Account is assigned to. + */ + resourceIds?: string[]; +} + +export interface GetTwingateServiceAccountsServiceAccountArgs { + /** + * ID of the Service Account resource + */ + id?: pulumi.Input; + /** + * List of twingate*service*account_key IDs that are assigned to the Service Account. + */ + keyIds?: pulumi.Input[]>; + /** + * Name of the Service Account + */ + name?: pulumi.Input; + /** + * List of twingate.TwingateResource IDs that the Service Account is assigned to. + */ + resourceIds?: pulumi.Input[]>; +} + +export interface GetTwingateUsersUser { + /** + * The email address of the User + */ + email?: string; + /** + * The first name of the User + */ + firstName?: string; + /** + * The ID of the User + */ + id?: string; + /** + * Indicates whether the User is an admin + * + * @deprecated This read-only Boolean value will be deprecated in a future release. You may use the `role` value instead. + */ + isAdmin?: boolean; + /** + * The last name of the User + */ + lastName?: string; + /** + * Indicates the User's role. Either ADMIN, DEVOPS, SUPPORT, or MEMBER. + */ + role?: string; + /** + * Indicates the User's type. Either MANUAL or SYNCED. + */ + type?: string; +} + +export interface GetTwingateUsersUserArgs { + /** + * The email address of the User + */ + email?: pulumi.Input; + /** + * The first name of the User + */ + firstName?: pulumi.Input; + /** + * The ID of the User + */ + id?: pulumi.Input; + /** + * Indicates whether the User is an admin + * + * @deprecated This read-only Boolean value will be deprecated in a future release. You may use the `role` value instead. + */ + isAdmin?: pulumi.Input; + /** + * The last name of the User + */ + lastName?: pulumi.Input; + /** + * Indicates the User's role. Either ADMIN, DEVOPS, SUPPORT, or MEMBER. + */ + role?: pulumi.Input; + /** + * Indicates the User's type. Either MANUAL or SYNCED. + */ + type?: pulumi.Input; +} + +export interface TwingateResourceAccess { + /** + * List of Group IDs that will have permission to access the Resource. + */ + groupIds?: pulumi.Input[]>; + /** + * List of Service Account IDs that will have permission to access the Resource. + */ + serviceAccountIds?: pulumi.Input[]>; +} + +export interface TwingateResourceProtocols { + /** + * Whether to allow ICMP (ping) traffic + */ + allowIcmp?: pulumi.Input; + tcp: pulumi.Input; + udp: pulumi.Input; +} + +export interface TwingateResourceProtocolsTcp { + /** + * Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + */ + policy: pulumi.Input; + /** + * List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + */ + ports?: pulumi.Input[]>; +} + +export interface TwingateResourceProtocolsUdp { + /** + * Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + */ + policy: pulumi.Input; + /** + * List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + */ + ports?: pulumi.Input[]>; +} diff --git a/sdk/nodejs/types/output.ts b/sdk/nodejs/types/output.ts new file mode 100644 index 0000000..380f293 --- /dev/null +++ b/sdk/nodejs/types/output.ts @@ -0,0 +1,254 @@ +// *** 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 inputs from "../types/input"; +import * as outputs from "../types/output"; + +export interface GetTwingateConnectorsConnector { + /** + * The ID of the Connector. + */ + id: string; + /** + * The Name of the Connector. + */ + name: string; + /** + * The ID of the Remote Network attached to the Connector. + */ + remoteNetworkId: string; + /** + * Determines whether status notifications are enabled for the Connector. + */ + statusUpdatesEnabled: boolean; +} + +export interface GetTwingateGroupsGroup { + /** + * The ID of the Group + */ + id: string; + /** + * Indicates if the Group is active + */ + isActive: boolean; + /** + * The name of the Group + */ + name: string; + /** + * The Security Policy assigned to the Group. + */ + securityPolicyId: string; + /** + * The type of the Group + */ + type: string; +} + +export interface GetTwingateRemoteNetworksRemoteNetwork { + /** + * The ID of the Remote Network + */ + id: string; + /** + * The location of the Remote Network. Must be one of the following: AWS, AZURE, GOOGLE*CLOUD, ON*PREMISE, OTHER. + */ + location: string; + /** + * The name of the Remote Network + */ + name: string; +} + +export interface GetTwingateResourceProtocol { + /** + * Whether to allow ICMP (ping) traffic + */ + allowIcmp: boolean; + tcps?: outputs.GetTwingateResourceProtocolTcp[]; + udps?: outputs.GetTwingateResourceProtocolUdp[]; +} + +export interface GetTwingateResourceProtocolTcp { + /** + * Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + */ + policy: string; + /** + * List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + */ + ports: string[]; +} + +export interface GetTwingateResourceProtocolUdp { + /** + * Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + */ + policy: string; + /** + * List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + */ + ports: string[]; +} + +export interface GetTwingateResourcesResource { + /** + * The Resource's IP/CIDR or FQDN/DNS zone + */ + address: string; + /** + * The id of the Resource + */ + id: string; + /** + * The name of the Resource + */ + name: string; + /** + * Restrict access to certain protocols and ports. By default or when this argument is not defined, there is no restriction, and all protocols and ports are allowed. + */ + protocols?: outputs.GetTwingateResourcesResourceProtocol[]; + /** + * Remote Network ID where the Resource lives + */ + remoteNetworkId: string; +} + +export interface GetTwingateResourcesResourceProtocol { + /** + * Whether to allow ICMP (ping) traffic + */ + allowIcmp: boolean; + tcps?: outputs.GetTwingateResourcesResourceProtocolTcp[]; + udps?: outputs.GetTwingateResourcesResourceProtocolUdp[]; +} + +export interface GetTwingateResourcesResourceProtocolTcp { + /** + * Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + */ + policy: string; + /** + * List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + */ + ports: string[]; +} + +export interface GetTwingateResourcesResourceProtocolUdp { + /** + * Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + */ + policy: string; + /** + * List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + */ + ports: string[]; +} + +export interface GetTwingateSecurityPoliciesSecurityPolicy { + /** + * Return a matching Security Policy by its ID. The ID for the Security Policy can be obtained from the Admin API or the URL string in the Admin Console. + */ + id: string; + /** + * Return a Security Policy that exactly matches this name. + */ + name: string; +} + +export interface GetTwingateServiceAccountsServiceAccount { + /** + * ID of the Service Account resource + */ + id: string; + /** + * List of twingate*service*account_key IDs that are assigned to the Service Account. + */ + keyIds: string[]; + /** + * Name of the Service Account + */ + name: string; + /** + * List of twingate.TwingateResource IDs that the Service Account is assigned to. + */ + resourceIds: string[]; +} + +export interface GetTwingateUsersUser { + /** + * The email address of the User + */ + email: string; + /** + * The first name of the User + */ + firstName: string; + /** + * The ID of the User + */ + id: string; + /** + * Indicates whether the User is an admin + * + * @deprecated This read-only Boolean value will be deprecated in a future release. You may use the `role` value instead. + */ + isAdmin: boolean; + /** + * The last name of the User + */ + lastName: string; + /** + * Indicates the User's role. Either ADMIN, DEVOPS, SUPPORT, or MEMBER. + */ + role: string; + /** + * Indicates the User's type. Either MANUAL or SYNCED. + */ + type: string; +} + +export interface TwingateResourceAccess { + /** + * List of Group IDs that will have permission to access the Resource. + */ + groupIds?: string[]; + /** + * List of Service Account IDs that will have permission to access the Resource. + */ + serviceAccountIds?: string[]; +} + +export interface TwingateResourceProtocols { + /** + * Whether to allow ICMP (ping) traffic + */ + allowIcmp?: boolean; + tcp: outputs.TwingateResourceProtocolsTcp; + udp: outputs.TwingateResourceProtocolsUdp; +} + +export interface TwingateResourceProtocolsTcp { + /** + * Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + */ + policy: string; + /** + * List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + */ + ports?: string[]; +} + +export interface TwingateResourceProtocolsUdp { + /** + * Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + */ + policy: string; + /** + * List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + */ + ports?: string[]; +} + diff --git a/sdk/nodejs/utilities.ts b/sdk/nodejs/utilities.ts new file mode 100644 index 0000000..080cc82 --- /dev/null +++ b/sdk/nodejs/utilities.ts @@ -0,0 +1,95 @@ +// *** 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 runtime from "@pulumi/pulumi/runtime"; +import * as pulumi from "@pulumi/pulumi"; + +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() }; +} + +/** @internal */ +export function lazyLoad(exports: any, props: string[], loadModule: any) { + for (let property of props) { + Object.defineProperty(exports, property, { + enumerable: true, + get: function() { + return loadModule()[property]; + }, + }); + } +} + +export async function callAsync( + tok: string, + props: pulumi.Inputs, + res?: pulumi.Resource, + opts?: {property?: string}, +): Promise { + const o: any = runtime.call(tok, props, res); + const value = await o.promise(true /*withUnknowns*/); + const isKnown = await o.isKnown; + const isSecret = await o.isSecret; + const problem: string|undefined = + !isKnown ? "an unknown value" + : isSecret ? "a secret value" + : undefined; + // Ingoring o.resources silently. They are typically non-empty, r.f() calls include r as a dependency. + if (problem) { + throw new Error(`Plain resource method "${tok}" incorrectly returned ${problem}. ` + + "This is an error in the provider, please report this to the provider developer."); + } + // Extract a single property if requested. + if (opts && opts.property) { + return value[opts.property]; + } + return value; +} 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..7436fc1 --- /dev/null +++ b/sdk/python/README.md @@ -0,0 +1,458 @@ +# Terraform Bridge Provider Boilerplate + +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). + +Learn about the concepts behind [Pulumi Packages](https://www.pulumi.com/docs/guides/pulumi-packages/#pulumi-packages). + +## Creating a Pulumi Terraform Bridge Provider + +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 + +We showcase a Pulumi-owned provider based on an upstream provider named `terraform-provider-foo`. Substitute appropriate values below for your use case. + +> 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. + +### Prerequisites + +Ensure the following tools are installed and present in your `$PATH`: + +- [`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) + +### Creating and Initializing the Repository + +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: + +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. + +From the templated repository: + +1. Run the following command to update files to use the name of your provider (third-party: use your GitHub organization/username): + + ```bash + make prepare NAME=foo REPOSITORY=github.com/pulumi/pulumi-foo + ``` + + 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 `twingate` with the `NAME` of your provider. + + 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` + +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. + +### Composing the Provider Code - Prerequisites + +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:! + +## Building the Provider Locally + +There are 2 ways the provider can be built locally: + +`make provider` will use the current operating system and architecture to create a binary that can be used on your PATH. + +To build the provider for another set of operating systems / architectures, the project uses [goreleaser](https://goreleaser.com/). +Goreleaser, a CLI tool, that allows a user to build a matrix of binaries. + +Create a `.goreleaser.yml` file in the root of your project: + +```yaml + +archives: +- id: archive + name_template: "{{ .Binary }}-{{ .Tag }}-{{ .Os }}-{{ .Arch }}" +before: + hooks: + - make tfgen +builds: +- binary: pulumi-resource-twingate + dir: provider + goarch: + - amd64 + - arm64 + goos: + - darwin + - windows + - linux + ignore: [] + ldflags: + - -X github.com/pulumi/pulumi-twingate/provider/pkg/version.Version={{.Tag}} + main: ./cmd/pulumi-resource-twingate/ + sort: asc + use: git +release: + disable: false +snapshot: + name_template: "{{ .Tag }}-SNAPSHOT" +``` + +To build the provider for the combination of architectures and operating systems, you can run the following CLI command: + +```bash +goreleaser build --rm-dist --skip-validate +``` + +That will ensure that a list of binaries are available to use: + +```bash + +▶ tree dist +dist +├── CHANGELOG.md +├── artifacts.json +├── config.yaml +├── metadata.json +├── pulumi-twingate_darwin_amd64_v1 +│ └── pulumi-resource-twingate +├── pulumi-twingate_darwin_arm64 +│ └── pulumi-resource-twingate +├── pulumi-twingate_linux_amd64_v1 +│ └── pulumi-resource-twingate +├── pulumi-twingate_linux_arm64 +│ └── pulumi-resource-twingate +├── pulumi-twingate_windows_amd64_v1 +│ └── pulumi-resource-twingate.exe +└── pulumi-twingate_windows_arm64 + └── pulumi-resource-twingate.exe +``` + +Any of the provider binaries can be used to target the correct machine architecture + +## The Shim Pattern + +If you receive the following error: `use of internal package github.com/example/terraform-provider-example/internal/provider not allowed`, you need to use +the shim model below, and replace the example item: + +```bash + +mkdir -p provider/shim +cat <<-EOF> provider/shim/go.mod +module github.com/example/terraform-provider-example/shim + +go 1.18 + +require github.com/hashicorp/terraform-plugin-sdk/v2 v2.22.0 +require github.com/example/terraform-provider-example v1.0.0 + +EOF + +cat <<-EOF> provider/shim/shim.go +package shim + +import ( + "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" + "github.com/example/terraform-provider-example/internal/provider" +) + +// fix provider.Provider here to match whats in internal/provider +func Provider() *schema.Provider { + return provider.Provider() +} + +EOF + +cd provider/shim/ && go mod tidy && cd ../../ + +cat <> provider/go.mod +replace github.com/example/terraform-provider-example/shim => ./shim +require github.com/example/terraform-provider-example/shim v0.0.0 +EOF + +cd provider && go mod tidy + +``` + \ No newline at end of file diff --git a/sdk/python/pulumi_twingate/README.md b/sdk/python/pulumi_twingate/README.md new file mode 100644 index 0000000..02d77ac --- /dev/null +++ b/sdk/python/pulumi_twingate/README.md @@ -0,0 +1,4 @@ +> This provider is a derived work of the [Terraform Provider](https://github.com/Twingate/terraform-provider-twingate) +> 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-twingate` repo](https://github.com/Twingate/pulumi-twingate/issues); however, if that doesn't turn up anything, +> please consult the source [`terraform-provider-twingate` repo](https://github.com/Twingate/terraform-provider-twingate/issues). \ No newline at end of file diff --git a/sdk/python/pulumi_twingate/__init__.py b/sdk/python/pulumi_twingate/__init__.py new file mode 100644 index 0000000..46e0922 --- /dev/null +++ b/sdk/python/pulumi_twingate/__init__.py @@ -0,0 +1,119 @@ +# 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_twingate_connector import * +from .get_twingate_connectors import * +from .get_twingate_group import * +from .get_twingate_groups import * +from .get_twingate_remote_network import * +from .get_twingate_remote_networks import * +from .get_twingate_resource import * +from .get_twingate_resources import * +from .get_twingate_security_policies import * +from .get_twingate_security_policy import * +from .get_twingate_service_accounts import * +from .get_twingate_user import * +from .get_twingate_users import * +from .provider import * +from .twingate_connector import * +from .twingate_connector_tokens import * +from .twingate_group import * +from .twingate_remote_network import * +from .twingate_resource import * +from .twingate_service_account import * +from .twingate_service_account_key import * +from .twingate_user import * +from ._inputs import * +from . import outputs + +# Make subpackages available: +if typing.TYPE_CHECKING: + import pulumi_twingate.config as __config + config = __config +else: + config = _utilities.lazy_import('pulumi_twingate.config') + +_utilities.register( + resource_modules=""" +[ + { + "pkg": "twingate", + "mod": "index/twingateConnector", + "fqn": "pulumi_twingate", + "classes": { + "twingate:index/twingateConnector:TwingateConnector": "TwingateConnector" + } + }, + { + "pkg": "twingate", + "mod": "index/twingateConnectorTokens", + "fqn": "pulumi_twingate", + "classes": { + "twingate:index/twingateConnectorTokens:TwingateConnectorTokens": "TwingateConnectorTokens" + } + }, + { + "pkg": "twingate", + "mod": "index/twingateGroup", + "fqn": "pulumi_twingate", + "classes": { + "twingate:index/twingateGroup:TwingateGroup": "TwingateGroup" + } + }, + { + "pkg": "twingate", + "mod": "index/twingateRemoteNetwork", + "fqn": "pulumi_twingate", + "classes": { + "twingate:index/twingateRemoteNetwork:TwingateRemoteNetwork": "TwingateRemoteNetwork" + } + }, + { + "pkg": "twingate", + "mod": "index/twingateResource", + "fqn": "pulumi_twingate", + "classes": { + "twingate:index/twingateResource:TwingateResource": "TwingateResource" + } + }, + { + "pkg": "twingate", + "mod": "index/twingateServiceAccount", + "fqn": "pulumi_twingate", + "classes": { + "twingate:index/twingateServiceAccount:TwingateServiceAccount": "TwingateServiceAccount" + } + }, + { + "pkg": "twingate", + "mod": "index/twingateServiceAccountKey", + "fqn": "pulumi_twingate", + "classes": { + "twingate:index/twingateServiceAccountKey:TwingateServiceAccountKey": "TwingateServiceAccountKey" + } + }, + { + "pkg": "twingate", + "mod": "index/twingateUser", + "fqn": "pulumi_twingate", + "classes": { + "twingate:index/twingateUser:TwingateUser": "TwingateUser" + } + } +] +""", + resource_packages=""" +[ + { + "pkg": "twingate", + "token": "pulumi:providers:twingate", + "fqn": "pulumi_twingate", + "class": "Provider" + } +] +""" +) diff --git a/sdk/python/pulumi_twingate/_inputs.py b/sdk/python/pulumi_twingate/_inputs.py new file mode 100644 index 0000000..48ca005 --- /dev/null +++ b/sdk/python/pulumi_twingate/_inputs.py @@ -0,0 +1,937 @@ +# 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 copy +import warnings +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +from . import _utilities + +__all__ = [ + 'TwingateResourceAccessArgs', + 'TwingateResourceProtocolsArgs', + 'TwingateResourceProtocolsTcpArgs', + 'TwingateResourceProtocolsUdpArgs', + 'GetTwingateConnectorsConnectorArgs', + 'GetTwingateGroupsGroupArgs', + 'GetTwingateRemoteNetworksRemoteNetworkArgs', + 'GetTwingateResourceProtocolArgs', + 'GetTwingateResourceProtocolTcpArgs', + 'GetTwingateResourceProtocolUdpArgs', + 'GetTwingateResourcesResourceArgs', + 'GetTwingateResourcesResourceProtocolArgs', + 'GetTwingateResourcesResourceProtocolTcpArgs', + 'GetTwingateResourcesResourceProtocolUdpArgs', + 'GetTwingateSecurityPoliciesSecurityPolicyArgs', + 'GetTwingateServiceAccountsServiceAccountArgs', + 'GetTwingateUsersUserArgs', +] + +@pulumi.input_type +class TwingateResourceAccessArgs: + def __init__(__self__, *, + group_ids: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, + service_account_ids: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None): + """ + :param pulumi.Input[Sequence[pulumi.Input[str]]] group_ids: List of Group IDs that will have permission to access the Resource. + :param pulumi.Input[Sequence[pulumi.Input[str]]] service_account_ids: List of Service Account IDs that will have permission to access the Resource. + """ + if group_ids is not None: + pulumi.set(__self__, "group_ids", group_ids) + if service_account_ids is not None: + pulumi.set(__self__, "service_account_ids", service_account_ids) + + @property + @pulumi.getter(name="groupIds") + def group_ids(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]: + """ + List of Group IDs that will have permission to access the Resource. + """ + return pulumi.get(self, "group_ids") + + @group_ids.setter + def group_ids(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]): + pulumi.set(self, "group_ids", value) + + @property + @pulumi.getter(name="serviceAccountIds") + def service_account_ids(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]: + """ + List of Service Account IDs that will have permission to access the Resource. + """ + return pulumi.get(self, "service_account_ids") + + @service_account_ids.setter + def service_account_ids(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]): + pulumi.set(self, "service_account_ids", value) + + +@pulumi.input_type +class TwingateResourceProtocolsArgs: + def __init__(__self__, *, + tcp: pulumi.Input['TwingateResourceProtocolsTcpArgs'], + udp: pulumi.Input['TwingateResourceProtocolsUdpArgs'], + allow_icmp: Optional[pulumi.Input[bool]] = None): + """ + :param pulumi.Input[bool] allow_icmp: Whether to allow ICMP (ping) traffic + """ + pulumi.set(__self__, "tcp", tcp) + pulumi.set(__self__, "udp", udp) + if allow_icmp is not None: + pulumi.set(__self__, "allow_icmp", allow_icmp) + + @property + @pulumi.getter + def tcp(self) -> pulumi.Input['TwingateResourceProtocolsTcpArgs']: + return pulumi.get(self, "tcp") + + @tcp.setter + def tcp(self, value: pulumi.Input['TwingateResourceProtocolsTcpArgs']): + pulumi.set(self, "tcp", value) + + @property + @pulumi.getter + def udp(self) -> pulumi.Input['TwingateResourceProtocolsUdpArgs']: + return pulumi.get(self, "udp") + + @udp.setter + def udp(self, value: pulumi.Input['TwingateResourceProtocolsUdpArgs']): + pulumi.set(self, "udp", value) + + @property + @pulumi.getter(name="allowIcmp") + def allow_icmp(self) -> Optional[pulumi.Input[bool]]: + """ + Whether to allow ICMP (ping) traffic + """ + return pulumi.get(self, "allow_icmp") + + @allow_icmp.setter + def allow_icmp(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "allow_icmp", value) + + +@pulumi.input_type +class TwingateResourceProtocolsTcpArgs: + def __init__(__self__, *, + policy: pulumi.Input[str], + ports: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None): + """ + :param pulumi.Input[str] policy: Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + :param pulumi.Input[Sequence[pulumi.Input[str]]] ports: List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + """ + pulumi.set(__self__, "policy", policy) + if ports is not None: + pulumi.set(__self__, "ports", ports) + + @property + @pulumi.getter + def policy(self) -> pulumi.Input[str]: + """ + Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + """ + return pulumi.get(self, "policy") + + @policy.setter + def policy(self, value: pulumi.Input[str]): + pulumi.set(self, "policy", value) + + @property + @pulumi.getter + def ports(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]: + """ + List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + """ + return pulumi.get(self, "ports") + + @ports.setter + def ports(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]): + pulumi.set(self, "ports", value) + + +@pulumi.input_type +class TwingateResourceProtocolsUdpArgs: + def __init__(__self__, *, + policy: pulumi.Input[str], + ports: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None): + """ + :param pulumi.Input[str] policy: Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + :param pulumi.Input[Sequence[pulumi.Input[str]]] ports: List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + """ + pulumi.set(__self__, "policy", policy) + if ports is not None: + pulumi.set(__self__, "ports", ports) + + @property + @pulumi.getter + def policy(self) -> pulumi.Input[str]: + """ + Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + """ + return pulumi.get(self, "policy") + + @policy.setter + def policy(self, value: pulumi.Input[str]): + pulumi.set(self, "policy", value) + + @property + @pulumi.getter + def ports(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]: + """ + List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + """ + return pulumi.get(self, "ports") + + @ports.setter + def ports(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]): + pulumi.set(self, "ports", value) + + +@pulumi.input_type +class GetTwingateConnectorsConnectorArgs: + def __init__(__self__, *, + id: str, + name: str, + remote_network_id: str, + status_updates_enabled: bool): + """ + :param str id: The ID of the Connector. + :param str name: The Name of the Connector. + :param str remote_network_id: The ID of the Remote Network attached to the Connector. + :param bool status_updates_enabled: Determines whether status notifications are enabled for the Connector. + """ + pulumi.set(__self__, "id", id) + pulumi.set(__self__, "name", name) + pulumi.set(__self__, "remote_network_id", remote_network_id) + pulumi.set(__self__, "status_updates_enabled", status_updates_enabled) + + @property + @pulumi.getter + def id(self) -> str: + """ + The ID of the Connector. + """ + return pulumi.get(self, "id") + + @id.setter + def id(self, value: str): + pulumi.set(self, "id", value) + + @property + @pulumi.getter + def name(self) -> str: + """ + The Name of the Connector. + """ + return pulumi.get(self, "name") + + @name.setter + def name(self, value: str): + pulumi.set(self, "name", value) + + @property + @pulumi.getter(name="remoteNetworkId") + def remote_network_id(self) -> str: + """ + The ID of the Remote Network attached to the Connector. + """ + return pulumi.get(self, "remote_network_id") + + @remote_network_id.setter + def remote_network_id(self, value: str): + pulumi.set(self, "remote_network_id", value) + + @property + @pulumi.getter(name="statusUpdatesEnabled") + def status_updates_enabled(self) -> bool: + """ + Determines whether status notifications are enabled for the Connector. + """ + return pulumi.get(self, "status_updates_enabled") + + @status_updates_enabled.setter + def status_updates_enabled(self, value: bool): + pulumi.set(self, "status_updates_enabled", value) + + +@pulumi.input_type +class GetTwingateGroupsGroupArgs: + def __init__(__self__, *, + id: str, + is_active: bool, + name: str, + security_policy_id: str, + type: str): + """ + :param str id: The ID of the Group + :param bool is_active: Indicates if the Group is active + :param str name: The name of the Group + :param str security_policy_id: The Security Policy assigned to the Group. + :param str type: The type of the Group + """ + pulumi.set(__self__, "id", id) + pulumi.set(__self__, "is_active", is_active) + pulumi.set(__self__, "name", name) + pulumi.set(__self__, "security_policy_id", security_policy_id) + pulumi.set(__self__, "type", type) + + @property + @pulumi.getter + def id(self) -> str: + """ + The ID of the Group + """ + return pulumi.get(self, "id") + + @id.setter + def id(self, value: str): + pulumi.set(self, "id", value) + + @property + @pulumi.getter(name="isActive") + def is_active(self) -> bool: + """ + Indicates if the Group is active + """ + return pulumi.get(self, "is_active") + + @is_active.setter + def is_active(self, value: bool): + pulumi.set(self, "is_active", value) + + @property + @pulumi.getter + def name(self) -> str: + """ + The name of the Group + """ + return pulumi.get(self, "name") + + @name.setter + def name(self, value: str): + pulumi.set(self, "name", value) + + @property + @pulumi.getter(name="securityPolicyId") + def security_policy_id(self) -> str: + """ + The Security Policy assigned to the Group. + """ + return pulumi.get(self, "security_policy_id") + + @security_policy_id.setter + def security_policy_id(self, value: str): + pulumi.set(self, "security_policy_id", value) + + @property + @pulumi.getter + def type(self) -> str: + """ + The type of the Group + """ + return pulumi.get(self, "type") + + @type.setter + def type(self, value: str): + pulumi.set(self, "type", value) + + +@pulumi.input_type +class GetTwingateRemoteNetworksRemoteNetworkArgs: + def __init__(__self__, *, + id: str, + location: str, + name: str): + """ + :param str id: The ID of the Remote Network + :param str location: The location of the Remote Network. Must be one of the following: AWS, AZURE, GOOGLE*CLOUD, ON*PREMISE, OTHER. + :param str name: The name of the Remote Network + """ + pulumi.set(__self__, "id", id) + pulumi.set(__self__, "location", location) + pulumi.set(__self__, "name", name) + + @property + @pulumi.getter + def id(self) -> str: + """ + The ID of the Remote Network + """ + return pulumi.get(self, "id") + + @id.setter + def id(self, value: str): + pulumi.set(self, "id", value) + + @property + @pulumi.getter + def location(self) -> str: + """ + The location of the Remote Network. Must be one of the following: AWS, AZURE, GOOGLE*CLOUD, ON*PREMISE, OTHER. + """ + return pulumi.get(self, "location") + + @location.setter + def location(self, value: str): + pulumi.set(self, "location", value) + + @property + @pulumi.getter + def name(self) -> str: + """ + The name of the Remote Network + """ + return pulumi.get(self, "name") + + @name.setter + def name(self, value: str): + pulumi.set(self, "name", value) + + +@pulumi.input_type +class GetTwingateResourceProtocolArgs: + def __init__(__self__, *, + allow_icmp: bool, + tcps: Optional[Sequence['GetTwingateResourceProtocolTcpArgs']] = None, + udps: Optional[Sequence['GetTwingateResourceProtocolUdpArgs']] = None): + """ + :param bool allow_icmp: Whether to allow ICMP (ping) traffic + """ + pulumi.set(__self__, "allow_icmp", allow_icmp) + if tcps is not None: + pulumi.set(__self__, "tcps", tcps) + if udps is not None: + pulumi.set(__self__, "udps", udps) + + @property + @pulumi.getter(name="allowIcmp") + def allow_icmp(self) -> bool: + """ + Whether to allow ICMP (ping) traffic + """ + return pulumi.get(self, "allow_icmp") + + @allow_icmp.setter + def allow_icmp(self, value: bool): + pulumi.set(self, "allow_icmp", value) + + @property + @pulumi.getter + def tcps(self) -> Optional[Sequence['GetTwingateResourceProtocolTcpArgs']]: + return pulumi.get(self, "tcps") + + @tcps.setter + def tcps(self, value: Optional[Sequence['GetTwingateResourceProtocolTcpArgs']]): + pulumi.set(self, "tcps", value) + + @property + @pulumi.getter + def udps(self) -> Optional[Sequence['GetTwingateResourceProtocolUdpArgs']]: + return pulumi.get(self, "udps") + + @udps.setter + def udps(self, value: Optional[Sequence['GetTwingateResourceProtocolUdpArgs']]): + pulumi.set(self, "udps", value) + + +@pulumi.input_type +class GetTwingateResourceProtocolTcpArgs: + def __init__(__self__, *, + policy: str, + ports: Sequence[str]): + """ + :param str policy: Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + :param Sequence[str] ports: List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + """ + pulumi.set(__self__, "policy", policy) + pulumi.set(__self__, "ports", ports) + + @property + @pulumi.getter + def policy(self) -> str: + """ + Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + """ + return pulumi.get(self, "policy") + + @policy.setter + def policy(self, value: str): + pulumi.set(self, "policy", value) + + @property + @pulumi.getter + def ports(self) -> Sequence[str]: + """ + List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + """ + return pulumi.get(self, "ports") + + @ports.setter + def ports(self, value: Sequence[str]): + pulumi.set(self, "ports", value) + + +@pulumi.input_type +class GetTwingateResourceProtocolUdpArgs: + def __init__(__self__, *, + policy: str, + ports: Sequence[str]): + """ + :param str policy: Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + :param Sequence[str] ports: List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + """ + pulumi.set(__self__, "policy", policy) + pulumi.set(__self__, "ports", ports) + + @property + @pulumi.getter + def policy(self) -> str: + """ + Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + """ + return pulumi.get(self, "policy") + + @policy.setter + def policy(self, value: str): + pulumi.set(self, "policy", value) + + @property + @pulumi.getter + def ports(self) -> Sequence[str]: + """ + List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + """ + return pulumi.get(self, "ports") + + @ports.setter + def ports(self, value: Sequence[str]): + pulumi.set(self, "ports", value) + + +@pulumi.input_type +class GetTwingateResourcesResourceArgs: + def __init__(__self__, *, + address: str, + id: str, + name: str, + remote_network_id: str, + protocols: Optional[Sequence['GetTwingateResourcesResourceProtocolArgs']] = None): + """ + :param str address: The Resource's IP/CIDR or FQDN/DNS zone + :param str id: The id of the Resource + :param str name: The name of the Resource + :param str remote_network_id: Remote Network ID where the Resource lives + :param Sequence['GetTwingateResourcesResourceProtocolArgs'] protocols: Restrict access to certain protocols and ports. By default or when this argument is not defined, there is no restriction, and all protocols and ports are allowed. + """ + pulumi.set(__self__, "address", address) + pulumi.set(__self__, "id", id) + pulumi.set(__self__, "name", name) + pulumi.set(__self__, "remote_network_id", remote_network_id) + if protocols is not None: + pulumi.set(__self__, "protocols", protocols) + + @property + @pulumi.getter + def address(self) -> str: + """ + The Resource's IP/CIDR or FQDN/DNS zone + """ + return pulumi.get(self, "address") + + @address.setter + def address(self, value: str): + pulumi.set(self, "address", value) + + @property + @pulumi.getter + def id(self) -> str: + """ + The id of the Resource + """ + return pulumi.get(self, "id") + + @id.setter + def id(self, value: str): + pulumi.set(self, "id", value) + + @property + @pulumi.getter + def name(self) -> str: + """ + The name of the Resource + """ + return pulumi.get(self, "name") + + @name.setter + def name(self, value: str): + pulumi.set(self, "name", value) + + @property + @pulumi.getter(name="remoteNetworkId") + def remote_network_id(self) -> str: + """ + Remote Network ID where the Resource lives + """ + return pulumi.get(self, "remote_network_id") + + @remote_network_id.setter + def remote_network_id(self, value: str): + pulumi.set(self, "remote_network_id", value) + + @property + @pulumi.getter + def protocols(self) -> Optional[Sequence['GetTwingateResourcesResourceProtocolArgs']]: + """ + Restrict access to certain protocols and ports. By default or when this argument is not defined, there is no restriction, and all protocols and ports are allowed. + """ + return pulumi.get(self, "protocols") + + @protocols.setter + def protocols(self, value: Optional[Sequence['GetTwingateResourcesResourceProtocolArgs']]): + pulumi.set(self, "protocols", value) + + +@pulumi.input_type +class GetTwingateResourcesResourceProtocolArgs: + def __init__(__self__, *, + allow_icmp: bool, + tcps: Optional[Sequence['GetTwingateResourcesResourceProtocolTcpArgs']] = None, + udps: Optional[Sequence['GetTwingateResourcesResourceProtocolUdpArgs']] = None): + """ + :param bool allow_icmp: Whether to allow ICMP (ping) traffic + """ + pulumi.set(__self__, "allow_icmp", allow_icmp) + if tcps is not None: + pulumi.set(__self__, "tcps", tcps) + if udps is not None: + pulumi.set(__self__, "udps", udps) + + @property + @pulumi.getter(name="allowIcmp") + def allow_icmp(self) -> bool: + """ + Whether to allow ICMP (ping) traffic + """ + return pulumi.get(self, "allow_icmp") + + @allow_icmp.setter + def allow_icmp(self, value: bool): + pulumi.set(self, "allow_icmp", value) + + @property + @pulumi.getter + def tcps(self) -> Optional[Sequence['GetTwingateResourcesResourceProtocolTcpArgs']]: + return pulumi.get(self, "tcps") + + @tcps.setter + def tcps(self, value: Optional[Sequence['GetTwingateResourcesResourceProtocolTcpArgs']]): + pulumi.set(self, "tcps", value) + + @property + @pulumi.getter + def udps(self) -> Optional[Sequence['GetTwingateResourcesResourceProtocolUdpArgs']]: + return pulumi.get(self, "udps") + + @udps.setter + def udps(self, value: Optional[Sequence['GetTwingateResourcesResourceProtocolUdpArgs']]): + pulumi.set(self, "udps", value) + + +@pulumi.input_type +class GetTwingateResourcesResourceProtocolTcpArgs: + def __init__(__self__, *, + policy: str, + ports: Sequence[str]): + """ + :param str policy: Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + :param Sequence[str] ports: List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + """ + pulumi.set(__self__, "policy", policy) + pulumi.set(__self__, "ports", ports) + + @property + @pulumi.getter + def policy(self) -> str: + """ + Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + """ + return pulumi.get(self, "policy") + + @policy.setter + def policy(self, value: str): + pulumi.set(self, "policy", value) + + @property + @pulumi.getter + def ports(self) -> Sequence[str]: + """ + List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + """ + return pulumi.get(self, "ports") + + @ports.setter + def ports(self, value: Sequence[str]): + pulumi.set(self, "ports", value) + + +@pulumi.input_type +class GetTwingateResourcesResourceProtocolUdpArgs: + def __init__(__self__, *, + policy: str, + ports: Sequence[str]): + """ + :param str policy: Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + :param Sequence[str] ports: List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + """ + pulumi.set(__self__, "policy", policy) + pulumi.set(__self__, "ports", ports) + + @property + @pulumi.getter + def policy(self) -> str: + """ + Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + """ + return pulumi.get(self, "policy") + + @policy.setter + def policy(self, value: str): + pulumi.set(self, "policy", value) + + @property + @pulumi.getter + def ports(self) -> Sequence[str]: + """ + List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + """ + return pulumi.get(self, "ports") + + @ports.setter + def ports(self, value: Sequence[str]): + pulumi.set(self, "ports", value) + + +@pulumi.input_type +class GetTwingateSecurityPoliciesSecurityPolicyArgs: + def __init__(__self__, *, + id: str, + name: str): + """ + :param str id: Return a matching Security Policy by its ID. The ID for the Security Policy can be obtained from the Admin API or the URL string in the Admin Console. + :param str name: Return a Security Policy that exactly matches this name. + """ + pulumi.set(__self__, "id", id) + pulumi.set(__self__, "name", name) + + @property + @pulumi.getter + def id(self) -> str: + """ + Return a matching Security Policy by its ID. The ID for the Security Policy can be obtained from the Admin API or the URL string in the Admin Console. + """ + return pulumi.get(self, "id") + + @id.setter + def id(self, value: str): + pulumi.set(self, "id", value) + + @property + @pulumi.getter + def name(self) -> str: + """ + Return a Security Policy that exactly matches this name. + """ + return pulumi.get(self, "name") + + @name.setter + def name(self, value: str): + pulumi.set(self, "name", value) + + +@pulumi.input_type +class GetTwingateServiceAccountsServiceAccountArgs: + def __init__(__self__, *, + id: str, + key_ids: Sequence[str], + name: str, + resource_ids: Sequence[str]): + """ + :param str id: ID of the Service Account resource + :param Sequence[str] key_ids: List of twingate*service*account_key IDs that are assigned to the Service Account. + :param str name: Name of the Service Account + :param Sequence[str] resource_ids: List of TwingateResource IDs that the Service Account is assigned to. + """ + pulumi.set(__self__, "id", id) + pulumi.set(__self__, "key_ids", key_ids) + pulumi.set(__self__, "name", name) + pulumi.set(__self__, "resource_ids", resource_ids) + + @property + @pulumi.getter + def id(self) -> str: + """ + ID of the Service Account resource + """ + return pulumi.get(self, "id") + + @id.setter + def id(self, value: str): + pulumi.set(self, "id", value) + + @property + @pulumi.getter(name="keyIds") + def key_ids(self) -> Sequence[str]: + """ + List of twingate*service*account_key IDs that are assigned to the Service Account. + """ + return pulumi.get(self, "key_ids") + + @key_ids.setter + def key_ids(self, value: Sequence[str]): + pulumi.set(self, "key_ids", value) + + @property + @pulumi.getter + def name(self) -> str: + """ + Name of the Service Account + """ + return pulumi.get(self, "name") + + @name.setter + def name(self, value: str): + pulumi.set(self, "name", value) + + @property + @pulumi.getter(name="resourceIds") + def resource_ids(self) -> Sequence[str]: + """ + List of TwingateResource IDs that the Service Account is assigned to. + """ + return pulumi.get(self, "resource_ids") + + @resource_ids.setter + def resource_ids(self, value: Sequence[str]): + pulumi.set(self, "resource_ids", value) + + +@pulumi.input_type +class GetTwingateUsersUserArgs: + def __init__(__self__, *, + email: str, + first_name: str, + id: str, + is_admin: bool, + last_name: str, + role: str, + type: str): + """ + :param str email: The email address of the User + :param str first_name: The first name of the User + :param str id: The ID of the User + :param bool is_admin: Indicates whether the User is an admin + :param str last_name: The last name of the User + :param str role: Indicates the User's role. Either ADMIN, DEVOPS, SUPPORT, or MEMBER. + :param str type: Indicates the User's type. Either MANUAL or SYNCED. + """ + pulumi.set(__self__, "email", email) + pulumi.set(__self__, "first_name", first_name) + pulumi.set(__self__, "id", id) + if is_admin is not None: + warnings.warn("""This read-only Boolean value will be deprecated in a future release. You may use the `role` value instead.""", DeprecationWarning) + pulumi.log.warn("""is_admin is deprecated: This read-only Boolean value will be deprecated in a future release. You may use the `role` value instead.""") + pulumi.set(__self__, "is_admin", is_admin) + pulumi.set(__self__, "last_name", last_name) + pulumi.set(__self__, "role", role) + pulumi.set(__self__, "type", type) + + @property + @pulumi.getter + def email(self) -> str: + """ + The email address of the User + """ + return pulumi.get(self, "email") + + @email.setter + def email(self, value: str): + pulumi.set(self, "email", value) + + @property + @pulumi.getter(name="firstName") + def first_name(self) -> str: + """ + The first name of the User + """ + return pulumi.get(self, "first_name") + + @first_name.setter + def first_name(self, value: str): + pulumi.set(self, "first_name", value) + + @property + @pulumi.getter + def id(self) -> str: + """ + The ID of the User + """ + return pulumi.get(self, "id") + + @id.setter + def id(self, value: str): + pulumi.set(self, "id", value) + + @property + @pulumi.getter(name="isAdmin") + def is_admin(self) -> bool: + """ + Indicates whether the User is an admin + """ + warnings.warn("""This read-only Boolean value will be deprecated in a future release. You may use the `role` value instead.""", DeprecationWarning) + pulumi.log.warn("""is_admin is deprecated: This read-only Boolean value will be deprecated in a future release. You may use the `role` value instead.""") + + return pulumi.get(self, "is_admin") + + @is_admin.setter + def is_admin(self, value: bool): + pulumi.set(self, "is_admin", value) + + @property + @pulumi.getter(name="lastName") + def last_name(self) -> str: + """ + The last name of the User + """ + return pulumi.get(self, "last_name") + + @last_name.setter + def last_name(self, value: str): + pulumi.set(self, "last_name", value) + + @property + @pulumi.getter + def role(self) -> str: + """ + Indicates the User's role. Either ADMIN, DEVOPS, SUPPORT, or MEMBER. + """ + return pulumi.get(self, "role") + + @role.setter + def role(self, value: str): + pulumi.set(self, "role", value) + + @property + @pulumi.getter + def type(self) -> str: + """ + Indicates the User's type. Either MANUAL or SYNCED. + """ + return pulumi.get(self, "type") + + @type.setter + def type(self, value: str): + pulumi.set(self, "type", value) + + diff --git a/sdk/python/pulumi_twingate/_utilities.py b/sdk/python/pulumi_twingate/_utilities.py new file mode 100644 index 0000000..968f8f5 --- /dev/null +++ b/sdk/python/pulumi_twingate/_utilities.py @@ -0,0 +1,291 @@ +# 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 asyncio +import importlib.util +import inspect +import json +import os +import pkg_resources +import sys +import typing + +import pulumi +import pulumi.runtime +from pulumi.runtime.sync_await import _sync_await + +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_opts_defaults() -> pulumi.ResourceOptions: + return pulumi.ResourceOptions( + version=get_version(), + plugin_download_url=get_plugin_download_url(), + ) + +def get_invoke_opts_defaults() -> pulumi.InvokeOptions: + return pulumi.InvokeOptions( + version=get_version(), + plugin_download_url=get_plugin_download_url(), + ) + +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 call_plain( + tok: str, + props: pulumi.Inputs, + res: typing.Optional[pulumi.Resource] = None, + typ: typing.Optional[type] = None, +) -> typing.Any: + """ + Wraps pulumi.runtime.plain to force the output and return it plainly. + """ + + output = pulumi.runtime.call(tok, props, res, typ) + + # Ingoring deps silently. They are typically non-empty, r.f() calls include r as a dependency. + result, known, secret, _ = _sync_await(asyncio.ensure_future(_await_output(output))) + + problem = None + if not known: + problem = ' an unknown value' + elif secret: + problem = ' a secret value' + + if problem: + raise AssertionError( + f"Plain resource method '{tok}' incorrectly returned {problem}. " + + "This is an error in the provider, please report this to the provider developer." + ) + + return result + + +async def _await_output(o: pulumi.Output[typing.Any]) -> typing.Tuple[object, bool, bool, set]: + return ( + await o._future, + await o._is_known, + await o._is_secret, + await o._resources, + ) + +def get_plugin_download_url(): + return None diff --git a/sdk/python/pulumi_twingate/config/__init__.py b/sdk/python/pulumi_twingate/config/__init__.py new file mode 100644 index 0000000..18853fc --- /dev/null +++ b/sdk/python/pulumi_twingate/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/pulumi_twingate/config/__init__.pyi b/sdk/python/pulumi_twingate/config/__init__.pyi new file mode 100644 index 0000000..907edb7 --- /dev/null +++ b/sdk/python/pulumi_twingate/config/__init__.pyi @@ -0,0 +1,42 @@ +# 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 copy +import warnings +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +from .. import _utilities + +apiToken: Optional[str] +""" +The access key for API operations. You can retrieve this from the Twingate Admin Console +([documentation](https://docs.twingate.com/docs/api-overview)). Alternatively, this can be specified using the +TWINGATE_API_TOKEN environment variable. +""" + +httpMaxRetry: Optional[int] +""" +Specifies a retry limit for the http requests made. The default value is 10. Alternatively, this can be specified using +the TWINGATE_HTTP_MAX_RETRY environment variable +""" + +httpTimeout: Optional[int] +""" +Specifies a time limit in seconds for the http requests made. The default value is 10 seconds. Alternatively, this can +be specified using the TWINGATE_HTTP_TIMEOUT environment variable +""" + +network: Optional[str] +""" +Your Twingate network ID for API operations. You can find it in the Admin Console URL, for example: +`autoco.twingate.com`, where `autoco` is your network ID Alternatively, this can be specified using the TWINGATE_NETWORK +environment variable. +""" + +url: Optional[str] +""" +The default is 'twingate.com' This is optional and shouldn't be changed under normal circumstances. +""" + diff --git a/sdk/python/pulumi_twingate/config/vars.py b/sdk/python/pulumi_twingate/config/vars.py new file mode 100644 index 0000000..0a7f286 --- /dev/null +++ b/sdk/python/pulumi_twingate/config/vars.py @@ -0,0 +1,58 @@ +# 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 copy +import warnings +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +from .. import _utilities + +import types + +__config__ = pulumi.Config('twingate') + + +class _ExportableConfig(types.ModuleType): + @property + def api_token(self) -> Optional[str]: + """ + The access key for API operations. You can retrieve this from the Twingate Admin Console + ([documentation](https://docs.twingate.com/docs/api-overview)). Alternatively, this can be specified using the + TWINGATE_API_TOKEN environment variable. + """ + return __config__.get('apiToken') + + @property + def http_max_retry(self) -> Optional[int]: + """ + Specifies a retry limit for the http requests made. The default value is 10. Alternatively, this can be specified using + the TWINGATE_HTTP_MAX_RETRY environment variable + """ + return __config__.get_int('httpMaxRetry') + + @property + def http_timeout(self) -> Optional[int]: + """ + Specifies a time limit in seconds for the http requests made. The default value is 10 seconds. Alternatively, this can + be specified using the TWINGATE_HTTP_TIMEOUT environment variable + """ + return __config__.get_int('httpTimeout') + + @property + def network(self) -> Optional[str]: + """ + Your Twingate network ID for API operations. You can find it in the Admin Console URL, for example: + `autoco.twingate.com`, where `autoco` is your network ID Alternatively, this can be specified using the TWINGATE_NETWORK + environment variable. + """ + return __config__.get('network') + + @property + def url(self) -> Optional[str]: + """ + The default is 'twingate.com' This is optional and shouldn't be changed under normal circumstances. + """ + return __config__.get('url') + diff --git a/sdk/python/pulumi_twingate/get_twingate_connector.py b/sdk/python/pulumi_twingate/get_twingate_connector.py new file mode 100644 index 0000000..70aadc8 --- /dev/null +++ b/sdk/python/pulumi_twingate/get_twingate_connector.py @@ -0,0 +1,130 @@ +# 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 copy +import warnings +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +from . import _utilities + +__all__ = [ + 'GetTwingateConnectorResult', + 'AwaitableGetTwingateConnectorResult', + 'get_twingate_connector', + 'get_twingate_connector_output', +] + +@pulumi.output_type +class GetTwingateConnectorResult: + """ + A collection of values returned by getTwingateConnector. + """ + def __init__(__self__, id=None, name=None, remote_network_id=None, status_updates_enabled=None): + 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 remote_network_id and not isinstance(remote_network_id, str): + raise TypeError("Expected argument 'remote_network_id' to be a str") + pulumi.set(__self__, "remote_network_id", remote_network_id) + if status_updates_enabled and not isinstance(status_updates_enabled, bool): + raise TypeError("Expected argument 'status_updates_enabled' to be a bool") + pulumi.set(__self__, "status_updates_enabled", status_updates_enabled) + + @property + @pulumi.getter + def id(self) -> str: + """ + The ID of the Connector. The ID for the Connector can be obtained from the Admin API or the URL string in the Admin Console. + """ + return pulumi.get(self, "id") + + @property + @pulumi.getter + def name(self) -> str: + """ + The name of the Connector. + """ + return pulumi.get(self, "name") + + @property + @pulumi.getter(name="remoteNetworkId") + def remote_network_id(self) -> str: + """ + The ID of the Remote Network the Connector is attached to. + """ + return pulumi.get(self, "remote_network_id") + + @property + @pulumi.getter(name="statusUpdatesEnabled") + def status_updates_enabled(self) -> bool: + """ + Determines whether status notifications are enabled for the Connector. + """ + return pulumi.get(self, "status_updates_enabled") + + +class AwaitableGetTwingateConnectorResult(GetTwingateConnectorResult): + # pylint: disable=using-constant-test + def __await__(self): + if False: + yield self + return GetTwingateConnectorResult( + id=self.id, + name=self.name, + remote_network_id=self.remote_network_id, + status_updates_enabled=self.status_updates_enabled) + + +def get_twingate_connector(id: Optional[str] = None, + opts: Optional[pulumi.InvokeOptions] = None) -> AwaitableGetTwingateConnectorResult: + """ + Connectors provide connectivity to Remote Networks. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/understanding-access-nodes). + + ## Example Usage + + ```python + import pulumi + import pulumi_twingate as twingate + + foo = twingate.get_twingate_connector(id="") + ``` + + + :param str id: The ID of the Connector. The ID for the Connector can be obtained from the Admin API or the URL string in the Admin Console. + """ + __args__ = dict() + __args__['id'] = id + opts = pulumi.InvokeOptions.merge(_utilities.get_invoke_opts_defaults(), opts) + __ret__ = pulumi.runtime.invoke('twingate:index/getTwingateConnector:getTwingateConnector', __args__, opts=opts, typ=GetTwingateConnectorResult).value + + return AwaitableGetTwingateConnectorResult( + id=pulumi.get(__ret__, 'id'), + name=pulumi.get(__ret__, 'name'), + remote_network_id=pulumi.get(__ret__, 'remote_network_id'), + status_updates_enabled=pulumi.get(__ret__, 'status_updates_enabled')) + + +@_utilities.lift_output_func(get_twingate_connector) +def get_twingate_connector_output(id: Optional[pulumi.Input[str]] = None, + opts: Optional[pulumi.InvokeOptions] = None) -> pulumi.Output[GetTwingateConnectorResult]: + """ + Connectors provide connectivity to Remote Networks. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/understanding-access-nodes). + + ## Example Usage + + ```python + import pulumi + import pulumi_twingate as twingate + + foo = twingate.get_twingate_connector(id="") + ``` + + + :param str id: The ID of the Connector. The ID for the Connector can be obtained from the Admin API or the URL string in the Admin Console. + """ + ... diff --git a/sdk/python/pulumi_twingate/get_twingate_connectors.py b/sdk/python/pulumi_twingate/get_twingate_connectors.py new file mode 100644 index 0000000..0a1acc4 --- /dev/null +++ b/sdk/python/pulumi_twingate/get_twingate_connectors.py @@ -0,0 +1,106 @@ +# 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 copy +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__ = [ + 'GetTwingateConnectorsResult', + 'AwaitableGetTwingateConnectorsResult', + 'get_twingate_connectors', + 'get_twingate_connectors_output', +] + +@pulumi.output_type +class GetTwingateConnectorsResult: + """ + A collection of values returned by getTwingateConnectors. + """ + def __init__(__self__, connectors=None, id=None): + if connectors and not isinstance(connectors, list): + raise TypeError("Expected argument 'connectors' to be a list") + pulumi.set(__self__, "connectors", connectors) + if id and not isinstance(id, str): + raise TypeError("Expected argument 'id' to be a str") + pulumi.set(__self__, "id", id) + + @property + @pulumi.getter + def connectors(self) -> Optional[Sequence['outputs.GetTwingateConnectorsConnectorResult']]: + """ + List of Connectors + """ + return pulumi.get(self, "connectors") + + @property + @pulumi.getter + def id(self) -> str: + """ + The provider-assigned unique ID for this managed resource. + """ + return pulumi.get(self, "id") + + +class AwaitableGetTwingateConnectorsResult(GetTwingateConnectorsResult): + # pylint: disable=using-constant-test + def __await__(self): + if False: + yield self + return GetTwingateConnectorsResult( + connectors=self.connectors, + id=self.id) + + +def get_twingate_connectors(connectors: Optional[Sequence[pulumi.InputType['GetTwingateConnectorsConnectorArgs']]] = None, + opts: Optional[pulumi.InvokeOptions] = None) -> AwaitableGetTwingateConnectorsResult: + """ + Connectors provide connectivity to Remote Networks. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/understanding-access-nodes). + + ## Example Usage + + ```python + import pulumi + import pulumi_twingate as twingate + + all = twingate.get_twingate_connectors() + ``` + + + :param Sequence[pulumi.InputType['GetTwingateConnectorsConnectorArgs']] connectors: List of Connectors + """ + __args__ = dict() + __args__['connectors'] = connectors + opts = pulumi.InvokeOptions.merge(_utilities.get_invoke_opts_defaults(), opts) + __ret__ = pulumi.runtime.invoke('twingate:index/getTwingateConnectors:getTwingateConnectors', __args__, opts=opts, typ=GetTwingateConnectorsResult).value + + return AwaitableGetTwingateConnectorsResult( + connectors=pulumi.get(__ret__, 'connectors'), + id=pulumi.get(__ret__, 'id')) + + +@_utilities.lift_output_func(get_twingate_connectors) +def get_twingate_connectors_output(connectors: Optional[pulumi.Input[Optional[Sequence[pulumi.InputType['GetTwingateConnectorsConnectorArgs']]]]] = None, + opts: Optional[pulumi.InvokeOptions] = None) -> pulumi.Output[GetTwingateConnectorsResult]: + """ + Connectors provide connectivity to Remote Networks. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/understanding-access-nodes). + + ## Example Usage + + ```python + import pulumi + import pulumi_twingate as twingate + + all = twingate.get_twingate_connectors() + ``` + + + :param Sequence[pulumi.InputType['GetTwingateConnectorsConnectorArgs']] connectors: List of Connectors + """ + ... diff --git a/sdk/python/pulumi_twingate/get_twingate_group.py b/sdk/python/pulumi_twingate/get_twingate_group.py new file mode 100644 index 0000000..bfc3a7e --- /dev/null +++ b/sdk/python/pulumi_twingate/get_twingate_group.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 copy +import warnings +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +from . import _utilities + +__all__ = [ + 'GetTwingateGroupResult', + 'AwaitableGetTwingateGroupResult', + 'get_twingate_group', + 'get_twingate_group_output', +] + +@pulumi.output_type +class GetTwingateGroupResult: + """ + A collection of values returned by getTwingateGroup. + """ + def __init__(__self__, id=None, is_active=None, name=None, security_policy_id=None, type=None): + if id and not isinstance(id, str): + raise TypeError("Expected argument 'id' to be a str") + pulumi.set(__self__, "id", id) + if is_active and not isinstance(is_active, bool): + raise TypeError("Expected argument 'is_active' to be a bool") + pulumi.set(__self__, "is_active", is_active) + if name and not isinstance(name, str): + raise TypeError("Expected argument 'name' to be a str") + pulumi.set(__self__, "name", name) + if security_policy_id and not isinstance(security_policy_id, str): + raise TypeError("Expected argument 'security_policy_id' to be a str") + pulumi.set(__self__, "security_policy_id", security_policy_id) + if type and not isinstance(type, str): + raise TypeError("Expected argument 'type' to be a str") + pulumi.set(__self__, "type", type) + + @property + @pulumi.getter + def id(self) -> str: + """ + The ID of the Group. The ID for the Group can be obtained from the Admin API or the URL string in the Admin Console. + """ + return pulumi.get(self, "id") + + @property + @pulumi.getter(name="isActive") + def is_active(self) -> bool: + """ + Indicates if the Group is active + """ + return pulumi.get(self, "is_active") + + @property + @pulumi.getter + def name(self) -> str: + """ + The name of the Group + """ + return pulumi.get(self, "name") + + @property + @pulumi.getter(name="securityPolicyId") + def security_policy_id(self) -> str: + """ + The Security Policy assigned to the Group. + """ + return pulumi.get(self, "security_policy_id") + + @property + @pulumi.getter + def type(self) -> str: + """ + The type of the Group + """ + return pulumi.get(self, "type") + + +class AwaitableGetTwingateGroupResult(GetTwingateGroupResult): + # pylint: disable=using-constant-test + def __await__(self): + if False: + yield self + return GetTwingateGroupResult( + id=self.id, + is_active=self.is_active, + name=self.name, + security_policy_id=self.security_policy_id, + type=self.type) + + +def get_twingate_group(id: Optional[str] = None, + opts: Optional[pulumi.InvokeOptions] = None) -> AwaitableGetTwingateGroupResult: + """ + Groups are how users are authorized to access Resources. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/groups). + + ## Example Usage + + ```python + import pulumi + import pulumi_twingate as twingate + + foo = twingate.get_twingate_group(id="") + ``` + + + :param str id: The ID of the Group. The ID for the Group can be obtained from the Admin API or the URL string in the Admin Console. + """ + __args__ = dict() + __args__['id'] = id + opts = pulumi.InvokeOptions.merge(_utilities.get_invoke_opts_defaults(), opts) + __ret__ = pulumi.runtime.invoke('twingate:index/getTwingateGroup:getTwingateGroup', __args__, opts=opts, typ=GetTwingateGroupResult).value + + return AwaitableGetTwingateGroupResult( + id=pulumi.get(__ret__, 'id'), + is_active=pulumi.get(__ret__, 'is_active'), + name=pulumi.get(__ret__, 'name'), + security_policy_id=pulumi.get(__ret__, 'security_policy_id'), + type=pulumi.get(__ret__, 'type')) + + +@_utilities.lift_output_func(get_twingate_group) +def get_twingate_group_output(id: Optional[pulumi.Input[str]] = None, + opts: Optional[pulumi.InvokeOptions] = None) -> pulumi.Output[GetTwingateGroupResult]: + """ + Groups are how users are authorized to access Resources. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/groups). + + ## Example Usage + + ```python + import pulumi + import pulumi_twingate as twingate + + foo = twingate.get_twingate_group(id="") + ``` + + + :param str id: The ID of the Group. The ID for the Group can be obtained from the Admin API or the URL string in the Admin Console. + """ + ... diff --git a/sdk/python/pulumi_twingate/get_twingate_groups.py b/sdk/python/pulumi_twingate/get_twingate_groups.py new file mode 100644 index 0000000..15ccaa1 --- /dev/null +++ b/sdk/python/pulumi_twingate/get_twingate_groups.py @@ -0,0 +1,160 @@ +# 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 copy +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__ = [ + 'GetTwingateGroupsResult', + 'AwaitableGetTwingateGroupsResult', + 'get_twingate_groups', + 'get_twingate_groups_output', +] + +@pulumi.output_type +class GetTwingateGroupsResult: + """ + A collection of values returned by getTwingateGroups. + """ + def __init__(__self__, groups=None, id=None, is_active=None, name=None, type=None): + if groups and not isinstance(groups, list): + raise TypeError("Expected argument 'groups' to be a list") + pulumi.set(__self__, "groups", groups) + if id and not isinstance(id, str): + raise TypeError("Expected argument 'id' to be a str") + pulumi.set(__self__, "id", id) + if is_active and not isinstance(is_active, bool): + raise TypeError("Expected argument 'is_active' to be a bool") + pulumi.set(__self__, "is_active", is_active) + if name and not isinstance(name, str): + raise TypeError("Expected argument 'name' to be a str") + pulumi.set(__self__, "name", name) + if type and not isinstance(type, str): + raise TypeError("Expected argument 'type' to be a str") + pulumi.set(__self__, "type", type) + + @property + @pulumi.getter + def groups(self) -> Optional[Sequence['outputs.GetTwingateGroupsGroupResult']]: + """ + List of Groups + """ + return pulumi.get(self, "groups") + + @property + @pulumi.getter + def id(self) -> str: + """ + The provider-assigned unique ID for this managed resource. + """ + return pulumi.get(self, "id") + + @property + @pulumi.getter(name="isActive") + def is_active(self) -> Optional[bool]: + """ + Returns only Groups matching the specified state. + """ + return pulumi.get(self, "is_active") + + @property + @pulumi.getter + def name(self) -> Optional[str]: + """ + Returns only Groups that exactly match this name. + """ + return pulumi.get(self, "name") + + @property + @pulumi.getter + def type(self) -> Optional[str]: + """ + Returns only Groups of the specified type (valid: `MANUAL`, `SYNCED`, `SYSTEM`). + """ + return pulumi.get(self, "type") + + +class AwaitableGetTwingateGroupsResult(GetTwingateGroupsResult): + # pylint: disable=using-constant-test + def __await__(self): + if False: + yield self + return GetTwingateGroupsResult( + groups=self.groups, + id=self.id, + is_active=self.is_active, + name=self.name, + type=self.type) + + +def get_twingate_groups(groups: Optional[Sequence[pulumi.InputType['GetTwingateGroupsGroupArgs']]] = None, + is_active: Optional[bool] = None, + name: Optional[str] = None, + type: Optional[str] = None, + opts: Optional[pulumi.InvokeOptions] = None) -> AwaitableGetTwingateGroupsResult: + """ + Groups are how users are authorized to access Resources. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/groups). + + ## Example Usage + + ```python + import pulumi + import pulumi_twingate as twingate + + foo = twingate.get_twingate_groups(name="") + ``` + + + :param Sequence[pulumi.InputType['GetTwingateGroupsGroupArgs']] groups: List of Groups + :param bool is_active: Indicates if the Group is active + :param str name: The name of the Group + :param str type: The type of the Group + """ + __args__ = dict() + __args__['groups'] = groups + __args__['isActive'] = is_active + __args__['name'] = name + __args__['type'] = type + opts = pulumi.InvokeOptions.merge(_utilities.get_invoke_opts_defaults(), opts) + __ret__ = pulumi.runtime.invoke('twingate:index/getTwingateGroups:getTwingateGroups', __args__, opts=opts, typ=GetTwingateGroupsResult).value + + return AwaitableGetTwingateGroupsResult( + groups=pulumi.get(__ret__, 'groups'), + id=pulumi.get(__ret__, 'id'), + is_active=pulumi.get(__ret__, 'is_active'), + name=pulumi.get(__ret__, 'name'), + type=pulumi.get(__ret__, 'type')) + + +@_utilities.lift_output_func(get_twingate_groups) +def get_twingate_groups_output(groups: Optional[pulumi.Input[Optional[Sequence[pulumi.InputType['GetTwingateGroupsGroupArgs']]]]] = None, + is_active: Optional[pulumi.Input[Optional[bool]]] = None, + name: Optional[pulumi.Input[Optional[str]]] = None, + type: Optional[pulumi.Input[Optional[str]]] = None, + opts: Optional[pulumi.InvokeOptions] = None) -> pulumi.Output[GetTwingateGroupsResult]: + """ + Groups are how users are authorized to access Resources. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/groups). + + ## Example Usage + + ```python + import pulumi + import pulumi_twingate as twingate + + foo = twingate.get_twingate_groups(name="") + ``` + + + :param Sequence[pulumi.InputType['GetTwingateGroupsGroupArgs']] groups: List of Groups + :param bool is_active: Indicates if the Group is active + :param str name: The name of the Group + :param str type: The type of the Group + """ + ... diff --git a/sdk/python/pulumi_twingate/get_twingate_remote_network.py b/sdk/python/pulumi_twingate/get_twingate_remote_network.py new file mode 100644 index 0000000..6e45b8b --- /dev/null +++ b/sdk/python/pulumi_twingate/get_twingate_remote_network.py @@ -0,0 +1,122 @@ +# 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 copy +import warnings +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +from . import _utilities + +__all__ = [ + 'GetTwingateRemoteNetworkResult', + 'AwaitableGetTwingateRemoteNetworkResult', + 'get_twingate_remote_network', + 'get_twingate_remote_network_output', +] + +@pulumi.output_type +class GetTwingateRemoteNetworkResult: + """ + A collection of values returned by getTwingateRemoteNetwork. + """ + def __init__(__self__, id=None, location=None, name=None): + if id and not isinstance(id, str): + raise TypeError("Expected argument 'id' to be a str") + pulumi.set(__self__, "id", id) + if location and not isinstance(location, str): + raise TypeError("Expected argument 'location' to be a str") + pulumi.set(__self__, "location", location) + if name and not isinstance(name, str): + raise TypeError("Expected argument 'name' to be a str") + pulumi.set(__self__, "name", name) + + @property + @pulumi.getter + def id(self) -> Optional[str]: + """ + The ID of the Remote Network + """ + return pulumi.get(self, "id") + + @property + @pulumi.getter + def location(self) -> str: + """ + The location of the Remote Network. Must be one of the following: AWS, AZURE, GOOGLE*CLOUD, ON*PREMISE, OTHER. + """ + return pulumi.get(self, "location") + + @property + @pulumi.getter + def name(self) -> Optional[str]: + """ + The name of the Remote Network + """ + return pulumi.get(self, "name") + + +class AwaitableGetTwingateRemoteNetworkResult(GetTwingateRemoteNetworkResult): + # pylint: disable=using-constant-test + def __await__(self): + if False: + yield self + return GetTwingateRemoteNetworkResult( + id=self.id, + location=self.location, + name=self.name) + + +def get_twingate_remote_network(id: Optional[str] = None, + name: Optional[str] = None, + opts: Optional[pulumi.InvokeOptions] = None) -> AwaitableGetTwingateRemoteNetworkResult: + """ + A Remote Network represents a single private network in Twingate that can have one or more Connectors and Resources assigned to it. You must create a Remote Network before creating Resources and Connectors that belong to it. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/remote-networks). + + ## Example Usage + + ```python + import pulumi + import pulumi_twingate as twingate + + foo = twingate.get_twingate_remote_network(name="") + ``` + + + :param str id: The ID of the Remote Network + :param str name: The name of the Remote Network + """ + __args__ = dict() + __args__['id'] = id + __args__['name'] = name + opts = pulumi.InvokeOptions.merge(_utilities.get_invoke_opts_defaults(), opts) + __ret__ = pulumi.runtime.invoke('twingate:index/getTwingateRemoteNetwork:getTwingateRemoteNetwork', __args__, opts=opts, typ=GetTwingateRemoteNetworkResult).value + + return AwaitableGetTwingateRemoteNetworkResult( + id=pulumi.get(__ret__, 'id'), + location=pulumi.get(__ret__, 'location'), + name=pulumi.get(__ret__, 'name')) + + +@_utilities.lift_output_func(get_twingate_remote_network) +def get_twingate_remote_network_output(id: Optional[pulumi.Input[Optional[str]]] = None, + name: Optional[pulumi.Input[Optional[str]]] = None, + opts: Optional[pulumi.InvokeOptions] = None) -> pulumi.Output[GetTwingateRemoteNetworkResult]: + """ + A Remote Network represents a single private network in Twingate that can have one or more Connectors and Resources assigned to it. You must create a Remote Network before creating Resources and Connectors that belong to it. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/remote-networks). + + ## Example Usage + + ```python + import pulumi + import pulumi_twingate as twingate + + foo = twingate.get_twingate_remote_network(name="") + ``` + + + :param str id: The ID of the Remote Network + :param str name: The name of the Remote Network + """ + ... diff --git a/sdk/python/pulumi_twingate/get_twingate_remote_networks.py b/sdk/python/pulumi_twingate/get_twingate_remote_networks.py new file mode 100644 index 0000000..b30065d --- /dev/null +++ b/sdk/python/pulumi_twingate/get_twingate_remote_networks.py @@ -0,0 +1,106 @@ +# 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 copy +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__ = [ + 'GetTwingateRemoteNetworksResult', + 'AwaitableGetTwingateRemoteNetworksResult', + 'get_twingate_remote_networks', + 'get_twingate_remote_networks_output', +] + +@pulumi.output_type +class GetTwingateRemoteNetworksResult: + """ + A collection of values returned by getTwingateRemoteNetworks. + """ + def __init__(__self__, id=None, remote_networks=None): + if id and not isinstance(id, str): + raise TypeError("Expected argument 'id' to be a str") + pulumi.set(__self__, "id", id) + if remote_networks and not isinstance(remote_networks, list): + raise TypeError("Expected argument 'remote_networks' to be a list") + pulumi.set(__self__, "remote_networks", remote_networks) + + @property + @pulumi.getter + def id(self) -> str: + """ + The provider-assigned unique ID for this managed resource. + """ + return pulumi.get(self, "id") + + @property + @pulumi.getter(name="remoteNetworks") + def remote_networks(self) -> Optional[Sequence['outputs.GetTwingateRemoteNetworksRemoteNetworkResult']]: + """ + List of Remote Networks + """ + return pulumi.get(self, "remote_networks") + + +class AwaitableGetTwingateRemoteNetworksResult(GetTwingateRemoteNetworksResult): + # pylint: disable=using-constant-test + def __await__(self): + if False: + yield self + return GetTwingateRemoteNetworksResult( + id=self.id, + remote_networks=self.remote_networks) + + +def get_twingate_remote_networks(remote_networks: Optional[Sequence[pulumi.InputType['GetTwingateRemoteNetworksRemoteNetworkArgs']]] = None, + opts: Optional[pulumi.InvokeOptions] = None) -> AwaitableGetTwingateRemoteNetworksResult: + """ + A Remote Network represents a single private network in Twingate that can have one or more Connectors and Resources assigned to it. You must create a Remote Network before creating Resources and Connectors that belong to it. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/remote-networks). + + ## Example Usage + + ```python + import pulumi + import pulumi_twingate as twingate + + all = twingate.get_twingate_remote_networks() + ``` + + + :param Sequence[pulumi.InputType['GetTwingateRemoteNetworksRemoteNetworkArgs']] remote_networks: List of Remote Networks + """ + __args__ = dict() + __args__['remoteNetworks'] = remote_networks + opts = pulumi.InvokeOptions.merge(_utilities.get_invoke_opts_defaults(), opts) + __ret__ = pulumi.runtime.invoke('twingate:index/getTwingateRemoteNetworks:getTwingateRemoteNetworks', __args__, opts=opts, typ=GetTwingateRemoteNetworksResult).value + + return AwaitableGetTwingateRemoteNetworksResult( + id=pulumi.get(__ret__, 'id'), + remote_networks=pulumi.get(__ret__, 'remote_networks')) + + +@_utilities.lift_output_func(get_twingate_remote_networks) +def get_twingate_remote_networks_output(remote_networks: Optional[pulumi.Input[Optional[Sequence[pulumi.InputType['GetTwingateRemoteNetworksRemoteNetworkArgs']]]]] = None, + opts: Optional[pulumi.InvokeOptions] = None) -> pulumi.Output[GetTwingateRemoteNetworksResult]: + """ + A Remote Network represents a single private network in Twingate that can have one or more Connectors and Resources assigned to it. You must create a Remote Network before creating Resources and Connectors that belong to it. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/remote-networks). + + ## Example Usage + + ```python + import pulumi + import pulumi_twingate as twingate + + all = twingate.get_twingate_remote_networks() + ``` + + + :param Sequence[pulumi.InputType['GetTwingateRemoteNetworksRemoteNetworkArgs']] remote_networks: List of Remote Networks + """ + ... diff --git a/sdk/python/pulumi_twingate/get_twingate_resource.py b/sdk/python/pulumi_twingate/get_twingate_resource.py new file mode 100644 index 0000000..62f7dd7 --- /dev/null +++ b/sdk/python/pulumi_twingate/get_twingate_resource.py @@ -0,0 +1,150 @@ +# 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 copy +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__ = [ + 'GetTwingateResourceResult', + 'AwaitableGetTwingateResourceResult', + 'get_twingate_resource', + 'get_twingate_resource_output', +] + +@pulumi.output_type +class GetTwingateResourceResult: + """ + A collection of values returned by getTwingateResource. + """ + def __init__(__self__, address=None, id=None, name=None, protocols=None, remote_network_id=None): + if address and not isinstance(address, str): + raise TypeError("Expected argument 'address' to be a str") + pulumi.set(__self__, "address", address) + 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 protocols and not isinstance(protocols, list): + raise TypeError("Expected argument 'protocols' to be a list") + pulumi.set(__self__, "protocols", protocols) + if remote_network_id and not isinstance(remote_network_id, str): + raise TypeError("Expected argument 'remote_network_id' to be a str") + pulumi.set(__self__, "remote_network_id", remote_network_id) + + @property + @pulumi.getter + def address(self) -> str: + """ + The Resource's address, which may be an IP address, CIDR range, or DNS address + """ + return pulumi.get(self, "address") + + @property + @pulumi.getter + def id(self) -> str: + """ + The ID of the Resource. The ID for the Resource can be obtained from the Admin API or the URL string in the Admin Console. + """ + return pulumi.get(self, "id") + + @property + @pulumi.getter + def name(self) -> str: + """ + The name of the Resource + """ + return pulumi.get(self, "name") + + @property + @pulumi.getter + def protocols(self) -> Optional[Sequence['outputs.GetTwingateResourceProtocolResult']]: + """ + By default (when this argument is not defined) no restriction is applied, and all protocols and ports are allowed. + """ + return pulumi.get(self, "protocols") + + @property + @pulumi.getter(name="remoteNetworkId") + def remote_network_id(self) -> str: + """ + The Remote Network ID that the Resource is associated with. Resources may only be associated with a single Remote Network. + """ + return pulumi.get(self, "remote_network_id") + + +class AwaitableGetTwingateResourceResult(GetTwingateResourceResult): + # pylint: disable=using-constant-test + def __await__(self): + if False: + yield self + return GetTwingateResourceResult( + address=self.address, + id=self.id, + name=self.name, + protocols=self.protocols, + remote_network_id=self.remote_network_id) + + +def get_twingate_resource(id: Optional[str] = None, + protocols: Optional[Sequence[pulumi.InputType['GetTwingateResourceProtocolArgs']]] = None, + opts: Optional[pulumi.InvokeOptions] = None) -> AwaitableGetTwingateResourceResult: + """ + Resources in Twingate represent any network destination address that you wish to provide private access to for users authorized via the Twingate Client application. Resources can be defined by either IP or DNS address, and all private DNS addresses will be automatically resolved with no client configuration changes. For more information, see the Twingate [documentation](https://docs.twingate.com/docs/resources-and-access-nodes). + + ## Example Usage + + ```python + import pulumi + import pulumi_twingate as twingate + + foo = twingate.get_twingate_resource(id="") + ``` + + + :param str id: The ID of the Resource. The ID for the Resource can be obtained from the Admin API or the URL string in the Admin Console. + :param Sequence[pulumi.InputType['GetTwingateResourceProtocolArgs']] protocols: By default (when this argument is not defined) no restriction is applied, and all protocols and ports are allowed. + """ + __args__ = dict() + __args__['id'] = id + __args__['protocols'] = protocols + opts = pulumi.InvokeOptions.merge(_utilities.get_invoke_opts_defaults(), opts) + __ret__ = pulumi.runtime.invoke('twingate:index/getTwingateResource:getTwingateResource', __args__, opts=opts, typ=GetTwingateResourceResult).value + + return AwaitableGetTwingateResourceResult( + address=pulumi.get(__ret__, 'address'), + id=pulumi.get(__ret__, 'id'), + name=pulumi.get(__ret__, 'name'), + protocols=pulumi.get(__ret__, 'protocols'), + remote_network_id=pulumi.get(__ret__, 'remote_network_id')) + + +@_utilities.lift_output_func(get_twingate_resource) +def get_twingate_resource_output(id: Optional[pulumi.Input[str]] = None, + protocols: Optional[pulumi.Input[Optional[Sequence[pulumi.InputType['GetTwingateResourceProtocolArgs']]]]] = None, + opts: Optional[pulumi.InvokeOptions] = None) -> pulumi.Output[GetTwingateResourceResult]: + """ + Resources in Twingate represent any network destination address that you wish to provide private access to for users authorized via the Twingate Client application. Resources can be defined by either IP or DNS address, and all private DNS addresses will be automatically resolved with no client configuration changes. For more information, see the Twingate [documentation](https://docs.twingate.com/docs/resources-and-access-nodes). + + ## Example Usage + + ```python + import pulumi + import pulumi_twingate as twingate + + foo = twingate.get_twingate_resource(id="") + ``` + + + :param str id: The ID of the Resource. The ID for the Resource can be obtained from the Admin API or the URL string in the Admin Console. + :param Sequence[pulumi.InputType['GetTwingateResourceProtocolArgs']] protocols: By default (when this argument is not defined) no restriction is applied, and all protocols and ports are allowed. + """ + ... diff --git a/sdk/python/pulumi_twingate/get_twingate_resources.py b/sdk/python/pulumi_twingate/get_twingate_resources.py new file mode 100644 index 0000000..42239b4 --- /dev/null +++ b/sdk/python/pulumi_twingate/get_twingate_resources.py @@ -0,0 +1,124 @@ +# 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 copy +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__ = [ + 'GetTwingateResourcesResult', + 'AwaitableGetTwingateResourcesResult', + 'get_twingate_resources', + 'get_twingate_resources_output', +] + +@pulumi.output_type +class GetTwingateResourcesResult: + """ + A collection of values returned by getTwingateResources. + """ + def __init__(__self__, id=None, name=None, resources=None): + 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 resources and not isinstance(resources, list): + raise TypeError("Expected argument 'resources' to be a list") + pulumi.set(__self__, "resources", resources) + + @property + @pulumi.getter + def id(self) -> str: + """ + The provider-assigned unique ID for this managed resource. + """ + return pulumi.get(self, "id") + + @property + @pulumi.getter + def name(self) -> str: + """ + The name of the Resource + """ + return pulumi.get(self, "name") + + @property + @pulumi.getter + def resources(self) -> Optional[Sequence['outputs.GetTwingateResourcesResourceResult']]: + """ + List of Resources + """ + return pulumi.get(self, "resources") + + +class AwaitableGetTwingateResourcesResult(GetTwingateResourcesResult): + # pylint: disable=using-constant-test + def __await__(self): + if False: + yield self + return GetTwingateResourcesResult( + id=self.id, + name=self.name, + resources=self.resources) + + +def get_twingate_resources(name: Optional[str] = None, + resources: Optional[Sequence[pulumi.InputType['GetTwingateResourcesResourceArgs']]] = None, + opts: Optional[pulumi.InvokeOptions] = None) -> AwaitableGetTwingateResourcesResult: + """ + Resources in Twingate represent servers on the private network that clients can connect to. Resources can be defined by IP, CIDR range, FQDN, or DNS zone. For more information, see the Twingate [documentation](https://docs.twingate.com/docs/resources-and-access-nodes). + + ## Example Usage + + ```python + import pulumi + import pulumi_twingate as twingate + + foo = twingate.get_twingate_resources(name="") + ``` + + + :param str name: The name of the Resource + :param Sequence[pulumi.InputType['GetTwingateResourcesResourceArgs']] resources: List of Resources + """ + __args__ = dict() + __args__['name'] = name + __args__['resources'] = resources + opts = pulumi.InvokeOptions.merge(_utilities.get_invoke_opts_defaults(), opts) + __ret__ = pulumi.runtime.invoke('twingate:index/getTwingateResources:getTwingateResources', __args__, opts=opts, typ=GetTwingateResourcesResult).value + + return AwaitableGetTwingateResourcesResult( + id=pulumi.get(__ret__, 'id'), + name=pulumi.get(__ret__, 'name'), + resources=pulumi.get(__ret__, 'resources')) + + +@_utilities.lift_output_func(get_twingate_resources) +def get_twingate_resources_output(name: Optional[pulumi.Input[str]] = None, + resources: Optional[pulumi.Input[Optional[Sequence[pulumi.InputType['GetTwingateResourcesResourceArgs']]]]] = None, + opts: Optional[pulumi.InvokeOptions] = None) -> pulumi.Output[GetTwingateResourcesResult]: + """ + Resources in Twingate represent servers on the private network that clients can connect to. Resources can be defined by IP, CIDR range, FQDN, or DNS zone. For more information, see the Twingate [documentation](https://docs.twingate.com/docs/resources-and-access-nodes). + + ## Example Usage + + ```python + import pulumi + import pulumi_twingate as twingate + + foo = twingate.get_twingate_resources(name="") + ``` + + + :param str name: The name of the Resource + :param Sequence[pulumi.InputType['GetTwingateResourcesResourceArgs']] resources: List of Resources + """ + ... diff --git a/sdk/python/pulumi_twingate/get_twingate_security_policies.py b/sdk/python/pulumi_twingate/get_twingate_security_policies.py new file mode 100644 index 0000000..c0535d8 --- /dev/null +++ b/sdk/python/pulumi_twingate/get_twingate_security_policies.py @@ -0,0 +1,97 @@ +# 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 copy +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__ = [ + 'GetTwingateSecurityPoliciesResult', + 'AwaitableGetTwingateSecurityPoliciesResult', + 'get_twingate_security_policies', + 'get_twingate_security_policies_output', +] + +@pulumi.output_type +class GetTwingateSecurityPoliciesResult: + """ + A collection of values returned by getTwingateSecurityPolicies. + """ + def __init__(__self__, id=None, security_policies=None): + if id and not isinstance(id, str): + raise TypeError("Expected argument 'id' to be a str") + pulumi.set(__self__, "id", id) + if security_policies and not isinstance(security_policies, list): + raise TypeError("Expected argument 'security_policies' to be a list") + pulumi.set(__self__, "security_policies", security_policies) + + @property + @pulumi.getter + def id(self) -> str: + """ + The provider-assigned unique ID for this managed resource. + """ + return pulumi.get(self, "id") + + @property + @pulumi.getter(name="securityPolicies") + def security_policies(self) -> Optional[Sequence['outputs.GetTwingateSecurityPoliciesSecurityPolicyResult']]: + return pulumi.get(self, "security_policies") + + +class AwaitableGetTwingateSecurityPoliciesResult(GetTwingateSecurityPoliciesResult): + # pylint: disable=using-constant-test + def __await__(self): + if False: + yield self + return GetTwingateSecurityPoliciesResult( + id=self.id, + security_policies=self.security_policies) + + +def get_twingate_security_policies(security_policies: Optional[Sequence[pulumi.InputType['GetTwingateSecurityPoliciesSecurityPolicyArgs']]] = None, + opts: Optional[pulumi.InvokeOptions] = None) -> AwaitableGetTwingateSecurityPoliciesResult: + """ + Security Policies are defined in the Twingate Admin Console and determine user and device authentication requirements for Resources. + + ## Example Usage + + ```python + import pulumi + import pulumi_twingate as twingate + + all = twingate.get_twingate_security_policies() + ``` + """ + __args__ = dict() + __args__['securityPolicies'] = security_policies + opts = pulumi.InvokeOptions.merge(_utilities.get_invoke_opts_defaults(), opts) + __ret__ = pulumi.runtime.invoke('twingate:index/getTwingateSecurityPolicies:getTwingateSecurityPolicies', __args__, opts=opts, typ=GetTwingateSecurityPoliciesResult).value + + return AwaitableGetTwingateSecurityPoliciesResult( + id=pulumi.get(__ret__, 'id'), + security_policies=pulumi.get(__ret__, 'security_policies')) + + +@_utilities.lift_output_func(get_twingate_security_policies) +def get_twingate_security_policies_output(security_policies: Optional[pulumi.Input[Optional[Sequence[pulumi.InputType['GetTwingateSecurityPoliciesSecurityPolicyArgs']]]]] = None, + opts: Optional[pulumi.InvokeOptions] = None) -> pulumi.Output[GetTwingateSecurityPoliciesResult]: + """ + Security Policies are defined in the Twingate Admin Console and determine user and device authentication requirements for Resources. + + ## Example Usage + + ```python + import pulumi + import pulumi_twingate as twingate + + all = twingate.get_twingate_security_policies() + ``` + """ + ... diff --git a/sdk/python/pulumi_twingate/get_twingate_security_policy.py b/sdk/python/pulumi_twingate/get_twingate_security_policy.py new file mode 100644 index 0000000..0e4a672 --- /dev/null +++ b/sdk/python/pulumi_twingate/get_twingate_security_policy.py @@ -0,0 +1,109 @@ +# 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 copy +import warnings +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +from . import _utilities + +__all__ = [ + 'GetTwingateSecurityPolicyResult', + 'AwaitableGetTwingateSecurityPolicyResult', + 'get_twingate_security_policy', + 'get_twingate_security_policy_output', +] + +@pulumi.output_type +class GetTwingateSecurityPolicyResult: + """ + A collection of values returned by getTwingateSecurityPolicy. + """ + def __init__(__self__, id=None, name=None): + 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) + + @property + @pulumi.getter + def id(self) -> Optional[str]: + """ + Return a Security Policy by its ID. The ID for the Security Policy can be obtained from the Admin API or the URL string in the Admin Console. + """ + return pulumi.get(self, "id") + + @property + @pulumi.getter + def name(self) -> Optional[str]: + """ + Return a Security Policy that exactly matches this name. + """ + return pulumi.get(self, "name") + + +class AwaitableGetTwingateSecurityPolicyResult(GetTwingateSecurityPolicyResult): + # pylint: disable=using-constant-test + def __await__(self): + if False: + yield self + return GetTwingateSecurityPolicyResult( + id=self.id, + name=self.name) + + +def get_twingate_security_policy(id: Optional[str] = None, + name: Optional[str] = None, + opts: Optional[pulumi.InvokeOptions] = None) -> AwaitableGetTwingateSecurityPolicyResult: + """ + Security Policies are defined in the Twingate Admin Console and determine user and device authentication requirements for Resources. + + ## Example Usage + + ```python + import pulumi + import pulumi_twingate as twingate + + foo = twingate.get_twingate_security_policy(name="") + ``` + + + :param str id: Return a Security Policy by its ID. The ID for the Security Policy can be obtained from the Admin API or the URL string in the Admin Console. + :param str name: Return a Security Policy that exactly matches this name. + """ + __args__ = dict() + __args__['id'] = id + __args__['name'] = name + opts = pulumi.InvokeOptions.merge(_utilities.get_invoke_opts_defaults(), opts) + __ret__ = pulumi.runtime.invoke('twingate:index/getTwingateSecurityPolicy:getTwingateSecurityPolicy', __args__, opts=opts, typ=GetTwingateSecurityPolicyResult).value + + return AwaitableGetTwingateSecurityPolicyResult( + id=pulumi.get(__ret__, 'id'), + name=pulumi.get(__ret__, 'name')) + + +@_utilities.lift_output_func(get_twingate_security_policy) +def get_twingate_security_policy_output(id: Optional[pulumi.Input[Optional[str]]] = None, + name: Optional[pulumi.Input[Optional[str]]] = None, + opts: Optional[pulumi.InvokeOptions] = None) -> pulumi.Output[GetTwingateSecurityPolicyResult]: + """ + Security Policies are defined in the Twingate Admin Console and determine user and device authentication requirements for Resources. + + ## Example Usage + + ```python + import pulumi + import pulumi_twingate as twingate + + foo = twingate.get_twingate_security_policy(name="") + ``` + + + :param str id: Return a Security Policy by its ID. The ID for the Security Policy can be obtained from the Admin API or the URL string in the Admin Console. + :param str name: Return a Security Policy that exactly matches this name. + """ + ... diff --git a/sdk/python/pulumi_twingate/get_twingate_service_accounts.py b/sdk/python/pulumi_twingate/get_twingate_service_accounts.py new file mode 100644 index 0000000..5482076 --- /dev/null +++ b/sdk/python/pulumi_twingate/get_twingate_service_accounts.py @@ -0,0 +1,124 @@ +# 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 copy +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__ = [ + 'GetTwingateServiceAccountsResult', + 'AwaitableGetTwingateServiceAccountsResult', + 'get_twingate_service_accounts', + 'get_twingate_service_accounts_output', +] + +@pulumi.output_type +class GetTwingateServiceAccountsResult: + """ + A collection of values returned by getTwingateServiceAccounts. + """ + def __init__(__self__, id=None, name=None, service_accounts=None): + 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 service_accounts and not isinstance(service_accounts, list): + raise TypeError("Expected argument 'service_accounts' to be a list") + pulumi.set(__self__, "service_accounts", service_accounts) + + @property + @pulumi.getter + def id(self) -> str: + """ + The provider-assigned unique ID for this managed resource. + """ + return pulumi.get(self, "id") + + @property + @pulumi.getter + def name(self) -> Optional[str]: + """ + Filter results by the name of the Service Account. + """ + return pulumi.get(self, "name") + + @property + @pulumi.getter(name="serviceAccounts") + def service_accounts(self) -> Optional[Sequence['outputs.GetTwingateServiceAccountsServiceAccountResult']]: + """ + List of Service Accounts + """ + return pulumi.get(self, "service_accounts") + + +class AwaitableGetTwingateServiceAccountsResult(GetTwingateServiceAccountsResult): + # pylint: disable=using-constant-test + def __await__(self): + if False: + yield self + return GetTwingateServiceAccountsResult( + id=self.id, + name=self.name, + service_accounts=self.service_accounts) + + +def get_twingate_service_accounts(name: Optional[str] = None, + service_accounts: Optional[Sequence[pulumi.InputType['GetTwingateServiceAccountsServiceAccountArgs']]] = None, + opts: Optional[pulumi.InvokeOptions] = None) -> AwaitableGetTwingateServiceAccountsResult: + """ + Service Accounts offer a way to provide programmatic, centrally-controlled, and consistent access controls. + + ## Example Usage + + ```python + import pulumi + import pulumi_twingate as twingate + + foo = twingate.get_twingate_service_accounts(name="") + ``` + + + :param str name: Name of the Service Account + :param Sequence[pulumi.InputType['GetTwingateServiceAccountsServiceAccountArgs']] service_accounts: List of Service Accounts + """ + __args__ = dict() + __args__['name'] = name + __args__['serviceAccounts'] = service_accounts + opts = pulumi.InvokeOptions.merge(_utilities.get_invoke_opts_defaults(), opts) + __ret__ = pulumi.runtime.invoke('twingate:index/getTwingateServiceAccounts:getTwingateServiceAccounts', __args__, opts=opts, typ=GetTwingateServiceAccountsResult).value + + return AwaitableGetTwingateServiceAccountsResult( + id=pulumi.get(__ret__, 'id'), + name=pulumi.get(__ret__, 'name'), + service_accounts=pulumi.get(__ret__, 'service_accounts')) + + +@_utilities.lift_output_func(get_twingate_service_accounts) +def get_twingate_service_accounts_output(name: Optional[pulumi.Input[Optional[str]]] = None, + service_accounts: Optional[pulumi.Input[Optional[Sequence[pulumi.InputType['GetTwingateServiceAccountsServiceAccountArgs']]]]] = None, + opts: Optional[pulumi.InvokeOptions] = None) -> pulumi.Output[GetTwingateServiceAccountsResult]: + """ + Service Accounts offer a way to provide programmatic, centrally-controlled, and consistent access controls. + + ## Example Usage + + ```python + import pulumi + import pulumi_twingate as twingate + + foo = twingate.get_twingate_service_accounts(name="") + ``` + + + :param str name: Name of the Service Account + :param Sequence[pulumi.InputType['GetTwingateServiceAccountsServiceAccountArgs']] service_accounts: List of Service Accounts + """ + ... diff --git a/sdk/python/pulumi_twingate/get_twingate_user.py b/sdk/python/pulumi_twingate/get_twingate_user.py new file mode 100644 index 0000000..69de16b --- /dev/null +++ b/sdk/python/pulumi_twingate/get_twingate_user.py @@ -0,0 +1,172 @@ +# 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 copy +import warnings +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +from . import _utilities + +__all__ = [ + 'GetTwingateUserResult', + 'AwaitableGetTwingateUserResult', + 'get_twingate_user', + 'get_twingate_user_output', +] + +@pulumi.output_type +class GetTwingateUserResult: + """ + A collection of values returned by getTwingateUser. + """ + def __init__(__self__, email=None, first_name=None, id=None, is_admin=None, last_name=None, role=None, type=None): + if email and not isinstance(email, str): + raise TypeError("Expected argument 'email' to be a str") + pulumi.set(__self__, "email", email) + if first_name and not isinstance(first_name, str): + raise TypeError("Expected argument 'first_name' to be a str") + pulumi.set(__self__, "first_name", first_name) + if id and not isinstance(id, str): + raise TypeError("Expected argument 'id' to be a str") + pulumi.set(__self__, "id", id) + if is_admin and not isinstance(is_admin, bool): + raise TypeError("Expected argument 'is_admin' to be a bool") + pulumi.set(__self__, "is_admin", is_admin) + if last_name and not isinstance(last_name, str): + raise TypeError("Expected argument 'last_name' to be a str") + pulumi.set(__self__, "last_name", last_name) + if role and not isinstance(role, str): + raise TypeError("Expected argument 'role' to be a str") + pulumi.set(__self__, "role", role) + if type and not isinstance(type, str): + raise TypeError("Expected argument 'type' to be a str") + pulumi.set(__self__, "type", type) + + @property + @pulumi.getter + def email(self) -> str: + """ + The email address of the User + """ + return pulumi.get(self, "email") + + @property + @pulumi.getter(name="firstName") + def first_name(self) -> str: + """ + The first name of the User + """ + return pulumi.get(self, "first_name") + + @property + @pulumi.getter + def id(self) -> str: + """ + The ID of the User. The ID for the User can be obtained from the Admin API or the URL string in the Admin Console. + """ + return pulumi.get(self, "id") + + @property + @pulumi.getter(name="isAdmin") + def is_admin(self) -> bool: + """ + Indicates whether the User is an admin + """ + warnings.warn("""This read-only Boolean value will be deprecated in a future release. You may use the `role` value instead.""", DeprecationWarning) + pulumi.log.warn("""is_admin is deprecated: This read-only Boolean value will be deprecated in a future release. You may use the `role` value instead.""") + + return pulumi.get(self, "is_admin") + + @property + @pulumi.getter(name="lastName") + def last_name(self) -> str: + """ + The last name of the User + """ + return pulumi.get(self, "last_name") + + @property + @pulumi.getter + def role(self) -> str: + """ + Indicates the User's role. Either ADMIN, DEVOPS, SUPPORT, or MEMBER + """ + return pulumi.get(self, "role") + + @property + @pulumi.getter + def type(self) -> str: + """ + Indicates the User's type. Either MANUAL or SYNCED. + """ + return pulumi.get(self, "type") + + +class AwaitableGetTwingateUserResult(GetTwingateUserResult): + # pylint: disable=using-constant-test + def __await__(self): + if False: + yield self + return GetTwingateUserResult( + email=self.email, + first_name=self.first_name, + id=self.id, + is_admin=self.is_admin, + last_name=self.last_name, + role=self.role, + type=self.type) + + +def get_twingate_user(id: Optional[str] = None, + opts: Optional[pulumi.InvokeOptions] = None) -> AwaitableGetTwingateUserResult: + """ + Users in Twingate can be given access to Twingate Resources and may either be added manually or automatically synchronized with a 3rd party identity provider. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/users). + + ## Example Usage + + ```python + import pulumi + import pulumi_twingate as twingate + + foo = twingate.get_twingate_user(id="") + ``` + + + :param str id: The ID of the User. The ID for the User can be obtained from the Admin API or the URL string in the Admin Console. + """ + __args__ = dict() + __args__['id'] = id + opts = pulumi.InvokeOptions.merge(_utilities.get_invoke_opts_defaults(), opts) + __ret__ = pulumi.runtime.invoke('twingate:index/getTwingateUser:getTwingateUser', __args__, opts=opts, typ=GetTwingateUserResult).value + + return AwaitableGetTwingateUserResult( + email=pulumi.get(__ret__, 'email'), + first_name=pulumi.get(__ret__, 'first_name'), + id=pulumi.get(__ret__, 'id'), + is_admin=pulumi.get(__ret__, 'is_admin'), + last_name=pulumi.get(__ret__, 'last_name'), + role=pulumi.get(__ret__, 'role'), + type=pulumi.get(__ret__, 'type')) + + +@_utilities.lift_output_func(get_twingate_user) +def get_twingate_user_output(id: Optional[pulumi.Input[str]] = None, + opts: Optional[pulumi.InvokeOptions] = None) -> pulumi.Output[GetTwingateUserResult]: + """ + Users in Twingate can be given access to Twingate Resources and may either be added manually or automatically synchronized with a 3rd party identity provider. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/users). + + ## Example Usage + + ```python + import pulumi + import pulumi_twingate as twingate + + foo = twingate.get_twingate_user(id="") + ``` + + + :param str id: The ID of the User. The ID for the User can be obtained from the Admin API or the URL string in the Admin Console. + """ + ... diff --git a/sdk/python/pulumi_twingate/get_twingate_users.py b/sdk/python/pulumi_twingate/get_twingate_users.py new file mode 100644 index 0000000..9093e37 --- /dev/null +++ b/sdk/python/pulumi_twingate/get_twingate_users.py @@ -0,0 +1,97 @@ +# 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 copy +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__ = [ + 'GetTwingateUsersResult', + 'AwaitableGetTwingateUsersResult', + 'get_twingate_users', + 'get_twingate_users_output', +] + +@pulumi.output_type +class GetTwingateUsersResult: + """ + A collection of values returned by getTwingateUsers. + """ + def __init__(__self__, id=None, users=None): + if id and not isinstance(id, str): + raise TypeError("Expected argument 'id' to be a str") + pulumi.set(__self__, "id", id) + if users and not isinstance(users, list): + raise TypeError("Expected argument 'users' to be a list") + pulumi.set(__self__, "users", users) + + @property + @pulumi.getter + def id(self) -> str: + """ + The provider-assigned unique ID for this managed resource. + """ + return pulumi.get(self, "id") + + @property + @pulumi.getter + def users(self) -> Optional[Sequence['outputs.GetTwingateUsersUserResult']]: + return pulumi.get(self, "users") + + +class AwaitableGetTwingateUsersResult(GetTwingateUsersResult): + # pylint: disable=using-constant-test + def __await__(self): + if False: + yield self + return GetTwingateUsersResult( + id=self.id, + users=self.users) + + +def get_twingate_users(users: Optional[Sequence[pulumi.InputType['GetTwingateUsersUserArgs']]] = None, + opts: Optional[pulumi.InvokeOptions] = None) -> AwaitableGetTwingateUsersResult: + """ + Users in Twingate can be given access to Twingate Resources and may either be added manually or automatically synchronized with a 3rd party identity provider. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/users). + + ## Example Usage + + ```python + import pulumi + import pulumi_twingate as twingate + + all = twingate.get_twingate_users() + ``` + """ + __args__ = dict() + __args__['users'] = users + opts = pulumi.InvokeOptions.merge(_utilities.get_invoke_opts_defaults(), opts) + __ret__ = pulumi.runtime.invoke('twingate:index/getTwingateUsers:getTwingateUsers', __args__, opts=opts, typ=GetTwingateUsersResult).value + + return AwaitableGetTwingateUsersResult( + id=pulumi.get(__ret__, 'id'), + users=pulumi.get(__ret__, 'users')) + + +@_utilities.lift_output_func(get_twingate_users) +def get_twingate_users_output(users: Optional[pulumi.Input[Optional[Sequence[pulumi.InputType['GetTwingateUsersUserArgs']]]]] = None, + opts: Optional[pulumi.InvokeOptions] = None) -> pulumi.Output[GetTwingateUsersResult]: + """ + Users in Twingate can be given access to Twingate Resources and may either be added manually or automatically synchronized with a 3rd party identity provider. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/users). + + ## Example Usage + + ```python + import pulumi + import pulumi_twingate as twingate + + all = twingate.get_twingate_users() + ``` + """ + ... diff --git a/sdk/python/pulumi_twingate/outputs.py b/sdk/python/pulumi_twingate/outputs.py new file mode 100644 index 0000000..e04aaca --- /dev/null +++ b/sdk/python/pulumi_twingate/outputs.py @@ -0,0 +1,759 @@ +# 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 copy +import warnings +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +from . import _utilities +from . import outputs + +__all__ = [ + 'TwingateResourceAccess', + 'TwingateResourceProtocols', + 'TwingateResourceProtocolsTcp', + 'TwingateResourceProtocolsUdp', + 'GetTwingateConnectorsConnectorResult', + 'GetTwingateGroupsGroupResult', + 'GetTwingateRemoteNetworksRemoteNetworkResult', + 'GetTwingateResourceProtocolResult', + 'GetTwingateResourceProtocolTcpResult', + 'GetTwingateResourceProtocolUdpResult', + 'GetTwingateResourcesResourceResult', + 'GetTwingateResourcesResourceProtocolResult', + 'GetTwingateResourcesResourceProtocolTcpResult', + 'GetTwingateResourcesResourceProtocolUdpResult', + 'GetTwingateSecurityPoliciesSecurityPolicyResult', + 'GetTwingateServiceAccountsServiceAccountResult', + 'GetTwingateUsersUserResult', +] + +@pulumi.output_type +class TwingateResourceAccess(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "groupIds": + suggest = "group_ids" + elif key == "serviceAccountIds": + suggest = "service_account_ids" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in TwingateResourceAccess. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + TwingateResourceAccess.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + TwingateResourceAccess.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + group_ids: Optional[Sequence[str]] = None, + service_account_ids: Optional[Sequence[str]] = None): + """ + :param Sequence[str] group_ids: List of Group IDs that will have permission to access the Resource. + :param Sequence[str] service_account_ids: List of Service Account IDs that will have permission to access the Resource. + """ + if group_ids is not None: + pulumi.set(__self__, "group_ids", group_ids) + if service_account_ids is not None: + pulumi.set(__self__, "service_account_ids", service_account_ids) + + @property + @pulumi.getter(name="groupIds") + def group_ids(self) -> Optional[Sequence[str]]: + """ + List of Group IDs that will have permission to access the Resource. + """ + return pulumi.get(self, "group_ids") + + @property + @pulumi.getter(name="serviceAccountIds") + def service_account_ids(self) -> Optional[Sequence[str]]: + """ + List of Service Account IDs that will have permission to access the Resource. + """ + return pulumi.get(self, "service_account_ids") + + +@pulumi.output_type +class TwingateResourceProtocols(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "allowIcmp": + suggest = "allow_icmp" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in TwingateResourceProtocols. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + TwingateResourceProtocols.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + TwingateResourceProtocols.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + tcp: 'outputs.TwingateResourceProtocolsTcp', + udp: 'outputs.TwingateResourceProtocolsUdp', + allow_icmp: Optional[bool] = None): + """ + :param bool allow_icmp: Whether to allow ICMP (ping) traffic + """ + pulumi.set(__self__, "tcp", tcp) + pulumi.set(__self__, "udp", udp) + if allow_icmp is not None: + pulumi.set(__self__, "allow_icmp", allow_icmp) + + @property + @pulumi.getter + def tcp(self) -> 'outputs.TwingateResourceProtocolsTcp': + return pulumi.get(self, "tcp") + + @property + @pulumi.getter + def udp(self) -> 'outputs.TwingateResourceProtocolsUdp': + return pulumi.get(self, "udp") + + @property + @pulumi.getter(name="allowIcmp") + def allow_icmp(self) -> Optional[bool]: + """ + Whether to allow ICMP (ping) traffic + """ + return pulumi.get(self, "allow_icmp") + + +@pulumi.output_type +class TwingateResourceProtocolsTcp(dict): + def __init__(__self__, *, + policy: str, + ports: Optional[Sequence[str]] = None): + """ + :param str policy: Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + :param Sequence[str] ports: List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + """ + pulumi.set(__self__, "policy", policy) + if ports is not None: + pulumi.set(__self__, "ports", ports) + + @property + @pulumi.getter + def policy(self) -> str: + """ + Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + """ + return pulumi.get(self, "policy") + + @property + @pulumi.getter + def ports(self) -> Optional[Sequence[str]]: + """ + List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + """ + return pulumi.get(self, "ports") + + +@pulumi.output_type +class TwingateResourceProtocolsUdp(dict): + def __init__(__self__, *, + policy: str, + ports: Optional[Sequence[str]] = None): + """ + :param str policy: Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + :param Sequence[str] ports: List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + """ + pulumi.set(__self__, "policy", policy) + if ports is not None: + pulumi.set(__self__, "ports", ports) + + @property + @pulumi.getter + def policy(self) -> str: + """ + Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + """ + return pulumi.get(self, "policy") + + @property + @pulumi.getter + def ports(self) -> Optional[Sequence[str]]: + """ + List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + """ + return pulumi.get(self, "ports") + + +@pulumi.output_type +class GetTwingateConnectorsConnectorResult(dict): + def __init__(__self__, *, + id: str, + name: str, + remote_network_id: str, + status_updates_enabled: bool): + """ + :param str id: The ID of the Connector. + :param str name: The Name of the Connector. + :param str remote_network_id: The ID of the Remote Network attached to the Connector. + :param bool status_updates_enabled: Determines whether status notifications are enabled for the Connector. + """ + pulumi.set(__self__, "id", id) + pulumi.set(__self__, "name", name) + pulumi.set(__self__, "remote_network_id", remote_network_id) + pulumi.set(__self__, "status_updates_enabled", status_updates_enabled) + + @property + @pulumi.getter + def id(self) -> str: + """ + The ID of the Connector. + """ + return pulumi.get(self, "id") + + @property + @pulumi.getter + def name(self) -> str: + """ + The Name of the Connector. + """ + return pulumi.get(self, "name") + + @property + @pulumi.getter(name="remoteNetworkId") + def remote_network_id(self) -> str: + """ + The ID of the Remote Network attached to the Connector. + """ + return pulumi.get(self, "remote_network_id") + + @property + @pulumi.getter(name="statusUpdatesEnabled") + def status_updates_enabled(self) -> bool: + """ + Determines whether status notifications are enabled for the Connector. + """ + return pulumi.get(self, "status_updates_enabled") + + +@pulumi.output_type +class GetTwingateGroupsGroupResult(dict): + def __init__(__self__, *, + id: str, + is_active: bool, + name: str, + security_policy_id: str, + type: str): + """ + :param str id: The ID of the Group + :param bool is_active: Indicates if the Group is active + :param str name: The name of the Group + :param str security_policy_id: The Security Policy assigned to the Group. + :param str type: The type of the Group + """ + pulumi.set(__self__, "id", id) + pulumi.set(__self__, "is_active", is_active) + pulumi.set(__self__, "name", name) + pulumi.set(__self__, "security_policy_id", security_policy_id) + pulumi.set(__self__, "type", type) + + @property + @pulumi.getter + def id(self) -> str: + """ + The ID of the Group + """ + return pulumi.get(self, "id") + + @property + @pulumi.getter(name="isActive") + def is_active(self) -> bool: + """ + Indicates if the Group is active + """ + return pulumi.get(self, "is_active") + + @property + @pulumi.getter + def name(self) -> str: + """ + The name of the Group + """ + return pulumi.get(self, "name") + + @property + @pulumi.getter(name="securityPolicyId") + def security_policy_id(self) -> str: + """ + The Security Policy assigned to the Group. + """ + return pulumi.get(self, "security_policy_id") + + @property + @pulumi.getter + def type(self) -> str: + """ + The type of the Group + """ + return pulumi.get(self, "type") + + +@pulumi.output_type +class GetTwingateRemoteNetworksRemoteNetworkResult(dict): + def __init__(__self__, *, + id: str, + location: str, + name: str): + """ + :param str id: The ID of the Remote Network + :param str location: The location of the Remote Network. Must be one of the following: AWS, AZURE, GOOGLE*CLOUD, ON*PREMISE, OTHER. + :param str name: The name of the Remote Network + """ + pulumi.set(__self__, "id", id) + pulumi.set(__self__, "location", location) + pulumi.set(__self__, "name", name) + + @property + @pulumi.getter + def id(self) -> str: + """ + The ID of the Remote Network + """ + return pulumi.get(self, "id") + + @property + @pulumi.getter + def location(self) -> str: + """ + The location of the Remote Network. Must be one of the following: AWS, AZURE, GOOGLE*CLOUD, ON*PREMISE, OTHER. + """ + return pulumi.get(self, "location") + + @property + @pulumi.getter + def name(self) -> str: + """ + The name of the Remote Network + """ + return pulumi.get(self, "name") + + +@pulumi.output_type +class GetTwingateResourceProtocolResult(dict): + def __init__(__self__, *, + allow_icmp: bool, + tcps: Optional[Sequence['outputs.GetTwingateResourceProtocolTcpResult']] = None, + udps: Optional[Sequence['outputs.GetTwingateResourceProtocolUdpResult']] = None): + """ + :param bool allow_icmp: Whether to allow ICMP (ping) traffic + """ + pulumi.set(__self__, "allow_icmp", allow_icmp) + if tcps is not None: + pulumi.set(__self__, "tcps", tcps) + if udps is not None: + pulumi.set(__self__, "udps", udps) + + @property + @pulumi.getter(name="allowIcmp") + def allow_icmp(self) -> bool: + """ + Whether to allow ICMP (ping) traffic + """ + return pulumi.get(self, "allow_icmp") + + @property + @pulumi.getter + def tcps(self) -> Optional[Sequence['outputs.GetTwingateResourceProtocolTcpResult']]: + return pulumi.get(self, "tcps") + + @property + @pulumi.getter + def udps(self) -> Optional[Sequence['outputs.GetTwingateResourceProtocolUdpResult']]: + return pulumi.get(self, "udps") + + +@pulumi.output_type +class GetTwingateResourceProtocolTcpResult(dict): + def __init__(__self__, *, + policy: str, + ports: Sequence[str]): + """ + :param str policy: Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + :param Sequence[str] ports: List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + """ + pulumi.set(__self__, "policy", policy) + pulumi.set(__self__, "ports", ports) + + @property + @pulumi.getter + def policy(self) -> str: + """ + Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + """ + return pulumi.get(self, "policy") + + @property + @pulumi.getter + def ports(self) -> Sequence[str]: + """ + List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + """ + return pulumi.get(self, "ports") + + +@pulumi.output_type +class GetTwingateResourceProtocolUdpResult(dict): + def __init__(__self__, *, + policy: str, + ports: Sequence[str]): + """ + :param str policy: Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + :param Sequence[str] ports: List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + """ + pulumi.set(__self__, "policy", policy) + pulumi.set(__self__, "ports", ports) + + @property + @pulumi.getter + def policy(self) -> str: + """ + Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + """ + return pulumi.get(self, "policy") + + @property + @pulumi.getter + def ports(self) -> Sequence[str]: + """ + List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + """ + return pulumi.get(self, "ports") + + +@pulumi.output_type +class GetTwingateResourcesResourceResult(dict): + def __init__(__self__, *, + address: str, + id: str, + name: str, + remote_network_id: str, + protocols: Optional[Sequence['outputs.GetTwingateResourcesResourceProtocolResult']] = None): + """ + :param str address: The Resource's IP/CIDR or FQDN/DNS zone + :param str id: The id of the Resource + :param str name: The name of the Resource + :param str remote_network_id: Remote Network ID where the Resource lives + :param Sequence['GetTwingateResourcesResourceProtocolArgs'] protocols: Restrict access to certain protocols and ports. By default or when this argument is not defined, there is no restriction, and all protocols and ports are allowed. + """ + pulumi.set(__self__, "address", address) + pulumi.set(__self__, "id", id) + pulumi.set(__self__, "name", name) + pulumi.set(__self__, "remote_network_id", remote_network_id) + if protocols is not None: + pulumi.set(__self__, "protocols", protocols) + + @property + @pulumi.getter + def address(self) -> str: + """ + The Resource's IP/CIDR or FQDN/DNS zone + """ + return pulumi.get(self, "address") + + @property + @pulumi.getter + def id(self) -> str: + """ + The id of the Resource + """ + return pulumi.get(self, "id") + + @property + @pulumi.getter + def name(self) -> str: + """ + The name of the Resource + """ + return pulumi.get(self, "name") + + @property + @pulumi.getter(name="remoteNetworkId") + def remote_network_id(self) -> str: + """ + Remote Network ID where the Resource lives + """ + return pulumi.get(self, "remote_network_id") + + @property + @pulumi.getter + def protocols(self) -> Optional[Sequence['outputs.GetTwingateResourcesResourceProtocolResult']]: + """ + Restrict access to certain protocols and ports. By default or when this argument is not defined, there is no restriction, and all protocols and ports are allowed. + """ + return pulumi.get(self, "protocols") + + +@pulumi.output_type +class GetTwingateResourcesResourceProtocolResult(dict): + def __init__(__self__, *, + allow_icmp: bool, + tcps: Optional[Sequence['outputs.GetTwingateResourcesResourceProtocolTcpResult']] = None, + udps: Optional[Sequence['outputs.GetTwingateResourcesResourceProtocolUdpResult']] = None): + """ + :param bool allow_icmp: Whether to allow ICMP (ping) traffic + """ + pulumi.set(__self__, "allow_icmp", allow_icmp) + if tcps is not None: + pulumi.set(__self__, "tcps", tcps) + if udps is not None: + pulumi.set(__self__, "udps", udps) + + @property + @pulumi.getter(name="allowIcmp") + def allow_icmp(self) -> bool: + """ + Whether to allow ICMP (ping) traffic + """ + return pulumi.get(self, "allow_icmp") + + @property + @pulumi.getter + def tcps(self) -> Optional[Sequence['outputs.GetTwingateResourcesResourceProtocolTcpResult']]: + return pulumi.get(self, "tcps") + + @property + @pulumi.getter + def udps(self) -> Optional[Sequence['outputs.GetTwingateResourcesResourceProtocolUdpResult']]: + return pulumi.get(self, "udps") + + +@pulumi.output_type +class GetTwingateResourcesResourceProtocolTcpResult(dict): + def __init__(__self__, *, + policy: str, + ports: Sequence[str]): + """ + :param str policy: Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + :param Sequence[str] ports: List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + """ + pulumi.set(__self__, "policy", policy) + pulumi.set(__self__, "ports", ports) + + @property + @pulumi.getter + def policy(self) -> str: + """ + Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + """ + return pulumi.get(self, "policy") + + @property + @pulumi.getter + def ports(self) -> Sequence[str]: + """ + List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + """ + return pulumi.get(self, "ports") + + +@pulumi.output_type +class GetTwingateResourcesResourceProtocolUdpResult(dict): + def __init__(__self__, *, + policy: str, + ports: Sequence[str]): + """ + :param str policy: Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + :param Sequence[str] ports: List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + """ + pulumi.set(__self__, "policy", policy) + pulumi.set(__self__, "ports", ports) + + @property + @pulumi.getter + def policy(self) -> str: + """ + Whether to allow or deny all ports, or restrict protocol access within certain port ranges: Can be `RESTRICTED` (only listed ports are allowed), `ALLOW_ALL`, or `DENY_ALL` + """ + return pulumi.get(self, "policy") + + @property + @pulumi.getter + def ports(self) -> Sequence[str]: + """ + List of port ranges between 1 and 65535 inclusive, in the format `100-200` for a range, or `8080` for a single port + """ + return pulumi.get(self, "ports") + + +@pulumi.output_type +class GetTwingateSecurityPoliciesSecurityPolicyResult(dict): + def __init__(__self__, *, + id: str, + name: str): + """ + :param str id: Return a matching Security Policy by its ID. The ID for the Security Policy can be obtained from the Admin API or the URL string in the Admin Console. + :param str name: Return a Security Policy that exactly matches this name. + """ + pulumi.set(__self__, "id", id) + pulumi.set(__self__, "name", name) + + @property + @pulumi.getter + def id(self) -> str: + """ + Return a matching Security Policy by its ID. The ID for the Security Policy can be obtained from the Admin API or the URL string in the Admin Console. + """ + return pulumi.get(self, "id") + + @property + @pulumi.getter + def name(self) -> str: + """ + Return a Security Policy that exactly matches this name. + """ + return pulumi.get(self, "name") + + +@pulumi.output_type +class GetTwingateServiceAccountsServiceAccountResult(dict): + def __init__(__self__, *, + id: str, + key_ids: Sequence[str], + name: str, + resource_ids: Sequence[str]): + """ + :param str id: ID of the Service Account resource + :param Sequence[str] key_ids: List of twingate*service*account_key IDs that are assigned to the Service Account. + :param str name: Name of the Service Account + :param Sequence[str] resource_ids: List of TwingateResource IDs that the Service Account is assigned to. + """ + pulumi.set(__self__, "id", id) + pulumi.set(__self__, "key_ids", key_ids) + pulumi.set(__self__, "name", name) + pulumi.set(__self__, "resource_ids", resource_ids) + + @property + @pulumi.getter + def id(self) -> str: + """ + ID of the Service Account resource + """ + return pulumi.get(self, "id") + + @property + @pulumi.getter(name="keyIds") + def key_ids(self) -> Sequence[str]: + """ + List of twingate*service*account_key IDs that are assigned to the Service Account. + """ + return pulumi.get(self, "key_ids") + + @property + @pulumi.getter + def name(self) -> str: + """ + Name of the Service Account + """ + return pulumi.get(self, "name") + + @property + @pulumi.getter(name="resourceIds") + def resource_ids(self) -> Sequence[str]: + """ + List of TwingateResource IDs that the Service Account is assigned to. + """ + return pulumi.get(self, "resource_ids") + + +@pulumi.output_type +class GetTwingateUsersUserResult(dict): + def __init__(__self__, *, + email: str, + first_name: str, + id: str, + is_admin: bool, + last_name: str, + role: str, + type: str): + """ + :param str email: The email address of the User + :param str first_name: The first name of the User + :param str id: The ID of the User + :param bool is_admin: Indicates whether the User is an admin + :param str last_name: The last name of the User + :param str role: Indicates the User's role. Either ADMIN, DEVOPS, SUPPORT, or MEMBER. + :param str type: Indicates the User's type. Either MANUAL or SYNCED. + """ + pulumi.set(__self__, "email", email) + pulumi.set(__self__, "first_name", first_name) + pulumi.set(__self__, "id", id) + pulumi.set(__self__, "is_admin", is_admin) + pulumi.set(__self__, "last_name", last_name) + pulumi.set(__self__, "role", role) + pulumi.set(__self__, "type", type) + + @property + @pulumi.getter + def email(self) -> str: + """ + The email address of the User + """ + return pulumi.get(self, "email") + + @property + @pulumi.getter(name="firstName") + def first_name(self) -> str: + """ + The first name of the User + """ + return pulumi.get(self, "first_name") + + @property + @pulumi.getter + def id(self) -> str: + """ + The ID of the User + """ + return pulumi.get(self, "id") + + @property + @pulumi.getter(name="isAdmin") + def is_admin(self) -> bool: + """ + Indicates whether the User is an admin + """ + warnings.warn("""This read-only Boolean value will be deprecated in a future release. You may use the `role` value instead.""", DeprecationWarning) + pulumi.log.warn("""is_admin is deprecated: This read-only Boolean value will be deprecated in a future release. You may use the `role` value instead.""") + + return pulumi.get(self, "is_admin") + + @property + @pulumi.getter(name="lastName") + def last_name(self) -> str: + """ + The last name of the User + """ + return pulumi.get(self, "last_name") + + @property + @pulumi.getter + def role(self) -> str: + """ + Indicates the User's role. Either ADMIN, DEVOPS, SUPPORT, or MEMBER. + """ + return pulumi.get(self, "role") + + @property + @pulumi.getter + def type(self) -> str: + """ + Indicates the User's type. Either MANUAL or SYNCED. + """ + return pulumi.get(self, "type") + + diff --git a/sdk/python/pulumi_twingate/provider.py b/sdk/python/pulumi_twingate/provider.py new file mode 100644 index 0000000..f1fa352 --- /dev/null +++ b/sdk/python/pulumi_twingate/provider.py @@ -0,0 +1,226 @@ +# 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 copy +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__, *, + api_token: Optional[pulumi.Input[str]] = None, + http_max_retry: Optional[pulumi.Input[int]] = None, + http_timeout: Optional[pulumi.Input[int]] = None, + network: Optional[pulumi.Input[str]] = None, + url: Optional[pulumi.Input[str]] = None): + """ + The set of arguments for constructing a Provider resource. + :param pulumi.Input[str] api_token: The access key for API operations. You can retrieve this from the Twingate Admin Console + ([documentation](https://docs.twingate.com/docs/api-overview)). Alternatively, this can be specified using the + TWINGATE_API_TOKEN environment variable. + :param pulumi.Input[int] http_max_retry: Specifies a retry limit for the http requests made. The default value is 10. Alternatively, this can be specified using + the TWINGATE_HTTP_MAX_RETRY environment variable + :param pulumi.Input[int] http_timeout: Specifies a time limit in seconds for the http requests made. The default value is 10 seconds. Alternatively, this can + be specified using the TWINGATE_HTTP_TIMEOUT environment variable + :param pulumi.Input[str] network: Your Twingate network ID for API operations. You can find it in the Admin Console URL, for example: + `autoco.twingate.com`, where `autoco` is your network ID Alternatively, this can be specified using the TWINGATE_NETWORK + environment variable. + :param pulumi.Input[str] url: The default is 'twingate.com' This is optional and shouldn't be changed under normal circumstances. + """ + if api_token is not None: + pulumi.set(__self__, "api_token", api_token) + if http_max_retry is not None: + pulumi.set(__self__, "http_max_retry", http_max_retry) + if http_timeout is not None: + pulumi.set(__self__, "http_timeout", http_timeout) + if network is not None: + pulumi.set(__self__, "network", network) + if url is not None: + pulumi.set(__self__, "url", url) + + @property + @pulumi.getter(name="apiToken") + def api_token(self) -> Optional[pulumi.Input[str]]: + """ + The access key for API operations. You can retrieve this from the Twingate Admin Console + ([documentation](https://docs.twingate.com/docs/api-overview)). Alternatively, this can be specified using the + TWINGATE_API_TOKEN environment variable. + """ + return pulumi.get(self, "api_token") + + @api_token.setter + def api_token(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "api_token", value) + + @property + @pulumi.getter(name="httpMaxRetry") + def http_max_retry(self) -> Optional[pulumi.Input[int]]: + """ + Specifies a retry limit for the http requests made. The default value is 10. Alternatively, this can be specified using + the TWINGATE_HTTP_MAX_RETRY environment variable + """ + return pulumi.get(self, "http_max_retry") + + @http_max_retry.setter + def http_max_retry(self, value: Optional[pulumi.Input[int]]): + pulumi.set(self, "http_max_retry", value) + + @property + @pulumi.getter(name="httpTimeout") + def http_timeout(self) -> Optional[pulumi.Input[int]]: + """ + Specifies a time limit in seconds for the http requests made. The default value is 10 seconds. Alternatively, this can + be specified using the TWINGATE_HTTP_TIMEOUT environment variable + """ + return pulumi.get(self, "http_timeout") + + @http_timeout.setter + def http_timeout(self, value: Optional[pulumi.Input[int]]): + pulumi.set(self, "http_timeout", value) + + @property + @pulumi.getter + def network(self) -> Optional[pulumi.Input[str]]: + """ + Your Twingate network ID for API operations. You can find it in the Admin Console URL, for example: + `autoco.twingate.com`, where `autoco` is your network ID Alternatively, this can be specified using the TWINGATE_NETWORK + environment variable. + """ + return pulumi.get(self, "network") + + @network.setter + def network(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "network", value) + + @property + @pulumi.getter + def url(self) -> Optional[pulumi.Input[str]]: + """ + The default is 'twingate.com' This is optional and shouldn't be changed under normal circumstances. + """ + 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, + api_token: Optional[pulumi.Input[str]] = None, + http_max_retry: Optional[pulumi.Input[int]] = None, + http_timeout: Optional[pulumi.Input[int]] = None, + network: Optional[pulumi.Input[str]] = None, + url: Optional[pulumi.Input[str]] = None, + __props__=None): + """ + The provider type for the twingate 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] api_token: The access key for API operations. You can retrieve this from the Twingate Admin Console + ([documentation](https://docs.twingate.com/docs/api-overview)). Alternatively, this can be specified using the + TWINGATE_API_TOKEN environment variable. + :param pulumi.Input[int] http_max_retry: Specifies a retry limit for the http requests made. The default value is 10. Alternatively, this can be specified using + the TWINGATE_HTTP_MAX_RETRY environment variable + :param pulumi.Input[int] http_timeout: Specifies a time limit in seconds for the http requests made. The default value is 10 seconds. Alternatively, this can + be specified using the TWINGATE_HTTP_TIMEOUT environment variable + :param pulumi.Input[str] network: Your Twingate network ID for API operations. You can find it in the Admin Console URL, for example: + `autoco.twingate.com`, where `autoco` is your network ID Alternatively, this can be specified using the TWINGATE_NETWORK + environment variable. + :param pulumi.Input[str] url: The default is 'twingate.com' This is optional and shouldn't be changed under normal circumstances. + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: Optional[ProviderArgs] = None, + opts: Optional[pulumi.ResourceOptions] = None): + """ + The provider type for the twingate 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, + api_token: Optional[pulumi.Input[str]] = None, + http_max_retry: Optional[pulumi.Input[int]] = None, + http_timeout: Optional[pulumi.Input[int]] = None, + network: Optional[pulumi.Input[str]] = None, + url: Optional[pulumi.Input[str]] = None, + __props__=None): + opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts) + if not isinstance(opts, pulumi.ResourceOptions): + raise TypeError('Expected resource options to be a ResourceOptions instance') + 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) + + __props__.__dict__["api_token"] = None if api_token is None else pulumi.Output.secret(api_token) + __props__.__dict__["http_max_retry"] = pulumi.Output.from_input(http_max_retry).apply(pulumi.runtime.to_json) if http_max_retry is not None else None + __props__.__dict__["http_timeout"] = pulumi.Output.from_input(http_timeout).apply(pulumi.runtime.to_json) if http_timeout is not None else None + __props__.__dict__["network"] = network + __props__.__dict__["url"] = url + secret_opts = pulumi.ResourceOptions(additional_secret_outputs=["apiToken"]) + opts = pulumi.ResourceOptions.merge(opts, secret_opts) + super(Provider, __self__).__init__( + 'twingate', + resource_name, + __props__, + opts) + + @property + @pulumi.getter(name="apiToken") + def api_token(self) -> pulumi.Output[Optional[str]]: + """ + The access key for API operations. You can retrieve this from the Twingate Admin Console + ([documentation](https://docs.twingate.com/docs/api-overview)). Alternatively, this can be specified using the + TWINGATE_API_TOKEN environment variable. + """ + return pulumi.get(self, "api_token") + + @property + @pulumi.getter + def network(self) -> pulumi.Output[Optional[str]]: + """ + Your Twingate network ID for API operations. You can find it in the Admin Console URL, for example: + `autoco.twingate.com`, where `autoco` is your network ID Alternatively, this can be specified using the TWINGATE_NETWORK + environment variable. + """ + return pulumi.get(self, "network") + + @property + @pulumi.getter + def url(self) -> pulumi.Output[Optional[str]]: + """ + The default is 'twingate.com' This is optional and shouldn't be changed under normal circumstances. + """ + return pulumi.get(self, "url") + diff --git a/sdk/python/pulumi_twingate/pulumi-plugin.json b/sdk/python/pulumi_twingate/pulumi-plugin.json new file mode 100644 index 0000000..51cf0e7 --- /dev/null +++ b/sdk/python/pulumi_twingate/pulumi-plugin.json @@ -0,0 +1,4 @@ +{ + "resource": true, + "name": "twingate" +} diff --git a/sdk/python/pulumi_twingate/py.typed b/sdk/python/pulumi_twingate/py.typed new file mode 100644 index 0000000..e69de29 diff --git a/sdk/python/pulumi_twingate/twingate_connector.py b/sdk/python/pulumi_twingate/twingate_connector.py new file mode 100644 index 0000000..0931004 --- /dev/null +++ b/sdk/python/pulumi_twingate/twingate_connector.py @@ -0,0 +1,272 @@ +# 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 copy +import warnings +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +from . import _utilities + +__all__ = ['TwingateConnectorArgs', 'TwingateConnector'] + +@pulumi.input_type +class TwingateConnectorArgs: + def __init__(__self__, *, + remote_network_id: pulumi.Input[str], + name: Optional[pulumi.Input[str]] = None, + status_updates_enabled: Optional[pulumi.Input[bool]] = None): + """ + The set of arguments for constructing a TwingateConnector resource. + :param pulumi.Input[str] remote_network_id: The ID of the Remote Network the Connector is attached to. + :param pulumi.Input[str] name: Name of the Connector, if not provided one will be generated. + :param pulumi.Input[bool] status_updates_enabled: Determines whether status notifications are enabled for the Connector. + """ + pulumi.set(__self__, "remote_network_id", remote_network_id) + if name is not None: + pulumi.set(__self__, "name", name) + if status_updates_enabled is not None: + pulumi.set(__self__, "status_updates_enabled", status_updates_enabled) + + @property + @pulumi.getter(name="remoteNetworkId") + def remote_network_id(self) -> pulumi.Input[str]: + """ + The ID of the Remote Network the Connector is attached to. + """ + return pulumi.get(self, "remote_network_id") + + @remote_network_id.setter + def remote_network_id(self, value: pulumi.Input[str]): + pulumi.set(self, "remote_network_id", value) + + @property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[str]]: + """ + Name of the Connector, if not provided one will be generated. + """ + return pulumi.get(self, "name") + + @name.setter + def name(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "name", value) + + @property + @pulumi.getter(name="statusUpdatesEnabled") + def status_updates_enabled(self) -> Optional[pulumi.Input[bool]]: + """ + Determines whether status notifications are enabled for the Connector. + """ + return pulumi.get(self, "status_updates_enabled") + + @status_updates_enabled.setter + def status_updates_enabled(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "status_updates_enabled", value) + + +@pulumi.input_type +class _TwingateConnectorState: + def __init__(__self__, *, + name: Optional[pulumi.Input[str]] = None, + remote_network_id: Optional[pulumi.Input[str]] = None, + status_updates_enabled: Optional[pulumi.Input[bool]] = None): + """ + Input properties used for looking up and filtering TwingateConnector resources. + :param pulumi.Input[str] name: Name of the Connector, if not provided one will be generated. + :param pulumi.Input[str] remote_network_id: The ID of the Remote Network the Connector is attached to. + :param pulumi.Input[bool] status_updates_enabled: Determines whether status notifications are enabled for the Connector. + """ + if name is not None: + pulumi.set(__self__, "name", name) + if remote_network_id is not None: + pulumi.set(__self__, "remote_network_id", remote_network_id) + if status_updates_enabled is not None: + pulumi.set(__self__, "status_updates_enabled", status_updates_enabled) + + @property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[str]]: + """ + Name of the Connector, if not provided one will be generated. + """ + return pulumi.get(self, "name") + + @name.setter + def name(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "name", value) + + @property + @pulumi.getter(name="remoteNetworkId") + def remote_network_id(self) -> Optional[pulumi.Input[str]]: + """ + The ID of the Remote Network the Connector is attached to. + """ + return pulumi.get(self, "remote_network_id") + + @remote_network_id.setter + def remote_network_id(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "remote_network_id", value) + + @property + @pulumi.getter(name="statusUpdatesEnabled") + def status_updates_enabled(self) -> Optional[pulumi.Input[bool]]: + """ + Determines whether status notifications are enabled for the Connector. + """ + return pulumi.get(self, "status_updates_enabled") + + @status_updates_enabled.setter + def status_updates_enabled(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "status_updates_enabled", value) + + +class TwingateConnector(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + name: Optional[pulumi.Input[str]] = None, + remote_network_id: Optional[pulumi.Input[str]] = None, + status_updates_enabled: Optional[pulumi.Input[bool]] = None, + __props__=None): + """ + Connectors provide connectivity to Remote Networks. This resource type will create the Connector in the Twingate Admin Console, but in order to successfully deploy it, you must also generate Connector tokens that authenticate the Connector with Twingate. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/understanding-access-nodes). + + ## Example Usage + + ```python + import pulumi + import pulumi_twingate as twingate + + aws_network = twingate.TwingateRemoteNetwork("awsNetwork") + aws_connector = twingate.TwingateConnector("awsConnector", remote_network_id=aws_network.id) + ``` + + ## Import + + ```sh + $ pulumi import twingate:index/twingateConnector:TwingateConnector aws_connector Q29ubmVjdG9yOjI2NzM= + ``` + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[str] name: Name of the Connector, if not provided one will be generated. + :param pulumi.Input[str] remote_network_id: The ID of the Remote Network the Connector is attached to. + :param pulumi.Input[bool] status_updates_enabled: Determines whether status notifications are enabled for the Connector. + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: TwingateConnectorArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + Connectors provide connectivity to Remote Networks. This resource type will create the Connector in the Twingate Admin Console, but in order to successfully deploy it, you must also generate Connector tokens that authenticate the Connector with Twingate. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/understanding-access-nodes). + + ## Example Usage + + ```python + import pulumi + import pulumi_twingate as twingate + + aws_network = twingate.TwingateRemoteNetwork("awsNetwork") + aws_connector = twingate.TwingateConnector("awsConnector", remote_network_id=aws_network.id) + ``` + + ## Import + + ```sh + $ pulumi import twingate:index/twingateConnector:TwingateConnector aws_connector Q29ubmVjdG9yOjI2NzM= + ``` + + :param str resource_name: The name of the resource. + :param TwingateConnectorArgs 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(TwingateConnectorArgs, 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, + name: Optional[pulumi.Input[str]] = None, + remote_network_id: Optional[pulumi.Input[str]] = None, + status_updates_enabled: Optional[pulumi.Input[bool]] = None, + __props__=None): + opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts) + if not isinstance(opts, pulumi.ResourceOptions): + raise TypeError('Expected resource options to be a ResourceOptions instance') + 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__ = TwingateConnectorArgs.__new__(TwingateConnectorArgs) + + __props__.__dict__["name"] = name + if remote_network_id is None and not opts.urn: + raise TypeError("Missing required property 'remote_network_id'") + __props__.__dict__["remote_network_id"] = remote_network_id + __props__.__dict__["status_updates_enabled"] = status_updates_enabled + super(TwingateConnector, __self__).__init__( + 'twingate:index/twingateConnector:TwingateConnector', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + name: Optional[pulumi.Input[str]] = None, + remote_network_id: Optional[pulumi.Input[str]] = None, + status_updates_enabled: Optional[pulumi.Input[bool]] = None) -> 'TwingateConnector': + """ + Get an existing TwingateConnector 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] name: Name of the Connector, if not provided one will be generated. + :param pulumi.Input[str] remote_network_id: The ID of the Remote Network the Connector is attached to. + :param pulumi.Input[bool] status_updates_enabled: Determines whether status notifications are enabled for the Connector. + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _TwingateConnectorState.__new__(_TwingateConnectorState) + + __props__.__dict__["name"] = name + __props__.__dict__["remote_network_id"] = remote_network_id + __props__.__dict__["status_updates_enabled"] = status_updates_enabled + return TwingateConnector(resource_name, opts=opts, __props__=__props__) + + @property + @pulumi.getter + def name(self) -> pulumi.Output[str]: + """ + Name of the Connector, if not provided one will be generated. + """ + return pulumi.get(self, "name") + + @property + @pulumi.getter(name="remoteNetworkId") + def remote_network_id(self) -> pulumi.Output[str]: + """ + The ID of the Remote Network the Connector is attached to. + """ + return pulumi.get(self, "remote_network_id") + + @property + @pulumi.getter(name="statusUpdatesEnabled") + def status_updates_enabled(self) -> pulumi.Output[bool]: + """ + Determines whether status notifications are enabled for the Connector. + """ + return pulumi.get(self, "status_updates_enabled") + diff --git a/sdk/python/pulumi_twingate/twingate_connector_tokens.py b/sdk/python/pulumi_twingate/twingate_connector_tokens.py new file mode 100644 index 0000000..db46a5e --- /dev/null +++ b/sdk/python/pulumi_twingate/twingate_connector_tokens.py @@ -0,0 +1,273 @@ +# 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 copy +import warnings +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +from . import _utilities + +__all__ = ['TwingateConnectorTokensArgs', 'TwingateConnectorTokens'] + +@pulumi.input_type +class TwingateConnectorTokensArgs: + def __init__(__self__, *, + connector_id: pulumi.Input[str], + keepers: Optional[pulumi.Input[Mapping[str, Any]]] = None): + """ + The set of arguments for constructing a TwingateConnectorTokens resource. + :param pulumi.Input[str] connector_id: The ID of the parent Connector + :param pulumi.Input[Mapping[str, Any]] keepers: Arbitrary map of values that, when changed, will trigger recreation of resource. Use this to automatically rotate Connector tokens on a schedule. + """ + pulumi.set(__self__, "connector_id", connector_id) + if keepers is not None: + pulumi.set(__self__, "keepers", keepers) + + @property + @pulumi.getter(name="connectorId") + def connector_id(self) -> pulumi.Input[str]: + """ + The ID of the parent Connector + """ + return pulumi.get(self, "connector_id") + + @connector_id.setter + def connector_id(self, value: pulumi.Input[str]): + pulumi.set(self, "connector_id", value) + + @property + @pulumi.getter + def keepers(self) -> Optional[pulumi.Input[Mapping[str, Any]]]: + """ + Arbitrary map of values that, when changed, will trigger recreation of resource. Use this to automatically rotate Connector tokens on a schedule. + """ + return pulumi.get(self, "keepers") + + @keepers.setter + def keepers(self, value: Optional[pulumi.Input[Mapping[str, Any]]]): + pulumi.set(self, "keepers", value) + + +@pulumi.input_type +class _TwingateConnectorTokensState: + def __init__(__self__, *, + access_token: Optional[pulumi.Input[str]] = None, + connector_id: Optional[pulumi.Input[str]] = None, + keepers: Optional[pulumi.Input[Mapping[str, Any]]] = None, + refresh_token: Optional[pulumi.Input[str]] = None): + """ + Input properties used for looking up and filtering TwingateConnectorTokens resources. + :param pulumi.Input[str] access_token: The Access Token of the parent Connector + :param pulumi.Input[str] connector_id: The ID of the parent Connector + :param pulumi.Input[Mapping[str, Any]] keepers: Arbitrary map of values that, when changed, will trigger recreation of resource. Use this to automatically rotate Connector tokens on a schedule. + :param pulumi.Input[str] refresh_token: The Refresh Token of the parent Connector + """ + if access_token is not None: + pulumi.set(__self__, "access_token", access_token) + if connector_id is not None: + pulumi.set(__self__, "connector_id", connector_id) + if keepers is not None: + pulumi.set(__self__, "keepers", keepers) + if refresh_token is not None: + pulumi.set(__self__, "refresh_token", refresh_token) + + @property + @pulumi.getter(name="accessToken") + def access_token(self) -> Optional[pulumi.Input[str]]: + """ + The Access Token of the parent Connector + """ + return pulumi.get(self, "access_token") + + @access_token.setter + def access_token(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "access_token", value) + + @property + @pulumi.getter(name="connectorId") + def connector_id(self) -> Optional[pulumi.Input[str]]: + """ + The ID of the parent Connector + """ + return pulumi.get(self, "connector_id") + + @connector_id.setter + def connector_id(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "connector_id", value) + + @property + @pulumi.getter + def keepers(self) -> Optional[pulumi.Input[Mapping[str, Any]]]: + """ + Arbitrary map of values that, when changed, will trigger recreation of resource. Use this to automatically rotate Connector tokens on a schedule. + """ + return pulumi.get(self, "keepers") + + @keepers.setter + def keepers(self, value: Optional[pulumi.Input[Mapping[str, Any]]]): + pulumi.set(self, "keepers", value) + + @property + @pulumi.getter(name="refreshToken") + def refresh_token(self) -> Optional[pulumi.Input[str]]: + """ + The Refresh Token of the parent Connector + """ + return pulumi.get(self, "refresh_token") + + @refresh_token.setter + def refresh_token(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "refresh_token", value) + + +class TwingateConnectorTokens(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + connector_id: Optional[pulumi.Input[str]] = None, + keepers: Optional[pulumi.Input[Mapping[str, Any]]] = None, + __props__=None): + """ + This resource type will generate tokens for a Connector, which are needed to successfully provision one on your network. The Connector itself has its own resource type and must be created before you can provision tokens. + + ## Example Usage + + ```python + import pulumi + import pulumi_twingate as twingate + + aws_network = twingate.TwingateRemoteNetwork("awsNetwork") + aws_connector = twingate.TwingateConnector("awsConnector", remote_network_id=aws_network.id) + aws_connector_tokens = twingate.TwingateConnectorTokens("awsConnectorTokens", connector_id=aws_connector.id) + ``` + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[str] connector_id: The ID of the parent Connector + :param pulumi.Input[Mapping[str, Any]] keepers: Arbitrary map of values that, when changed, will trigger recreation of resource. Use this to automatically rotate Connector tokens on a schedule. + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: TwingateConnectorTokensArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + This resource type will generate tokens for a Connector, which are needed to successfully provision one on your network. The Connector itself has its own resource type and must be created before you can provision tokens. + + ## Example Usage + + ```python + import pulumi + import pulumi_twingate as twingate + + aws_network = twingate.TwingateRemoteNetwork("awsNetwork") + aws_connector = twingate.TwingateConnector("awsConnector", remote_network_id=aws_network.id) + aws_connector_tokens = twingate.TwingateConnectorTokens("awsConnectorTokens", connector_id=aws_connector.id) + ``` + + :param str resource_name: The name of the resource. + :param TwingateConnectorTokensArgs 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(TwingateConnectorTokensArgs, 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, + connector_id: Optional[pulumi.Input[str]] = None, + keepers: Optional[pulumi.Input[Mapping[str, Any]]] = None, + __props__=None): + opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts) + if not isinstance(opts, pulumi.ResourceOptions): + raise TypeError('Expected resource options to be a ResourceOptions instance') + 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__ = TwingateConnectorTokensArgs.__new__(TwingateConnectorTokensArgs) + + if connector_id is None and not opts.urn: + raise TypeError("Missing required property 'connector_id'") + __props__.__dict__["connector_id"] = connector_id + __props__.__dict__["keepers"] = keepers + __props__.__dict__["access_token"] = None + __props__.__dict__["refresh_token"] = None + secret_opts = pulumi.ResourceOptions(additional_secret_outputs=["accessToken", "refreshToken"]) + opts = pulumi.ResourceOptions.merge(opts, secret_opts) + super(TwingateConnectorTokens, __self__).__init__( + 'twingate:index/twingateConnectorTokens:TwingateConnectorTokens', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + access_token: Optional[pulumi.Input[str]] = None, + connector_id: Optional[pulumi.Input[str]] = None, + keepers: Optional[pulumi.Input[Mapping[str, Any]]] = None, + refresh_token: Optional[pulumi.Input[str]] = None) -> 'TwingateConnectorTokens': + """ + Get an existing TwingateConnectorTokens 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] access_token: The Access Token of the parent Connector + :param pulumi.Input[str] connector_id: The ID of the parent Connector + :param pulumi.Input[Mapping[str, Any]] keepers: Arbitrary map of values that, when changed, will trigger recreation of resource. Use this to automatically rotate Connector tokens on a schedule. + :param pulumi.Input[str] refresh_token: The Refresh Token of the parent Connector + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _TwingateConnectorTokensState.__new__(_TwingateConnectorTokensState) + + __props__.__dict__["access_token"] = access_token + __props__.__dict__["connector_id"] = connector_id + __props__.__dict__["keepers"] = keepers + __props__.__dict__["refresh_token"] = refresh_token + return TwingateConnectorTokens(resource_name, opts=opts, __props__=__props__) + + @property + @pulumi.getter(name="accessToken") + def access_token(self) -> pulumi.Output[str]: + """ + The Access Token of the parent Connector + """ + return pulumi.get(self, "access_token") + + @property + @pulumi.getter(name="connectorId") + def connector_id(self) -> pulumi.Output[str]: + """ + The ID of the parent Connector + """ + return pulumi.get(self, "connector_id") + + @property + @pulumi.getter + def keepers(self) -> pulumi.Output[Optional[Mapping[str, Any]]]: + """ + Arbitrary map of values that, when changed, will trigger recreation of resource. Use this to automatically rotate Connector tokens on a schedule. + """ + return pulumi.get(self, "keepers") + + @property + @pulumi.getter(name="refreshToken") + def refresh_token(self) -> pulumi.Output[str]: + """ + The Refresh Token of the parent Connector + """ + return pulumi.get(self, "refresh_token") + diff --git a/sdk/python/pulumi_twingate/twingate_group.py b/sdk/python/pulumi_twingate/twingate_group.py new file mode 100644 index 0000000..5c7134f --- /dev/null +++ b/sdk/python/pulumi_twingate/twingate_group.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 copy +import warnings +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +from . import _utilities + +__all__ = ['TwingateGroupArgs', 'TwingateGroup'] + +@pulumi.input_type +class TwingateGroupArgs: + def __init__(__self__, *, + is_authoritative: Optional[pulumi.Input[bool]] = None, + name: Optional[pulumi.Input[str]] = None, + security_policy_id: Optional[pulumi.Input[str]] = None, + user_ids: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None): + """ + The set of arguments for constructing a TwingateGroup resource. + :param pulumi.Input[bool] is_authoritative: Determines whether User assignments to this Group will override any existing assignments. Default is `true`. If set to + `false`, assignments made outside of Terraform will be ignored. + :param pulumi.Input[str] name: The name of the group + :param pulumi.Input[str] security_policy_id: Defines which Security Policy applies to this Group. The Security Policy ID can be obtained from the `get_twingate_security_policy` and `get_twingate_security_policies` data sources. + :param pulumi.Input[Sequence[pulumi.Input[str]]] user_ids: List of User IDs that have permission to access the Group. + """ + if is_authoritative is not None: + pulumi.set(__self__, "is_authoritative", is_authoritative) + if name is not None: + pulumi.set(__self__, "name", name) + if security_policy_id is not None: + pulumi.set(__self__, "security_policy_id", security_policy_id) + if user_ids is not None: + pulumi.set(__self__, "user_ids", user_ids) + + @property + @pulumi.getter(name="isAuthoritative") + def is_authoritative(self) -> Optional[pulumi.Input[bool]]: + """ + Determines whether User assignments to this Group will override any existing assignments. Default is `true`. If set to + `false`, assignments made outside of Terraform will be ignored. + """ + return pulumi.get(self, "is_authoritative") + + @is_authoritative.setter + def is_authoritative(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "is_authoritative", value) + + @property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[str]]: + """ + The name of the group + """ + return pulumi.get(self, "name") + + @name.setter + def name(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "name", value) + + @property + @pulumi.getter(name="securityPolicyId") + def security_policy_id(self) -> Optional[pulumi.Input[str]]: + """ + Defines which Security Policy applies to this Group. The Security Policy ID can be obtained from the `get_twingate_security_policy` and `get_twingate_security_policies` data sources. + """ + return pulumi.get(self, "security_policy_id") + + @security_policy_id.setter + def security_policy_id(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "security_policy_id", value) + + @property + @pulumi.getter(name="userIds") + def user_ids(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]: + """ + List of User IDs that have permission to access the Group. + """ + return pulumi.get(self, "user_ids") + + @user_ids.setter + def user_ids(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]): + pulumi.set(self, "user_ids", value) + + +@pulumi.input_type +class _TwingateGroupState: + def __init__(__self__, *, + is_authoritative: Optional[pulumi.Input[bool]] = None, + name: Optional[pulumi.Input[str]] = None, + security_policy_id: Optional[pulumi.Input[str]] = None, + user_ids: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None): + """ + Input properties used for looking up and filtering TwingateGroup resources. + :param pulumi.Input[bool] is_authoritative: Determines whether User assignments to this Group will override any existing assignments. Default is `true`. If set to + `false`, assignments made outside of Terraform will be ignored. + :param pulumi.Input[str] name: The name of the group + :param pulumi.Input[str] security_policy_id: Defines which Security Policy applies to this Group. The Security Policy ID can be obtained from the `get_twingate_security_policy` and `get_twingate_security_policies` data sources. + :param pulumi.Input[Sequence[pulumi.Input[str]]] user_ids: List of User IDs that have permission to access the Group. + """ + if is_authoritative is not None: + pulumi.set(__self__, "is_authoritative", is_authoritative) + if name is not None: + pulumi.set(__self__, "name", name) + if security_policy_id is not None: + pulumi.set(__self__, "security_policy_id", security_policy_id) + if user_ids is not None: + pulumi.set(__self__, "user_ids", user_ids) + + @property + @pulumi.getter(name="isAuthoritative") + def is_authoritative(self) -> Optional[pulumi.Input[bool]]: + """ + Determines whether User assignments to this Group will override any existing assignments. Default is `true`. If set to + `false`, assignments made outside of Terraform will be ignored. + """ + return pulumi.get(self, "is_authoritative") + + @is_authoritative.setter + def is_authoritative(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "is_authoritative", value) + + @property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[str]]: + """ + The name of the group + """ + return pulumi.get(self, "name") + + @name.setter + def name(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "name", value) + + @property + @pulumi.getter(name="securityPolicyId") + def security_policy_id(self) -> Optional[pulumi.Input[str]]: + """ + Defines which Security Policy applies to this Group. The Security Policy ID can be obtained from the `get_twingate_security_policy` and `get_twingate_security_policies` data sources. + """ + return pulumi.get(self, "security_policy_id") + + @security_policy_id.setter + def security_policy_id(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "security_policy_id", value) + + @property + @pulumi.getter(name="userIds") + def user_ids(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]: + """ + List of User IDs that have permission to access the Group. + """ + return pulumi.get(self, "user_ids") + + @user_ids.setter + def user_ids(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]): + pulumi.set(self, "user_ids", value) + + +class TwingateGroup(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + is_authoritative: Optional[pulumi.Input[bool]] = None, + name: Optional[pulumi.Input[str]] = None, + security_policy_id: Optional[pulumi.Input[str]] = None, + user_ids: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, + __props__=None): + """ + Groups are how users are authorized to access Resources. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/groups). + + ## Example Usage + + ```python + import pulumi + import pulumi_twingate as twingate + + aws = twingate.TwingateGroup("aws") + ``` + + ## Import + + ```sh + $ pulumi import twingate:index/twingateGroup:TwingateGroup aws R3JvdXA6MzQ4OTE= + ``` + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[bool] is_authoritative: Determines whether User assignments to this Group will override any existing assignments. Default is `true`. If set to + `false`, assignments made outside of Terraform will be ignored. + :param pulumi.Input[str] name: The name of the group + :param pulumi.Input[str] security_policy_id: Defines which Security Policy applies to this Group. The Security Policy ID can be obtained from the `get_twingate_security_policy` and `get_twingate_security_policies` data sources. + :param pulumi.Input[Sequence[pulumi.Input[str]]] user_ids: List of User IDs that have permission to access the Group. + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: Optional[TwingateGroupArgs] = None, + opts: Optional[pulumi.ResourceOptions] = None): + """ + Groups are how users are authorized to access Resources. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/groups). + + ## Example Usage + + ```python + import pulumi + import pulumi_twingate as twingate + + aws = twingate.TwingateGroup("aws") + ``` + + ## Import + + ```sh + $ pulumi import twingate:index/twingateGroup:TwingateGroup aws R3JvdXA6MzQ4OTE= + ``` + + :param str resource_name: The name of the resource. + :param TwingateGroupArgs 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(TwingateGroupArgs, 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, + is_authoritative: Optional[pulumi.Input[bool]] = None, + name: Optional[pulumi.Input[str]] = None, + security_policy_id: Optional[pulumi.Input[str]] = None, + user_ids: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, + __props__=None): + opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts) + if not isinstance(opts, pulumi.ResourceOptions): + raise TypeError('Expected resource options to be a ResourceOptions instance') + 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__ = TwingateGroupArgs.__new__(TwingateGroupArgs) + + __props__.__dict__["is_authoritative"] = is_authoritative + __props__.__dict__["name"] = name + __props__.__dict__["security_policy_id"] = security_policy_id + __props__.__dict__["user_ids"] = user_ids + super(TwingateGroup, __self__).__init__( + 'twingate:index/twingateGroup:TwingateGroup', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + is_authoritative: Optional[pulumi.Input[bool]] = None, + name: Optional[pulumi.Input[str]] = None, + security_policy_id: Optional[pulumi.Input[str]] = None, + user_ids: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None) -> 'TwingateGroup': + """ + Get an existing TwingateGroup 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[bool] is_authoritative: Determines whether User assignments to this Group will override any existing assignments. Default is `true`. If set to + `false`, assignments made outside of Terraform will be ignored. + :param pulumi.Input[str] name: The name of the group + :param pulumi.Input[str] security_policy_id: Defines which Security Policy applies to this Group. The Security Policy ID can be obtained from the `get_twingate_security_policy` and `get_twingate_security_policies` data sources. + :param pulumi.Input[Sequence[pulumi.Input[str]]] user_ids: List of User IDs that have permission to access the Group. + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _TwingateGroupState.__new__(_TwingateGroupState) + + __props__.__dict__["is_authoritative"] = is_authoritative + __props__.__dict__["name"] = name + __props__.__dict__["security_policy_id"] = security_policy_id + __props__.__dict__["user_ids"] = user_ids + return TwingateGroup(resource_name, opts=opts, __props__=__props__) + + @property + @pulumi.getter(name="isAuthoritative") + def is_authoritative(self) -> pulumi.Output[bool]: + """ + Determines whether User assignments to this Group will override any existing assignments. Default is `true`. If set to + `false`, assignments made outside of Terraform will be ignored. + """ + return pulumi.get(self, "is_authoritative") + + @property + @pulumi.getter + def name(self) -> pulumi.Output[str]: + """ + The name of the group + """ + return pulumi.get(self, "name") + + @property + @pulumi.getter(name="securityPolicyId") + def security_policy_id(self) -> pulumi.Output[str]: + """ + Defines which Security Policy applies to this Group. The Security Policy ID can be obtained from the `get_twingate_security_policy` and `get_twingate_security_policies` data sources. + """ + return pulumi.get(self, "security_policy_id") + + @property + @pulumi.getter(name="userIds") + def user_ids(self) -> pulumi.Output[Optional[Sequence[str]]]: + """ + List of User IDs that have permission to access the Group. + """ + return pulumi.get(self, "user_ids") + diff --git a/sdk/python/pulumi_twingate/twingate_remote_network.py b/sdk/python/pulumi_twingate/twingate_remote_network.py new file mode 100644 index 0000000..e9ee916 --- /dev/null +++ b/sdk/python/pulumi_twingate/twingate_remote_network.py @@ -0,0 +1,222 @@ +# 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 copy +import warnings +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +from . import _utilities + +__all__ = ['TwingateRemoteNetworkArgs', 'TwingateRemoteNetwork'] + +@pulumi.input_type +class TwingateRemoteNetworkArgs: + def __init__(__self__, *, + location: Optional[pulumi.Input[str]] = None, + name: Optional[pulumi.Input[str]] = None): + """ + The set of arguments for constructing a TwingateRemoteNetwork resource. + :param pulumi.Input[str] location: The location of the Remote Network. Must be one of the following: AWS, AZURE, GOOGLE*CLOUD, ON*PREMISE, OTHER. + :param pulumi.Input[str] name: The name of the Remote Network + """ + if location is not None: + pulumi.set(__self__, "location", location) + if name is not None: + pulumi.set(__self__, "name", name) + + @property + @pulumi.getter + def location(self) -> Optional[pulumi.Input[str]]: + """ + The location of the Remote Network. Must be one of the following: AWS, AZURE, GOOGLE*CLOUD, ON*PREMISE, OTHER. + """ + return pulumi.get(self, "location") + + @location.setter + def location(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "location", value) + + @property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[str]]: + """ + The name of the Remote Network + """ + return pulumi.get(self, "name") + + @name.setter + def name(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "name", value) + + +@pulumi.input_type +class _TwingateRemoteNetworkState: + def __init__(__self__, *, + location: Optional[pulumi.Input[str]] = None, + name: Optional[pulumi.Input[str]] = None): + """ + Input properties used for looking up and filtering TwingateRemoteNetwork resources. + :param pulumi.Input[str] location: The location of the Remote Network. Must be one of the following: AWS, AZURE, GOOGLE*CLOUD, ON*PREMISE, OTHER. + :param pulumi.Input[str] name: The name of the Remote Network + """ + if location is not None: + pulumi.set(__self__, "location", location) + if name is not None: + pulumi.set(__self__, "name", name) + + @property + @pulumi.getter + def location(self) -> Optional[pulumi.Input[str]]: + """ + The location of the Remote Network. Must be one of the following: AWS, AZURE, GOOGLE*CLOUD, ON*PREMISE, OTHER. + """ + return pulumi.get(self, "location") + + @location.setter + def location(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "location", value) + + @property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[str]]: + """ + The name of the Remote Network + """ + return pulumi.get(self, "name") + + @name.setter + def name(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "name", value) + + +class TwingateRemoteNetwork(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + location: Optional[pulumi.Input[str]] = None, + name: Optional[pulumi.Input[str]] = None, + __props__=None): + """ + A Remote Network represents a single private network in Twingate that can have one or more Connectors and Resources assigned to it. You must create a Remote Network before creating Resources and Connectors that belong to it. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/remote-networks). + + ## Example Usage + + ```python + import pulumi + import pulumi_twingate as twingate + + aws_network = twingate.TwingateRemoteNetwork("awsNetwork") + ``` + + ## Import + + ```sh + $ pulumi import twingate:index/twingateRemoteNetwork:TwingateRemoteNetwork network UmVtb3RlTmV0d29zaipgMKIkNg== + ``` + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[str] location: The location of the Remote Network. Must be one of the following: AWS, AZURE, GOOGLE*CLOUD, ON*PREMISE, OTHER. + :param pulumi.Input[str] name: The name of the Remote Network + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: Optional[TwingateRemoteNetworkArgs] = None, + opts: Optional[pulumi.ResourceOptions] = None): + """ + A Remote Network represents a single private network in Twingate that can have one or more Connectors and Resources assigned to it. You must create a Remote Network before creating Resources and Connectors that belong to it. For more information, see Twingate's [documentation](https://docs.twingate.com/docs/remote-networks). + + ## Example Usage + + ```python + import pulumi + import pulumi_twingate as twingate + + aws_network = twingate.TwingateRemoteNetwork("awsNetwork") + ``` + + ## Import + + ```sh + $ pulumi import twingate:index/twingateRemoteNetwork:TwingateRemoteNetwork network UmVtb3RlTmV0d29zaipgMKIkNg== + ``` + + :param str resource_name: The name of the resource. + :param TwingateRemoteNetworkArgs 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(TwingateRemoteNetworkArgs, 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, + location: Optional[pulumi.Input[str]] = None, + name: Optional[pulumi.Input[str]] = None, + __props__=None): + opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts) + if not isinstance(opts, pulumi.ResourceOptions): + raise TypeError('Expected resource options to be a ResourceOptions instance') + 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__ = TwingateRemoteNetworkArgs.__new__(TwingateRemoteNetworkArgs) + + __props__.__dict__["location"] = location + __props__.__dict__["name"] = name + super(TwingateRemoteNetwork, __self__).__init__( + 'twingate:index/twingateRemoteNetwork:TwingateRemoteNetwork', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + location: Optional[pulumi.Input[str]] = None, + name: Optional[pulumi.Input[str]] = None) -> 'TwingateRemoteNetwork': + """ + Get an existing TwingateRemoteNetwork 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] location: The location of the Remote Network. Must be one of the following: AWS, AZURE, GOOGLE*CLOUD, ON*PREMISE, OTHER. + :param pulumi.Input[str] name: The name of the Remote Network + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _TwingateRemoteNetworkState.__new__(_TwingateRemoteNetworkState) + + __props__.__dict__["location"] = location + __props__.__dict__["name"] = name + return TwingateRemoteNetwork(resource_name, opts=opts, __props__=__props__) + + @property + @pulumi.getter + def location(self) -> pulumi.Output[Optional[str]]: + """ + The location of the Remote Network. Must be one of the following: AWS, AZURE, GOOGLE*CLOUD, ON*PREMISE, OTHER. + """ + return pulumi.get(self, "location") + + @property + @pulumi.getter + def name(self) -> pulumi.Output[str]: + """ + The name of the Remote Network + """ + return pulumi.get(self, "name") + diff --git a/sdk/python/pulumi_twingate/twingate_resource.py b/sdk/python/pulumi_twingate/twingate_resource.py new file mode 100644 index 0000000..cc8343f --- /dev/null +++ b/sdk/python/pulumi_twingate/twingate_resource.py @@ -0,0 +1,606 @@ +# 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 copy +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__ = ['TwingateResourceArgs', 'TwingateResource'] + +@pulumi.input_type +class TwingateResourceArgs: + def __init__(__self__, *, + address: pulumi.Input[str], + remote_network_id: pulumi.Input[str], + access: Optional[pulumi.Input['TwingateResourceAccessArgs']] = None, + alias: Optional[pulumi.Input[str]] = None, + is_authoritative: Optional[pulumi.Input[bool]] = None, + is_browser_shortcut_enabled: Optional[pulumi.Input[bool]] = None, + is_visible: Optional[pulumi.Input[bool]] = None, + name: Optional[pulumi.Input[str]] = None, + protocols: Optional[pulumi.Input['TwingateResourceProtocolsArgs']] = None): + """ + The set of arguments for constructing a TwingateResource resource. + :param pulumi.Input[str] address: The Resource's IP/CIDR or FQDN/DNS zone + :param pulumi.Input[str] remote_network_id: Remote Network ID where the Resource lives + :param pulumi.Input['TwingateResourceAccessArgs'] access: Restrict access to certain groups or service accounts + :param pulumi.Input[str] alias: Set a DNS alias address for the Resource. Must be a DNS-valid name string. + :param pulumi.Input[bool] is_authoritative: Determines whether assignments in the access block will override any existing assignments. Default is `true`. If set to + `false`, assignments made outside of Terraform will be ignored. + :param pulumi.Input[bool] is_browser_shortcut_enabled: Controls whether an "Open in Browser" shortcut will be shown for this Resource in the Twingate Client. + :param pulumi.Input[bool] is_visible: Controls whether this Resource will be visible in the main Resource list in the Twingate Client. + :param pulumi.Input[str] name: The name of the Resource + :param pulumi.Input['TwingateResourceProtocolsArgs'] protocols: Restrict access to certain protocols and ports. By default or when this argument is not defined, there is no restriction, and all protocols and ports are allowed. + """ + pulumi.set(__self__, "address", address) + pulumi.set(__self__, "remote_network_id", remote_network_id) + if access is not None: + pulumi.set(__self__, "access", access) + if alias is not None: + pulumi.set(__self__, "alias", alias) + if is_authoritative is not None: + pulumi.set(__self__, "is_authoritative", is_authoritative) + if is_browser_shortcut_enabled is not None: + pulumi.set(__self__, "is_browser_shortcut_enabled", is_browser_shortcut_enabled) + if is_visible is not None: + pulumi.set(__self__, "is_visible", is_visible) + if name is not None: + pulumi.set(__self__, "name", name) + if protocols is not None: + pulumi.set(__self__, "protocols", protocols) + + @property + @pulumi.getter + def address(self) -> pulumi.Input[str]: + """ + The Resource's IP/CIDR or FQDN/DNS zone + """ + return pulumi.get(self, "address") + + @address.setter + def address(self, value: pulumi.Input[str]): + pulumi.set(self, "address", value) + + @property + @pulumi.getter(name="remoteNetworkId") + def remote_network_id(self) -> pulumi.Input[str]: + """ + Remote Network ID where the Resource lives + """ + return pulumi.get(self, "remote_network_id") + + @remote_network_id.setter + def remote_network_id(self, value: pulumi.Input[str]): + pulumi.set(self, "remote_network_id", value) + + @property + @pulumi.getter + def access(self) -> Optional[pulumi.Input['TwingateResourceAccessArgs']]: + """ + Restrict access to certain groups or service accounts + """ + return pulumi.get(self, "access") + + @access.setter + def access(self, value: Optional[pulumi.Input['TwingateResourceAccessArgs']]): + pulumi.set(self, "access", value) + + @property + @pulumi.getter + def alias(self) -> Optional[pulumi.Input[str]]: + """ + Set a DNS alias address for the Resource. Must be a DNS-valid name string. + """ + return pulumi.get(self, "alias") + + @alias.setter + def alias(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "alias", value) + + @property + @pulumi.getter(name="isAuthoritative") + def is_authoritative(self) -> Optional[pulumi.Input[bool]]: + """ + Determines whether assignments in the access block will override any existing assignments. Default is `true`. If set to + `false`, assignments made outside of Terraform will be ignored. + """ + return pulumi.get(self, "is_authoritative") + + @is_authoritative.setter + def is_authoritative(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "is_authoritative", value) + + @property + @pulumi.getter(name="isBrowserShortcutEnabled") + def is_browser_shortcut_enabled(self) -> Optional[pulumi.Input[bool]]: + """ + Controls whether an "Open in Browser" shortcut will be shown for this Resource in the Twingate Client. + """ + return pulumi.get(self, "is_browser_shortcut_enabled") + + @is_browser_shortcut_enabled.setter + def is_browser_shortcut_enabled(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "is_browser_shortcut_enabled", value) + + @property + @pulumi.getter(name="isVisible") + def is_visible(self) -> Optional[pulumi.Input[bool]]: + """ + Controls whether this Resource will be visible in the main Resource list in the Twingate Client. + """ + return pulumi.get(self, "is_visible") + + @is_visible.setter + def is_visible(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "is_visible", value) + + @property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[str]]: + """ + The name of the Resource + """ + return pulumi.get(self, "name") + + @name.setter + def name(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "name", value) + + @property + @pulumi.getter + def protocols(self) -> Optional[pulumi.Input['TwingateResourceProtocolsArgs']]: + """ + Restrict access to certain protocols and ports. By default or when this argument is not defined, there is no restriction, and all protocols and ports are allowed. + """ + return pulumi.get(self, "protocols") + + @protocols.setter + def protocols(self, value: Optional[pulumi.Input['TwingateResourceProtocolsArgs']]): + pulumi.set(self, "protocols", value) + + +@pulumi.input_type +class _TwingateResourceState: + def __init__(__self__, *, + access: Optional[pulumi.Input['TwingateResourceAccessArgs']] = None, + address: Optional[pulumi.Input[str]] = None, + alias: Optional[pulumi.Input[str]] = None, + is_authoritative: Optional[pulumi.Input[bool]] = None, + is_browser_shortcut_enabled: Optional[pulumi.Input[bool]] = None, + is_visible: Optional[pulumi.Input[bool]] = None, + name: Optional[pulumi.Input[str]] = None, + protocols: Optional[pulumi.Input['TwingateResourceProtocolsArgs']] = None, + remote_network_id: Optional[pulumi.Input[str]] = None): + """ + Input properties used for looking up and filtering TwingateResource resources. + :param pulumi.Input['TwingateResourceAccessArgs'] access: Restrict access to certain groups or service accounts + :param pulumi.Input[str] address: The Resource's IP/CIDR or FQDN/DNS zone + :param pulumi.Input[str] alias: Set a DNS alias address for the Resource. Must be a DNS-valid name string. + :param pulumi.Input[bool] is_authoritative: Determines whether assignments in the access block will override any existing assignments. Default is `true`. If set to + `false`, assignments made outside of Terraform will be ignored. + :param pulumi.Input[bool] is_browser_shortcut_enabled: Controls whether an "Open in Browser" shortcut will be shown for this Resource in the Twingate Client. + :param pulumi.Input[bool] is_visible: Controls whether this Resource will be visible in the main Resource list in the Twingate Client. + :param pulumi.Input[str] name: The name of the Resource + :param pulumi.Input['TwingateResourceProtocolsArgs'] protocols: Restrict access to certain protocols and ports. By default or when this argument is not defined, there is no restriction, and all protocols and ports are allowed. + :param pulumi.Input[str] remote_network_id: Remote Network ID where the Resource lives + """ + if access is not None: + pulumi.set(__self__, "access", access) + if address is not None: + pulumi.set(__self__, "address", address) + if alias is not None: + pulumi.set(__self__, "alias", alias) + if is_authoritative is not None: + pulumi.set(__self__, "is_authoritative", is_authoritative) + if is_browser_shortcut_enabled is not None: + pulumi.set(__self__, "is_browser_shortcut_enabled", is_browser_shortcut_enabled) + if is_visible is not None: + pulumi.set(__self__, "is_visible", is_visible) + if name is not None: + pulumi.set(__self__, "name", name) + if protocols is not None: + pulumi.set(__self__, "protocols", protocols) + if remote_network_id is not None: + pulumi.set(__self__, "remote_network_id", remote_network_id) + + @property + @pulumi.getter + def access(self) -> Optional[pulumi.Input['TwingateResourceAccessArgs']]: + """ + Restrict access to certain groups or service accounts + """ + return pulumi.get(self, "access") + + @access.setter + def access(self, value: Optional[pulumi.Input['TwingateResourceAccessArgs']]): + pulumi.set(self, "access", value) + + @property + @pulumi.getter + def address(self) -> Optional[pulumi.Input[str]]: + """ + The Resource's IP/CIDR or FQDN/DNS zone + """ + return pulumi.get(self, "address") + + @address.setter + def address(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "address", value) + + @property + @pulumi.getter + def alias(self) -> Optional[pulumi.Input[str]]: + """ + Set a DNS alias address for the Resource. Must be a DNS-valid name string. + """ + return pulumi.get(self, "alias") + + @alias.setter + def alias(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "alias", value) + + @property + @pulumi.getter(name="isAuthoritative") + def is_authoritative(self) -> Optional[pulumi.Input[bool]]: + """ + Determines whether assignments in the access block will override any existing assignments. Default is `true`. If set to + `false`, assignments made outside of Terraform will be ignored. + """ + return pulumi.get(self, "is_authoritative") + + @is_authoritative.setter + def is_authoritative(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "is_authoritative", value) + + @property + @pulumi.getter(name="isBrowserShortcutEnabled") + def is_browser_shortcut_enabled(self) -> Optional[pulumi.Input[bool]]: + """ + Controls whether an "Open in Browser" shortcut will be shown for this Resource in the Twingate Client. + """ + return pulumi.get(self, "is_browser_shortcut_enabled") + + @is_browser_shortcut_enabled.setter + def is_browser_shortcut_enabled(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "is_browser_shortcut_enabled", value) + + @property + @pulumi.getter(name="isVisible") + def is_visible(self) -> Optional[pulumi.Input[bool]]: + """ + Controls whether this Resource will be visible in the main Resource list in the Twingate Client. + """ + return pulumi.get(self, "is_visible") + + @is_visible.setter + def is_visible(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "is_visible", value) + + @property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[str]]: + """ + The name of the Resource + """ + return pulumi.get(self, "name") + + @name.setter + def name(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "name", value) + + @property + @pulumi.getter + def protocols(self) -> Optional[pulumi.Input['TwingateResourceProtocolsArgs']]: + """ + Restrict access to certain protocols and ports. By default or when this argument is not defined, there is no restriction, and all protocols and ports are allowed. + """ + return pulumi.get(self, "protocols") + + @protocols.setter + def protocols(self, value: Optional[pulumi.Input['TwingateResourceProtocolsArgs']]): + pulumi.set(self, "protocols", value) + + @property + @pulumi.getter(name="remoteNetworkId") + def remote_network_id(self) -> Optional[pulumi.Input[str]]: + """ + Remote Network ID where the Resource lives + """ + return pulumi.get(self, "remote_network_id") + + @remote_network_id.setter + def remote_network_id(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "remote_network_id", value) + + +class TwingateResource(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + access: Optional[pulumi.Input[pulumi.InputType['TwingateResourceAccessArgs']]] = None, + address: Optional[pulumi.Input[str]] = None, + alias: Optional[pulumi.Input[str]] = None, + is_authoritative: Optional[pulumi.Input[bool]] = None, + is_browser_shortcut_enabled: Optional[pulumi.Input[bool]] = None, + is_visible: Optional[pulumi.Input[bool]] = None, + name: Optional[pulumi.Input[str]] = None, + protocols: Optional[pulumi.Input[pulumi.InputType['TwingateResourceProtocolsArgs']]] = None, + remote_network_id: Optional[pulumi.Input[str]] = None, + __props__=None): + """ + Resources in Twingate represent servers on the private network that clients can connect to. Resources can be defined by IP, CIDR range, FQDN, or DNS zone. For more information, see the Twingate [documentation](https://docs.twingate.com/docs/resources-and-access-nodes). + + ## Example Usage + + ```python + import pulumi + import pulumi_twingate as twingate + + aws_network = twingate.TwingateRemoteNetwork("awsNetwork") + aws = twingate.TwingateGroup("aws") + github_actions_prod = twingate.TwingateServiceAccount("githubActionsProd") + resource = twingate.TwingateResource("resource", + address="internal.int", + remote_network_id=aws_network.id, + protocols=twingate.TwingateResourceProtocolsArgs( + allow_icmp=True, + tcp=twingate.TwingateResourceProtocolsTcpArgs( + policy="RESTRICTED", + ports=[ + "80", + "82-83", + ], + ), + udp=twingate.TwingateResourceProtocolsUdpArgs( + policy="ALLOW_ALL", + ), + ), + access=twingate.TwingateResourceAccessArgs( + group_ids=[aws.id], + service_account_ids=[github_actions_prod.id], + )) + ``` + + ## Import + + ```sh + $ pulumi import twingate:index/twingateResource:TwingateResource resource UmVzb3VyY2U6MzQwNDQ3 + ``` + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[pulumi.InputType['TwingateResourceAccessArgs']] access: Restrict access to certain groups or service accounts + :param pulumi.Input[str] address: The Resource's IP/CIDR or FQDN/DNS zone + :param pulumi.Input[str] alias: Set a DNS alias address for the Resource. Must be a DNS-valid name string. + :param pulumi.Input[bool] is_authoritative: Determines whether assignments in the access block will override any existing assignments. Default is `true`. If set to + `false`, assignments made outside of Terraform will be ignored. + :param pulumi.Input[bool] is_browser_shortcut_enabled: Controls whether an "Open in Browser" shortcut will be shown for this Resource in the Twingate Client. + :param pulumi.Input[bool] is_visible: Controls whether this Resource will be visible in the main Resource list in the Twingate Client. + :param pulumi.Input[str] name: The name of the Resource + :param pulumi.Input[pulumi.InputType['TwingateResourceProtocolsArgs']] protocols: Restrict access to certain protocols and ports. By default or when this argument is not defined, there is no restriction, and all protocols and ports are allowed. + :param pulumi.Input[str] remote_network_id: Remote Network ID where the Resource lives + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: TwingateResourceArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + Resources in Twingate represent servers on the private network that clients can connect to. Resources can be defined by IP, CIDR range, FQDN, or DNS zone. For more information, see the Twingate [documentation](https://docs.twingate.com/docs/resources-and-access-nodes). + + ## Example Usage + + ```python + import pulumi + import pulumi_twingate as twingate + + aws_network = twingate.TwingateRemoteNetwork("awsNetwork") + aws = twingate.TwingateGroup("aws") + github_actions_prod = twingate.TwingateServiceAccount("githubActionsProd") + resource = twingate.TwingateResource("resource", + address="internal.int", + remote_network_id=aws_network.id, + protocols=twingate.TwingateResourceProtocolsArgs( + allow_icmp=True, + tcp=twingate.TwingateResourceProtocolsTcpArgs( + policy="RESTRICTED", + ports=[ + "80", + "82-83", + ], + ), + udp=twingate.TwingateResourceProtocolsUdpArgs( + policy="ALLOW_ALL", + ), + ), + access=twingate.TwingateResourceAccessArgs( + group_ids=[aws.id], + service_account_ids=[github_actions_prod.id], + )) + ``` + + ## Import + + ```sh + $ pulumi import twingate:index/twingateResource:TwingateResource resource UmVzb3VyY2U6MzQwNDQ3 + ``` + + :param str resource_name: The name of the resource. + :param TwingateResourceArgs 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(TwingateResourceArgs, 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, + access: Optional[pulumi.Input[pulumi.InputType['TwingateResourceAccessArgs']]] = None, + address: Optional[pulumi.Input[str]] = None, + alias: Optional[pulumi.Input[str]] = None, + is_authoritative: Optional[pulumi.Input[bool]] = None, + is_browser_shortcut_enabled: Optional[pulumi.Input[bool]] = None, + is_visible: Optional[pulumi.Input[bool]] = None, + name: Optional[pulumi.Input[str]] = None, + protocols: Optional[pulumi.Input[pulumi.InputType['TwingateResourceProtocolsArgs']]] = None, + remote_network_id: Optional[pulumi.Input[str]] = None, + __props__=None): + opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts) + if not isinstance(opts, pulumi.ResourceOptions): + raise TypeError('Expected resource options to be a ResourceOptions instance') + 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__ = TwingateResourceArgs.__new__(TwingateResourceArgs) + + __props__.__dict__["access"] = access + if address is None and not opts.urn: + raise TypeError("Missing required property 'address'") + __props__.__dict__["address"] = address + __props__.__dict__["alias"] = alias + __props__.__dict__["is_authoritative"] = is_authoritative + __props__.__dict__["is_browser_shortcut_enabled"] = is_browser_shortcut_enabled + __props__.__dict__["is_visible"] = is_visible + __props__.__dict__["name"] = name + __props__.__dict__["protocols"] = protocols + if remote_network_id is None and not opts.urn: + raise TypeError("Missing required property 'remote_network_id'") + __props__.__dict__["remote_network_id"] = remote_network_id + super(TwingateResource, __self__).__init__( + 'twingate:index/twingateResource:TwingateResource', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + access: Optional[pulumi.Input[pulumi.InputType['TwingateResourceAccessArgs']]] = None, + address: Optional[pulumi.Input[str]] = None, + alias: Optional[pulumi.Input[str]] = None, + is_authoritative: Optional[pulumi.Input[bool]] = None, + is_browser_shortcut_enabled: Optional[pulumi.Input[bool]] = None, + is_visible: Optional[pulumi.Input[bool]] = None, + name: Optional[pulumi.Input[str]] = None, + protocols: Optional[pulumi.Input[pulumi.InputType['TwingateResourceProtocolsArgs']]] = None, + remote_network_id: Optional[pulumi.Input[str]] = None) -> 'TwingateResource': + """ + Get an existing TwingateResource 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[pulumi.InputType['TwingateResourceAccessArgs']] access: Restrict access to certain groups or service accounts + :param pulumi.Input[str] address: The Resource's IP/CIDR or FQDN/DNS zone + :param pulumi.Input[str] alias: Set a DNS alias address for the Resource. Must be a DNS-valid name string. + :param pulumi.Input[bool] is_authoritative: Determines whether assignments in the access block will override any existing assignments. Default is `true`. If set to + `false`, assignments made outside of Terraform will be ignored. + :param pulumi.Input[bool] is_browser_shortcut_enabled: Controls whether an "Open in Browser" shortcut will be shown for this Resource in the Twingate Client. + :param pulumi.Input[bool] is_visible: Controls whether this Resource will be visible in the main Resource list in the Twingate Client. + :param pulumi.Input[str] name: The name of the Resource + :param pulumi.Input[pulumi.InputType['TwingateResourceProtocolsArgs']] protocols: Restrict access to certain protocols and ports. By default or when this argument is not defined, there is no restriction, and all protocols and ports are allowed. + :param pulumi.Input[str] remote_network_id: Remote Network ID where the Resource lives + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _TwingateResourceState.__new__(_TwingateResourceState) + + __props__.__dict__["access"] = access + __props__.__dict__["address"] = address + __props__.__dict__["alias"] = alias + __props__.__dict__["is_authoritative"] = is_authoritative + __props__.__dict__["is_browser_shortcut_enabled"] = is_browser_shortcut_enabled + __props__.__dict__["is_visible"] = is_visible + __props__.__dict__["name"] = name + __props__.__dict__["protocols"] = protocols + __props__.__dict__["remote_network_id"] = remote_network_id + return TwingateResource(resource_name, opts=opts, __props__=__props__) + + @property + @pulumi.getter + def access(self) -> pulumi.Output[Optional['outputs.TwingateResourceAccess']]: + """ + Restrict access to certain groups or service accounts + """ + return pulumi.get(self, "access") + + @property + @pulumi.getter + def address(self) -> pulumi.Output[str]: + """ + The Resource's IP/CIDR or FQDN/DNS zone + """ + return pulumi.get(self, "address") + + @property + @pulumi.getter + def alias(self) -> pulumi.Output[Optional[str]]: + """ + Set a DNS alias address for the Resource. Must be a DNS-valid name string. + """ + return pulumi.get(self, "alias") + + @property + @pulumi.getter(name="isAuthoritative") + def is_authoritative(self) -> pulumi.Output[bool]: + """ + Determines whether assignments in the access block will override any existing assignments. Default is `true`. If set to + `false`, assignments made outside of Terraform will be ignored. + """ + return pulumi.get(self, "is_authoritative") + + @property + @pulumi.getter(name="isBrowserShortcutEnabled") + def is_browser_shortcut_enabled(self) -> pulumi.Output[bool]: + """ + Controls whether an "Open in Browser" shortcut will be shown for this Resource in the Twingate Client. + """ + return pulumi.get(self, "is_browser_shortcut_enabled") + + @property + @pulumi.getter(name="isVisible") + def is_visible(self) -> pulumi.Output[bool]: + """ + Controls whether this Resource will be visible in the main Resource list in the Twingate Client. + """ + return pulumi.get(self, "is_visible") + + @property + @pulumi.getter + def name(self) -> pulumi.Output[str]: + """ + The name of the Resource + """ + return pulumi.get(self, "name") + + @property + @pulumi.getter + def protocols(self) -> pulumi.Output[Optional['outputs.TwingateResourceProtocols']]: + """ + Restrict access to certain protocols and ports. By default or when this argument is not defined, there is no restriction, and all protocols and ports are allowed. + """ + return pulumi.get(self, "protocols") + + @property + @pulumi.getter(name="remoteNetworkId") + def remote_network_id(self) -> pulumi.Output[str]: + """ + Remote Network ID where the Resource lives + """ + return pulumi.get(self, "remote_network_id") + diff --git a/sdk/python/pulumi_twingate/twingate_service_account.py b/sdk/python/pulumi_twingate/twingate_service_account.py new file mode 100644 index 0000000..4df4973 --- /dev/null +++ b/sdk/python/pulumi_twingate/twingate_service_account.py @@ -0,0 +1,163 @@ +# 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 copy +import warnings +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +from . import _utilities + +__all__ = ['TwingateServiceAccountArgs', 'TwingateServiceAccount'] + +@pulumi.input_type +class TwingateServiceAccountArgs: + def __init__(__self__, *, + name: Optional[pulumi.Input[str]] = None): + """ + The set of arguments for constructing a TwingateServiceAccount resource. + :param pulumi.Input[str] name: The name of the Service Account in Twingate + """ + if name is not None: + pulumi.set(__self__, "name", name) + + @property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[str]]: + """ + The name of the Service Account in Twingate + """ + return pulumi.get(self, "name") + + @name.setter + def name(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "name", value) + + +@pulumi.input_type +class _TwingateServiceAccountState: + def __init__(__self__, *, + name: Optional[pulumi.Input[str]] = None): + """ + Input properties used for looking up and filtering TwingateServiceAccount resources. + :param pulumi.Input[str] name: The name of the Service Account in Twingate + """ + if name is not None: + pulumi.set(__self__, "name", name) + + @property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[str]]: + """ + The name of the Service Account in Twingate + """ + return pulumi.get(self, "name") + + @name.setter + def name(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "name", value) + + +class TwingateServiceAccount(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + name: Optional[pulumi.Input[str]] = None, + __props__=None): + """ + Service Accounts offer a way to provide programmatic, centrally-controlled, and consistent access controls. + + ## Example Usage + + ```python + import pulumi + import pulumi_twingate as twingate + + github_actions_prod = twingate.TwingateServiceAccount("githubActionsProd") + ``` + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[str] name: The name of the Service Account in Twingate + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: Optional[TwingateServiceAccountArgs] = None, + opts: Optional[pulumi.ResourceOptions] = None): + """ + Service Accounts offer a way to provide programmatic, centrally-controlled, and consistent access controls. + + ## Example Usage + + ```python + import pulumi + import pulumi_twingate as twingate + + github_actions_prod = twingate.TwingateServiceAccount("githubActionsProd") + ``` + + :param str resource_name: The name of the resource. + :param TwingateServiceAccountArgs 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(TwingateServiceAccountArgs, 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, + name: Optional[pulumi.Input[str]] = None, + __props__=None): + opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts) + if not isinstance(opts, pulumi.ResourceOptions): + raise TypeError('Expected resource options to be a ResourceOptions instance') + 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__ = TwingateServiceAccountArgs.__new__(TwingateServiceAccountArgs) + + __props__.__dict__["name"] = name + super(TwingateServiceAccount, __self__).__init__( + 'twingate:index/twingateServiceAccount:TwingateServiceAccount', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + name: Optional[pulumi.Input[str]] = None) -> 'TwingateServiceAccount': + """ + Get an existing TwingateServiceAccount 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] name: The name of the Service Account in Twingate + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _TwingateServiceAccountState.__new__(_TwingateServiceAccountState) + + __props__.__dict__["name"] = name + return TwingateServiceAccount(resource_name, opts=opts, __props__=__props__) + + @property + @pulumi.getter + def name(self) -> pulumi.Output[str]: + """ + The name of the Service Account in Twingate + """ + return pulumi.get(self, "name") + diff --git a/sdk/python/pulumi_twingate/twingate_service_account_key.py b/sdk/python/pulumi_twingate/twingate_service_account_key.py new file mode 100644 index 0000000..89f7613 --- /dev/null +++ b/sdk/python/pulumi_twingate/twingate_service_account_key.py @@ -0,0 +1,243 @@ +# 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 copy +import warnings +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +from . import _utilities + +__all__ = ['TwingateServiceAccountKeyArgs', 'TwingateServiceAccountKey'] + +@pulumi.input_type +class TwingateServiceAccountKeyArgs: + def __init__(__self__, *, + service_account_id: pulumi.Input[str], + name: Optional[pulumi.Input[str]] = None): + """ + The set of arguments for constructing a TwingateServiceAccountKey resource. + :param pulumi.Input[str] service_account_id: The id of the Service Account + :param pulumi.Input[str] name: The name of the Service Key + """ + pulumi.set(__self__, "service_account_id", service_account_id) + if name is not None: + pulumi.set(__self__, "name", name) + + @property + @pulumi.getter(name="serviceAccountId") + def service_account_id(self) -> pulumi.Input[str]: + """ + The id of the Service Account + """ + return pulumi.get(self, "service_account_id") + + @service_account_id.setter + def service_account_id(self, value: pulumi.Input[str]): + pulumi.set(self, "service_account_id", value) + + @property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[str]]: + """ + The name of the Service Key + """ + return pulumi.get(self, "name") + + @name.setter + def name(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "name", value) + + +@pulumi.input_type +class _TwingateServiceAccountKeyState: + def __init__(__self__, *, + name: Optional[pulumi.Input[str]] = None, + service_account_id: Optional[pulumi.Input[str]] = None, + token: Optional[pulumi.Input[str]] = None): + """ + Input properties used for looking up and filtering TwingateServiceAccountKey resources. + :param pulumi.Input[str] name: The name of the Service Key + :param pulumi.Input[str] service_account_id: The id of the Service Account + :param pulumi.Input[str] token: Autogenerated Service Key token. Used to configure a Twingate Client running in headless mode. + """ + if name is not None: + pulumi.set(__self__, "name", name) + if service_account_id is not None: + pulumi.set(__self__, "service_account_id", service_account_id) + if token is not None: + pulumi.set(__self__, "token", token) + + @property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[str]]: + """ + The name of the Service Key + """ + return pulumi.get(self, "name") + + @name.setter + def name(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "name", value) + + @property + @pulumi.getter(name="serviceAccountId") + def service_account_id(self) -> Optional[pulumi.Input[str]]: + """ + The id of the Service Account + """ + return pulumi.get(self, "service_account_id") + + @service_account_id.setter + def service_account_id(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "service_account_id", value) + + @property + @pulumi.getter + def token(self) -> Optional[pulumi.Input[str]]: + """ + Autogenerated Service Key token. Used to configure a Twingate Client running in headless mode. + """ + return pulumi.get(self, "token") + + @token.setter + def token(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "token", value) + + +class TwingateServiceAccountKey(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + name: Optional[pulumi.Input[str]] = None, + service_account_id: Optional[pulumi.Input[str]] = None, + __props__=None): + """ + A Service Key authorizes access to all Resources assigned to a Service Account. + + ## Example Usage + + ```python + import pulumi + import pulumi_twingate as twingate + + github_actions_prod = twingate.TwingateServiceAccount("githubActionsProd") + github_key = twingate.TwingateServiceAccountKey("githubKey", service_account_id=github_actions_prod.id) + ``` + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[str] name: The name of the Service Key + :param pulumi.Input[str] service_account_id: The id of the Service Account + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: TwingateServiceAccountKeyArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + A Service Key authorizes access to all Resources assigned to a Service Account. + + ## Example Usage + + ```python + import pulumi + import pulumi_twingate as twingate + + github_actions_prod = twingate.TwingateServiceAccount("githubActionsProd") + github_key = twingate.TwingateServiceAccountKey("githubKey", service_account_id=github_actions_prod.id) + ``` + + :param str resource_name: The name of the resource. + :param TwingateServiceAccountKeyArgs 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(TwingateServiceAccountKeyArgs, 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, + name: Optional[pulumi.Input[str]] = None, + service_account_id: Optional[pulumi.Input[str]] = None, + __props__=None): + opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts) + if not isinstance(opts, pulumi.ResourceOptions): + raise TypeError('Expected resource options to be a ResourceOptions instance') + 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__ = TwingateServiceAccountKeyArgs.__new__(TwingateServiceAccountKeyArgs) + + __props__.__dict__["name"] = name + if service_account_id is None and not opts.urn: + raise TypeError("Missing required property 'service_account_id'") + __props__.__dict__["service_account_id"] = service_account_id + __props__.__dict__["token"] = None + secret_opts = pulumi.ResourceOptions(additional_secret_outputs=["token"]) + opts = pulumi.ResourceOptions.merge(opts, secret_opts) + super(TwingateServiceAccountKey, __self__).__init__( + 'twingate:index/twingateServiceAccountKey:TwingateServiceAccountKey', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + name: Optional[pulumi.Input[str]] = None, + service_account_id: Optional[pulumi.Input[str]] = None, + token: Optional[pulumi.Input[str]] = None) -> 'TwingateServiceAccountKey': + """ + Get an existing TwingateServiceAccountKey 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] name: The name of the Service Key + :param pulumi.Input[str] service_account_id: The id of the Service Account + :param pulumi.Input[str] token: Autogenerated Service Key token. Used to configure a Twingate Client running in headless mode. + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _TwingateServiceAccountKeyState.__new__(_TwingateServiceAccountKeyState) + + __props__.__dict__["name"] = name + __props__.__dict__["service_account_id"] = service_account_id + __props__.__dict__["token"] = token + return TwingateServiceAccountKey(resource_name, opts=opts, __props__=__props__) + + @property + @pulumi.getter + def name(self) -> pulumi.Output[str]: + """ + The name of the Service Key + """ + return pulumi.get(self, "name") + + @property + @pulumi.getter(name="serviceAccountId") + def service_account_id(self) -> pulumi.Output[str]: + """ + The id of the Service Account + """ + return pulumi.get(self, "service_account_id") + + @property + @pulumi.getter + def token(self) -> pulumi.Output[str]: + """ + Autogenerated Service Key token. Used to configure a Twingate Client running in headless mode. + """ + return pulumi.get(self, "token") + diff --git a/sdk/python/pulumi_twingate/twingate_user.py b/sdk/python/pulumi_twingate/twingate_user.py new file mode 100644 index 0000000..40d359f --- /dev/null +++ b/sdk/python/pulumi_twingate/twingate_user.py @@ -0,0 +1,437 @@ +# 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 copy +import warnings +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +from . import _utilities + +__all__ = ['TwingateUserArgs', 'TwingateUser'] + +@pulumi.input_type +class TwingateUserArgs: + def __init__(__self__, *, + email: pulumi.Input[str], + first_name: Optional[pulumi.Input[str]] = None, + is_active: Optional[pulumi.Input[bool]] = None, + last_name: Optional[pulumi.Input[str]] = None, + role: Optional[pulumi.Input[str]] = None, + send_invite: Optional[pulumi.Input[bool]] = None): + """ + The set of arguments for constructing a TwingateUser resource. + :param pulumi.Input[str] email: The User's email address + :param pulumi.Input[str] first_name: The User's first name + :param pulumi.Input[bool] is_active: Determines whether the User is active or not. Inactive users will be not able to sign in. + :param pulumi.Input[str] last_name: The User's last name + :param pulumi.Input[str] role: Determines the User's role. Either ADMIN, DEVOPS, SUPPORT or MEMBER. + :param pulumi.Input[bool] send_invite: Determines whether to send an email invitation to the User. True by default. + """ + pulumi.set(__self__, "email", email) + if first_name is not None: + pulumi.set(__self__, "first_name", first_name) + if is_active is not None: + pulumi.set(__self__, "is_active", is_active) + if last_name is not None: + pulumi.set(__self__, "last_name", last_name) + if role is not None: + pulumi.set(__self__, "role", role) + if send_invite is not None: + pulumi.set(__self__, "send_invite", send_invite) + + @property + @pulumi.getter + def email(self) -> pulumi.Input[str]: + """ + The User's email address + """ + return pulumi.get(self, "email") + + @email.setter + def email(self, value: pulumi.Input[str]): + pulumi.set(self, "email", value) + + @property + @pulumi.getter(name="firstName") + def first_name(self) -> Optional[pulumi.Input[str]]: + """ + The User's first name + """ + return pulumi.get(self, "first_name") + + @first_name.setter + def first_name(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "first_name", value) + + @property + @pulumi.getter(name="isActive") + def is_active(self) -> Optional[pulumi.Input[bool]]: + """ + Determines whether the User is active or not. Inactive users will be not able to sign in. + """ + return pulumi.get(self, "is_active") + + @is_active.setter + def is_active(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "is_active", value) + + @property + @pulumi.getter(name="lastName") + def last_name(self) -> Optional[pulumi.Input[str]]: + """ + The User's last name + """ + return pulumi.get(self, "last_name") + + @last_name.setter + def last_name(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "last_name", value) + + @property + @pulumi.getter + def role(self) -> Optional[pulumi.Input[str]]: + """ + Determines the User's role. Either ADMIN, DEVOPS, SUPPORT or MEMBER. + """ + return pulumi.get(self, "role") + + @role.setter + def role(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "role", value) + + @property + @pulumi.getter(name="sendInvite") + def send_invite(self) -> Optional[pulumi.Input[bool]]: + """ + Determines whether to send an email invitation to the User. True by default. + """ + return pulumi.get(self, "send_invite") + + @send_invite.setter + def send_invite(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "send_invite", value) + + +@pulumi.input_type +class _TwingateUserState: + def __init__(__self__, *, + email: Optional[pulumi.Input[str]] = None, + first_name: Optional[pulumi.Input[str]] = None, + is_active: Optional[pulumi.Input[bool]] = None, + last_name: Optional[pulumi.Input[str]] = None, + role: Optional[pulumi.Input[str]] = None, + send_invite: Optional[pulumi.Input[bool]] = None, + type: Optional[pulumi.Input[str]] = None): + """ + Input properties used for looking up and filtering TwingateUser resources. + :param pulumi.Input[str] email: The User's email address + :param pulumi.Input[str] first_name: The User's first name + :param pulumi.Input[bool] is_active: Determines whether the User is active or not. Inactive users will be not able to sign in. + :param pulumi.Input[str] last_name: The User's last name + :param pulumi.Input[str] role: Determines the User's role. Either ADMIN, DEVOPS, SUPPORT or MEMBER. + :param pulumi.Input[bool] send_invite: Determines whether to send an email invitation to the User. True by default. + :param pulumi.Input[str] type: Indicates the User's type. Either MANUAL or SYNCED. + """ + if email is not None: + pulumi.set(__self__, "email", email) + if first_name is not None: + pulumi.set(__self__, "first_name", first_name) + if is_active is not None: + pulumi.set(__self__, "is_active", is_active) + if last_name is not None: + pulumi.set(__self__, "last_name", last_name) + if role is not None: + pulumi.set(__self__, "role", role) + if send_invite is not None: + pulumi.set(__self__, "send_invite", send_invite) + if type is not None: + pulumi.set(__self__, "type", type) + + @property + @pulumi.getter + def email(self) -> Optional[pulumi.Input[str]]: + """ + The User's email address + """ + return pulumi.get(self, "email") + + @email.setter + def email(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "email", value) + + @property + @pulumi.getter(name="firstName") + def first_name(self) -> Optional[pulumi.Input[str]]: + """ + The User's first name + """ + return pulumi.get(self, "first_name") + + @first_name.setter + def first_name(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "first_name", value) + + @property + @pulumi.getter(name="isActive") + def is_active(self) -> Optional[pulumi.Input[bool]]: + """ + Determines whether the User is active or not. Inactive users will be not able to sign in. + """ + return pulumi.get(self, "is_active") + + @is_active.setter + def is_active(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "is_active", value) + + @property + @pulumi.getter(name="lastName") + def last_name(self) -> Optional[pulumi.Input[str]]: + """ + The User's last name + """ + return pulumi.get(self, "last_name") + + @last_name.setter + def last_name(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "last_name", value) + + @property + @pulumi.getter + def role(self) -> Optional[pulumi.Input[str]]: + """ + Determines the User's role. Either ADMIN, DEVOPS, SUPPORT or MEMBER. + """ + return pulumi.get(self, "role") + + @role.setter + def role(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "role", value) + + @property + @pulumi.getter(name="sendInvite") + def send_invite(self) -> Optional[pulumi.Input[bool]]: + """ + Determines whether to send an email invitation to the User. True by default. + """ + return pulumi.get(self, "send_invite") + + @send_invite.setter + def send_invite(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "send_invite", value) + + @property + @pulumi.getter + def type(self) -> Optional[pulumi.Input[str]]: + """ + Indicates the User's type. Either MANUAL or SYNCED. + """ + return pulumi.get(self, "type") + + @type.setter + def type(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "type", value) + + +class TwingateUser(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + email: Optional[pulumi.Input[str]] = None, + first_name: Optional[pulumi.Input[str]] = None, + is_active: Optional[pulumi.Input[bool]] = None, + last_name: Optional[pulumi.Input[str]] = None, + role: Optional[pulumi.Input[str]] = None, + send_invite: Optional[pulumi.Input[bool]] = None, + __props__=None): + """ + Users provides different levels of write capabilities across the Twingate Admin Console. For more information, see Twingate's [documentation](https://www.twingate.com/docs/users). + + ## Example Usage + + ```python + import pulumi + import pulumi_twingate as twingate + + user = twingate.TwingateUser("user", + email="sample@company.com", + first_name="Twin", + last_name="Gate", + role="DEVOPS", + send_invite=True) + ``` + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[str] email: The User's email address + :param pulumi.Input[str] first_name: The User's first name + :param pulumi.Input[bool] is_active: Determines whether the User is active or not. Inactive users will be not able to sign in. + :param pulumi.Input[str] last_name: The User's last name + :param pulumi.Input[str] role: Determines the User's role. Either ADMIN, DEVOPS, SUPPORT or MEMBER. + :param pulumi.Input[bool] send_invite: Determines whether to send an email invitation to the User. True by default. + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: TwingateUserArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + Users provides different levels of write capabilities across the Twingate Admin Console. For more information, see Twingate's [documentation](https://www.twingate.com/docs/users). + + ## Example Usage + + ```python + import pulumi + import pulumi_twingate as twingate + + user = twingate.TwingateUser("user", + email="sample@company.com", + first_name="Twin", + last_name="Gate", + role="DEVOPS", + send_invite=True) + ``` + + :param str resource_name: The name of the resource. + :param TwingateUserArgs 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(TwingateUserArgs, 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, + email: Optional[pulumi.Input[str]] = None, + first_name: Optional[pulumi.Input[str]] = None, + is_active: Optional[pulumi.Input[bool]] = None, + last_name: Optional[pulumi.Input[str]] = None, + role: Optional[pulumi.Input[str]] = None, + send_invite: Optional[pulumi.Input[bool]] = None, + __props__=None): + opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts) + if not isinstance(opts, pulumi.ResourceOptions): + raise TypeError('Expected resource options to be a ResourceOptions instance') + 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__ = TwingateUserArgs.__new__(TwingateUserArgs) + + if email is None and not opts.urn: + raise TypeError("Missing required property 'email'") + __props__.__dict__["email"] = email + __props__.__dict__["first_name"] = first_name + __props__.__dict__["is_active"] = is_active + __props__.__dict__["last_name"] = last_name + __props__.__dict__["role"] = role + __props__.__dict__["send_invite"] = send_invite + __props__.__dict__["type"] = None + super(TwingateUser, __self__).__init__( + 'twingate:index/twingateUser:TwingateUser', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + email: Optional[pulumi.Input[str]] = None, + first_name: Optional[pulumi.Input[str]] = None, + is_active: Optional[pulumi.Input[bool]] = None, + last_name: Optional[pulumi.Input[str]] = None, + role: Optional[pulumi.Input[str]] = None, + send_invite: Optional[pulumi.Input[bool]] = None, + type: Optional[pulumi.Input[str]] = None) -> 'TwingateUser': + """ + Get an existing TwingateUser 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] email: The User's email address + :param pulumi.Input[str] first_name: The User's first name + :param pulumi.Input[bool] is_active: Determines whether the User is active or not. Inactive users will be not able to sign in. + :param pulumi.Input[str] last_name: The User's last name + :param pulumi.Input[str] role: Determines the User's role. Either ADMIN, DEVOPS, SUPPORT or MEMBER. + :param pulumi.Input[bool] send_invite: Determines whether to send an email invitation to the User. True by default. + :param pulumi.Input[str] type: Indicates the User's type. Either MANUAL or SYNCED. + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _TwingateUserState.__new__(_TwingateUserState) + + __props__.__dict__["email"] = email + __props__.__dict__["first_name"] = first_name + __props__.__dict__["is_active"] = is_active + __props__.__dict__["last_name"] = last_name + __props__.__dict__["role"] = role + __props__.__dict__["send_invite"] = send_invite + __props__.__dict__["type"] = type + return TwingateUser(resource_name, opts=opts, __props__=__props__) + + @property + @pulumi.getter + def email(self) -> pulumi.Output[str]: + """ + The User's email address + """ + return pulumi.get(self, "email") + + @property + @pulumi.getter(name="firstName") + def first_name(self) -> pulumi.Output[str]: + """ + The User's first name + """ + return pulumi.get(self, "first_name") + + @property + @pulumi.getter(name="isActive") + def is_active(self) -> pulumi.Output[bool]: + """ + Determines whether the User is active or not. Inactive users will be not able to sign in. + """ + return pulumi.get(self, "is_active") + + @property + @pulumi.getter(name="lastName") + def last_name(self) -> pulumi.Output[str]: + """ + The User's last name + """ + return pulumi.get(self, "last_name") + + @property + @pulumi.getter + def role(self) -> pulumi.Output[str]: + """ + Determines the User's role. Either ADMIN, DEVOPS, SUPPORT or MEMBER. + """ + return pulumi.get(self, "role") + + @property + @pulumi.getter(name="sendInvite") + def send_invite(self) -> pulumi.Output[bool]: + """ + Determines whether to send an email invitation to the User. True by default. + """ + return pulumi.get(self, "send_invite") + + @property + @pulumi.getter + def type(self) -> pulumi.Output[str]: + """ + Indicates the User's type. Either MANUAL or SYNCED. + """ + return pulumi.get(self, "type") + diff --git a/sdk/python/setup.py b/sdk/python/setup.py new file mode 100644 index 0000000..eba0a55 --- /dev/null +++ b/sdk/python/setup.py @@ -0,0 +1,44 @@ +# 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" +def readme(): + try: + with open('README.md', encoding='utf-8') as f: + return f.read() + except FileNotFoundError: + return "twingate Pulumi Package - Development Version" + + +setup(name='pulumi_twingate', + python_requires='>=3.7', + version=VERSION, + description="A Pulumi package for creating and managing twingate cloud resources.", + long_description=readme(), + long_description_content_type='text/markdown', + keywords='pulumi twingate category/infrastructure', + url='https://www.twingate.com', + project_urls={ + 'Repository': 'https://github.com/Twingate/pulumi-twingate' + }, + license='Apache-2.0', + packages=find_packages(), + package_data={ + 'pulumi_twingate': [ + '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)