diff --git a/go.work b/go.work index 063cec3..6a98961 100644 --- a/go.work +++ b/go.work @@ -1,4 +1,4 @@ -go 1.21 +go 1.22 use ( ./provider diff --git a/provider/cmd/pulumi-resource-doppler/schema.json b/provider/cmd/pulumi-resource-doppler/schema.json index e477fbc..3c85bd3 100644 --- a/provider/cmd/pulumi-resource-doppler/schema.json +++ b/provider/cmd/pulumi-resource-doppler/schema.json @@ -73,6 +73,30 @@ "dopplerToken" ] }, + "types": { + "doppler:index/WebhookAuthentication:WebhookAuthentication": { + "properties": { + "password": { + "type": "string", + "secret": true + }, + "token": { + "type": "string", + "secret": true + }, + "type": { + "type": "string" + }, + "username": { + "type": "string" + } + }, + "type": "object", + "required": [ + "type" + ] + } + }, "provider": { "description": "The provider type for the doppler 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": { @@ -185,6 +209,10 @@ "type": "string", "description": "The name of the Doppler environment\n" }, + "personalConfigs": { + "type": "boolean", + "description": "Whether or not personal configs are enabled for the environment\n" + }, "project": { "type": "string", "description": "The name of the Doppler project where the environment is located\n" @@ -204,6 +232,10 @@ "type": "string", "description": "The name of the Doppler environment\n" }, + "personalConfigs": { + "type": "boolean", + "description": "Whether or not personal configs are enabled for the environment\n" + }, "project": { "type": "string", "description": "The name of the Doppler project where the environment is located\n", @@ -226,6 +258,10 @@ "type": "string", "description": "The name of the Doppler environment\n" }, + "personalConfigs": { + "type": "boolean", + "description": "Whether or not personal configs are enabled for the environment\n" + }, "project": { "type": "string", "description": "The name of the Doppler project where the environment is located\n", @@ -383,6 +419,78 @@ "type": "object" } }, + "doppler:index/projectRole:ProjectRole": { + "description": "Manage a Doppler project_role.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as doppler from \"@pulumiverse/doppler\";\n\nconst logViewer = new doppler.ProjectRole(\"log_viewer\", {\n name: \"Log Viewer\",\n permissions: [\"enclave_config_logs\"],\n});\n```\n```python\nimport pulumi\nimport pulumiverse_doppler as doppler\n\nlog_viewer = doppler.ProjectRole(\"log_viewer\",\n name=\"Log Viewer\",\n permissions=[\"enclave_config_logs\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Doppler = Pulumiverse.Doppler;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var logViewer = new Doppler.ProjectRole(\"log_viewer\", new()\n {\n Name = \"Log Viewer\",\n Permissions = new[]\n {\n \"enclave_config_logs\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-doppler/sdk/go/doppler\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := doppler.NewProjectRole(ctx, \"log_viewer\", \u0026doppler.ProjectRoleArgs{\n\t\t\tName: pulumi.String(\"Log Viewer\"),\n\t\t\tPermissions: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"enclave_config_logs\"),\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.doppler.ProjectRole;\nimport com.pulumi.doppler.ProjectRoleArgs;\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 logViewer = new ProjectRole(\"logViewer\", ProjectRoleArgs.builder()\n .name(\"Log Viewer\")\n .permissions(\"enclave_config_logs\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n logViewer:\n type: doppler:ProjectRole\n name: log_viewer\n properties:\n name: Log Viewer\n permissions:\n - enclave_config_logs\n```\n\u003c!--End PulumiCodeChooser --\u003e\n\n## Import\n\n```sh\n$ pulumi import doppler:index/projectRole:ProjectRole default \u003cproject-role-identifier\u003e\n```\n\n", + "properties": { + "identifier": { + "type": "string", + "description": "The role's unique identifier\n" + }, + "isCustomRole": { + "type": "boolean", + "description": "Whether or not the role is custom (as opposed to Doppler built-in)\n" + }, + "name": { + "type": "string", + "description": "The name of the Doppler project role\n" + }, + "permissions": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of [Doppler project permissions](https://docs.doppler.com/reference/project_roles-create)\n" + } + }, + "required": [ + "identifier", + "isCustomRole", + "name", + "permissions" + ], + "inputProperties": { + "name": { + "type": "string", + "description": "The name of the Doppler project role\n" + }, + "permissions": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of [Doppler project permissions](https://docs.doppler.com/reference/project_roles-create)\n" + } + }, + "requiredInputs": [ + "name", + "permissions" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering ProjectRole resources.\n", + "properties": { + "identifier": { + "type": "string", + "description": "The role's unique identifier\n" + }, + "isCustomRole": { + "type": "boolean", + "description": "Whether or not the role is custom (as opposed to Doppler built-in)\n" + }, + "name": { + "type": "string", + "description": "The name of the Doppler project role\n" + }, + "permissions": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of [Doppler project permissions](https://docs.doppler.com/reference/project_roles-create)\n" + } + }, + "type": "object" + } + }, "doppler:index/secret:Secret": { "description": "Manage a single Doppler secret in a config.\n\n## Import\n\n```sh\n$ pulumi import doppler:index/secret:Secret default \u003cproject-name\u003e.\u003cconfig-name\u003e.\u003csecret-name\u003e\n```\n\n", "properties": { @@ -559,6 +667,98 @@ "type": "object" } }, + "doppler:index/serviceAccountToken:ServiceAccountToken": { + "description": "Manage a Doppler service account token.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```yaml\nresources:\n builderCiToken:\n type: doppler:ServiceAccountToken\n name: builder_ci_token\n properties:\n serviceAccount: builder\n name: Builder CI Token\n expiresAt: 2024-05-30T11:00:00.000Z\n```\n\u003c!--End PulumiCodeChooser --\u003e\n", + "properties": { + "apiKey": { + "type": "string", + "description": "The api key used to authenticate the service account\n", + "secret": true + }, + "createdAt": { + "type": "string", + "description": "The datetime that the token was created.\n" + }, + "expiresAt": { + "type": "string", + "description": "The datetime at which the API token should expire. If not provided, the API token will remain valid indefinitely unless manually revoked\n" + }, + "name": { + "type": "string", + "description": "The display name of the API token\n" + }, + "serviceAccountSlug": { + "type": "string", + "description": "Slug of the service account\n" + }, + "slug": { + "type": "string", + "description": "Slug of the service account token\n" + } + }, + "required": [ + "apiKey", + "createdAt", + "name", + "serviceAccountSlug", + "slug" + ], + "inputProperties": { + "expiresAt": { + "type": "string", + "description": "The datetime at which the API token should expire. If not provided, the API token will remain valid indefinitely unless manually revoked\n", + "willReplaceOnChanges": true + }, + "name": { + "type": "string", + "description": "The display name of the API token\n", + "willReplaceOnChanges": true + }, + "serviceAccountSlug": { + "type": "string", + "description": "Slug of the service account\n", + "willReplaceOnChanges": true + } + }, + "requiredInputs": [ + "name", + "serviceAccountSlug" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering ServiceAccountToken resources.\n", + "properties": { + "apiKey": { + "type": "string", + "description": "The api key used to authenticate the service account\n", + "secret": true + }, + "createdAt": { + "type": "string", + "description": "The datetime that the token was created.\n" + }, + "expiresAt": { + "type": "string", + "description": "The datetime at which the API token should expire. If not provided, the API token will remain valid indefinitely unless manually revoked\n", + "willReplaceOnChanges": true + }, + "name": { + "type": "string", + "description": "The display name of the API token\n", + "willReplaceOnChanges": true + }, + "serviceAccountSlug": { + "type": "string", + "description": "Slug of the service account\n", + "willReplaceOnChanges": true + }, + "slug": { + "type": "string", + "description": "Slug of the service account token\n" + } + }, + "type": "object" + } + }, "doppler:index/serviceToken:ServiceToken": { "description": "Manage a Doppler service token.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as doppler from \"@pulumiverse/doppler\";\n\nconst backendCiToken = new doppler.ServiceToken(\"backend_ci_token\", {\n project: \"backend\",\n config: \"ci\",\n name: \"Builder Token\",\n access: \"read\",\n});\n```\n```python\nimport pulumi\nimport pulumiverse_doppler as doppler\n\nbackend_ci_token = doppler.ServiceToken(\"backend_ci_token\",\n project=\"backend\",\n config=\"ci\",\n name=\"Builder Token\",\n access=\"read\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Doppler = Pulumiverse.Doppler;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var backendCiToken = new Doppler.ServiceToken(\"backend_ci_token\", new()\n {\n Project = \"backend\",\n Config = \"ci\",\n Name = \"Builder Token\",\n Access = \"read\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-doppler/sdk/go/doppler\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := doppler.NewServiceToken(ctx, \"backend_ci_token\", \u0026doppler.ServiceTokenArgs{\n\t\t\tProject: pulumi.String(\"backend\"),\n\t\t\tConfig: pulumi.String(\"ci\"),\n\t\t\tName: pulumi.String(\"Builder Token\"),\n\t\t\tAccess: pulumi.String(\"read\"),\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.doppler.ServiceToken;\nimport com.pulumi.doppler.ServiceTokenArgs;\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 backendCiToken = new ServiceToken(\"backendCiToken\", ServiceTokenArgs.builder()\n .project(\"backend\")\n .config(\"ci\")\n .name(\"Builder Token\")\n .access(\"read\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n backendCiToken:\n type: doppler:ServiceToken\n name: backend_ci_token\n properties:\n project: backend\n config: ci\n name: Builder Token\n access: read\n```\n\u003c!--End PulumiCodeChooser --\u003e\n", "properties": { @@ -649,8 +849,138 @@ "type": "object" } }, + "doppler:index/webhook:Webhook": { + "properties": { + "authentication": { + "$ref": "#/types/doppler:index/WebhookAuthentication:WebhookAuthentication", + "description": "Authentication method used by the webhook\n" + }, + "enabled": { + "type": "boolean", + "description": "Whether the webhook is enabled or disabled. Default to true.\n" + }, + "enabledConfigs": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Configs this webhook will trigger for\n" + }, + "payload": { + "type": "string", + "description": "The webhook's payload as a JSON string. Leave empty to use the default webhook payload\n", + "secret": true + }, + "project": { + "type": "string", + "description": "The name of the Doppler project where the webhook is located\n" + }, + "secret": { + "type": "string", + "description": "Secret used for request signing\n", + "secret": true + }, + "slug": { + "type": "string", + "description": "The slug of the Webhook\n" + }, + "url": { + "type": "string", + "description": "The URL of the webhook endpoint\n" + } + }, + "required": [ + "project", + "slug", + "url" + ], + "inputProperties": { + "authentication": { + "$ref": "#/types/doppler:index/WebhookAuthentication:WebhookAuthentication", + "description": "Authentication method used by the webhook\n" + }, + "enabled": { + "type": "boolean", + "description": "Whether the webhook is enabled or disabled. Default to true.\n" + }, + "enabledConfigs": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Configs this webhook will trigger for\n" + }, + "payload": { + "type": "string", + "description": "The webhook's payload as a JSON string. Leave empty to use the default webhook payload\n", + "secret": true + }, + "project": { + "type": "string", + "description": "The name of the Doppler project where the webhook is located\n", + "willReplaceOnChanges": true + }, + "secret": { + "type": "string", + "description": "Secret used for request signing\n", + "secret": true + }, + "url": { + "type": "string", + "description": "The URL of the webhook endpoint\n" + } + }, + "requiredInputs": [ + "project", + "url" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering Webhook resources.\n", + "properties": { + "authentication": { + "$ref": "#/types/doppler:index/WebhookAuthentication:WebhookAuthentication", + "description": "Authentication method used by the webhook\n" + }, + "enabled": { + "type": "boolean", + "description": "Whether the webhook is enabled or disabled. Default to true.\n" + }, + "enabledConfigs": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Configs this webhook will trigger for\n" + }, + "payload": { + "type": "string", + "description": "The webhook's payload as a JSON string. Leave empty to use the default webhook payload\n", + "secret": true + }, + "project": { + "type": "string", + "description": "The name of the Doppler project where the webhook is located\n", + "willReplaceOnChanges": true + }, + "secret": { + "type": "string", + "description": "Secret used for request signing\n", + "secret": true + }, + "slug": { + "type": "string", + "description": "The slug of the Webhook\n" + }, + "url": { + "type": "string", + "description": "The URL of the webhook endpoint\n" + } + }, + "type": "object" + } + }, "doppler:integration/awsParameterStore:AwsParameterStore": { - "description": "Manage an AWS Parameter Store Doppler integration.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * as doppler from \"@pulumiverse/doppler\";\n\nconst dopplerParameterStore = new aws.iam.Role(\"doppler_parameter_store\", {\n name: \"doppler_parameter_store\",\n assumeRolePolicy: JSON.stringify({\n Version: \"2012-10-17\",\n Statement: [{\n Effect: \"Allow\",\n Action: \"sts:AssumeRole\",\n Principal: {\n AWS: \"arn:aws:iam::299900769157:user/doppler-integration-operator\",\n },\n Condition: {\n StringEquals: {\n \"sts:ExternalId\": \"\u003cYOUR_WORKPLACE_SLUG\u003e\",\n },\n },\n }],\n }),\n inlinePolicies: [{\n name: \"doppler_secret_manager\",\n policy: JSON.stringify({\n Version: \"2012-10-17\",\n Statement: [{\n Action: [\n \"ssm:PutParameter\",\n \"ssm:LabelParameterVersion\",\n \"ssm:DeleteParameter\",\n \"ssm:RemoveTagsFromResource\",\n \"ssm:GetParameterHistory\",\n \"ssm:AddTagsToResource\",\n \"ssm:GetParametersByPath\",\n \"ssm:GetParameters\",\n \"ssm:GetParameter\",\n \"ssm:DeleteParameters\",\n ],\n Effect: \"Allow\",\n Resource: \"*\",\n }],\n }),\n }],\n});\nconst prod = new doppler.integration.AwsParameterStore(\"prod\", {\n name: \"Production\",\n assumeRoleArn: dopplerParameterStore.arn,\n});\nconst backendProd = new doppler.secretssync.AwsParameterStore(\"backend_prod\", {\n integration: prod.id,\n project: \"backend\",\n config: \"prd\",\n region: \"us-east-1\",\n path: \"/backend/\",\n secureString: true,\n tags: {\n myTag: \"enabled\",\n },\n});\n```\n```python\nimport pulumi\nimport json\nimport pulumi_aws as aws\nimport pulumiverse_doppler as doppler\n\ndoppler_parameter_store = aws.iam.Role(\"doppler_parameter_store\",\n name=\"doppler_parameter_store\",\n assume_role_policy=json.dumps({\n \"Version\": \"2012-10-17\",\n \"Statement\": [{\n \"Effect\": \"Allow\",\n \"Action\": \"sts:AssumeRole\",\n \"Principal\": {\n \"AWS\": \"arn:aws:iam::299900769157:user/doppler-integration-operator\",\n },\n \"Condition\": {\n \"StringEquals\": {\n \"sts:ExternalId\": \"\u003cYOUR_WORKPLACE_SLUG\u003e\",\n },\n },\n }],\n }),\n inline_policies=[aws.iam.RoleInlinePolicyArgs(\n name=\"doppler_secret_manager\",\n policy=json.dumps({\n \"Version\": \"2012-10-17\",\n \"Statement\": [{\n \"Action\": [\n \"ssm:PutParameter\",\n \"ssm:LabelParameterVersion\",\n \"ssm:DeleteParameter\",\n \"ssm:RemoveTagsFromResource\",\n \"ssm:GetParameterHistory\",\n \"ssm:AddTagsToResource\",\n \"ssm:GetParametersByPath\",\n \"ssm:GetParameters\",\n \"ssm:GetParameter\",\n \"ssm:DeleteParameters\",\n ],\n \"Effect\": \"Allow\",\n \"Resource\": \"*\",\n }],\n }),\n )])\nprod = doppler.integration.AwsParameterStore(\"prod\",\n name=\"Production\",\n assume_role_arn=doppler_parameter_store.arn)\nbackend_prod = doppler.secrets_sync.AwsParameterStore(\"backend_prod\",\n integration=prod.id,\n project=\"backend\",\n config=\"prd\",\n region=\"us-east-1\",\n path=\"/backend/\",\n secure_string=True,\n tags={\n \"myTag\": \"enabled\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text.Json;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\nusing Doppler = Pulumiverse.Doppler;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var dopplerParameterStore = new Aws.Iam.Role(\"doppler_parameter_store\", new()\n {\n Name = \"doppler_parameter_store\",\n AssumeRolePolicy = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n {\n [\"Version\"] = \"2012-10-17\",\n [\"Statement\"] = new[]\n {\n new Dictionary\u003cstring, object?\u003e\n {\n [\"Effect\"] = \"Allow\",\n [\"Action\"] = \"sts:AssumeRole\",\n [\"Principal\"] = new Dictionary\u003cstring, object?\u003e\n {\n [\"AWS\"] = \"arn:aws:iam::299900769157:user/doppler-integration-operator\",\n },\n [\"Condition\"] = new Dictionary\u003cstring, object?\u003e\n {\n [\"StringEquals\"] = new Dictionary\u003cstring, object?\u003e\n {\n [\"sts:ExternalId\"] = \"\u003cYOUR_WORKPLACE_SLUG\u003e\",\n },\n },\n },\n },\n }),\n InlinePolicies = new[]\n {\n new Aws.Iam.Inputs.RoleInlinePolicyArgs\n {\n Name = \"doppler_secret_manager\",\n Policy = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n {\n [\"Version\"] = \"2012-10-17\",\n [\"Statement\"] = new[]\n {\n new Dictionary\u003cstring, object?\u003e\n {\n [\"Action\"] = new[]\n {\n \"ssm:PutParameter\",\n \"ssm:LabelParameterVersion\",\n \"ssm:DeleteParameter\",\n \"ssm:RemoveTagsFromResource\",\n \"ssm:GetParameterHistory\",\n \"ssm:AddTagsToResource\",\n \"ssm:GetParametersByPath\",\n \"ssm:GetParameters\",\n \"ssm:GetParameter\",\n \"ssm:DeleteParameters\",\n },\n [\"Effect\"] = \"Allow\",\n [\"Resource\"] = \"*\",\n },\n },\n }),\n },\n },\n });\n\n var prod = new Doppler.Integration.AwsParameterStore(\"prod\", new()\n {\n Name = \"Production\",\n AssumeRoleArn = dopplerParameterStore.Arn,\n });\n\n var backendProd = new Doppler.SecretsSync.AwsParameterStore(\"backend_prod\", new()\n {\n Integration = prod.Id,\n Project = \"backend\",\n Config = \"prd\",\n Region = \"us-east-1\",\n Path = \"/backend/\",\n SecureString = true,\n Tags = \n {\n { \"myTag\", \"enabled\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"encoding/json\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/iam\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-doppler/sdk/go/doppler/integration\"\n\t\"github.com/pulumiverse/pulumi-doppler/sdk/go/doppler/secretsSync\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttmpJSON0, err := json.Marshal(map[string]interface{}{\n\t\t\t\"Version\": \"2012-10-17\",\n\t\t\t\"Statement\": []map[string]interface{}{\n\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\"Effect\": \"Allow\",\n\t\t\t\t\t\"Action\": \"sts:AssumeRole\",\n\t\t\t\t\t\"Principal\": map[string]interface{}{\n\t\t\t\t\t\t\"AWS\": \"arn:aws:iam::299900769157:user/doppler-integration-operator\",\n\t\t\t\t\t},\n\t\t\t\t\t\"Condition\": map[string]interface{}{\n\t\t\t\t\t\t\"StringEquals\": map[string]interface{}{\n\t\t\t\t\t\t\t\"sts:ExternalId\": \"\u003cYOUR_WORKPLACE_SLUG\u003e\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\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\tjson0 := string(tmpJSON0)\n\t\ttmpJSON1, err := json.Marshal(map[string]interface{}{\n\t\t\t\"Version\": \"2012-10-17\",\n\t\t\t\"Statement\": []map[string]interface{}{\n\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\"Action\": []string{\n\t\t\t\t\t\t\"ssm:PutParameter\",\n\t\t\t\t\t\t\"ssm:LabelParameterVersion\",\n\t\t\t\t\t\t\"ssm:DeleteParameter\",\n\t\t\t\t\t\t\"ssm:RemoveTagsFromResource\",\n\t\t\t\t\t\t\"ssm:GetParameterHistory\",\n\t\t\t\t\t\t\"ssm:AddTagsToResource\",\n\t\t\t\t\t\t\"ssm:GetParametersByPath\",\n\t\t\t\t\t\t\"ssm:GetParameters\",\n\t\t\t\t\t\t\"ssm:GetParameter\",\n\t\t\t\t\t\t\"ssm:DeleteParameters\",\n\t\t\t\t\t},\n\t\t\t\t\t\"Effect\": \"Allow\",\n\t\t\t\t\t\"Resource\": \"*\",\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\tjson1 := string(tmpJSON1)\n\t\tdopplerParameterStore, err := iam.NewRole(ctx, \"doppler_parameter_store\", \u0026iam.RoleArgs{\n\t\t\tName: pulumi.String(\"doppler_parameter_store\"),\n\t\t\tAssumeRolePolicy: pulumi.String(json0),\n\t\t\tInlinePolicies: iam.RoleInlinePolicyArray{\n\t\t\t\t\u0026iam.RoleInlinePolicyArgs{\n\t\t\t\t\tName: pulumi.String(\"doppler_secret_manager\"),\n\t\t\t\t\tPolicy: pulumi.String(json1),\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\tprod, err := integration.NewAwsParameterStore(ctx, \"prod\", \u0026integration.AwsParameterStoreArgs{\n\t\t\tName: pulumi.String(\"Production\"),\n\t\t\tAssumeRoleArn: dopplerParameterStore.Arn,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretsSync.NewAwsParameterStore(ctx, \"backend_prod\", \u0026secretsSync.AwsParameterStoreArgs{\n\t\t\tIntegration: prod.ID(),\n\t\t\tProject: pulumi.String(\"backend\"),\n\t\t\tConfig: pulumi.String(\"prd\"),\n\t\t\tRegion: pulumi.String(\"us-east-1\"),\n\t\t\tPath: pulumi.String(\"/backend/\"),\n\t\t\tSecureString: pulumi.Bool(true),\n\t\t\tTags: pulumi.StringMap{\n\t\t\t\t\"myTag\": pulumi.String(\"enabled\"),\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.aws.iam.Role;\nimport com.pulumi.aws.iam.RoleArgs;\nimport com.pulumi.aws.iam.inputs.RoleInlinePolicyArgs;\nimport com.pulumi.doppler.integration.AwsParameterStore;\nimport com.pulumi.doppler.integration.AwsParameterStoreArgs;\nimport com.pulumi.doppler.secretsSync.AwsParameterStore;\nimport com.pulumi.doppler.secretsSync.AwsParameterStoreArgs;\nimport static com.pulumi.codegen.internal.Serialization.*;\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 dopplerParameterStore = new Role(\"dopplerParameterStore\", RoleArgs.builder()\n .name(\"doppler_parameter_store\")\n .assumeRolePolicy(serializeJson(\n jsonObject(\n jsonProperty(\"Version\", \"2012-10-17\"),\n jsonProperty(\"Statement\", jsonArray(jsonObject(\n jsonProperty(\"Effect\", \"Allow\"),\n jsonProperty(\"Action\", \"sts:AssumeRole\"),\n jsonProperty(\"Principal\", jsonObject(\n jsonProperty(\"AWS\", \"arn:aws:iam::299900769157:user/doppler-integration-operator\")\n )),\n jsonProperty(\"Condition\", jsonObject(\n jsonProperty(\"StringEquals\", jsonObject(\n jsonProperty(\"sts:ExternalId\", \"\u003cYOUR_WORKPLACE_SLUG\u003e\")\n ))\n ))\n )))\n )))\n .inlinePolicies(RoleInlinePolicyArgs.builder()\n .name(\"doppler_secret_manager\")\n .policy(serializeJson(\n jsonObject(\n jsonProperty(\"Version\", \"2012-10-17\"),\n jsonProperty(\"Statement\", jsonArray(jsonObject(\n jsonProperty(\"Action\", jsonArray(\n \"ssm:PutParameter\", \n \"ssm:LabelParameterVersion\", \n \"ssm:DeleteParameter\", \n \"ssm:RemoveTagsFromResource\", \n \"ssm:GetParameterHistory\", \n \"ssm:AddTagsToResource\", \n \"ssm:GetParametersByPath\", \n \"ssm:GetParameters\", \n \"ssm:GetParameter\", \n \"ssm:DeleteParameters\"\n )),\n jsonProperty(\"Effect\", \"Allow\"),\n jsonProperty(\"Resource\", \"*\")\n )))\n )))\n .build())\n .build());\n\n var prod = new AwsParameterStore(\"prod\", AwsParameterStoreArgs.builder()\n .name(\"Production\")\n .assumeRoleArn(dopplerParameterStore.arn())\n .build());\n\n var backendProd = new AwsParameterStore(\"backendProd\", AwsParameterStoreArgs.builder()\n .integration(prod.id())\n .project(\"backend\")\n .config(\"prd\")\n .region(\"us-east-1\")\n .path(\"/backend/\")\n .secureString(true)\n .tags(Map.of(\"myTag\", \"enabled\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n dopplerParameterStore:\n type: aws:iam:Role\n name: doppler_parameter_store\n properties:\n name: doppler_parameter_store\n assumeRolePolicy:\n fn::toJSON:\n Version: 2012-10-17\n Statement:\n - Effect: Allow\n Action: sts:AssumeRole\n Principal:\n AWS: arn:aws:iam::299900769157:user/doppler-integration-operator\n Condition:\n StringEquals:\n sts:ExternalId: \u003cYOUR_WORKPLACE_SLUG\u003e\n inlinePolicies:\n - name: doppler_secret_manager\n policy:\n fn::toJSON:\n Version: 2012-10-17\n Statement:\n - Action:\n - ssm:PutParameter\n - ssm:LabelParameterVersion\n - ssm:DeleteParameter\n - ssm:RemoveTagsFromResource\n - ssm:GetParameterHistory\n - ssm:AddTagsToResource\n - ssm:GetParametersByPath\n - ssm:GetParameters\n - ssm:GetParameter\n - ssm:DeleteParameters\n Effect: Allow\n Resource: '*'\n prod:\n type: doppler:integration:AwsParameterStore\n properties:\n name: Production\n assumeRoleArn: ${dopplerParameterStore.arn}\n backendProd:\n type: doppler:secretsSync:AwsParameterStore\n name: backend_prod\n properties:\n integration: ${prod.id}\n project: backend\n config: prd\n region: us-east-1\n path: /backend/\n secureString: true\n tags:\n myTag: enabled\n```\n\u003c!--End PulumiCodeChooser --\u003e\n", + "description": "Manage an AWS Parameter Store Doppler integration.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * as doppler from \"@pulumiverse/doppler\";\n\nconst dopplerParameterStore = new aws.iam.Role(\"doppler_parameter_store\", {\n name: \"doppler_parameter_store\",\n assumeRolePolicy: JSON.stringify({\n Version: \"2012-10-17\",\n Statement: [{\n Effect: \"Allow\",\n Action: \"sts:AssumeRole\",\n Principal: {\n AWS: \"arn:aws:iam::299900769157:user/doppler-integration-operator\",\n },\n Condition: {\n StringEquals: {\n \"sts:ExternalId\": \"\u003cYOUR_WORKPLACE_SLUG\u003e\",\n },\n },\n }],\n }),\n inlinePolicies: [{\n name: \"doppler_secret_manager\",\n policy: JSON.stringify({\n Version: \"2012-10-17\",\n Statement: [{\n Action: [\n \"ssm:PutParameter\",\n \"ssm:LabelParameterVersion\",\n \"ssm:DeleteParameter\",\n \"ssm:RemoveTagsFromResource\",\n \"ssm:GetParameterHistory\",\n \"ssm:AddTagsToResource\",\n \"ssm:GetParametersByPath\",\n \"ssm:GetParameters\",\n \"ssm:GetParameter\",\n \"ssm:DeleteParameters\",\n ],\n Effect: \"Allow\",\n Resource: \"*\",\n }],\n }),\n }],\n});\nconst prod = new doppler.integration.AwsParameterStore(\"prod\", {\n name: \"Production\",\n assumeRoleArn: dopplerParameterStore.arn,\n});\nconst backendProd = new doppler.secretssync.AwsParameterStore(\"backend_prod\", {\n integration: prod.id,\n project: \"backend\",\n config: \"prd\",\n region: \"us-east-1\",\n path: \"/backend/\",\n secureString: true,\n tags: {\n myTag: \"enabled\",\n },\n deleteBehavior: \"leave_in_target\",\n});\n```\n```python\nimport pulumi\nimport json\nimport pulumi_aws as aws\nimport pulumiverse_doppler as doppler\n\ndoppler_parameter_store = aws.iam.Role(\"doppler_parameter_store\",\n name=\"doppler_parameter_store\",\n assume_role_policy=json.dumps({\n \"Version\": \"2012-10-17\",\n \"Statement\": [{\n \"Effect\": \"Allow\",\n \"Action\": \"sts:AssumeRole\",\n \"Principal\": {\n \"AWS\": \"arn:aws:iam::299900769157:user/doppler-integration-operator\",\n },\n \"Condition\": {\n \"StringEquals\": {\n \"sts:ExternalId\": \"\u003cYOUR_WORKPLACE_SLUG\u003e\",\n },\n },\n }],\n }),\n inline_policies=[{\n \"name\": \"doppler_secret_manager\",\n \"policy\": json.dumps({\n \"version\": \"2012-10-17\",\n \"statement\": [{\n \"action\": [\n \"ssm:PutParameter\",\n \"ssm:LabelParameterVersion\",\n \"ssm:DeleteParameter\",\n \"ssm:RemoveTagsFromResource\",\n \"ssm:GetParameterHistory\",\n \"ssm:AddTagsToResource\",\n \"ssm:GetParametersByPath\",\n \"ssm:GetParameters\",\n \"ssm:GetParameter\",\n \"ssm:DeleteParameters\",\n ],\n \"effect\": \"Allow\",\n \"resource\": \"*\",\n }],\n }),\n }])\nprod = doppler.integration.AwsParameterStore(\"prod\",\n name=\"Production\",\n assume_role_arn=doppler_parameter_store.arn)\nbackend_prod = doppler.secrets_sync.AwsParameterStore(\"backend_prod\",\n integration=prod.id,\n project=\"backend\",\n config=\"prd\",\n region=\"us-east-1\",\n path=\"/backend/\",\n secure_string=True,\n tags={\n \"myTag\": \"enabled\",\n },\n delete_behavior=\"leave_in_target\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text.Json;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\nusing Doppler = Pulumiverse.Doppler;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var dopplerParameterStore = new Aws.Iam.Role(\"doppler_parameter_store\", new()\n {\n Name = \"doppler_parameter_store\",\n AssumeRolePolicy = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n {\n [\"Version\"] = \"2012-10-17\",\n [\"Statement\"] = new[]\n {\n new Dictionary\u003cstring, object?\u003e\n {\n [\"Effect\"] = \"Allow\",\n [\"Action\"] = \"sts:AssumeRole\",\n [\"Principal\"] = new Dictionary\u003cstring, object?\u003e\n {\n [\"AWS\"] = \"arn:aws:iam::299900769157:user/doppler-integration-operator\",\n },\n [\"Condition\"] = new Dictionary\u003cstring, object?\u003e\n {\n [\"StringEquals\"] = new Dictionary\u003cstring, object?\u003e\n {\n [\"sts:ExternalId\"] = \"\u003cYOUR_WORKPLACE_SLUG\u003e\",\n },\n },\n },\n },\n }),\n InlinePolicies = new[]\n {\n new Aws.Iam.Inputs.RoleInlinePolicyArgs\n {\n Name = \"doppler_secret_manager\",\n Policy = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n {\n [\"Version\"] = \"2012-10-17\",\n [\"Statement\"] = new[]\n {\n new Dictionary\u003cstring, object?\u003e\n {\n [\"Action\"] = new[]\n {\n \"ssm:PutParameter\",\n \"ssm:LabelParameterVersion\",\n \"ssm:DeleteParameter\",\n \"ssm:RemoveTagsFromResource\",\n \"ssm:GetParameterHistory\",\n \"ssm:AddTagsToResource\",\n \"ssm:GetParametersByPath\",\n \"ssm:GetParameters\",\n \"ssm:GetParameter\",\n \"ssm:DeleteParameters\",\n },\n [\"Effect\"] = \"Allow\",\n [\"Resource\"] = \"*\",\n },\n },\n }),\n },\n },\n });\n\n var prod = new Doppler.Integration.AwsParameterStore(\"prod\", new()\n {\n Name = \"Production\",\n AssumeRoleArn = dopplerParameterStore.Arn,\n });\n\n var backendProd = new Doppler.SecretsSync.AwsParameterStore(\"backend_prod\", new()\n {\n Integration = prod.Id,\n Project = \"backend\",\n Config = \"prd\",\n Region = \"us-east-1\",\n Path = \"/backend/\",\n SecureString = true,\n Tags = \n {\n { \"myTag\", \"enabled\" },\n },\n DeleteBehavior = \"leave_in_target\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"encoding/json\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/iam\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-doppler/sdk/go/doppler/integration\"\n\t\"github.com/pulumiverse/pulumi-doppler/sdk/go/doppler/secretsSync\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttmpJSON0, err := json.Marshal(map[string]interface{}{\n\t\t\t\"Version\": \"2012-10-17\",\n\t\t\t\"Statement\": []map[string]interface{}{\n\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\"Effect\": \"Allow\",\n\t\t\t\t\t\"Action\": \"sts:AssumeRole\",\n\t\t\t\t\t\"Principal\": map[string]interface{}{\n\t\t\t\t\t\t\"AWS\": \"arn:aws:iam::299900769157:user/doppler-integration-operator\",\n\t\t\t\t\t},\n\t\t\t\t\t\"Condition\": map[string]interface{}{\n\t\t\t\t\t\t\"StringEquals\": map[string]interface{}{\n\t\t\t\t\t\t\t\"sts:ExternalId\": \"\u003cYOUR_WORKPLACE_SLUG\u003e\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\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\tjson0 := string(tmpJSON0)\n\t\ttmpJSON1, err := json.Marshal(map[string]interface{}{\n\t\t\t\"Version\": \"2012-10-17\",\n\t\t\t\"Statement\": []map[string]interface{}{\n\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\"Action\": []string{\n\t\t\t\t\t\t\"ssm:PutParameter\",\n\t\t\t\t\t\t\"ssm:LabelParameterVersion\",\n\t\t\t\t\t\t\"ssm:DeleteParameter\",\n\t\t\t\t\t\t\"ssm:RemoveTagsFromResource\",\n\t\t\t\t\t\t\"ssm:GetParameterHistory\",\n\t\t\t\t\t\t\"ssm:AddTagsToResource\",\n\t\t\t\t\t\t\"ssm:GetParametersByPath\",\n\t\t\t\t\t\t\"ssm:GetParameters\",\n\t\t\t\t\t\t\"ssm:GetParameter\",\n\t\t\t\t\t\t\"ssm:DeleteParameters\",\n\t\t\t\t\t},\n\t\t\t\t\t\"Effect\": \"Allow\",\n\t\t\t\t\t\"Resource\": \"*\",\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\tjson1 := string(tmpJSON1)\n\t\tdopplerParameterStore, err := iam.NewRole(ctx, \"doppler_parameter_store\", \u0026iam.RoleArgs{\n\t\t\tName: pulumi.String(\"doppler_parameter_store\"),\n\t\t\tAssumeRolePolicy: pulumi.String(json0),\n\t\t\tInlinePolicies: iam.RoleInlinePolicyArray{\n\t\t\t\t\u0026iam.RoleInlinePolicyArgs{\n\t\t\t\t\tName: pulumi.String(\"doppler_secret_manager\"),\n\t\t\t\t\tPolicy: pulumi.String(json1),\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\tprod, err := integration.NewAwsParameterStore(ctx, \"prod\", \u0026integration.AwsParameterStoreArgs{\n\t\t\tName: pulumi.String(\"Production\"),\n\t\t\tAssumeRoleArn: dopplerParameterStore.Arn,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretsSync.NewAwsParameterStore(ctx, \"backend_prod\", \u0026secretsSync.AwsParameterStoreArgs{\n\t\t\tIntegration: prod.ID(),\n\t\t\tProject: pulumi.String(\"backend\"),\n\t\t\tConfig: pulumi.String(\"prd\"),\n\t\t\tRegion: pulumi.String(\"us-east-1\"),\n\t\t\tPath: pulumi.String(\"/backend/\"),\n\t\t\tSecureString: pulumi.Bool(true),\n\t\t\tTags: pulumi.StringMap{\n\t\t\t\t\"myTag\": pulumi.String(\"enabled\"),\n\t\t\t},\n\t\t\tDeleteBehavior: pulumi.String(\"leave_in_target\"),\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.aws.iam.Role;\nimport com.pulumi.aws.iam.RoleArgs;\nimport com.pulumi.aws.iam.inputs.RoleInlinePolicyArgs;\nimport com.pulumi.doppler.integration.AwsParameterStore;\nimport com.pulumi.doppler.integration.AwsParameterStoreArgs;\nimport com.pulumi.doppler.secretsSync.AwsParameterStore;\nimport com.pulumi.doppler.secretsSync.AwsParameterStoreArgs;\nimport static com.pulumi.codegen.internal.Serialization.*;\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 dopplerParameterStore = new Role(\"dopplerParameterStore\", RoleArgs.builder()\n .name(\"doppler_parameter_store\")\n .assumeRolePolicy(serializeJson(\n jsonObject(\n jsonProperty(\"Version\", \"2012-10-17\"),\n jsonProperty(\"Statement\", jsonArray(jsonObject(\n jsonProperty(\"Effect\", \"Allow\"),\n jsonProperty(\"Action\", \"sts:AssumeRole\"),\n jsonProperty(\"Principal\", jsonObject(\n jsonProperty(\"AWS\", \"arn:aws:iam::299900769157:user/doppler-integration-operator\")\n )),\n jsonProperty(\"Condition\", jsonObject(\n jsonProperty(\"StringEquals\", jsonObject(\n jsonProperty(\"sts:ExternalId\", \"\u003cYOUR_WORKPLACE_SLUG\u003e\")\n ))\n ))\n )))\n )))\n .inlinePolicies(RoleInlinePolicyArgs.builder()\n .name(\"doppler_secret_manager\")\n .policy(serializeJson(\n jsonObject(\n jsonProperty(\"Version\", \"2012-10-17\"),\n jsonProperty(\"Statement\", jsonArray(jsonObject(\n jsonProperty(\"Action\", jsonArray(\n \"ssm:PutParameter\", \n \"ssm:LabelParameterVersion\", \n \"ssm:DeleteParameter\", \n \"ssm:RemoveTagsFromResource\", \n \"ssm:GetParameterHistory\", \n \"ssm:AddTagsToResource\", \n \"ssm:GetParametersByPath\", \n \"ssm:GetParameters\", \n \"ssm:GetParameter\", \n \"ssm:DeleteParameters\"\n )),\n jsonProperty(\"Effect\", \"Allow\"),\n jsonProperty(\"Resource\", \"*\")\n )))\n )))\n .build())\n .build());\n\n var prod = new AwsParameterStore(\"prod\", AwsParameterStoreArgs.builder()\n .name(\"Production\")\n .assumeRoleArn(dopplerParameterStore.arn())\n .build());\n\n var backendProd = new AwsParameterStore(\"backendProd\", AwsParameterStoreArgs.builder()\n .integration(prod.id())\n .project(\"backend\")\n .config(\"prd\")\n .region(\"us-east-1\")\n .path(\"/backend/\")\n .secureString(true)\n .tags(Map.of(\"myTag\", \"enabled\"))\n .deleteBehavior(\"leave_in_target\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n dopplerParameterStore:\n type: aws:iam:Role\n name: doppler_parameter_store\n properties:\n name: doppler_parameter_store\n assumeRolePolicy:\n fn::toJSON:\n Version: 2012-10-17\n Statement:\n - Effect: Allow\n Action: sts:AssumeRole\n Principal:\n AWS: arn:aws:iam::299900769157:user/doppler-integration-operator\n Condition:\n StringEquals:\n sts:ExternalId: \u003cYOUR_WORKPLACE_SLUG\u003e\n inlinePolicies:\n - name: doppler_secret_manager\n policy:\n fn::toJSON:\n Version: 2012-10-17\n Statement:\n - Action:\n - ssm:PutParameter\n - ssm:LabelParameterVersion\n - ssm:DeleteParameter\n - ssm:RemoveTagsFromResource\n - ssm:GetParameterHistory\n - ssm:AddTagsToResource\n - ssm:GetParametersByPath\n - ssm:GetParameters\n - ssm:GetParameter\n - ssm:DeleteParameters\n Effect: Allow\n Resource: '*'\n prod:\n type: doppler:integration:AwsParameterStore\n properties:\n name: Production\n assumeRoleArn: ${dopplerParameterStore.arn}\n backendProd:\n type: doppler:secretsSync:AwsParameterStore\n name: backend_prod\n properties:\n integration: ${prod.id}\n project: backend\n config: prd\n region: us-east-1\n path: /backend/\n secureString: true\n tags:\n myTag: enabled\n deleteBehavior: leave_in_target\n```\n\u003c!--End PulumiCodeChooser --\u003e\n", "properties": { "assumeRoleArn": { "type": "string", @@ -697,7 +1027,7 @@ } }, "doppler:integration/awsSecretsManager:AwsSecretsManager": { - "description": "Manage an AWS Secrets Manager Doppler integration.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * as doppler from \"@pulumiverse/doppler\";\n\nconst dopplerSecretsManager = new aws.iam.Role(\"doppler_secrets_manager\", {\n name: \"doppler_secrets_manager\",\n assumeRolePolicy: JSON.stringify({\n Version: \"2012-10-17\",\n Statement: [{\n Effect: \"Allow\",\n Action: \"sts:AssumeRole\",\n Principal: {\n AWS: \"arn:aws:iam::299900769157:user/doppler-integration-operator\",\n },\n Condition: {\n StringEquals: {\n \"sts:ExternalId\": \"\u003cYOUR_WORKPLACE_SLUG\u003e\",\n },\n },\n }],\n }),\n inlinePolicies: [{\n name: \"doppler_secret_manager\",\n policy: JSON.stringify({\n Version: \"2012-10-17\",\n Statement: [{\n Action: [\n \"secretsmanager:GetSecretValue\",\n \"secretsmanager:DescribeSecret\",\n \"secretsmanager:PutSecretValue\",\n \"secretsmanager:CreateSecret\",\n \"secretsmanager:DeleteSecret\",\n \"secretsmanager:TagResource\",\n \"secretsmanager:UpdateSecret\",\n ],\n Effect: \"Allow\",\n Resource: \"*\",\n }],\n }),\n }],\n});\nconst prod = new doppler.integration.AwsSecretsManager(\"prod\", {\n name: \"Production\",\n assumeRoleArn: dopplerSecretsManager.arn,\n});\nconst backendProd = new doppler.secretssync.AwsSecretsManager(\"backend_prod\", {\n integration: prod.id,\n project: \"backend\",\n config: \"prd\",\n region: \"us-east-1\",\n path: \"/backend/\",\n tags: {\n myTag: \"enabled\",\n },\n});\n```\n```python\nimport pulumi\nimport json\nimport pulumi_aws as aws\nimport pulumiverse_doppler as doppler\n\ndoppler_secrets_manager = aws.iam.Role(\"doppler_secrets_manager\",\n name=\"doppler_secrets_manager\",\n assume_role_policy=json.dumps({\n \"Version\": \"2012-10-17\",\n \"Statement\": [{\n \"Effect\": \"Allow\",\n \"Action\": \"sts:AssumeRole\",\n \"Principal\": {\n \"AWS\": \"arn:aws:iam::299900769157:user/doppler-integration-operator\",\n },\n \"Condition\": {\n \"StringEquals\": {\n \"sts:ExternalId\": \"\u003cYOUR_WORKPLACE_SLUG\u003e\",\n },\n },\n }],\n }),\n inline_policies=[aws.iam.RoleInlinePolicyArgs(\n name=\"doppler_secret_manager\",\n policy=json.dumps({\n \"Version\": \"2012-10-17\",\n \"Statement\": [{\n \"Action\": [\n \"secretsmanager:GetSecretValue\",\n \"secretsmanager:DescribeSecret\",\n \"secretsmanager:PutSecretValue\",\n \"secretsmanager:CreateSecret\",\n \"secretsmanager:DeleteSecret\",\n \"secretsmanager:TagResource\",\n \"secretsmanager:UpdateSecret\",\n ],\n \"Effect\": \"Allow\",\n \"Resource\": \"*\",\n }],\n }),\n )])\nprod = doppler.integration.AwsSecretsManager(\"prod\",\n name=\"Production\",\n assume_role_arn=doppler_secrets_manager.arn)\nbackend_prod = doppler.secrets_sync.AwsSecretsManager(\"backend_prod\",\n integration=prod.id,\n project=\"backend\",\n config=\"prd\",\n region=\"us-east-1\",\n path=\"/backend/\",\n tags={\n \"myTag\": \"enabled\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text.Json;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\nusing Doppler = Pulumiverse.Doppler;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var dopplerSecretsManager = new Aws.Iam.Role(\"doppler_secrets_manager\", new()\n {\n Name = \"doppler_secrets_manager\",\n AssumeRolePolicy = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n {\n [\"Version\"] = \"2012-10-17\",\n [\"Statement\"] = new[]\n {\n new Dictionary\u003cstring, object?\u003e\n {\n [\"Effect\"] = \"Allow\",\n [\"Action\"] = \"sts:AssumeRole\",\n [\"Principal\"] = new Dictionary\u003cstring, object?\u003e\n {\n [\"AWS\"] = \"arn:aws:iam::299900769157:user/doppler-integration-operator\",\n },\n [\"Condition\"] = new Dictionary\u003cstring, object?\u003e\n {\n [\"StringEquals\"] = new Dictionary\u003cstring, object?\u003e\n {\n [\"sts:ExternalId\"] = \"\u003cYOUR_WORKPLACE_SLUG\u003e\",\n },\n },\n },\n },\n }),\n InlinePolicies = new[]\n {\n new Aws.Iam.Inputs.RoleInlinePolicyArgs\n {\n Name = \"doppler_secret_manager\",\n Policy = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n {\n [\"Version\"] = \"2012-10-17\",\n [\"Statement\"] = new[]\n {\n new Dictionary\u003cstring, object?\u003e\n {\n [\"Action\"] = new[]\n {\n \"secretsmanager:GetSecretValue\",\n \"secretsmanager:DescribeSecret\",\n \"secretsmanager:PutSecretValue\",\n \"secretsmanager:CreateSecret\",\n \"secretsmanager:DeleteSecret\",\n \"secretsmanager:TagResource\",\n \"secretsmanager:UpdateSecret\",\n },\n [\"Effect\"] = \"Allow\",\n [\"Resource\"] = \"*\",\n },\n },\n }),\n },\n },\n });\n\n var prod = new Doppler.Integration.AwsSecretsManager(\"prod\", new()\n {\n Name = \"Production\",\n AssumeRoleArn = dopplerSecretsManager.Arn,\n });\n\n var backendProd = new Doppler.SecretsSync.AwsSecretsManager(\"backend_prod\", new()\n {\n Integration = prod.Id,\n Project = \"backend\",\n Config = \"prd\",\n Region = \"us-east-1\",\n Path = \"/backend/\",\n Tags = \n {\n { \"myTag\", \"enabled\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"encoding/json\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/iam\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-doppler/sdk/go/doppler/integration\"\n\t\"github.com/pulumiverse/pulumi-doppler/sdk/go/doppler/secretsSync\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttmpJSON0, err := json.Marshal(map[string]interface{}{\n\t\t\t\"Version\": \"2012-10-17\",\n\t\t\t\"Statement\": []map[string]interface{}{\n\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\"Effect\": \"Allow\",\n\t\t\t\t\t\"Action\": \"sts:AssumeRole\",\n\t\t\t\t\t\"Principal\": map[string]interface{}{\n\t\t\t\t\t\t\"AWS\": \"arn:aws:iam::299900769157:user/doppler-integration-operator\",\n\t\t\t\t\t},\n\t\t\t\t\t\"Condition\": map[string]interface{}{\n\t\t\t\t\t\t\"StringEquals\": map[string]interface{}{\n\t\t\t\t\t\t\t\"sts:ExternalId\": \"\u003cYOUR_WORKPLACE_SLUG\u003e\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\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\tjson0 := string(tmpJSON0)\n\t\ttmpJSON1, err := json.Marshal(map[string]interface{}{\n\t\t\t\"Version\": \"2012-10-17\",\n\t\t\t\"Statement\": []map[string]interface{}{\n\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\"Action\": []string{\n\t\t\t\t\t\t\"secretsmanager:GetSecretValue\",\n\t\t\t\t\t\t\"secretsmanager:DescribeSecret\",\n\t\t\t\t\t\t\"secretsmanager:PutSecretValue\",\n\t\t\t\t\t\t\"secretsmanager:CreateSecret\",\n\t\t\t\t\t\t\"secretsmanager:DeleteSecret\",\n\t\t\t\t\t\t\"secretsmanager:TagResource\",\n\t\t\t\t\t\t\"secretsmanager:UpdateSecret\",\n\t\t\t\t\t},\n\t\t\t\t\t\"Effect\": \"Allow\",\n\t\t\t\t\t\"Resource\": \"*\",\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\tjson1 := string(tmpJSON1)\n\t\tdopplerSecretsManager, err := iam.NewRole(ctx, \"doppler_secrets_manager\", \u0026iam.RoleArgs{\n\t\t\tName: pulumi.String(\"doppler_secrets_manager\"),\n\t\t\tAssumeRolePolicy: pulumi.String(json0),\n\t\t\tInlinePolicies: iam.RoleInlinePolicyArray{\n\t\t\t\t\u0026iam.RoleInlinePolicyArgs{\n\t\t\t\t\tName: pulumi.String(\"doppler_secret_manager\"),\n\t\t\t\t\tPolicy: pulumi.String(json1),\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\tprod, err := integration.NewAwsSecretsManager(ctx, \"prod\", \u0026integration.AwsSecretsManagerArgs{\n\t\t\tName: pulumi.String(\"Production\"),\n\t\t\tAssumeRoleArn: dopplerSecretsManager.Arn,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretsSync.NewAwsSecretsManager(ctx, \"backend_prod\", \u0026secretsSync.AwsSecretsManagerArgs{\n\t\t\tIntegration: prod.ID(),\n\t\t\tProject: pulumi.String(\"backend\"),\n\t\t\tConfig: pulumi.String(\"prd\"),\n\t\t\tRegion: pulumi.String(\"us-east-1\"),\n\t\t\tPath: pulumi.String(\"/backend/\"),\n\t\t\tTags: pulumi.StringMap{\n\t\t\t\t\"myTag\": pulumi.String(\"enabled\"),\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.aws.iam.Role;\nimport com.pulumi.aws.iam.RoleArgs;\nimport com.pulumi.aws.iam.inputs.RoleInlinePolicyArgs;\nimport com.pulumi.doppler.integration.AwsSecretsManager;\nimport com.pulumi.doppler.integration.AwsSecretsManagerArgs;\nimport com.pulumi.doppler.secretsSync.AwsSecretsManager;\nimport com.pulumi.doppler.secretsSync.AwsSecretsManagerArgs;\nimport static com.pulumi.codegen.internal.Serialization.*;\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 dopplerSecretsManager = new Role(\"dopplerSecretsManager\", RoleArgs.builder()\n .name(\"doppler_secrets_manager\")\n .assumeRolePolicy(serializeJson(\n jsonObject(\n jsonProperty(\"Version\", \"2012-10-17\"),\n jsonProperty(\"Statement\", jsonArray(jsonObject(\n jsonProperty(\"Effect\", \"Allow\"),\n jsonProperty(\"Action\", \"sts:AssumeRole\"),\n jsonProperty(\"Principal\", jsonObject(\n jsonProperty(\"AWS\", \"arn:aws:iam::299900769157:user/doppler-integration-operator\")\n )),\n jsonProperty(\"Condition\", jsonObject(\n jsonProperty(\"StringEquals\", jsonObject(\n jsonProperty(\"sts:ExternalId\", \"\u003cYOUR_WORKPLACE_SLUG\u003e\")\n ))\n ))\n )))\n )))\n .inlinePolicies(RoleInlinePolicyArgs.builder()\n .name(\"doppler_secret_manager\")\n .policy(serializeJson(\n jsonObject(\n jsonProperty(\"Version\", \"2012-10-17\"),\n jsonProperty(\"Statement\", jsonArray(jsonObject(\n jsonProperty(\"Action\", jsonArray(\n \"secretsmanager:GetSecretValue\", \n \"secretsmanager:DescribeSecret\", \n \"secretsmanager:PutSecretValue\", \n \"secretsmanager:CreateSecret\", \n \"secretsmanager:DeleteSecret\", \n \"secretsmanager:TagResource\", \n \"secretsmanager:UpdateSecret\"\n )),\n jsonProperty(\"Effect\", \"Allow\"),\n jsonProperty(\"Resource\", \"*\")\n )))\n )))\n .build())\n .build());\n\n var prod = new AwsSecretsManager(\"prod\", AwsSecretsManagerArgs.builder()\n .name(\"Production\")\n .assumeRoleArn(dopplerSecretsManager.arn())\n .build());\n\n var backendProd = new AwsSecretsManager(\"backendProd\", AwsSecretsManagerArgs.builder()\n .integration(prod.id())\n .project(\"backend\")\n .config(\"prd\")\n .region(\"us-east-1\")\n .path(\"/backend/\")\n .tags(Map.of(\"myTag\", \"enabled\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n dopplerSecretsManager:\n type: aws:iam:Role\n name: doppler_secrets_manager\n properties:\n name: doppler_secrets_manager\n assumeRolePolicy:\n fn::toJSON:\n Version: 2012-10-17\n Statement:\n - Effect: Allow\n Action: sts:AssumeRole\n Principal:\n AWS: arn:aws:iam::299900769157:user/doppler-integration-operator\n Condition:\n StringEquals:\n sts:ExternalId: \u003cYOUR_WORKPLACE_SLUG\u003e\n inlinePolicies:\n - name: doppler_secret_manager\n policy:\n fn::toJSON:\n Version: 2012-10-17\n Statement:\n - Action:\n - secretsmanager:GetSecretValue\n - secretsmanager:DescribeSecret\n - secretsmanager:PutSecretValue\n - secretsmanager:CreateSecret\n - secretsmanager:DeleteSecret\n - secretsmanager:TagResource\n - secretsmanager:UpdateSecret\n Effect: Allow\n Resource: '*'\n prod:\n type: doppler:integration:AwsSecretsManager\n properties:\n name: Production\n assumeRoleArn: ${dopplerSecretsManager.arn}\n backendProd:\n type: doppler:secretsSync:AwsSecretsManager\n name: backend_prod\n properties:\n integration: ${prod.id}\n project: backend\n config: prd\n region: us-east-1\n path: /backend/\n tags:\n myTag: enabled\n```\n\u003c!--End PulumiCodeChooser --\u003e\n", + "description": "Manage an AWS Secrets Manager Doppler integration.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * as doppler from \"@pulumiverse/doppler\";\n\nconst dopplerSecretsManager = new aws.iam.Role(\"doppler_secrets_manager\", {\n name: \"doppler_secrets_manager\",\n assumeRolePolicy: JSON.stringify({\n Version: \"2012-10-17\",\n Statement: [{\n Effect: \"Allow\",\n Action: \"sts:AssumeRole\",\n Principal: {\n AWS: \"arn:aws:iam::299900769157:user/doppler-integration-operator\",\n },\n Condition: {\n StringEquals: {\n \"sts:ExternalId\": \"\u003cYOUR_WORKPLACE_SLUG\u003e\",\n },\n },\n }],\n }),\n inlinePolicies: [{\n name: \"doppler_secret_manager\",\n policy: JSON.stringify({\n Version: \"2012-10-17\",\n Statement: [{\n Action: [\n \"secretsmanager:GetSecretValue\",\n \"secretsmanager:DescribeSecret\",\n \"secretsmanager:PutSecretValue\",\n \"secretsmanager:CreateSecret\",\n \"secretsmanager:DeleteSecret\",\n \"secretsmanager:TagResource\",\n \"secretsmanager:UpdateSecret\",\n ],\n Effect: \"Allow\",\n Resource: \"*\",\n }],\n }),\n }],\n});\nconst prod = new doppler.integration.AwsSecretsManager(\"prod\", {\n name: \"Production\",\n assumeRoleArn: dopplerSecretsManager.arn,\n});\nconst backendProd = new doppler.secretssync.AwsSecretsManager(\"backend_prod\", {\n integration: prod.id,\n project: \"backend\",\n config: \"prd\",\n region: \"us-east-1\",\n path: \"/backend/\",\n tags: {\n myTag: \"enabled\",\n },\n deleteBehavior: \"leave_in_target\",\n});\n```\n```python\nimport pulumi\nimport json\nimport pulumi_aws as aws\nimport pulumiverse_doppler as doppler\n\ndoppler_secrets_manager = aws.iam.Role(\"doppler_secrets_manager\",\n name=\"doppler_secrets_manager\",\n assume_role_policy=json.dumps({\n \"Version\": \"2012-10-17\",\n \"Statement\": [{\n \"Effect\": \"Allow\",\n \"Action\": \"sts:AssumeRole\",\n \"Principal\": {\n \"AWS\": \"arn:aws:iam::299900769157:user/doppler-integration-operator\",\n },\n \"Condition\": {\n \"StringEquals\": {\n \"sts:ExternalId\": \"\u003cYOUR_WORKPLACE_SLUG\u003e\",\n },\n },\n }],\n }),\n inline_policies=[{\n \"name\": \"doppler_secret_manager\",\n \"policy\": json.dumps({\n \"version\": \"2012-10-17\",\n \"statement\": [{\n \"action\": [\n \"secretsmanager:GetSecretValue\",\n \"secretsmanager:DescribeSecret\",\n \"secretsmanager:PutSecretValue\",\n \"secretsmanager:CreateSecret\",\n \"secretsmanager:DeleteSecret\",\n \"secretsmanager:TagResource\",\n \"secretsmanager:UpdateSecret\",\n ],\n \"effect\": \"Allow\",\n \"resource\": \"*\",\n }],\n }),\n }])\nprod = doppler.integration.AwsSecretsManager(\"prod\",\n name=\"Production\",\n assume_role_arn=doppler_secrets_manager.arn)\nbackend_prod = doppler.secrets_sync.AwsSecretsManager(\"backend_prod\",\n integration=prod.id,\n project=\"backend\",\n config=\"prd\",\n region=\"us-east-1\",\n path=\"/backend/\",\n tags={\n \"myTag\": \"enabled\",\n },\n delete_behavior=\"leave_in_target\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text.Json;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\nusing Doppler = Pulumiverse.Doppler;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var dopplerSecretsManager = new Aws.Iam.Role(\"doppler_secrets_manager\", new()\n {\n Name = \"doppler_secrets_manager\",\n AssumeRolePolicy = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n {\n [\"Version\"] = \"2012-10-17\",\n [\"Statement\"] = new[]\n {\n new Dictionary\u003cstring, object?\u003e\n {\n [\"Effect\"] = \"Allow\",\n [\"Action\"] = \"sts:AssumeRole\",\n [\"Principal\"] = new Dictionary\u003cstring, object?\u003e\n {\n [\"AWS\"] = \"arn:aws:iam::299900769157:user/doppler-integration-operator\",\n },\n [\"Condition\"] = new Dictionary\u003cstring, object?\u003e\n {\n [\"StringEquals\"] = new Dictionary\u003cstring, object?\u003e\n {\n [\"sts:ExternalId\"] = \"\u003cYOUR_WORKPLACE_SLUG\u003e\",\n },\n },\n },\n },\n }),\n InlinePolicies = new[]\n {\n new Aws.Iam.Inputs.RoleInlinePolicyArgs\n {\n Name = \"doppler_secret_manager\",\n Policy = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n {\n [\"Version\"] = \"2012-10-17\",\n [\"Statement\"] = new[]\n {\n new Dictionary\u003cstring, object?\u003e\n {\n [\"Action\"] = new[]\n {\n \"secretsmanager:GetSecretValue\",\n \"secretsmanager:DescribeSecret\",\n \"secretsmanager:PutSecretValue\",\n \"secretsmanager:CreateSecret\",\n \"secretsmanager:DeleteSecret\",\n \"secretsmanager:TagResource\",\n \"secretsmanager:UpdateSecret\",\n },\n [\"Effect\"] = \"Allow\",\n [\"Resource\"] = \"*\",\n },\n },\n }),\n },\n },\n });\n\n var prod = new Doppler.Integration.AwsSecretsManager(\"prod\", new()\n {\n Name = \"Production\",\n AssumeRoleArn = dopplerSecretsManager.Arn,\n });\n\n var backendProd = new Doppler.SecretsSync.AwsSecretsManager(\"backend_prod\", new()\n {\n Integration = prod.Id,\n Project = \"backend\",\n Config = \"prd\",\n Region = \"us-east-1\",\n Path = \"/backend/\",\n Tags = \n {\n { \"myTag\", \"enabled\" },\n },\n DeleteBehavior = \"leave_in_target\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"encoding/json\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/iam\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-doppler/sdk/go/doppler/integration\"\n\t\"github.com/pulumiverse/pulumi-doppler/sdk/go/doppler/secretsSync\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttmpJSON0, err := json.Marshal(map[string]interface{}{\n\t\t\t\"Version\": \"2012-10-17\",\n\t\t\t\"Statement\": []map[string]interface{}{\n\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\"Effect\": \"Allow\",\n\t\t\t\t\t\"Action\": \"sts:AssumeRole\",\n\t\t\t\t\t\"Principal\": map[string]interface{}{\n\t\t\t\t\t\t\"AWS\": \"arn:aws:iam::299900769157:user/doppler-integration-operator\",\n\t\t\t\t\t},\n\t\t\t\t\t\"Condition\": map[string]interface{}{\n\t\t\t\t\t\t\"StringEquals\": map[string]interface{}{\n\t\t\t\t\t\t\t\"sts:ExternalId\": \"\u003cYOUR_WORKPLACE_SLUG\u003e\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\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\tjson0 := string(tmpJSON0)\n\t\ttmpJSON1, err := json.Marshal(map[string]interface{}{\n\t\t\t\"Version\": \"2012-10-17\",\n\t\t\t\"Statement\": []map[string]interface{}{\n\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\"Action\": []string{\n\t\t\t\t\t\t\"secretsmanager:GetSecretValue\",\n\t\t\t\t\t\t\"secretsmanager:DescribeSecret\",\n\t\t\t\t\t\t\"secretsmanager:PutSecretValue\",\n\t\t\t\t\t\t\"secretsmanager:CreateSecret\",\n\t\t\t\t\t\t\"secretsmanager:DeleteSecret\",\n\t\t\t\t\t\t\"secretsmanager:TagResource\",\n\t\t\t\t\t\t\"secretsmanager:UpdateSecret\",\n\t\t\t\t\t},\n\t\t\t\t\t\"Effect\": \"Allow\",\n\t\t\t\t\t\"Resource\": \"*\",\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\tjson1 := string(tmpJSON1)\n\t\tdopplerSecretsManager, err := iam.NewRole(ctx, \"doppler_secrets_manager\", \u0026iam.RoleArgs{\n\t\t\tName: pulumi.String(\"doppler_secrets_manager\"),\n\t\t\tAssumeRolePolicy: pulumi.String(json0),\n\t\t\tInlinePolicies: iam.RoleInlinePolicyArray{\n\t\t\t\t\u0026iam.RoleInlinePolicyArgs{\n\t\t\t\t\tName: pulumi.String(\"doppler_secret_manager\"),\n\t\t\t\t\tPolicy: pulumi.String(json1),\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\tprod, err := integration.NewAwsSecretsManager(ctx, \"prod\", \u0026integration.AwsSecretsManagerArgs{\n\t\t\tName: pulumi.String(\"Production\"),\n\t\t\tAssumeRoleArn: dopplerSecretsManager.Arn,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretsSync.NewAwsSecretsManager(ctx, \"backend_prod\", \u0026secretsSync.AwsSecretsManagerArgs{\n\t\t\tIntegration: prod.ID(),\n\t\t\tProject: pulumi.String(\"backend\"),\n\t\t\tConfig: pulumi.String(\"prd\"),\n\t\t\tRegion: pulumi.String(\"us-east-1\"),\n\t\t\tPath: pulumi.String(\"/backend/\"),\n\t\t\tTags: pulumi.StringMap{\n\t\t\t\t\"myTag\": pulumi.String(\"enabled\"),\n\t\t\t},\n\t\t\tDeleteBehavior: pulumi.String(\"leave_in_target\"),\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.aws.iam.Role;\nimport com.pulumi.aws.iam.RoleArgs;\nimport com.pulumi.aws.iam.inputs.RoleInlinePolicyArgs;\nimport com.pulumi.doppler.integration.AwsSecretsManager;\nimport com.pulumi.doppler.integration.AwsSecretsManagerArgs;\nimport com.pulumi.doppler.secretsSync.AwsSecretsManager;\nimport com.pulumi.doppler.secretsSync.AwsSecretsManagerArgs;\nimport static com.pulumi.codegen.internal.Serialization.*;\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 dopplerSecretsManager = new Role(\"dopplerSecretsManager\", RoleArgs.builder()\n .name(\"doppler_secrets_manager\")\n .assumeRolePolicy(serializeJson(\n jsonObject(\n jsonProperty(\"Version\", \"2012-10-17\"),\n jsonProperty(\"Statement\", jsonArray(jsonObject(\n jsonProperty(\"Effect\", \"Allow\"),\n jsonProperty(\"Action\", \"sts:AssumeRole\"),\n jsonProperty(\"Principal\", jsonObject(\n jsonProperty(\"AWS\", \"arn:aws:iam::299900769157:user/doppler-integration-operator\")\n )),\n jsonProperty(\"Condition\", jsonObject(\n jsonProperty(\"StringEquals\", jsonObject(\n jsonProperty(\"sts:ExternalId\", \"\u003cYOUR_WORKPLACE_SLUG\u003e\")\n ))\n ))\n )))\n )))\n .inlinePolicies(RoleInlinePolicyArgs.builder()\n .name(\"doppler_secret_manager\")\n .policy(serializeJson(\n jsonObject(\n jsonProperty(\"Version\", \"2012-10-17\"),\n jsonProperty(\"Statement\", jsonArray(jsonObject(\n jsonProperty(\"Action\", jsonArray(\n \"secretsmanager:GetSecretValue\", \n \"secretsmanager:DescribeSecret\", \n \"secretsmanager:PutSecretValue\", \n \"secretsmanager:CreateSecret\", \n \"secretsmanager:DeleteSecret\", \n \"secretsmanager:TagResource\", \n \"secretsmanager:UpdateSecret\"\n )),\n jsonProperty(\"Effect\", \"Allow\"),\n jsonProperty(\"Resource\", \"*\")\n )))\n )))\n .build())\n .build());\n\n var prod = new AwsSecretsManager(\"prod\", AwsSecretsManagerArgs.builder()\n .name(\"Production\")\n .assumeRoleArn(dopplerSecretsManager.arn())\n .build());\n\n var backendProd = new AwsSecretsManager(\"backendProd\", AwsSecretsManagerArgs.builder()\n .integration(prod.id())\n .project(\"backend\")\n .config(\"prd\")\n .region(\"us-east-1\")\n .path(\"/backend/\")\n .tags(Map.of(\"myTag\", \"enabled\"))\n .deleteBehavior(\"leave_in_target\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n dopplerSecretsManager:\n type: aws:iam:Role\n name: doppler_secrets_manager\n properties:\n name: doppler_secrets_manager\n assumeRolePolicy:\n fn::toJSON:\n Version: 2012-10-17\n Statement:\n - Effect: Allow\n Action: sts:AssumeRole\n Principal:\n AWS: arn:aws:iam::299900769157:user/doppler-integration-operator\n Condition:\n StringEquals:\n sts:ExternalId: \u003cYOUR_WORKPLACE_SLUG\u003e\n inlinePolicies:\n - name: doppler_secret_manager\n policy:\n fn::toJSON:\n Version: 2012-10-17\n Statement:\n - Action:\n - secretsmanager:GetSecretValue\n - secretsmanager:DescribeSecret\n - secretsmanager:PutSecretValue\n - secretsmanager:CreateSecret\n - secretsmanager:DeleteSecret\n - secretsmanager:TagResource\n - secretsmanager:UpdateSecret\n Effect: Allow\n Resource: '*'\n prod:\n type: doppler:integration:AwsSecretsManager\n properties:\n name: Production\n assumeRoleArn: ${dopplerSecretsManager.arn}\n backendProd:\n type: doppler:secretsSync:AwsSecretsManager\n name: backend_prod\n properties:\n integration: ${prod.id}\n project: backend\n config: prd\n region: us-east-1\n path: /backend/\n tags:\n myTag: enabled\n deleteBehavior: leave_in_target\n```\n\u003c!--End PulumiCodeChooser --\u003e\n", "properties": { "assumeRoleArn": { "type": "string", @@ -743,6 +1073,56 @@ "type": "object" } }, + "doppler:integration/flyio:Flyio": { + "description": "Manage a Fly.io Doppler integration.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as doppler from \"@pulumiverse/doppler\";\n\nconst prod = new doppler.integration.Flyio(\"prod\", {\n name: \"TF Fly.io\",\n apiKey: \"fo1_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\n});\nconst backendProd = new doppler.secretssync.Flyio(\"backend_prod\", {\n integration: prod.id,\n project: \"backend\",\n config: \"prd\",\n appId: \"my-app\",\n restartMachines: true,\n deleteBehavior: \"leave_in_target\",\n});\n```\n```python\nimport pulumi\nimport pulumiverse_doppler as doppler\n\nprod = doppler.integration.Flyio(\"prod\",\n name=\"TF Fly.io\",\n api_key=\"fo1_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\")\nbackend_prod = doppler.secrets_sync.Flyio(\"backend_prod\",\n integration=prod.id,\n project=\"backend\",\n config=\"prd\",\n app_id=\"my-app\",\n restart_machines=True,\n delete_behavior=\"leave_in_target\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Doppler = Pulumiverse.Doppler;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var prod = new Doppler.Integration.Flyio(\"prod\", new()\n {\n Name = \"TF Fly.io\",\n ApiKey = \"fo1_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\n });\n\n var backendProd = new Doppler.SecretsSync.Flyio(\"backend_prod\", new()\n {\n Integration = prod.Id,\n Project = \"backend\",\n Config = \"prd\",\n AppId = \"my-app\",\n RestartMachines = true,\n DeleteBehavior = \"leave_in_target\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-doppler/sdk/go/doppler/integration\"\n\t\"github.com/pulumiverse/pulumi-doppler/sdk/go/doppler/secretsSync\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprod, err := integration.NewFlyio(ctx, \"prod\", \u0026integration.FlyioArgs{\n\t\t\tName: pulumi.String(\"TF Fly.io\"),\n\t\t\tApiKey: pulumi.String(\"fo1_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretsSync.NewFlyio(ctx, \"backend_prod\", \u0026secretsSync.FlyioArgs{\n\t\t\tIntegration: prod.ID(),\n\t\t\tProject: pulumi.String(\"backend\"),\n\t\t\tConfig: pulumi.String(\"prd\"),\n\t\t\tAppId: pulumi.String(\"my-app\"),\n\t\t\tRestartMachines: pulumi.Bool(true),\n\t\t\tDeleteBehavior: pulumi.String(\"leave_in_target\"),\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.doppler.integration.Flyio;\nimport com.pulumi.doppler.integration.FlyioArgs;\nimport com.pulumi.doppler.secretsSync.Flyio;\nimport com.pulumi.doppler.secretsSync.FlyioArgs;\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 prod = new Flyio(\"prod\", FlyioArgs.builder()\n .name(\"TF Fly.io\")\n .apiKey(\"fo1_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\")\n .build());\n\n var backendProd = new Flyio(\"backendProd\", FlyioArgs.builder()\n .integration(prod.id())\n .project(\"backend\")\n .config(\"prd\")\n .appId(\"my-app\")\n .restartMachines(true)\n .deleteBehavior(\"leave_in_target\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n prod:\n type: doppler:integration:Flyio\n properties:\n name: TF Fly.io\n apiKey: fo1_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n backendProd:\n type: doppler:secretsSync:Flyio\n name: backend_prod\n properties:\n integration: ${prod.id}\n project: backend\n config: prd\n appId: my-app\n restartMachines: true\n deleteBehavior: leave_in_target\n```\n\u003c!--End PulumiCodeChooser --\u003e\n", + "properties": { + "apiKey": { + "type": "string", + "description": "A Fly.io API key.\n", + "secret": true + }, + "name": { + "type": "string", + "description": "The name of the integration\n" + } + }, + "required": [ + "apiKey", + "name" + ], + "inputProperties": { + "apiKey": { + "type": "string", + "description": "A Fly.io API key.\n", + "secret": true + }, + "name": { + "type": "string", + "description": "The name of the integration\n", + "willReplaceOnChanges": true + } + }, + "requiredInputs": [ + "apiKey", + "name" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering Flyio resources.\n", + "properties": { + "apiKey": { + "type": "string", + "description": "A Fly.io API key.\n", + "secret": true + }, + "name": { + "type": "string", + "description": "The name of the integration\n", + "willReplaceOnChanges": true + } + }, + "type": "object" + } + }, "doppler:integration/terraformCloud:TerraformCloud": { "description": "## Example Usage\n\n", "properties": { @@ -959,16 +1339,24 @@ } }, "doppler:secretsSync/awsParameterStore:AwsParameterStore": { - "description": "Manage an AWS Parameter Store Doppler sync.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * as doppler from \"@pulumiverse/doppler\";\n\nconst dopplerParameterStore = new aws.iam.Role(\"doppler_parameter_store\", {\n name: \"doppler_parameter_store\",\n assumeRolePolicy: JSON.stringify({\n Version: \"2012-10-17\",\n Statement: [{\n Effect: \"Allow\",\n Action: \"sts:AssumeRole\",\n Principal: {\n AWS: \"arn:aws:iam::299900769157:user/doppler-integration-operator\",\n },\n Condition: {\n StringEquals: {\n \"sts:ExternalId\": \"\u003cYOUR_WORKPLACE_SLUG\u003e\",\n },\n },\n }],\n }),\n inlinePolicies: [{\n name: \"doppler_secret_manager\",\n policy: JSON.stringify({\n Version: \"2012-10-17\",\n Statement: [{\n Action: [\n \"ssm:PutParameter\",\n \"ssm:LabelParameterVersion\",\n \"ssm:DeleteParameter\",\n \"ssm:RemoveTagsFromResource\",\n \"ssm:GetParameterHistory\",\n \"ssm:AddTagsToResource\",\n \"ssm:GetParametersByPath\",\n \"ssm:GetParameters\",\n \"ssm:GetParameter\",\n \"ssm:DeleteParameters\",\n ],\n Effect: \"Allow\",\n Resource: \"*\",\n }],\n }),\n }],\n});\nconst prod = new doppler.integration.AwsParameterStore(\"prod\", {\n name: \"Production\",\n assumeRoleArn: dopplerParameterStore.arn,\n});\nconst backendProd = new doppler.secretssync.AwsParameterStore(\"backend_prod\", {\n integration: prod.id,\n project: \"backend\",\n config: \"prd\",\n region: \"us-east-1\",\n path: \"/backend/\",\n secureString: true,\n tags: {\n myTag: \"enabled\",\n },\n});\n```\n```python\nimport pulumi\nimport json\nimport pulumi_aws as aws\nimport pulumiverse_doppler as doppler\n\ndoppler_parameter_store = aws.iam.Role(\"doppler_parameter_store\",\n name=\"doppler_parameter_store\",\n assume_role_policy=json.dumps({\n \"Version\": \"2012-10-17\",\n \"Statement\": [{\n \"Effect\": \"Allow\",\n \"Action\": \"sts:AssumeRole\",\n \"Principal\": {\n \"AWS\": \"arn:aws:iam::299900769157:user/doppler-integration-operator\",\n },\n \"Condition\": {\n \"StringEquals\": {\n \"sts:ExternalId\": \"\u003cYOUR_WORKPLACE_SLUG\u003e\",\n },\n },\n }],\n }),\n inline_policies=[aws.iam.RoleInlinePolicyArgs(\n name=\"doppler_secret_manager\",\n policy=json.dumps({\n \"Version\": \"2012-10-17\",\n \"Statement\": [{\n \"Action\": [\n \"ssm:PutParameter\",\n \"ssm:LabelParameterVersion\",\n \"ssm:DeleteParameter\",\n \"ssm:RemoveTagsFromResource\",\n \"ssm:GetParameterHistory\",\n \"ssm:AddTagsToResource\",\n \"ssm:GetParametersByPath\",\n \"ssm:GetParameters\",\n \"ssm:GetParameter\",\n \"ssm:DeleteParameters\",\n ],\n \"Effect\": \"Allow\",\n \"Resource\": \"*\",\n }],\n }),\n )])\nprod = doppler.integration.AwsParameterStore(\"prod\",\n name=\"Production\",\n assume_role_arn=doppler_parameter_store.arn)\nbackend_prod = doppler.secrets_sync.AwsParameterStore(\"backend_prod\",\n integration=prod.id,\n project=\"backend\",\n config=\"prd\",\n region=\"us-east-1\",\n path=\"/backend/\",\n secure_string=True,\n tags={\n \"myTag\": \"enabled\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text.Json;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\nusing Doppler = Pulumiverse.Doppler;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var dopplerParameterStore = new Aws.Iam.Role(\"doppler_parameter_store\", new()\n {\n Name = \"doppler_parameter_store\",\n AssumeRolePolicy = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n {\n [\"Version\"] = \"2012-10-17\",\n [\"Statement\"] = new[]\n {\n new Dictionary\u003cstring, object?\u003e\n {\n [\"Effect\"] = \"Allow\",\n [\"Action\"] = \"sts:AssumeRole\",\n [\"Principal\"] = new Dictionary\u003cstring, object?\u003e\n {\n [\"AWS\"] = \"arn:aws:iam::299900769157:user/doppler-integration-operator\",\n },\n [\"Condition\"] = new Dictionary\u003cstring, object?\u003e\n {\n [\"StringEquals\"] = new Dictionary\u003cstring, object?\u003e\n {\n [\"sts:ExternalId\"] = \"\u003cYOUR_WORKPLACE_SLUG\u003e\",\n },\n },\n },\n },\n }),\n InlinePolicies = new[]\n {\n new Aws.Iam.Inputs.RoleInlinePolicyArgs\n {\n Name = \"doppler_secret_manager\",\n Policy = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n {\n [\"Version\"] = \"2012-10-17\",\n [\"Statement\"] = new[]\n {\n new Dictionary\u003cstring, object?\u003e\n {\n [\"Action\"] = new[]\n {\n \"ssm:PutParameter\",\n \"ssm:LabelParameterVersion\",\n \"ssm:DeleteParameter\",\n \"ssm:RemoveTagsFromResource\",\n \"ssm:GetParameterHistory\",\n \"ssm:AddTagsToResource\",\n \"ssm:GetParametersByPath\",\n \"ssm:GetParameters\",\n \"ssm:GetParameter\",\n \"ssm:DeleteParameters\",\n },\n [\"Effect\"] = \"Allow\",\n [\"Resource\"] = \"*\",\n },\n },\n }),\n },\n },\n });\n\n var prod = new Doppler.Integration.AwsParameterStore(\"prod\", new()\n {\n Name = \"Production\",\n AssumeRoleArn = dopplerParameterStore.Arn,\n });\n\n var backendProd = new Doppler.SecretsSync.AwsParameterStore(\"backend_prod\", new()\n {\n Integration = prod.Id,\n Project = \"backend\",\n Config = \"prd\",\n Region = \"us-east-1\",\n Path = \"/backend/\",\n SecureString = true,\n Tags = \n {\n { \"myTag\", \"enabled\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"encoding/json\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/iam\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-doppler/sdk/go/doppler/integration\"\n\t\"github.com/pulumiverse/pulumi-doppler/sdk/go/doppler/secretsSync\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttmpJSON0, err := json.Marshal(map[string]interface{}{\n\t\t\t\"Version\": \"2012-10-17\",\n\t\t\t\"Statement\": []map[string]interface{}{\n\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\"Effect\": \"Allow\",\n\t\t\t\t\t\"Action\": \"sts:AssumeRole\",\n\t\t\t\t\t\"Principal\": map[string]interface{}{\n\t\t\t\t\t\t\"AWS\": \"arn:aws:iam::299900769157:user/doppler-integration-operator\",\n\t\t\t\t\t},\n\t\t\t\t\t\"Condition\": map[string]interface{}{\n\t\t\t\t\t\t\"StringEquals\": map[string]interface{}{\n\t\t\t\t\t\t\t\"sts:ExternalId\": \"\u003cYOUR_WORKPLACE_SLUG\u003e\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\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\tjson0 := string(tmpJSON0)\n\t\ttmpJSON1, err := json.Marshal(map[string]interface{}{\n\t\t\t\"Version\": \"2012-10-17\",\n\t\t\t\"Statement\": []map[string]interface{}{\n\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\"Action\": []string{\n\t\t\t\t\t\t\"ssm:PutParameter\",\n\t\t\t\t\t\t\"ssm:LabelParameterVersion\",\n\t\t\t\t\t\t\"ssm:DeleteParameter\",\n\t\t\t\t\t\t\"ssm:RemoveTagsFromResource\",\n\t\t\t\t\t\t\"ssm:GetParameterHistory\",\n\t\t\t\t\t\t\"ssm:AddTagsToResource\",\n\t\t\t\t\t\t\"ssm:GetParametersByPath\",\n\t\t\t\t\t\t\"ssm:GetParameters\",\n\t\t\t\t\t\t\"ssm:GetParameter\",\n\t\t\t\t\t\t\"ssm:DeleteParameters\",\n\t\t\t\t\t},\n\t\t\t\t\t\"Effect\": \"Allow\",\n\t\t\t\t\t\"Resource\": \"*\",\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\tjson1 := string(tmpJSON1)\n\t\tdopplerParameterStore, err := iam.NewRole(ctx, \"doppler_parameter_store\", \u0026iam.RoleArgs{\n\t\t\tName: pulumi.String(\"doppler_parameter_store\"),\n\t\t\tAssumeRolePolicy: pulumi.String(json0),\n\t\t\tInlinePolicies: iam.RoleInlinePolicyArray{\n\t\t\t\t\u0026iam.RoleInlinePolicyArgs{\n\t\t\t\t\tName: pulumi.String(\"doppler_secret_manager\"),\n\t\t\t\t\tPolicy: pulumi.String(json1),\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\tprod, err := integration.NewAwsParameterStore(ctx, \"prod\", \u0026integration.AwsParameterStoreArgs{\n\t\t\tName: pulumi.String(\"Production\"),\n\t\t\tAssumeRoleArn: dopplerParameterStore.Arn,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretsSync.NewAwsParameterStore(ctx, \"backend_prod\", \u0026secretsSync.AwsParameterStoreArgs{\n\t\t\tIntegration: prod.ID(),\n\t\t\tProject: pulumi.String(\"backend\"),\n\t\t\tConfig: pulumi.String(\"prd\"),\n\t\t\tRegion: pulumi.String(\"us-east-1\"),\n\t\t\tPath: pulumi.String(\"/backend/\"),\n\t\t\tSecureString: pulumi.Bool(true),\n\t\t\tTags: pulumi.StringMap{\n\t\t\t\t\"myTag\": pulumi.String(\"enabled\"),\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.aws.iam.Role;\nimport com.pulumi.aws.iam.RoleArgs;\nimport com.pulumi.aws.iam.inputs.RoleInlinePolicyArgs;\nimport com.pulumi.doppler.integration.AwsParameterStore;\nimport com.pulumi.doppler.integration.AwsParameterStoreArgs;\nimport com.pulumi.doppler.secretsSync.AwsParameterStore;\nimport com.pulumi.doppler.secretsSync.AwsParameterStoreArgs;\nimport static com.pulumi.codegen.internal.Serialization.*;\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 dopplerParameterStore = new Role(\"dopplerParameterStore\", RoleArgs.builder()\n .name(\"doppler_parameter_store\")\n .assumeRolePolicy(serializeJson(\n jsonObject(\n jsonProperty(\"Version\", \"2012-10-17\"),\n jsonProperty(\"Statement\", jsonArray(jsonObject(\n jsonProperty(\"Effect\", \"Allow\"),\n jsonProperty(\"Action\", \"sts:AssumeRole\"),\n jsonProperty(\"Principal\", jsonObject(\n jsonProperty(\"AWS\", \"arn:aws:iam::299900769157:user/doppler-integration-operator\")\n )),\n jsonProperty(\"Condition\", jsonObject(\n jsonProperty(\"StringEquals\", jsonObject(\n jsonProperty(\"sts:ExternalId\", \"\u003cYOUR_WORKPLACE_SLUG\u003e\")\n ))\n ))\n )))\n )))\n .inlinePolicies(RoleInlinePolicyArgs.builder()\n .name(\"doppler_secret_manager\")\n .policy(serializeJson(\n jsonObject(\n jsonProperty(\"Version\", \"2012-10-17\"),\n jsonProperty(\"Statement\", jsonArray(jsonObject(\n jsonProperty(\"Action\", jsonArray(\n \"ssm:PutParameter\", \n \"ssm:LabelParameterVersion\", \n \"ssm:DeleteParameter\", \n \"ssm:RemoveTagsFromResource\", \n \"ssm:GetParameterHistory\", \n \"ssm:AddTagsToResource\", \n \"ssm:GetParametersByPath\", \n \"ssm:GetParameters\", \n \"ssm:GetParameter\", \n \"ssm:DeleteParameters\"\n )),\n jsonProperty(\"Effect\", \"Allow\"),\n jsonProperty(\"Resource\", \"*\")\n )))\n )))\n .build())\n .build());\n\n var prod = new AwsParameterStore(\"prod\", AwsParameterStoreArgs.builder()\n .name(\"Production\")\n .assumeRoleArn(dopplerParameterStore.arn())\n .build());\n\n var backendProd = new AwsParameterStore(\"backendProd\", AwsParameterStoreArgs.builder()\n .integration(prod.id())\n .project(\"backend\")\n .config(\"prd\")\n .region(\"us-east-1\")\n .path(\"/backend/\")\n .secureString(true)\n .tags(Map.of(\"myTag\", \"enabled\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n dopplerParameterStore:\n type: aws:iam:Role\n name: doppler_parameter_store\n properties:\n name: doppler_parameter_store\n assumeRolePolicy:\n fn::toJSON:\n Version: 2012-10-17\n Statement:\n - Effect: Allow\n Action: sts:AssumeRole\n Principal:\n AWS: arn:aws:iam::299900769157:user/doppler-integration-operator\n Condition:\n StringEquals:\n sts:ExternalId: \u003cYOUR_WORKPLACE_SLUG\u003e\n inlinePolicies:\n - name: doppler_secret_manager\n policy:\n fn::toJSON:\n Version: 2012-10-17\n Statement:\n - Action:\n - ssm:PutParameter\n - ssm:LabelParameterVersion\n - ssm:DeleteParameter\n - ssm:RemoveTagsFromResource\n - ssm:GetParameterHistory\n - ssm:AddTagsToResource\n - ssm:GetParametersByPath\n - ssm:GetParameters\n - ssm:GetParameter\n - ssm:DeleteParameters\n Effect: Allow\n Resource: '*'\n prod:\n type: doppler:integration:AwsParameterStore\n properties:\n name: Production\n assumeRoleArn: ${dopplerParameterStore.arn}\n backendProd:\n type: doppler:secretsSync:AwsParameterStore\n name: backend_prod\n properties:\n integration: ${prod.id}\n project: backend\n config: prd\n region: us-east-1\n path: /backend/\n secureString: true\n tags:\n myTag: enabled\n```\n\u003c!--End PulumiCodeChooser --\u003e\n", + "description": "Manage an AWS Parameter Store Doppler sync.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * as doppler from \"@pulumiverse/doppler\";\n\nconst dopplerParameterStore = new aws.iam.Role(\"doppler_parameter_store\", {\n name: \"doppler_parameter_store\",\n assumeRolePolicy: JSON.stringify({\n Version: \"2012-10-17\",\n Statement: [{\n Effect: \"Allow\",\n Action: \"sts:AssumeRole\",\n Principal: {\n AWS: \"arn:aws:iam::299900769157:user/doppler-integration-operator\",\n },\n Condition: {\n StringEquals: {\n \"sts:ExternalId\": \"\u003cYOUR_WORKPLACE_SLUG\u003e\",\n },\n },\n }],\n }),\n inlinePolicies: [{\n name: \"doppler_secret_manager\",\n policy: JSON.stringify({\n Version: \"2012-10-17\",\n Statement: [{\n Action: [\n \"ssm:PutParameter\",\n \"ssm:LabelParameterVersion\",\n \"ssm:DeleteParameter\",\n \"ssm:RemoveTagsFromResource\",\n \"ssm:GetParameterHistory\",\n \"ssm:AddTagsToResource\",\n \"ssm:GetParametersByPath\",\n \"ssm:GetParameters\",\n \"ssm:GetParameter\",\n \"ssm:DeleteParameters\",\n ],\n Effect: \"Allow\",\n Resource: \"*\",\n }],\n }),\n }],\n});\nconst prod = new doppler.integration.AwsParameterStore(\"prod\", {\n name: \"Production\",\n assumeRoleArn: dopplerParameterStore.arn,\n});\nconst backendProd = new doppler.secretssync.AwsParameterStore(\"backend_prod\", {\n integration: prod.id,\n project: \"backend\",\n config: \"prd\",\n region: \"us-east-1\",\n path: \"/backend/\",\n secureString: true,\n tags: {\n myTag: \"enabled\",\n },\n deleteBehavior: \"leave_in_target\",\n});\n```\n```python\nimport pulumi\nimport json\nimport pulumi_aws as aws\nimport pulumiverse_doppler as doppler\n\ndoppler_parameter_store = aws.iam.Role(\"doppler_parameter_store\",\n name=\"doppler_parameter_store\",\n assume_role_policy=json.dumps({\n \"Version\": \"2012-10-17\",\n \"Statement\": [{\n \"Effect\": \"Allow\",\n \"Action\": \"sts:AssumeRole\",\n \"Principal\": {\n \"AWS\": \"arn:aws:iam::299900769157:user/doppler-integration-operator\",\n },\n \"Condition\": {\n \"StringEquals\": {\n \"sts:ExternalId\": \"\u003cYOUR_WORKPLACE_SLUG\u003e\",\n },\n },\n }],\n }),\n inline_policies=[{\n \"name\": \"doppler_secret_manager\",\n \"policy\": json.dumps({\n \"version\": \"2012-10-17\",\n \"statement\": [{\n \"action\": [\n \"ssm:PutParameter\",\n \"ssm:LabelParameterVersion\",\n \"ssm:DeleteParameter\",\n \"ssm:RemoveTagsFromResource\",\n \"ssm:GetParameterHistory\",\n \"ssm:AddTagsToResource\",\n \"ssm:GetParametersByPath\",\n \"ssm:GetParameters\",\n \"ssm:GetParameter\",\n \"ssm:DeleteParameters\",\n ],\n \"effect\": \"Allow\",\n \"resource\": \"*\",\n }],\n }),\n }])\nprod = doppler.integration.AwsParameterStore(\"prod\",\n name=\"Production\",\n assume_role_arn=doppler_parameter_store.arn)\nbackend_prod = doppler.secrets_sync.AwsParameterStore(\"backend_prod\",\n integration=prod.id,\n project=\"backend\",\n config=\"prd\",\n region=\"us-east-1\",\n path=\"/backend/\",\n secure_string=True,\n tags={\n \"myTag\": \"enabled\",\n },\n delete_behavior=\"leave_in_target\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text.Json;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\nusing Doppler = Pulumiverse.Doppler;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var dopplerParameterStore = new Aws.Iam.Role(\"doppler_parameter_store\", new()\n {\n Name = \"doppler_parameter_store\",\n AssumeRolePolicy = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n {\n [\"Version\"] = \"2012-10-17\",\n [\"Statement\"] = new[]\n {\n new Dictionary\u003cstring, object?\u003e\n {\n [\"Effect\"] = \"Allow\",\n [\"Action\"] = \"sts:AssumeRole\",\n [\"Principal\"] = new Dictionary\u003cstring, object?\u003e\n {\n [\"AWS\"] = \"arn:aws:iam::299900769157:user/doppler-integration-operator\",\n },\n [\"Condition\"] = new Dictionary\u003cstring, object?\u003e\n {\n [\"StringEquals\"] = new Dictionary\u003cstring, object?\u003e\n {\n [\"sts:ExternalId\"] = \"\u003cYOUR_WORKPLACE_SLUG\u003e\",\n },\n },\n },\n },\n }),\n InlinePolicies = new[]\n {\n new Aws.Iam.Inputs.RoleInlinePolicyArgs\n {\n Name = \"doppler_secret_manager\",\n Policy = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n {\n [\"Version\"] = \"2012-10-17\",\n [\"Statement\"] = new[]\n {\n new Dictionary\u003cstring, object?\u003e\n {\n [\"Action\"] = new[]\n {\n \"ssm:PutParameter\",\n \"ssm:LabelParameterVersion\",\n \"ssm:DeleteParameter\",\n \"ssm:RemoveTagsFromResource\",\n \"ssm:GetParameterHistory\",\n \"ssm:AddTagsToResource\",\n \"ssm:GetParametersByPath\",\n \"ssm:GetParameters\",\n \"ssm:GetParameter\",\n \"ssm:DeleteParameters\",\n },\n [\"Effect\"] = \"Allow\",\n [\"Resource\"] = \"*\",\n },\n },\n }),\n },\n },\n });\n\n var prod = new Doppler.Integration.AwsParameterStore(\"prod\", new()\n {\n Name = \"Production\",\n AssumeRoleArn = dopplerParameterStore.Arn,\n });\n\n var backendProd = new Doppler.SecretsSync.AwsParameterStore(\"backend_prod\", new()\n {\n Integration = prod.Id,\n Project = \"backend\",\n Config = \"prd\",\n Region = \"us-east-1\",\n Path = \"/backend/\",\n SecureString = true,\n Tags = \n {\n { \"myTag\", \"enabled\" },\n },\n DeleteBehavior = \"leave_in_target\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"encoding/json\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/iam\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-doppler/sdk/go/doppler/integration\"\n\t\"github.com/pulumiverse/pulumi-doppler/sdk/go/doppler/secretsSync\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttmpJSON0, err := json.Marshal(map[string]interface{}{\n\t\t\t\"Version\": \"2012-10-17\",\n\t\t\t\"Statement\": []map[string]interface{}{\n\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\"Effect\": \"Allow\",\n\t\t\t\t\t\"Action\": \"sts:AssumeRole\",\n\t\t\t\t\t\"Principal\": map[string]interface{}{\n\t\t\t\t\t\t\"AWS\": \"arn:aws:iam::299900769157:user/doppler-integration-operator\",\n\t\t\t\t\t},\n\t\t\t\t\t\"Condition\": map[string]interface{}{\n\t\t\t\t\t\t\"StringEquals\": map[string]interface{}{\n\t\t\t\t\t\t\t\"sts:ExternalId\": \"\u003cYOUR_WORKPLACE_SLUG\u003e\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\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\tjson0 := string(tmpJSON0)\n\t\ttmpJSON1, err := json.Marshal(map[string]interface{}{\n\t\t\t\"Version\": \"2012-10-17\",\n\t\t\t\"Statement\": []map[string]interface{}{\n\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\"Action\": []string{\n\t\t\t\t\t\t\"ssm:PutParameter\",\n\t\t\t\t\t\t\"ssm:LabelParameterVersion\",\n\t\t\t\t\t\t\"ssm:DeleteParameter\",\n\t\t\t\t\t\t\"ssm:RemoveTagsFromResource\",\n\t\t\t\t\t\t\"ssm:GetParameterHistory\",\n\t\t\t\t\t\t\"ssm:AddTagsToResource\",\n\t\t\t\t\t\t\"ssm:GetParametersByPath\",\n\t\t\t\t\t\t\"ssm:GetParameters\",\n\t\t\t\t\t\t\"ssm:GetParameter\",\n\t\t\t\t\t\t\"ssm:DeleteParameters\",\n\t\t\t\t\t},\n\t\t\t\t\t\"Effect\": \"Allow\",\n\t\t\t\t\t\"Resource\": \"*\",\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\tjson1 := string(tmpJSON1)\n\t\tdopplerParameterStore, err := iam.NewRole(ctx, \"doppler_parameter_store\", \u0026iam.RoleArgs{\n\t\t\tName: pulumi.String(\"doppler_parameter_store\"),\n\t\t\tAssumeRolePolicy: pulumi.String(json0),\n\t\t\tInlinePolicies: iam.RoleInlinePolicyArray{\n\t\t\t\t\u0026iam.RoleInlinePolicyArgs{\n\t\t\t\t\tName: pulumi.String(\"doppler_secret_manager\"),\n\t\t\t\t\tPolicy: pulumi.String(json1),\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\tprod, err := integration.NewAwsParameterStore(ctx, \"prod\", \u0026integration.AwsParameterStoreArgs{\n\t\t\tName: pulumi.String(\"Production\"),\n\t\t\tAssumeRoleArn: dopplerParameterStore.Arn,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretsSync.NewAwsParameterStore(ctx, \"backend_prod\", \u0026secretsSync.AwsParameterStoreArgs{\n\t\t\tIntegration: prod.ID(),\n\t\t\tProject: pulumi.String(\"backend\"),\n\t\t\tConfig: pulumi.String(\"prd\"),\n\t\t\tRegion: pulumi.String(\"us-east-1\"),\n\t\t\tPath: pulumi.String(\"/backend/\"),\n\t\t\tSecureString: pulumi.Bool(true),\n\t\t\tTags: pulumi.StringMap{\n\t\t\t\t\"myTag\": pulumi.String(\"enabled\"),\n\t\t\t},\n\t\t\tDeleteBehavior: pulumi.String(\"leave_in_target\"),\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.aws.iam.Role;\nimport com.pulumi.aws.iam.RoleArgs;\nimport com.pulumi.aws.iam.inputs.RoleInlinePolicyArgs;\nimport com.pulumi.doppler.integration.AwsParameterStore;\nimport com.pulumi.doppler.integration.AwsParameterStoreArgs;\nimport com.pulumi.doppler.secretsSync.AwsParameterStore;\nimport com.pulumi.doppler.secretsSync.AwsParameterStoreArgs;\nimport static com.pulumi.codegen.internal.Serialization.*;\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 dopplerParameterStore = new Role(\"dopplerParameterStore\", RoleArgs.builder()\n .name(\"doppler_parameter_store\")\n .assumeRolePolicy(serializeJson(\n jsonObject(\n jsonProperty(\"Version\", \"2012-10-17\"),\n jsonProperty(\"Statement\", jsonArray(jsonObject(\n jsonProperty(\"Effect\", \"Allow\"),\n jsonProperty(\"Action\", \"sts:AssumeRole\"),\n jsonProperty(\"Principal\", jsonObject(\n jsonProperty(\"AWS\", \"arn:aws:iam::299900769157:user/doppler-integration-operator\")\n )),\n jsonProperty(\"Condition\", jsonObject(\n jsonProperty(\"StringEquals\", jsonObject(\n jsonProperty(\"sts:ExternalId\", \"\u003cYOUR_WORKPLACE_SLUG\u003e\")\n ))\n ))\n )))\n )))\n .inlinePolicies(RoleInlinePolicyArgs.builder()\n .name(\"doppler_secret_manager\")\n .policy(serializeJson(\n jsonObject(\n jsonProperty(\"Version\", \"2012-10-17\"),\n jsonProperty(\"Statement\", jsonArray(jsonObject(\n jsonProperty(\"Action\", jsonArray(\n \"ssm:PutParameter\", \n \"ssm:LabelParameterVersion\", \n \"ssm:DeleteParameter\", \n \"ssm:RemoveTagsFromResource\", \n \"ssm:GetParameterHistory\", \n \"ssm:AddTagsToResource\", \n \"ssm:GetParametersByPath\", \n \"ssm:GetParameters\", \n \"ssm:GetParameter\", \n \"ssm:DeleteParameters\"\n )),\n jsonProperty(\"Effect\", \"Allow\"),\n jsonProperty(\"Resource\", \"*\")\n )))\n )))\n .build())\n .build());\n\n var prod = new AwsParameterStore(\"prod\", AwsParameterStoreArgs.builder()\n .name(\"Production\")\n .assumeRoleArn(dopplerParameterStore.arn())\n .build());\n\n var backendProd = new AwsParameterStore(\"backendProd\", AwsParameterStoreArgs.builder()\n .integration(prod.id())\n .project(\"backend\")\n .config(\"prd\")\n .region(\"us-east-1\")\n .path(\"/backend/\")\n .secureString(true)\n .tags(Map.of(\"myTag\", \"enabled\"))\n .deleteBehavior(\"leave_in_target\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n dopplerParameterStore:\n type: aws:iam:Role\n name: doppler_parameter_store\n properties:\n name: doppler_parameter_store\n assumeRolePolicy:\n fn::toJSON:\n Version: 2012-10-17\n Statement:\n - Effect: Allow\n Action: sts:AssumeRole\n Principal:\n AWS: arn:aws:iam::299900769157:user/doppler-integration-operator\n Condition:\n StringEquals:\n sts:ExternalId: \u003cYOUR_WORKPLACE_SLUG\u003e\n inlinePolicies:\n - name: doppler_secret_manager\n policy:\n fn::toJSON:\n Version: 2012-10-17\n Statement:\n - Action:\n - ssm:PutParameter\n - ssm:LabelParameterVersion\n - ssm:DeleteParameter\n - ssm:RemoveTagsFromResource\n - ssm:GetParameterHistory\n - ssm:AddTagsToResource\n - ssm:GetParametersByPath\n - ssm:GetParameters\n - ssm:GetParameter\n - ssm:DeleteParameters\n Effect: Allow\n Resource: '*'\n prod:\n type: doppler:integration:AwsParameterStore\n properties:\n name: Production\n assumeRoleArn: ${dopplerParameterStore.arn}\n backendProd:\n type: doppler:secretsSync:AwsParameterStore\n name: backend_prod\n properties:\n integration: ${prod.id}\n project: backend\n config: prd\n region: us-east-1\n path: /backend/\n secureString: true\n tags:\n myTag: enabled\n deleteBehavior: leave_in_target\n```\n\u003c!--End PulumiCodeChooser --\u003e\n", "properties": { "config": { "type": "string", "description": "The name of the Doppler config\n" }, + "deleteBehavior": { + "type": "string", + "description": "The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leave_in_target` (default) or `delete_from_target`.\n" + }, "integration": { "type": "string", "description": "The slug of the integration to use for this sync\n" }, + "kmsKeyId": { + "type": "string", + "description": "The AWS KMS key used to encrypt the parameter (ID, Alias, or ARN)\n" + }, "path": { "type": "string", "description": "The path to the parameters in AWS\n" @@ -1006,11 +1394,20 @@ "description": "The name of the Doppler config\n", "willReplaceOnChanges": true }, + "deleteBehavior": { + "type": "string", + "description": "The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leave_in_target` (default) or `delete_from_target`.\n" + }, "integration": { "type": "string", "description": "The slug of the integration to use for this sync\n", "willReplaceOnChanges": true }, + "kmsKeyId": { + "type": "string", + "description": "The AWS KMS key used to encrypt the parameter (ID, Alias, or ARN)\n", + "willReplaceOnChanges": true + }, "path": { "type": "string", "description": "The path to the parameters in AWS\n", @@ -1055,11 +1452,20 @@ "description": "The name of the Doppler config\n", "willReplaceOnChanges": true }, + "deleteBehavior": { + "type": "string", + "description": "The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leave_in_target` (default) or `delete_from_target`.\n" + }, "integration": { "type": "string", "description": "The slug of the integration to use for this sync\n", "willReplaceOnChanges": true }, + "kmsKeyId": { + "type": "string", + "description": "The AWS KMS key used to encrypt the parameter (ID, Alias, or ARN)\n", + "willReplaceOnChanges": true + }, "path": { "type": "string", "description": "The path to the parameters in AWS\n", @@ -1093,16 +1499,24 @@ } }, "doppler:secretsSync/awsSecretsManager:AwsSecretsManager": { - "description": "Manage an AWS Secrets Manager Doppler sync.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * as doppler from \"@pulumiverse/doppler\";\n\nconst dopplerSecretsManager = new aws.iam.Role(\"doppler_secrets_manager\", {\n name: \"doppler_secrets_manager\",\n assumeRolePolicy: JSON.stringify({\n Version: \"2012-10-17\",\n Statement: [{\n Effect: \"Allow\",\n Action: \"sts:AssumeRole\",\n Principal: {\n AWS: \"arn:aws:iam::299900769157:user/doppler-integration-operator\",\n },\n Condition: {\n StringEquals: {\n \"sts:ExternalId\": \"\u003cYOUR_WORKPLACE_SLUG\u003e\",\n },\n },\n }],\n }),\n inlinePolicies: [{\n name: \"doppler_secret_manager\",\n policy: JSON.stringify({\n Version: \"2012-10-17\",\n Statement: [{\n Action: [\n \"secretsmanager:GetSecretValue\",\n \"secretsmanager:DescribeSecret\",\n \"secretsmanager:PutSecretValue\",\n \"secretsmanager:CreateSecret\",\n \"secretsmanager:DeleteSecret\",\n \"secretsmanager:TagResource\",\n \"secretsmanager:UpdateSecret\",\n ],\n Effect: \"Allow\",\n Resource: \"*\",\n }],\n }),\n }],\n});\nconst prod = new doppler.integration.AwsSecretsManager(\"prod\", {\n name: \"Production\",\n assumeRoleArn: dopplerSecretsManager.arn,\n});\nconst backendProd = new doppler.secretssync.AwsSecretsManager(\"backend_prod\", {\n integration: prod.id,\n project: \"backend\",\n config: \"prd\",\n region: \"us-east-1\",\n path: \"/backend/\",\n tags: {\n myTag: \"enabled\",\n },\n});\n```\n```python\nimport pulumi\nimport json\nimport pulumi_aws as aws\nimport pulumiverse_doppler as doppler\n\ndoppler_secrets_manager = aws.iam.Role(\"doppler_secrets_manager\",\n name=\"doppler_secrets_manager\",\n assume_role_policy=json.dumps({\n \"Version\": \"2012-10-17\",\n \"Statement\": [{\n \"Effect\": \"Allow\",\n \"Action\": \"sts:AssumeRole\",\n \"Principal\": {\n \"AWS\": \"arn:aws:iam::299900769157:user/doppler-integration-operator\",\n },\n \"Condition\": {\n \"StringEquals\": {\n \"sts:ExternalId\": \"\u003cYOUR_WORKPLACE_SLUG\u003e\",\n },\n },\n }],\n }),\n inline_policies=[aws.iam.RoleInlinePolicyArgs(\n name=\"doppler_secret_manager\",\n policy=json.dumps({\n \"Version\": \"2012-10-17\",\n \"Statement\": [{\n \"Action\": [\n \"secretsmanager:GetSecretValue\",\n \"secretsmanager:DescribeSecret\",\n \"secretsmanager:PutSecretValue\",\n \"secretsmanager:CreateSecret\",\n \"secretsmanager:DeleteSecret\",\n \"secretsmanager:TagResource\",\n \"secretsmanager:UpdateSecret\",\n ],\n \"Effect\": \"Allow\",\n \"Resource\": \"*\",\n }],\n }),\n )])\nprod = doppler.integration.AwsSecretsManager(\"prod\",\n name=\"Production\",\n assume_role_arn=doppler_secrets_manager.arn)\nbackend_prod = doppler.secrets_sync.AwsSecretsManager(\"backend_prod\",\n integration=prod.id,\n project=\"backend\",\n config=\"prd\",\n region=\"us-east-1\",\n path=\"/backend/\",\n tags={\n \"myTag\": \"enabled\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text.Json;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\nusing Doppler = Pulumiverse.Doppler;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var dopplerSecretsManager = new Aws.Iam.Role(\"doppler_secrets_manager\", new()\n {\n Name = \"doppler_secrets_manager\",\n AssumeRolePolicy = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n {\n [\"Version\"] = \"2012-10-17\",\n [\"Statement\"] = new[]\n {\n new Dictionary\u003cstring, object?\u003e\n {\n [\"Effect\"] = \"Allow\",\n [\"Action\"] = \"sts:AssumeRole\",\n [\"Principal\"] = new Dictionary\u003cstring, object?\u003e\n {\n [\"AWS\"] = \"arn:aws:iam::299900769157:user/doppler-integration-operator\",\n },\n [\"Condition\"] = new Dictionary\u003cstring, object?\u003e\n {\n [\"StringEquals\"] = new Dictionary\u003cstring, object?\u003e\n {\n [\"sts:ExternalId\"] = \"\u003cYOUR_WORKPLACE_SLUG\u003e\",\n },\n },\n },\n },\n }),\n InlinePolicies = new[]\n {\n new Aws.Iam.Inputs.RoleInlinePolicyArgs\n {\n Name = \"doppler_secret_manager\",\n Policy = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n {\n [\"Version\"] = \"2012-10-17\",\n [\"Statement\"] = new[]\n {\n new Dictionary\u003cstring, object?\u003e\n {\n [\"Action\"] = new[]\n {\n \"secretsmanager:GetSecretValue\",\n \"secretsmanager:DescribeSecret\",\n \"secretsmanager:PutSecretValue\",\n \"secretsmanager:CreateSecret\",\n \"secretsmanager:DeleteSecret\",\n \"secretsmanager:TagResource\",\n \"secretsmanager:UpdateSecret\",\n },\n [\"Effect\"] = \"Allow\",\n [\"Resource\"] = \"*\",\n },\n },\n }),\n },\n },\n });\n\n var prod = new Doppler.Integration.AwsSecretsManager(\"prod\", new()\n {\n Name = \"Production\",\n AssumeRoleArn = dopplerSecretsManager.Arn,\n });\n\n var backendProd = new Doppler.SecretsSync.AwsSecretsManager(\"backend_prod\", new()\n {\n Integration = prod.Id,\n Project = \"backend\",\n Config = \"prd\",\n Region = \"us-east-1\",\n Path = \"/backend/\",\n Tags = \n {\n { \"myTag\", \"enabled\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"encoding/json\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/iam\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-doppler/sdk/go/doppler/integration\"\n\t\"github.com/pulumiverse/pulumi-doppler/sdk/go/doppler/secretsSync\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttmpJSON0, err := json.Marshal(map[string]interface{}{\n\t\t\t\"Version\": \"2012-10-17\",\n\t\t\t\"Statement\": []map[string]interface{}{\n\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\"Effect\": \"Allow\",\n\t\t\t\t\t\"Action\": \"sts:AssumeRole\",\n\t\t\t\t\t\"Principal\": map[string]interface{}{\n\t\t\t\t\t\t\"AWS\": \"arn:aws:iam::299900769157:user/doppler-integration-operator\",\n\t\t\t\t\t},\n\t\t\t\t\t\"Condition\": map[string]interface{}{\n\t\t\t\t\t\t\"StringEquals\": map[string]interface{}{\n\t\t\t\t\t\t\t\"sts:ExternalId\": \"\u003cYOUR_WORKPLACE_SLUG\u003e\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\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\tjson0 := string(tmpJSON0)\n\t\ttmpJSON1, err := json.Marshal(map[string]interface{}{\n\t\t\t\"Version\": \"2012-10-17\",\n\t\t\t\"Statement\": []map[string]interface{}{\n\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\"Action\": []string{\n\t\t\t\t\t\t\"secretsmanager:GetSecretValue\",\n\t\t\t\t\t\t\"secretsmanager:DescribeSecret\",\n\t\t\t\t\t\t\"secretsmanager:PutSecretValue\",\n\t\t\t\t\t\t\"secretsmanager:CreateSecret\",\n\t\t\t\t\t\t\"secretsmanager:DeleteSecret\",\n\t\t\t\t\t\t\"secretsmanager:TagResource\",\n\t\t\t\t\t\t\"secretsmanager:UpdateSecret\",\n\t\t\t\t\t},\n\t\t\t\t\t\"Effect\": \"Allow\",\n\t\t\t\t\t\"Resource\": \"*\",\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\tjson1 := string(tmpJSON1)\n\t\tdopplerSecretsManager, err := iam.NewRole(ctx, \"doppler_secrets_manager\", \u0026iam.RoleArgs{\n\t\t\tName: pulumi.String(\"doppler_secrets_manager\"),\n\t\t\tAssumeRolePolicy: pulumi.String(json0),\n\t\t\tInlinePolicies: iam.RoleInlinePolicyArray{\n\t\t\t\t\u0026iam.RoleInlinePolicyArgs{\n\t\t\t\t\tName: pulumi.String(\"doppler_secret_manager\"),\n\t\t\t\t\tPolicy: pulumi.String(json1),\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\tprod, err := integration.NewAwsSecretsManager(ctx, \"prod\", \u0026integration.AwsSecretsManagerArgs{\n\t\t\tName: pulumi.String(\"Production\"),\n\t\t\tAssumeRoleArn: dopplerSecretsManager.Arn,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretsSync.NewAwsSecretsManager(ctx, \"backend_prod\", \u0026secretsSync.AwsSecretsManagerArgs{\n\t\t\tIntegration: prod.ID(),\n\t\t\tProject: pulumi.String(\"backend\"),\n\t\t\tConfig: pulumi.String(\"prd\"),\n\t\t\tRegion: pulumi.String(\"us-east-1\"),\n\t\t\tPath: pulumi.String(\"/backend/\"),\n\t\t\tTags: pulumi.StringMap{\n\t\t\t\t\"myTag\": pulumi.String(\"enabled\"),\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.aws.iam.Role;\nimport com.pulumi.aws.iam.RoleArgs;\nimport com.pulumi.aws.iam.inputs.RoleInlinePolicyArgs;\nimport com.pulumi.doppler.integration.AwsSecretsManager;\nimport com.pulumi.doppler.integration.AwsSecretsManagerArgs;\nimport com.pulumi.doppler.secretsSync.AwsSecretsManager;\nimport com.pulumi.doppler.secretsSync.AwsSecretsManagerArgs;\nimport static com.pulumi.codegen.internal.Serialization.*;\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 dopplerSecretsManager = new Role(\"dopplerSecretsManager\", RoleArgs.builder()\n .name(\"doppler_secrets_manager\")\n .assumeRolePolicy(serializeJson(\n jsonObject(\n jsonProperty(\"Version\", \"2012-10-17\"),\n jsonProperty(\"Statement\", jsonArray(jsonObject(\n jsonProperty(\"Effect\", \"Allow\"),\n jsonProperty(\"Action\", \"sts:AssumeRole\"),\n jsonProperty(\"Principal\", jsonObject(\n jsonProperty(\"AWS\", \"arn:aws:iam::299900769157:user/doppler-integration-operator\")\n )),\n jsonProperty(\"Condition\", jsonObject(\n jsonProperty(\"StringEquals\", jsonObject(\n jsonProperty(\"sts:ExternalId\", \"\u003cYOUR_WORKPLACE_SLUG\u003e\")\n ))\n ))\n )))\n )))\n .inlinePolicies(RoleInlinePolicyArgs.builder()\n .name(\"doppler_secret_manager\")\n .policy(serializeJson(\n jsonObject(\n jsonProperty(\"Version\", \"2012-10-17\"),\n jsonProperty(\"Statement\", jsonArray(jsonObject(\n jsonProperty(\"Action\", jsonArray(\n \"secretsmanager:GetSecretValue\", \n \"secretsmanager:DescribeSecret\", \n \"secretsmanager:PutSecretValue\", \n \"secretsmanager:CreateSecret\", \n \"secretsmanager:DeleteSecret\", \n \"secretsmanager:TagResource\", \n \"secretsmanager:UpdateSecret\"\n )),\n jsonProperty(\"Effect\", \"Allow\"),\n jsonProperty(\"Resource\", \"*\")\n )))\n )))\n .build())\n .build());\n\n var prod = new AwsSecretsManager(\"prod\", AwsSecretsManagerArgs.builder()\n .name(\"Production\")\n .assumeRoleArn(dopplerSecretsManager.arn())\n .build());\n\n var backendProd = new AwsSecretsManager(\"backendProd\", AwsSecretsManagerArgs.builder()\n .integration(prod.id())\n .project(\"backend\")\n .config(\"prd\")\n .region(\"us-east-1\")\n .path(\"/backend/\")\n .tags(Map.of(\"myTag\", \"enabled\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n dopplerSecretsManager:\n type: aws:iam:Role\n name: doppler_secrets_manager\n properties:\n name: doppler_secrets_manager\n assumeRolePolicy:\n fn::toJSON:\n Version: 2012-10-17\n Statement:\n - Effect: Allow\n Action: sts:AssumeRole\n Principal:\n AWS: arn:aws:iam::299900769157:user/doppler-integration-operator\n Condition:\n StringEquals:\n sts:ExternalId: \u003cYOUR_WORKPLACE_SLUG\u003e\n inlinePolicies:\n - name: doppler_secret_manager\n policy:\n fn::toJSON:\n Version: 2012-10-17\n Statement:\n - Action:\n - secretsmanager:GetSecretValue\n - secretsmanager:DescribeSecret\n - secretsmanager:PutSecretValue\n - secretsmanager:CreateSecret\n - secretsmanager:DeleteSecret\n - secretsmanager:TagResource\n - secretsmanager:UpdateSecret\n Effect: Allow\n Resource: '*'\n prod:\n type: doppler:integration:AwsSecretsManager\n properties:\n name: Production\n assumeRoleArn: ${dopplerSecretsManager.arn}\n backendProd:\n type: doppler:secretsSync:AwsSecretsManager\n name: backend_prod\n properties:\n integration: ${prod.id}\n project: backend\n config: prd\n region: us-east-1\n path: /backend/\n tags:\n myTag: enabled\n```\n\u003c!--End PulumiCodeChooser --\u003e\n", + "description": "Manage an AWS Secrets Manager Doppler sync.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as aws from \"@pulumi/aws\";\nimport * as doppler from \"@pulumiverse/doppler\";\n\nconst dopplerSecretsManager = new aws.iam.Role(\"doppler_secrets_manager\", {\n name: \"doppler_secrets_manager\",\n assumeRolePolicy: JSON.stringify({\n Version: \"2012-10-17\",\n Statement: [{\n Effect: \"Allow\",\n Action: \"sts:AssumeRole\",\n Principal: {\n AWS: \"arn:aws:iam::299900769157:user/doppler-integration-operator\",\n },\n Condition: {\n StringEquals: {\n \"sts:ExternalId\": \"\u003cYOUR_WORKPLACE_SLUG\u003e\",\n },\n },\n }],\n }),\n inlinePolicies: [{\n name: \"doppler_secret_manager\",\n policy: JSON.stringify({\n Version: \"2012-10-17\",\n Statement: [{\n Action: [\n \"secretsmanager:GetSecretValue\",\n \"secretsmanager:DescribeSecret\",\n \"secretsmanager:PutSecretValue\",\n \"secretsmanager:CreateSecret\",\n \"secretsmanager:DeleteSecret\",\n \"secretsmanager:TagResource\",\n \"secretsmanager:UpdateSecret\",\n ],\n Effect: \"Allow\",\n Resource: \"*\",\n }],\n }),\n }],\n});\nconst prod = new doppler.integration.AwsSecretsManager(\"prod\", {\n name: \"Production\",\n assumeRoleArn: dopplerSecretsManager.arn,\n});\nconst backendProd = new doppler.secretssync.AwsSecretsManager(\"backend_prod\", {\n integration: prod.id,\n project: \"backend\",\n config: \"prd\",\n region: \"us-east-1\",\n path: \"/backend/\",\n tags: {\n myTag: \"enabled\",\n },\n deleteBehavior: \"leave_in_target\",\n});\n```\n```python\nimport pulumi\nimport json\nimport pulumi_aws as aws\nimport pulumiverse_doppler as doppler\n\ndoppler_secrets_manager = aws.iam.Role(\"doppler_secrets_manager\",\n name=\"doppler_secrets_manager\",\n assume_role_policy=json.dumps({\n \"Version\": \"2012-10-17\",\n \"Statement\": [{\n \"Effect\": \"Allow\",\n \"Action\": \"sts:AssumeRole\",\n \"Principal\": {\n \"AWS\": \"arn:aws:iam::299900769157:user/doppler-integration-operator\",\n },\n \"Condition\": {\n \"StringEquals\": {\n \"sts:ExternalId\": \"\u003cYOUR_WORKPLACE_SLUG\u003e\",\n },\n },\n }],\n }),\n inline_policies=[{\n \"name\": \"doppler_secret_manager\",\n \"policy\": json.dumps({\n \"version\": \"2012-10-17\",\n \"statement\": [{\n \"action\": [\n \"secretsmanager:GetSecretValue\",\n \"secretsmanager:DescribeSecret\",\n \"secretsmanager:PutSecretValue\",\n \"secretsmanager:CreateSecret\",\n \"secretsmanager:DeleteSecret\",\n \"secretsmanager:TagResource\",\n \"secretsmanager:UpdateSecret\",\n ],\n \"effect\": \"Allow\",\n \"resource\": \"*\",\n }],\n }),\n }])\nprod = doppler.integration.AwsSecretsManager(\"prod\",\n name=\"Production\",\n assume_role_arn=doppler_secrets_manager.arn)\nbackend_prod = doppler.secrets_sync.AwsSecretsManager(\"backend_prod\",\n integration=prod.id,\n project=\"backend\",\n config=\"prd\",\n region=\"us-east-1\",\n path=\"/backend/\",\n tags={\n \"myTag\": \"enabled\",\n },\n delete_behavior=\"leave_in_target\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text.Json;\nusing Pulumi;\nusing Aws = Pulumi.Aws;\nusing Doppler = Pulumiverse.Doppler;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var dopplerSecretsManager = new Aws.Iam.Role(\"doppler_secrets_manager\", new()\n {\n Name = \"doppler_secrets_manager\",\n AssumeRolePolicy = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n {\n [\"Version\"] = \"2012-10-17\",\n [\"Statement\"] = new[]\n {\n new Dictionary\u003cstring, object?\u003e\n {\n [\"Effect\"] = \"Allow\",\n [\"Action\"] = \"sts:AssumeRole\",\n [\"Principal\"] = new Dictionary\u003cstring, object?\u003e\n {\n [\"AWS\"] = \"arn:aws:iam::299900769157:user/doppler-integration-operator\",\n },\n [\"Condition\"] = new Dictionary\u003cstring, object?\u003e\n {\n [\"StringEquals\"] = new Dictionary\u003cstring, object?\u003e\n {\n [\"sts:ExternalId\"] = \"\u003cYOUR_WORKPLACE_SLUG\u003e\",\n },\n },\n },\n },\n }),\n InlinePolicies = new[]\n {\n new Aws.Iam.Inputs.RoleInlinePolicyArgs\n {\n Name = \"doppler_secret_manager\",\n Policy = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n {\n [\"Version\"] = \"2012-10-17\",\n [\"Statement\"] = new[]\n {\n new Dictionary\u003cstring, object?\u003e\n {\n [\"Action\"] = new[]\n {\n \"secretsmanager:GetSecretValue\",\n \"secretsmanager:DescribeSecret\",\n \"secretsmanager:PutSecretValue\",\n \"secretsmanager:CreateSecret\",\n \"secretsmanager:DeleteSecret\",\n \"secretsmanager:TagResource\",\n \"secretsmanager:UpdateSecret\",\n },\n [\"Effect\"] = \"Allow\",\n [\"Resource\"] = \"*\",\n },\n },\n }),\n },\n },\n });\n\n var prod = new Doppler.Integration.AwsSecretsManager(\"prod\", new()\n {\n Name = \"Production\",\n AssumeRoleArn = dopplerSecretsManager.Arn,\n });\n\n var backendProd = new Doppler.SecretsSync.AwsSecretsManager(\"backend_prod\", new()\n {\n Integration = prod.Id,\n Project = \"backend\",\n Config = \"prd\",\n Region = \"us-east-1\",\n Path = \"/backend/\",\n Tags = \n {\n { \"myTag\", \"enabled\" },\n },\n DeleteBehavior = \"leave_in_target\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"encoding/json\"\n\n\t\"github.com/pulumi/pulumi-aws/sdk/v6/go/aws/iam\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-doppler/sdk/go/doppler/integration\"\n\t\"github.com/pulumiverse/pulumi-doppler/sdk/go/doppler/secretsSync\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttmpJSON0, err := json.Marshal(map[string]interface{}{\n\t\t\t\"Version\": \"2012-10-17\",\n\t\t\t\"Statement\": []map[string]interface{}{\n\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\"Effect\": \"Allow\",\n\t\t\t\t\t\"Action\": \"sts:AssumeRole\",\n\t\t\t\t\t\"Principal\": map[string]interface{}{\n\t\t\t\t\t\t\"AWS\": \"arn:aws:iam::299900769157:user/doppler-integration-operator\",\n\t\t\t\t\t},\n\t\t\t\t\t\"Condition\": map[string]interface{}{\n\t\t\t\t\t\t\"StringEquals\": map[string]interface{}{\n\t\t\t\t\t\t\t\"sts:ExternalId\": \"\u003cYOUR_WORKPLACE_SLUG\u003e\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\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\tjson0 := string(tmpJSON0)\n\t\ttmpJSON1, err := json.Marshal(map[string]interface{}{\n\t\t\t\"Version\": \"2012-10-17\",\n\t\t\t\"Statement\": []map[string]interface{}{\n\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\"Action\": []string{\n\t\t\t\t\t\t\"secretsmanager:GetSecretValue\",\n\t\t\t\t\t\t\"secretsmanager:DescribeSecret\",\n\t\t\t\t\t\t\"secretsmanager:PutSecretValue\",\n\t\t\t\t\t\t\"secretsmanager:CreateSecret\",\n\t\t\t\t\t\t\"secretsmanager:DeleteSecret\",\n\t\t\t\t\t\t\"secretsmanager:TagResource\",\n\t\t\t\t\t\t\"secretsmanager:UpdateSecret\",\n\t\t\t\t\t},\n\t\t\t\t\t\"Effect\": \"Allow\",\n\t\t\t\t\t\"Resource\": \"*\",\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\tjson1 := string(tmpJSON1)\n\t\tdopplerSecretsManager, err := iam.NewRole(ctx, \"doppler_secrets_manager\", \u0026iam.RoleArgs{\n\t\t\tName: pulumi.String(\"doppler_secrets_manager\"),\n\t\t\tAssumeRolePolicy: pulumi.String(json0),\n\t\t\tInlinePolicies: iam.RoleInlinePolicyArray{\n\t\t\t\t\u0026iam.RoleInlinePolicyArgs{\n\t\t\t\t\tName: pulumi.String(\"doppler_secret_manager\"),\n\t\t\t\t\tPolicy: pulumi.String(json1),\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\tprod, err := integration.NewAwsSecretsManager(ctx, \"prod\", \u0026integration.AwsSecretsManagerArgs{\n\t\t\tName: pulumi.String(\"Production\"),\n\t\t\tAssumeRoleArn: dopplerSecretsManager.Arn,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretsSync.NewAwsSecretsManager(ctx, \"backend_prod\", \u0026secretsSync.AwsSecretsManagerArgs{\n\t\t\tIntegration: prod.ID(),\n\t\t\tProject: pulumi.String(\"backend\"),\n\t\t\tConfig: pulumi.String(\"prd\"),\n\t\t\tRegion: pulumi.String(\"us-east-1\"),\n\t\t\tPath: pulumi.String(\"/backend/\"),\n\t\t\tTags: pulumi.StringMap{\n\t\t\t\t\"myTag\": pulumi.String(\"enabled\"),\n\t\t\t},\n\t\t\tDeleteBehavior: pulumi.String(\"leave_in_target\"),\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.aws.iam.Role;\nimport com.pulumi.aws.iam.RoleArgs;\nimport com.pulumi.aws.iam.inputs.RoleInlinePolicyArgs;\nimport com.pulumi.doppler.integration.AwsSecretsManager;\nimport com.pulumi.doppler.integration.AwsSecretsManagerArgs;\nimport com.pulumi.doppler.secretsSync.AwsSecretsManager;\nimport com.pulumi.doppler.secretsSync.AwsSecretsManagerArgs;\nimport static com.pulumi.codegen.internal.Serialization.*;\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 dopplerSecretsManager = new Role(\"dopplerSecretsManager\", RoleArgs.builder()\n .name(\"doppler_secrets_manager\")\n .assumeRolePolicy(serializeJson(\n jsonObject(\n jsonProperty(\"Version\", \"2012-10-17\"),\n jsonProperty(\"Statement\", jsonArray(jsonObject(\n jsonProperty(\"Effect\", \"Allow\"),\n jsonProperty(\"Action\", \"sts:AssumeRole\"),\n jsonProperty(\"Principal\", jsonObject(\n jsonProperty(\"AWS\", \"arn:aws:iam::299900769157:user/doppler-integration-operator\")\n )),\n jsonProperty(\"Condition\", jsonObject(\n jsonProperty(\"StringEquals\", jsonObject(\n jsonProperty(\"sts:ExternalId\", \"\u003cYOUR_WORKPLACE_SLUG\u003e\")\n ))\n ))\n )))\n )))\n .inlinePolicies(RoleInlinePolicyArgs.builder()\n .name(\"doppler_secret_manager\")\n .policy(serializeJson(\n jsonObject(\n jsonProperty(\"Version\", \"2012-10-17\"),\n jsonProperty(\"Statement\", jsonArray(jsonObject(\n jsonProperty(\"Action\", jsonArray(\n \"secretsmanager:GetSecretValue\", \n \"secretsmanager:DescribeSecret\", \n \"secretsmanager:PutSecretValue\", \n \"secretsmanager:CreateSecret\", \n \"secretsmanager:DeleteSecret\", \n \"secretsmanager:TagResource\", \n \"secretsmanager:UpdateSecret\"\n )),\n jsonProperty(\"Effect\", \"Allow\"),\n jsonProperty(\"Resource\", \"*\")\n )))\n )))\n .build())\n .build());\n\n var prod = new AwsSecretsManager(\"prod\", AwsSecretsManagerArgs.builder()\n .name(\"Production\")\n .assumeRoleArn(dopplerSecretsManager.arn())\n .build());\n\n var backendProd = new AwsSecretsManager(\"backendProd\", AwsSecretsManagerArgs.builder()\n .integration(prod.id())\n .project(\"backend\")\n .config(\"prd\")\n .region(\"us-east-1\")\n .path(\"/backend/\")\n .tags(Map.of(\"myTag\", \"enabled\"))\n .deleteBehavior(\"leave_in_target\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n dopplerSecretsManager:\n type: aws:iam:Role\n name: doppler_secrets_manager\n properties:\n name: doppler_secrets_manager\n assumeRolePolicy:\n fn::toJSON:\n Version: 2012-10-17\n Statement:\n - Effect: Allow\n Action: sts:AssumeRole\n Principal:\n AWS: arn:aws:iam::299900769157:user/doppler-integration-operator\n Condition:\n StringEquals:\n sts:ExternalId: \u003cYOUR_WORKPLACE_SLUG\u003e\n inlinePolicies:\n - name: doppler_secret_manager\n policy:\n fn::toJSON:\n Version: 2012-10-17\n Statement:\n - Action:\n - secretsmanager:GetSecretValue\n - secretsmanager:DescribeSecret\n - secretsmanager:PutSecretValue\n - secretsmanager:CreateSecret\n - secretsmanager:DeleteSecret\n - secretsmanager:TagResource\n - secretsmanager:UpdateSecret\n Effect: Allow\n Resource: '*'\n prod:\n type: doppler:integration:AwsSecretsManager\n properties:\n name: Production\n assumeRoleArn: ${dopplerSecretsManager.arn}\n backendProd:\n type: doppler:secretsSync:AwsSecretsManager\n name: backend_prod\n properties:\n integration: ${prod.id}\n project: backend\n config: prd\n region: us-east-1\n path: /backend/\n tags:\n myTag: enabled\n deleteBehavior: leave_in_target\n```\n\u003c!--End PulumiCodeChooser --\u003e\n", "properties": { "config": { "type": "string", "description": "The name of the Doppler config\n" }, + "deleteBehavior": { + "type": "string", + "description": "The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leave_in_target` (default) or `delete_from_target`.\n" + }, "integration": { "type": "string", "description": "The slug of the integration to use for this sync\n" }, + "kmsKeyId": { + "type": "string", + "description": "The AWS KMS key used to encrypt the secret (ID, Alias, or ARN)\n" + }, "path": { "type": "string", "description": "The path to the secret in AWS\n" @@ -1121,6 +1535,10 @@ "type": "string" }, "description": "AWS tags to attach to the secrets\n" + }, + "updateMetadata": { + "type": "boolean", + "description": "If enabled, Doppler will update the AWS secret metadata (e.g. KMS key) during every sync. If disabled, Doppler will only set secret metadata for new AWS secrets. Note that Doppler never updates tags for existing AWS secrets.\n" } }, "required": [ @@ -1136,11 +1554,20 @@ "description": "The name of the Doppler config\n", "willReplaceOnChanges": true }, + "deleteBehavior": { + "type": "string", + "description": "The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leave_in_target` (default) or `delete_from_target`.\n" + }, "integration": { "type": "string", "description": "The slug of the integration to use for this sync\n", "willReplaceOnChanges": true }, + "kmsKeyId": { + "type": "string", + "description": "The AWS KMS key used to encrypt the secret (ID, Alias, or ARN)\n", + "willReplaceOnChanges": true + }, "path": { "type": "string", "description": "The path to the secret in AWS\n", @@ -1163,6 +1590,11 @@ }, "description": "AWS tags to attach to the secrets\n", "willReplaceOnChanges": true + }, + "updateMetadata": { + "type": "boolean", + "description": "If enabled, Doppler will update the AWS secret metadata (e.g. KMS key) during every sync. If disabled, Doppler will only set secret metadata for new AWS secrets. Note that Doppler never updates tags for existing AWS secrets.\n", + "willReplaceOnChanges": true } }, "requiredInputs": [ @@ -1180,11 +1612,20 @@ "description": "The name of the Doppler config\n", "willReplaceOnChanges": true }, + "deleteBehavior": { + "type": "string", + "description": "The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leave_in_target` (default) or `delete_from_target`.\n" + }, "integration": { "type": "string", "description": "The slug of the integration to use for this sync\n", "willReplaceOnChanges": true }, + "kmsKeyId": { + "type": "string", + "description": "The AWS KMS key used to encrypt the secret (ID, Alias, or ARN)\n", + "willReplaceOnChanges": true + }, "path": { "type": "string", "description": "The path to the secret in AWS\n", @@ -1207,6 +1648,120 @@ }, "description": "AWS tags to attach to the secrets\n", "willReplaceOnChanges": true + }, + "updateMetadata": { + "type": "boolean", + "description": "If enabled, Doppler will update the AWS secret metadata (e.g. KMS key) during every sync. If disabled, Doppler will only set secret metadata for new AWS secrets. Note that Doppler never updates tags for existing AWS secrets.\n", + "willReplaceOnChanges": true + } + }, + "type": "object" + } + }, + "doppler:secretsSync/flyio:Flyio": { + "description": "Manage a Fly.io Doppler sync.\n\n## Example Usage\n\n\u003c!--Start PulumiCodeChooser --\u003e\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as doppler from \"@pulumiverse/doppler\";\n\nconst prod = new doppler.integration.Flyio(\"prod\", {\n name: \"TF Fly.io\",\n apiKey: \"fo1_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\n});\nconst backendProd = new doppler.secretssync.Flyio(\"backend_prod\", {\n integration: prod.id,\n project: \"backend\",\n config: \"prd\",\n appId: \"my-app\",\n restartMachines: true,\n deleteBehavior: \"leave_in_target\",\n});\n```\n```python\nimport pulumi\nimport pulumiverse_doppler as doppler\n\nprod = doppler.integration.Flyio(\"prod\",\n name=\"TF Fly.io\",\n api_key=\"fo1_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\")\nbackend_prod = doppler.secrets_sync.Flyio(\"backend_prod\",\n integration=prod.id,\n project=\"backend\",\n config=\"prd\",\n app_id=\"my-app\",\n restart_machines=True,\n delete_behavior=\"leave_in_target\")\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Linq;\nusing Pulumi;\nusing Doppler = Pulumiverse.Doppler;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var prod = new Doppler.Integration.Flyio(\"prod\", new()\n {\n Name = \"TF Fly.io\",\n ApiKey = \"fo1_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\n });\n\n var backendProd = new Doppler.SecretsSync.Flyio(\"backend_prod\", new()\n {\n Integration = prod.Id,\n Project = \"backend\",\n Config = \"prd\",\n AppId = \"my-app\",\n RestartMachines = true,\n DeleteBehavior = \"leave_in_target\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n\t\"github.com/pulumiverse/pulumi-doppler/sdk/go/doppler/integration\"\n\t\"github.com/pulumiverse/pulumi-doppler/sdk/go/doppler/secretsSync\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tprod, err := integration.NewFlyio(ctx, \"prod\", \u0026integration.FlyioArgs{\n\t\t\tName: pulumi.String(\"TF Fly.io\"),\n\t\t\tApiKey: pulumi.String(\"fo1_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretsSync.NewFlyio(ctx, \"backend_prod\", \u0026secretsSync.FlyioArgs{\n\t\t\tIntegration: prod.ID(),\n\t\t\tProject: pulumi.String(\"backend\"),\n\t\t\tConfig: pulumi.String(\"prd\"),\n\t\t\tAppId: pulumi.String(\"my-app\"),\n\t\t\tRestartMachines: pulumi.Bool(true),\n\t\t\tDeleteBehavior: pulumi.String(\"leave_in_target\"),\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.doppler.integration.Flyio;\nimport com.pulumi.doppler.integration.FlyioArgs;\nimport com.pulumi.doppler.secretsSync.Flyio;\nimport com.pulumi.doppler.secretsSync.FlyioArgs;\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 prod = new Flyio(\"prod\", FlyioArgs.builder()\n .name(\"TF Fly.io\")\n .apiKey(\"fo1_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\")\n .build());\n\n var backendProd = new Flyio(\"backendProd\", FlyioArgs.builder()\n .integration(prod.id())\n .project(\"backend\")\n .config(\"prd\")\n .appId(\"my-app\")\n .restartMachines(true)\n .deleteBehavior(\"leave_in_target\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n prod:\n type: doppler:integration:Flyio\n properties:\n name: TF Fly.io\n apiKey: fo1_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n backendProd:\n type: doppler:secretsSync:Flyio\n name: backend_prod\n properties:\n integration: ${prod.id}\n project: backend\n config: prd\n appId: my-app\n restartMachines: true\n deleteBehavior: leave_in_target\n```\n\u003c!--End PulumiCodeChooser --\u003e\n", + "properties": { + "appId": { + "type": "string", + "description": "The app ID\n" + }, + "config": { + "type": "string", + "description": "The name of the Doppler config\n" + }, + "deleteBehavior": { + "type": "string", + "description": "The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leave_in_target` (default) or `delete_from_target`.\n" + }, + "integration": { + "type": "string", + "description": "The slug of the integration to use for this sync\n" + }, + "project": { + "type": "string", + "description": "The name of the Doppler project\n" + }, + "restartMachines": { + "type": "boolean", + "description": "Whether or not to restart the Fly.io machines when secrets are updated\n" + } + }, + "required": [ + "appId", + "config", + "integration", + "project", + "restartMachines" + ], + "inputProperties": { + "appId": { + "type": "string", + "description": "The app ID\n", + "willReplaceOnChanges": true + }, + "config": { + "type": "string", + "description": "The name of the Doppler config\n", + "willReplaceOnChanges": true + }, + "deleteBehavior": { + "type": "string", + "description": "The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leave_in_target` (default) or `delete_from_target`.\n" + }, + "integration": { + "type": "string", + "description": "The slug of the integration to use for this sync\n", + "willReplaceOnChanges": true + }, + "project": { + "type": "string", + "description": "The name of the Doppler project\n", + "willReplaceOnChanges": true + }, + "restartMachines": { + "type": "boolean", + "description": "Whether or not to restart the Fly.io machines when secrets are updated\n", + "willReplaceOnChanges": true + } + }, + "requiredInputs": [ + "appId", + "config", + "integration", + "project", + "restartMachines" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering Flyio resources.\n", + "properties": { + "appId": { + "type": "string", + "description": "The app ID\n", + "willReplaceOnChanges": true + }, + "config": { + "type": "string", + "description": "The name of the Doppler config\n", + "willReplaceOnChanges": true + }, + "deleteBehavior": { + "type": "string", + "description": "The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leave_in_target` (default) or `delete_from_target`.\n" + }, + "integration": { + "type": "string", + "description": "The slug of the integration to use for this sync\n", + "willReplaceOnChanges": true + }, + "project": { + "type": "string", + "description": "The name of the Doppler project\n", + "willReplaceOnChanges": true + }, + "restartMachines": { + "type": "boolean", + "description": "Whether or not to restart the Fly.io machines when secrets are updated\n", + "willReplaceOnChanges": true } }, "type": "object" @@ -1219,6 +1774,10 @@ "type": "string", "description": "The name of the Doppler config\n" }, + "deleteBehavior": { + "type": "string", + "description": "The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leave_in_target` (default) or `delete_from_target`.\n" + }, "environmentName": { "type": "string", "description": "The GitHub repo environment name to sync to (only used when `sync_target` is set to \"repo\")\n" @@ -1256,6 +1815,10 @@ "description": "The name of the Doppler config\n", "willReplaceOnChanges": true }, + "deleteBehavior": { + "type": "string", + "description": "The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leave_in_target` (default) or `delete_from_target`.\n" + }, "environmentName": { "type": "string", "description": "The GitHub repo environment name to sync to (only used when `sync_target` is set to \"repo\")\n", @@ -1301,6 +1864,10 @@ "description": "The name of the Doppler config\n", "willReplaceOnChanges": true }, + "deleteBehavior": { + "type": "string", + "description": "The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leave_in_target` (default) or `delete_from_target`.\n" + }, "environmentName": { "type": "string", "description": "The GitHub repo environment name to sync to (only used when `sync_target` is set to \"repo\")\n", @@ -1342,6 +1909,10 @@ "type": "string", "description": "The name of the Doppler config\n" }, + "deleteBehavior": { + "type": "string", + "description": "The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leave_in_target` (default) or `delete_from_target`.\n" + }, "integration": { "type": "string", "description": "The slug of the integration to use for this sync\n" @@ -1382,6 +1953,10 @@ "description": "The name of the Doppler config\n", "willReplaceOnChanges": true }, + "deleteBehavior": { + "type": "string", + "description": "The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leave_in_target` (default) or `delete_from_target`.\n" + }, "integration": { "type": "string", "description": "The slug of the integration to use for this sync\n", @@ -1431,6 +2006,10 @@ "description": "The name of the Doppler config\n", "willReplaceOnChanges": true }, + "deleteBehavior": { + "type": "string", + "description": "The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leave_in_target` (default) or `delete_from_target`.\n" + }, "integration": { "type": "string", "description": "The slug of the integration to use for this sync\n", diff --git a/provider/go.mod b/provider/go.mod index f629c86..ce04707 100644 --- a/provider/go.mod +++ b/provider/go.mod @@ -1,16 +1,18 @@ module github.com/pulumiverse/pulumi-doppler/provider -go 1.21 +go 1.22 + +toolchain go1.22.1 replace ( - github.com/hashicorp/go-getter v1.5.0 => github.com/hashicorp/go-getter v1.4.0 - github.com/hashicorp/terraform-plugin-sdk/v2 => github.com/pulumi/terraform-plugin-sdk/v2 v2.0.0-20240520223432-0c0bf0d65f10 + github.com/hashicorp/go-getter v1.5.0 => github.com/hashicorp/go-getter v1.7.5 + github.com/hashicorp/terraform-plugin-sdk/v2 => github.com/pulumi/terraform-plugin-sdk/v2 v2.0.0-20240229143312-4f60ee4e2975 ) require ( - github.com/DopplerHQ/terraform-provider-doppler v1.7.1 - github.com/pulumi/pulumi-terraform-bridge/v3 v3.84.0 - github.com/pulumi/pulumi/sdk/v3 v3.118.0 + github.com/DopplerHQ/terraform-provider-doppler v1.9.0 + github.com/pulumi/pulumi-terraform-bridge/v3 v3.88.0 + github.com/pulumi/pulumi/sdk/v3 v3.126.0 ) require ( @@ -23,9 +25,9 @@ require ( cloud.google.com/go/longrunning v0.5.5 // indirect cloud.google.com/go/storage v1.39.1 // indirect dario.cat/mergo v1.0.0 // indirect - github.com/Azure/azure-sdk-for-go/sdk/azcore v1.10.0 // indirect - github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.5.1 // indirect - github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.2 // indirect + github.com/Azure/azure-sdk-for-go/sdk/azcore v1.11.1 // indirect + github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.7.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/internal v1.8.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/keyvault/azkeys v0.10.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/keyvault/internal v0.7.1 // indirect github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2 // indirect @@ -63,7 +65,7 @@ require ( 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/bubbletea v0.25.0 // indirect github.com/charmbracelet/lipgloss v0.7.1 // indirect github.com/cheggaaa/pb v1.0.29 // indirect github.com/cloudflare/circl v1.3.7 // indirect @@ -77,7 +79,6 @@ require ( github.com/ettle/strcase v0.1.1 // indirect github.com/fatih/color v1.16.0 // indirect github.com/felixge/httpsnoop v1.0.4 // 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.12.0 // indirect @@ -103,10 +104,10 @@ require ( 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-getter v1.7.5 // indirect + github.com/hashicorp/go-hclog v1.6.3 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect - github.com/hashicorp/go-retryablehttp v0.7.5 // indirect + github.com/hashicorp/go-retryablehttp v0.7.7 // 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/parseutil v0.1.8 // indirect @@ -166,15 +167,16 @@ require ( 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.2 // indirect + github.com/pulumi/esc v0.9.1 // indirect + github.com/pulumi/inflector v0.1.1 // indirect github.com/pulumi/pulumi-java/pkg v0.11.0 // indirect github.com/pulumi/pulumi-terraform-bridge/x/muxer v0.0.8 // indirect - github.com/pulumi/pulumi-yaml v1.7.0 // indirect - github.com/pulumi/pulumi/pkg/v3 v3.118.0 // indirect + github.com/pulumi/pulumi-yaml v1.9.1 // indirect + github.com/pulumi/pulumi/pkg/v3 v3.126.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/rogpeppe/go-internal v1.12.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 @@ -211,17 +213,17 @@ require ( go.uber.org/atomic v1.9.0 // indirect gocloud.dev v0.37.0 // indirect gocloud.dev/secrets/hashivault v0.37.0 // indirect - golang.org/x/crypto v0.23.0 // indirect - golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa // indirect - golang.org/x/mod v0.15.0 // indirect - golang.org/x/net v0.25.0 // indirect + golang.org/x/crypto v0.24.0 // indirect + golang.org/x/exp v0.0.0-20240604190554-fc45aab8b7f8 // indirect + golang.org/x/mod v0.18.0 // indirect + golang.org/x/net v0.26.0 // indirect golang.org/x/oauth2 v0.18.0 // indirect - golang.org/x/sync v0.6.0 // indirect - golang.org/x/sys v0.20.0 // indirect - golang.org/x/term v0.20.0 // indirect - golang.org/x/text v0.15.0 // indirect + golang.org/x/sync v0.7.0 // indirect + golang.org/x/sys v0.21.0 // indirect + golang.org/x/term v0.21.0 // indirect + golang.org/x/text v0.16.0 // indirect golang.org/x/time v0.5.0 // indirect - golang.org/x/tools v0.17.0 // indirect + golang.org/x/tools v0.22.0 // indirect golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 // indirect google.golang.org/api v0.169.0 // indirect google.golang.org/appengine v1.6.8 // indirect diff --git a/provider/go.sum b/provider/go.sum index 383cf49..d413f0b 100644 --- a/provider/go.sum +++ b/provider/go.sum @@ -1152,12 +1152,12 @@ 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/Azure/azure-sdk-for-go/sdk/azcore v1.10.0 h1:n1DH8TPV4qqPTje2RcUBYwtrTWlabVp4n46+74X2pn4= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.10.0/go.mod h1:HDcZnuGbiyppErN6lB+idp4CKhjbc8gwjto6OPpyggM= -github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.5.1 h1:sO0/P7g68FrryJzljemN+6GTssUXdANk6aJ7T1ZxnsQ= -github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.5.1/go.mod h1:h8hyGFDsU5HMivxiS2iYFZsgDbU9OnnJ163x5UGVKYo= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.2 h1:LqbJ/WzJUwBf8UiaSzgX7aMclParm9/5Vgp+TY51uBQ= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.2/go.mod h1:yInRyqWXAuaPrgI7p70+lDDgh3mlBohis29jGMISnmc= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.11.1 h1:E+OJmp2tPvt1W+amx48v1eqbjDYsgN+RzP4q16yV5eM= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.11.1/go.mod h1:a6xsAQUZg+VsS3TJ05SRp524Hs4pZ/AeFSr5ENf0Yjo= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.7.0 h1:tfLQ34V6F7tVSwoTf/4lH5sE0o6eCJuNDTmH09nDpbc= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.7.0/go.mod h1:9kIvujWAA58nmPmWB1m23fyWic1kYZMxD9CxaWn4Qpg= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.8.0 h1:jBQA3cKT4L2rWMpgE7Yt3Hwh2aUj8KXjIGLxjHeYNNo= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.8.0/go.mod h1:4OG6tQ9EOP/MT0NMjDlRzWoVFxfu9rN9B2X+tlSVktg= github.com/Azure/azure-sdk-for-go/sdk/keyvault/azkeys v0.10.0 h1:m/sWOGCREuSBqg2htVQTBY8nOZpyajYztF0vUvSZTuM= github.com/Azure/azure-sdk-for-go/sdk/keyvault/azkeys v0.10.0/go.mod h1:Pu5Zksi2KrU7LPbZbNINx6fuVrUp/ffvpxdDj+i8LeE= github.com/Azure/azure-sdk-for-go/sdk/keyvault/internal v0.7.1 h1:FbH3BbSb4bvGluTesZZ+ttN/MDsnMmQP36OSnDuSXqw= @@ -1168,8 +1168,8 @@ github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03 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/DopplerHQ/terraform-provider-doppler v1.7.1 h1:E0rzwRr/p2AM0gqBvSEQPlHzBNzCA3ebCMRuNenM208= -github.com/DopplerHQ/terraform-provider-doppler v1.7.1/go.mod h1:QFYkMlBwBT27j+Vi5TXC0VXMgO8mo4JKwxMJVe7u6GQ= +github.com/DopplerHQ/terraform-provider-doppler v1.9.0 h1:4wjKfyerldUpBprMUYGfGhU2KJRI6n1smp/yDffT0DA= +github.com/DopplerHQ/terraform-provider-doppler v1.9.0/go.mod h1:1cUmyihda0b4L2Xclj2eftCChGc8+asRGVDKHJx+vt8= 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= @@ -1296,8 +1296,8 @@ github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XL 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/bubbletea v0.25.0 h1:bAfwk7jRz7FKFl9RzlIULPkStffg5k6pNt5dywy4TcM= +github.com/charmbracelet/bubbletea v0.25.0/go.mod h1:EN3QDR1T5ZdWmdfDzYcqOCAps45+QIJbLOBxmVNWNNg= github.com/charmbracelet/lipgloss v0.7.1 h1:17WMwi7N1b1rVWOjMT+rCh7sQkvDU75B2hbZpc5Kc1E= github.com/charmbracelet/lipgloss v0.7.1/go.mod h1:yG0k3giv8Qj8edTCbbg6AlQ5e8KNWpFujkNawKNhE2c= github.com/cheggaaa/pb v1.0.27/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s= @@ -1339,8 +1339,6 @@ github.com/deckarep/golang-set/v2 v2.5.0 h1:hn6cEZtQ0h3J8kFrHR/NrzyOoTnjgW1+FmNJ github.com/deckarep/golang-set/v2 v2.5.0/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpOF4IN+y82NBOac4= 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.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI= -github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= @@ -1386,8 +1384,6 @@ github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3 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/gedex/inflector v0.0.0-20170307190818-16278e9db813 h1:Uc+IZ7gYqAf/rSGFplbWBSHaGolEQlNLgMgSE3ccnIQ= -github.com/gedex/inflector v0.0.0-20170307190818-16278e9db813/go.mod h1:P+oSoE9yhSRvsmYyZsshflcR6ePWYLql6UU1amW13IM= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gliderlabs/ssh v0.3.5/go.mod h1:8XB4KraRrX39qHhT6yxPsHedjA08I/uBVwj4xC+/+z4= github.com/gliderlabs/ssh v0.3.7 h1:iV3Bqi942d9huXnzEF2Mt+CY9gLu8DNM4Obd+8bODRE= @@ -1598,20 +1594,21 @@ github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/S 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-getter v1.7.5 h1:dT58k9hQ/vbxNMwoI5+xFYAJuv6152UNvdHokfI5wE4= +github.com/hashicorp/go-getter v1.7.5/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.14.1/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= -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-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB11/k= +github.com/hashicorp/go-hclog v1.6.3/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= 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.6.0/go.mod h1:lBS5MtSSBZk0SHc66KACcjjlU6WzEVP/8pwz68aMkCI= -github.com/hashicorp/go-retryablehttp v0.7.5 h1:bJj+Pj19UZMIweq/iie+1u5YCdGrnxCT9yvm0e+Nd5M= -github.com/hashicorp/go-retryablehttp v0.7.5/go.mod h1:Jy/gPYAdjqffZ/yFGCFV2doI5wjtH1ewM9u8iYVjtX8= +github.com/hashicorp/go-retryablehttp v0.7.7 h1:C8hUCYzor8PIfXHa4UrZkU4VvK8o9ISHxT2Q8+VepXU= +github.com/hashicorp/go-retryablehttp v0.7.7/go.mod h1:pkQpWZeYWskR+D1tR2O5OcBFOxfA7DoAO6xtkuQnHTk= 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= @@ -1893,28 +1890,30 @@ github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3d github.com/prometheus/client_model v0.4.0/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU= 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.2 h1:+z+l8cuwIauLSwXQS0uoI3rqB+YG4SzsZYtHfNoXBvw= -github.com/pulumi/esc v0.6.2/go.mod h1:jNnYNjzsOgVTjCp0LL24NsCk8ZJxq4IoLQdCT0X7l8k= -github.com/pulumi/providertest v0.0.11 h1:mg8MQ7Cq7+9XlHIkBD+aCqQO4mwAJEISngZgVdnQUe8= -github.com/pulumi/providertest v0.0.11/go.mod h1:HsxjVsytcMIuNj19w1lT2W0QXY0oReXl1+h6eD2JXP8= +github.com/pulumi/esc v0.9.1 h1:HH5eEv8sgyxSpY5a8yePyqFXzA8cvBvapfH8457+mIs= +github.com/pulumi/esc v0.9.1/go.mod h1:oEJ6bOsjYlQUpjf70GiX+CXn3VBmpwFDxUTlmtUN84c= +github.com/pulumi/inflector v0.1.1 h1:dvlxlWtXwOJTUUtcYDvwnl6Mpg33prhK+7mzeF+SobA= +github.com/pulumi/inflector v0.1.1/go.mod h1:HUFCjcPTz96YtTuUlwG3i3EZG4WlniBvR9bd+iJxCUY= +github.com/pulumi/providertest v0.0.14 h1:5QlAPAAs82jkQraHsJvq1xgVfC7xtW8sFJwv2pHgxQ8= +github.com/pulumi/providertest v0.0.14/go.mod h1:GcsqEGgSngwaNOD+kICJPIUQlnA911fGBU8HDlJvVL0= github.com/pulumi/pulumi-java/pkg v0.11.0 h1:Jw9gBvyfmfOMq/EkYDm9+zGPxsDAA8jfeMpHmtZ+1oA= github.com/pulumi/pulumi-java/pkg v0.11.0/go.mod h1:sXAk25P47AQVQL6ilAbFmRNgZykC7og/+87ihnqzFTc= -github.com/pulumi/pulumi-terraform-bridge/v3 v3.84.0 h1:WgRvBOGMkuUE6XLq0wzp27RkWuucrKLRPVB/5+7tBwU= -github.com/pulumi/pulumi-terraform-bridge/v3 v3.84.0/go.mod h1:ju1Cn9qmqkStWP0Hyfzt3NOm+PnaiWnodXGx3TYaGyU= +github.com/pulumi/pulumi-terraform-bridge/v3 v3.88.0 h1:0W2Y3Fk7VAWHpjD3FwzVnqWo7g1hD+96C0YDobMnvDU= +github.com/pulumi/pulumi-terraform-bridge/v3 v3.88.0/go.mod h1:QSDiqiCMMbfzrsp3oyRPWgSVE/dkVH5ujxoFappqjdo= github.com/pulumi/pulumi-terraform-bridge/x/muxer v0.0.8 h1:mav2tSitA9BPJPLLahKgepHyYsMzwaTm4cvp0dcTMYw= github.com/pulumi/pulumi-terraform-bridge/x/muxer v0.0.8/go.mod h1:qUYk2c9i/yqMGNj9/bQyXpS39BxNDSXYjVN1njnq0zY= -github.com/pulumi/pulumi-yaml v1.7.0 h1:SbFSaqkH8UiMEy0ZSH9sHLQlmV8so0iCLfvLbPtVP7s= -github.com/pulumi/pulumi-yaml v1.7.0/go.mod h1:pCfYHSRmdl+5dM/7eT2uDQS528YOhAhiqbn9pwRzW20= -github.com/pulumi/pulumi/pkg/v3 v3.118.0 h1:i2OJe0Rl6BDxupJ0ix9HczAGKUsc6H6cU9svwDe1TYk= -github.com/pulumi/pulumi/pkg/v3 v3.118.0/go.mod h1:fbDHFdEJtFRkHu3Q6Sd7X3PalUsIXLbHT/pHfsbldlo= -github.com/pulumi/pulumi/sdk/v3 v3.118.0 h1:NboaaB4cNuehzsax38PO1jZOS6Mzbx/jNaDNaHPmg4c= -github.com/pulumi/pulumi/sdk/v3 v3.118.0/go.mod h1:kNea72+FQk82OjZ3yEP4dl6nbAl2ngE8PDBc0iFAaHg= +github.com/pulumi/pulumi-yaml v1.9.1 h1:JPeI80M23SPactxgnCFS1casZlSr7ZhAXwSx4H55QQ4= +github.com/pulumi/pulumi-yaml v1.9.1/go.mod h1:OH0R34yJxA5u6zjYBN4JXcWoEvfkRoOVWi6viu8buoA= +github.com/pulumi/pulumi/pkg/v3 v3.126.0 h1:XaZU1ehjHN2I5ihkfwxK/UFMDiCDM9FSt2TBnbldAx4= +github.com/pulumi/pulumi/pkg/v3 v3.126.0/go.mod h1:1P4/oK9zceOJUm48QQl/TqjDN68lfsdnTR1FITTFddw= +github.com/pulumi/pulumi/sdk/v3 v3.126.0 h1:6GQVhwG2jgnG7wjRiWgrq0/sU39onctAiBcvTlqb20s= +github.com/pulumi/pulumi/sdk/v3 v3.126.0/go.mod h1:p1U24en3zt51agx+WlNboSOV8eLlPWYAkxMzVEXKbnY= 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-20240520223432-0c0bf0d65f10 h1:M6Ceq1o6gGeEKxTZgJ2CKLye3p67ZZjnsAwxr5VC32A= -github.com/pulumi/terraform-plugin-sdk/v2 v2.0.0-20240520223432-0c0bf0d65f10/go.mod h1:H+8tjs9TjV2w57QFVSMBQacf8k/E1XwLXGCARgViC6A= +github.com/pulumi/terraform-plugin-sdk/v2 v2.0.0-20240229143312-4f60ee4e2975 h1:1WBy43K/lHEdS5Hliwf3ylVSfAu5s0KhhEs6wNeP11Y= +github.com/pulumi/terraform-plugin-sdk/v2 v2.0.0-20240229143312-4f60ee4e2975/go.mod h1:H+8tjs9TjV2w57QFVSMBQacf8k/E1XwLXGCARgViC6A= github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= @@ -1926,8 +1925,9 @@ github.com/rogpeppe/go-charset v0.0.0-20180617210344-2471d30d28b4/go.mod h1:qgYe 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/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= +github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= 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= @@ -2105,8 +2105,8 @@ golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= -golang.org/x/crypto v0.23.0 h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI= -golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= +golang.org/x/crypto v0.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI= +golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM= 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= @@ -2122,8 +2122,8 @@ golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u0 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/exp v0.0.0-20240604190554-fc45aab8b7f8 h1:LoYXNGAShUG3m/ehNk4iFctuhGX/+R1ZpfJ4/ia80JM= +golang.org/x/exp v0.0.0-20240604190554-fc45aab8b7f8/go.mod h1:jj3sYF3dwk5D+ghuXyeI3r5MFf+NT2An6/9dOA95KSI= 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= @@ -2172,8 +2172,9 @@ golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.11.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/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/mod v0.15.0 h1:SernR4v+D55NyBH2QiEQrlBAnj1ECL6AGrA5+dPaMY8= golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.18.0 h1:5+9lSbEzPSdWkH32vYPBwEpX8KwDbM52Ud9xBUvNlb0= +golang.org/x/mod v0.18.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= 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= @@ -2251,8 +2252,8 @@ golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= golang.org/x/net v0.18.0/go.mod h1:/czyP5RqHAH4odGYxBJ1qz0+CE5WZ+2j1YgoEo8F2jQ= golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U= golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= -golang.org/x/net v0.25.0 h1:d/OCCoBEUq33pjydKrGQhw7IlUPI2Oylr+8qLx49kac= -golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= +golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ= +golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= 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= @@ -2310,8 +2311,9 @@ golang.org/x/sync v0.2.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sync v0.4.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= +golang.org/x/sync v0.7.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-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -2421,8 +2423,8 @@ golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y= -golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws= +golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= 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= @@ -2443,8 +2445,8 @@ golang.org/x/term v0.14.0/go.mod h1:TySc+nGkYR6qt8km8wUhuFRTVSMIX3XPR58y2lC8vww= golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY= golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= -golang.org/x/term v0.20.0 h1:VnkxpohqXaOBYJtBmEppKUG6mXpi+4O6purfc2+sMhw= -golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= +golang.org/x/term v0.21.0 h1:WVXCp+/EBEHOj53Rvu+7KiT/iElMrO8ACK16SMZ3jaA= +golang.org/x/term v0.21.0/go.mod h1:ooXLefLobQVslOqselCNF4SxFAaoS6KujMbsGzSDmX0= 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= @@ -2466,8 +2468,8 @@ golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.12.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/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk= -golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= +golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= 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= @@ -2549,8 +2551,9 @@ golang.org/x/tools v0.9.1/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= golang.org/x/tools v0.9.3/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= golang.org/x/tools v0.10.0/go.mod h1:UJwyiVBsOA2uwvK/e5OY3GTpDUJriEd+/YlqAwLPmyM= golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= -golang.org/x/tools v0.17.0 h1:FvmRgNOcs3kOa+T20R1uhfP9F6HgG2mfxDv1vrx1Htc= golang.org/x/tools v0.17.0/go.mod h1:xsh6VxdV005rRVaS6SSAf9oiAqljS7UZUacMZ8Bnsps= +golang.org/x/tools v0.22.0 h1:gqSGLZqv+AI9lIQzniJ0nZDRG5GBPsSi+DRNHWNz6yA= +golang.org/x/tools v0.22.0/go.mod h1:aCwcsjqvq7Yqt6TNyX7QMU2enbQ/Gt0bo6krSeEri+c= 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= diff --git a/sdk/dotnet/Environment.cs b/sdk/dotnet/Environment.cs index ef81345..c14b064 100644 --- a/sdk/dotnet/Environment.cs +++ b/sdk/dotnet/Environment.cs @@ -48,6 +48,12 @@ public partial class Environment : global::Pulumi.CustomResource [Output("name")] public Output Name { get; private set; } = null!; + /// + /// Whether or not personal configs are enabled for the environment + /// + [Output("personalConfigs")] + public Output PersonalConfigs { get; private set; } = null!; + /// /// The name of the Doppler project where the environment is located /// @@ -113,6 +119,12 @@ public sealed class EnvironmentArgs : global::Pulumi.ResourceArgs [Input("name", required: true)] public Input Name { get; set; } = null!; + /// + /// Whether or not personal configs are enabled for the environment + /// + [Input("personalConfigs")] + public Input? PersonalConfigs { get; set; } + /// /// The name of the Doppler project where the environment is located /// @@ -139,6 +151,12 @@ public sealed class EnvironmentState : global::Pulumi.ResourceArgs [Input("name")] public Input? Name { get; set; } + /// + /// Whether or not personal configs are enabled for the environment + /// + [Input("personalConfigs")] + public Input? PersonalConfigs { get; set; } + /// /// The name of the Doppler project where the environment is located /// diff --git a/sdk/dotnet/Inputs/WebhookAuthenticationArgs.cs b/sdk/dotnet/Inputs/WebhookAuthenticationArgs.cs new file mode 100644 index 0000000..935e5fe --- /dev/null +++ b/sdk/dotnet/Inputs/WebhookAuthenticationArgs.cs @@ -0,0 +1,51 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; +using Pulumi; + +namespace Pulumiverse.Doppler.Inputs +{ + + public sealed class WebhookAuthenticationArgs : global::Pulumi.ResourceArgs + { + [Input("password")] + private Input? _password; + public Input? Password + { + get => _password; + set + { + var emptySecret = Output.CreateSecret(0); + _password = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } + + [Input("token")] + private Input? _token; + public Input? Token + { + get => _token; + set + { + var emptySecret = Output.CreateSecret(0); + _token = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } + + [Input("type", required: true)] + public Input Type { get; set; } = null!; + + [Input("username")] + public Input? Username { get; set; } + + public WebhookAuthenticationArgs() + { + } + public static new WebhookAuthenticationArgs Empty => new WebhookAuthenticationArgs(); + } +} diff --git a/sdk/dotnet/Inputs/WebhookAuthenticationGetArgs.cs b/sdk/dotnet/Inputs/WebhookAuthenticationGetArgs.cs new file mode 100644 index 0000000..4ec35b2 --- /dev/null +++ b/sdk/dotnet/Inputs/WebhookAuthenticationGetArgs.cs @@ -0,0 +1,51 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; +using Pulumi; + +namespace Pulumiverse.Doppler.Inputs +{ + + public sealed class WebhookAuthenticationGetArgs : global::Pulumi.ResourceArgs + { + [Input("password")] + private Input? _password; + public Input? Password + { + get => _password; + set + { + var emptySecret = Output.CreateSecret(0); + _password = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } + + [Input("token")] + private Input? _token; + public Input? Token + { + get => _token; + set + { + var emptySecret = Output.CreateSecret(0); + _token = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } + + [Input("type", required: true)] + public Input Type { get; set; } = null!; + + [Input("username")] + public Input? Username { get; set; } + + public WebhookAuthenticationGetArgs() + { + } + public static new WebhookAuthenticationGetArgs Empty => new WebhookAuthenticationGetArgs(); + } +} diff --git a/sdk/dotnet/Integration/AwsParameterStore.cs b/sdk/dotnet/Integration/AwsParameterStore.cs index c7edd05..bc3f89f 100644 --- a/sdk/dotnet/Integration/AwsParameterStore.cs +++ b/sdk/dotnet/Integration/AwsParameterStore.cs @@ -103,6 +103,7 @@ namespace Pulumiverse.Doppler.Integration /// { /// { "myTag", "enabled" }, /// }, + /// DeleteBehavior = "leave_in_target", /// }); /// /// }); diff --git a/sdk/dotnet/Integration/AwsSecretsManager.cs b/sdk/dotnet/Integration/AwsSecretsManager.cs index 93fd2b9..1962e5d 100644 --- a/sdk/dotnet/Integration/AwsSecretsManager.cs +++ b/sdk/dotnet/Integration/AwsSecretsManager.cs @@ -99,6 +99,7 @@ namespace Pulumiverse.Doppler.Integration /// { /// { "myTag", "enabled" }, /// }, + /// DeleteBehavior = "leave_in_target", /// }); /// /// }); diff --git a/sdk/dotnet/Integration/Flyio.cs b/sdk/dotnet/Integration/Flyio.cs new file mode 100644 index 0000000..1e31db4 --- /dev/null +++ b/sdk/dotnet/Integration/Flyio.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; +using Pulumi; + +namespace Pulumiverse.Doppler.Integration +{ + /// + /// Manage a Fly.io Doppler integration. + /// + /// ## Example Usage + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Doppler = Pulumiverse.Doppler; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var prod = new Doppler.Integration.Flyio("prod", new() + /// { + /// Name = "TF Fly.io", + /// ApiKey = "fo1_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", + /// }); + /// + /// var backendProd = new Doppler.SecretsSync.Flyio("backend_prod", new() + /// { + /// Integration = prod.Id, + /// Project = "backend", + /// Config = "prd", + /// AppId = "my-app", + /// RestartMachines = true, + /// DeleteBehavior = "leave_in_target", + /// }); + /// + /// }); + /// ``` + /// + [DopplerResourceType("doppler:integration/flyio:Flyio")] + public partial class Flyio : global::Pulumi.CustomResource + { + /// + /// A Fly.io API key. + /// + [Output("apiKey")] + public Output ApiKey { get; private set; } = null!; + + /// + /// The name of the integration + /// + [Output("name")] + public Output Name { get; private set; } = null!; + + + /// + /// Create a Flyio 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 Flyio(string name, FlyioArgs args, CustomResourceOptions? options = null) + : base("doppler:integration/flyio:Flyio", name, args ?? new FlyioArgs(), MakeResourceOptions(options, "")) + { + } + + private Flyio(string name, Input id, FlyioState? state = null, CustomResourceOptions? options = null) + : base("doppler:integration/flyio:Flyio", name, state, MakeResourceOptions(options, id)) + { + } + + private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input? id) + { + var defaultOptions = new CustomResourceOptions + { + Version = Utilities.Version, + PluginDownloadURL = "github://api.github.com/pulumiverse", + AdditionalSecretOutputs = + { + "apiKey", + }, + }; + 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 Flyio 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 Flyio Get(string name, Input id, FlyioState? state = null, CustomResourceOptions? options = null) + { + return new Flyio(name, id, state, options); + } + } + + public sealed class FlyioArgs : global::Pulumi.ResourceArgs + { + [Input("apiKey", required: true)] + private Input? _apiKey; + + /// + /// A Fly.io API key. + /// + public Input? ApiKey + { + get => _apiKey; + set + { + var emptySecret = Output.CreateSecret(0); + _apiKey = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } + + /// + /// The name of the integration + /// + [Input("name", required: true)] + public Input Name { get; set; } = null!; + + public FlyioArgs() + { + } + public static new FlyioArgs Empty => new FlyioArgs(); + } + + public sealed class FlyioState : global::Pulumi.ResourceArgs + { + [Input("apiKey")] + private Input? _apiKey; + + /// + /// A Fly.io API key. + /// + public Input? ApiKey + { + get => _apiKey; + set + { + var emptySecret = Output.CreateSecret(0); + _apiKey = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } + + /// + /// The name of the integration + /// + [Input("name")] + public Input? Name { get; set; } + + public FlyioState() + { + } + public static new FlyioState Empty => new FlyioState(); + } +} diff --git a/sdk/dotnet/Outputs/WebhookAuthentication.cs b/sdk/dotnet/Outputs/WebhookAuthentication.cs new file mode 100644 index 0000000..dc4cfd7 --- /dev/null +++ b/sdk/dotnet/Outputs/WebhookAuthentication.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; +using Pulumi; + +namespace Pulumiverse.Doppler.Outputs +{ + + [OutputType] + public sealed class WebhookAuthentication + { + public readonly string? Password; + public readonly string? Token; + public readonly string Type; + public readonly string? Username; + + [OutputConstructor] + private WebhookAuthentication( + string? password, + + string? token, + + string type, + + string? username) + { + Password = password; + Token = token; + Type = type; + Username = username; + } + } +} diff --git a/sdk/dotnet/ProjectRole.cs b/sdk/dotnet/ProjectRole.cs new file mode 100644 index 0000000..5ed6dd6 --- /dev/null +++ b/sdk/dotnet/ProjectRole.cs @@ -0,0 +1,179 @@ +// *** 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; +using Pulumi; + +namespace Pulumiverse.Doppler +{ + /// + /// Manage a Doppler project_role. + /// + /// ## Example Usage + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Doppler = Pulumiverse.Doppler; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var logViewer = new Doppler.ProjectRole("log_viewer", new() + /// { + /// Name = "Log Viewer", + /// Permissions = new[] + /// { + /// "enclave_config_logs", + /// }, + /// }); + /// + /// }); + /// ``` + /// + /// ## Import + /// + /// ```sh + /// $ pulumi import doppler:index/projectRole:ProjectRole default <project-role-identifier> + /// ``` + /// + [DopplerResourceType("doppler:index/projectRole:ProjectRole")] + public partial class ProjectRole : global::Pulumi.CustomResource + { + /// + /// The role's unique identifier + /// + [Output("identifier")] + public Output Identifier { get; private set; } = null!; + + /// + /// Whether or not the role is custom (as opposed to Doppler built-in) + /// + [Output("isCustomRole")] + public Output IsCustomRole { get; private set; } = null!; + + /// + /// The name of the Doppler project role + /// + [Output("name")] + public Output Name { get; private set; } = null!; + + /// + /// A list of [Doppler project permissions](https://docs.doppler.com/reference/project_roles-create) + /// + [Output("permissions")] + public Output> Permissions { get; private set; } = null!; + + + /// + /// Create a ProjectRole 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 ProjectRole(string name, ProjectRoleArgs args, CustomResourceOptions? options = null) + : base("doppler:index/projectRole:ProjectRole", name, args ?? new ProjectRoleArgs(), MakeResourceOptions(options, "")) + { + } + + private ProjectRole(string name, Input id, ProjectRoleState? state = null, CustomResourceOptions? options = null) + : base("doppler:index/projectRole:ProjectRole", name, state, MakeResourceOptions(options, id)) + { + } + + private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input? id) + { + var defaultOptions = new CustomResourceOptions + { + Version = Utilities.Version, + PluginDownloadURL = "github://api.github.com/pulumiverse", + }; + 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 ProjectRole 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 ProjectRole Get(string name, Input id, ProjectRoleState? state = null, CustomResourceOptions? options = null) + { + return new ProjectRole(name, id, state, options); + } + } + + public sealed class ProjectRoleArgs : global::Pulumi.ResourceArgs + { + /// + /// The name of the Doppler project role + /// + [Input("name", required: true)] + public Input Name { get; set; } = null!; + + [Input("permissions", required: true)] + private InputList? _permissions; + + /// + /// A list of [Doppler project permissions](https://docs.doppler.com/reference/project_roles-create) + /// + public InputList Permissions + { + get => _permissions ?? (_permissions = new InputList()); + set => _permissions = value; + } + + public ProjectRoleArgs() + { + } + public static new ProjectRoleArgs Empty => new ProjectRoleArgs(); + } + + public sealed class ProjectRoleState : global::Pulumi.ResourceArgs + { + /// + /// The role's unique identifier + /// + [Input("identifier")] + public Input? Identifier { get; set; } + + /// + /// Whether or not the role is custom (as opposed to Doppler built-in) + /// + [Input("isCustomRole")] + public Input? IsCustomRole { get; set; } + + /// + /// The name of the Doppler project role + /// + [Input("name")] + public Input? Name { get; set; } + + [Input("permissions")] + private InputList? _permissions; + + /// + /// A list of [Doppler project permissions](https://docs.doppler.com/reference/project_roles-create) + /// + public InputList Permissions + { + get => _permissions ?? (_permissions = new InputList()); + set => _permissions = value; + } + + public ProjectRoleState() + { + } + public static new ProjectRoleState Empty => new ProjectRoleState(); + } +} diff --git a/sdk/dotnet/SecretsSync/AwsParameterStore.cs b/sdk/dotnet/SecretsSync/AwsParameterStore.cs index 2488e91..e5a5a64 100644 --- a/sdk/dotnet/SecretsSync/AwsParameterStore.cs +++ b/sdk/dotnet/SecretsSync/AwsParameterStore.cs @@ -103,6 +103,7 @@ namespace Pulumiverse.Doppler.SecretsSync /// { /// { "myTag", "enabled" }, /// }, + /// DeleteBehavior = "leave_in_target", /// }); /// /// }); @@ -117,12 +118,24 @@ public partial class AwsParameterStore : global::Pulumi.CustomResource [Output("config")] public Output Config { get; private set; } = null!; + /// + /// The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leave_in_target` (default) or `delete_from_target`. + /// + [Output("deleteBehavior")] + public Output DeleteBehavior { get; private set; } = null!; + /// /// The slug of the integration to use for this sync /// [Output("integration")] public Output Integration { get; private set; } = null!; + /// + /// The AWS KMS key used to encrypt the parameter (ID, Alias, or ARN) + /// + [Output("kmsKeyId")] + public Output KmsKeyId { get; private set; } = null!; + /// /// The path to the parameters in AWS /// @@ -206,12 +219,24 @@ public sealed class AwsParameterStoreArgs : global::Pulumi.ResourceArgs [Input("config", required: true)] public Input Config { get; set; } = null!; + /// + /// The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leave_in_target` (default) or `delete_from_target`. + /// + [Input("deleteBehavior")] + public Input? DeleteBehavior { get; set; } + /// /// The slug of the integration to use for this sync /// [Input("integration", required: true)] public Input Integration { get; set; } = null!; + /// + /// The AWS KMS key used to encrypt the parameter (ID, Alias, or ARN) + /// + [Input("kmsKeyId")] + public Input? KmsKeyId { get; set; } + /// /// The path to the parameters in AWS /// @@ -262,12 +287,24 @@ public sealed class AwsParameterStoreState : global::Pulumi.ResourceArgs [Input("config")] public Input? Config { get; set; } + /// + /// The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leave_in_target` (default) or `delete_from_target`. + /// + [Input("deleteBehavior")] + public Input? DeleteBehavior { get; set; } + /// /// The slug of the integration to use for this sync /// [Input("integration")] public Input? Integration { get; set; } + /// + /// The AWS KMS key used to encrypt the parameter (ID, Alias, or ARN) + /// + [Input("kmsKeyId")] + public Input? KmsKeyId { get; set; } + /// /// The path to the parameters in AWS /// diff --git a/sdk/dotnet/SecretsSync/AwsSecretsManager.cs b/sdk/dotnet/SecretsSync/AwsSecretsManager.cs index 293a796..b8a3188 100644 --- a/sdk/dotnet/SecretsSync/AwsSecretsManager.cs +++ b/sdk/dotnet/SecretsSync/AwsSecretsManager.cs @@ -99,6 +99,7 @@ namespace Pulumiverse.Doppler.SecretsSync /// { /// { "myTag", "enabled" }, /// }, + /// DeleteBehavior = "leave_in_target", /// }); /// /// }); @@ -113,12 +114,24 @@ public partial class AwsSecretsManager : global::Pulumi.CustomResource [Output("config")] public Output Config { get; private set; } = null!; + /// + /// The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leave_in_target` (default) or `delete_from_target`. + /// + [Output("deleteBehavior")] + public Output DeleteBehavior { get; private set; } = null!; + /// /// The slug of the integration to use for this sync /// [Output("integration")] public Output Integration { get; private set; } = null!; + /// + /// The AWS KMS key used to encrypt the secret (ID, Alias, or ARN) + /// + [Output("kmsKeyId")] + public Output KmsKeyId { get; private set; } = null!; + /// /// The path to the secret in AWS /// @@ -143,6 +156,12 @@ public partial class AwsSecretsManager : global::Pulumi.CustomResource [Output("tags")] public Output?> Tags { get; private set; } = null!; + /// + /// If enabled, Doppler will update the AWS secret metadata (e.g. KMS key) during every sync. If disabled, Doppler will only set secret metadata for new AWS secrets. Note that Doppler never updates tags for existing AWS secrets. + /// + [Output("updateMetadata")] + public Output UpdateMetadata { get; private set; } = null!; + /// /// Create a AwsSecretsManager resource with the given unique name, arguments, and options. @@ -196,12 +215,24 @@ public sealed class AwsSecretsManagerArgs : global::Pulumi.ResourceArgs [Input("config", required: true)] public Input Config { get; set; } = null!; + /// + /// The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leave_in_target` (default) or `delete_from_target`. + /// + [Input("deleteBehavior")] + public Input? DeleteBehavior { get; set; } + /// /// The slug of the integration to use for this sync /// [Input("integration", required: true)] public Input Integration { get; set; } = null!; + /// + /// The AWS KMS key used to encrypt the secret (ID, Alias, or ARN) + /// + [Input("kmsKeyId")] + public Input? KmsKeyId { get; set; } + /// /// The path to the secret in AWS /// @@ -232,6 +263,12 @@ public InputMap Tags set => _tags = value; } + /// + /// If enabled, Doppler will update the AWS secret metadata (e.g. KMS key) during every sync. If disabled, Doppler will only set secret metadata for new AWS secrets. Note that Doppler never updates tags for existing AWS secrets. + /// + [Input("updateMetadata")] + public Input? UpdateMetadata { get; set; } + public AwsSecretsManagerArgs() { } @@ -246,12 +283,24 @@ public sealed class AwsSecretsManagerState : global::Pulumi.ResourceArgs [Input("config")] public Input? Config { get; set; } + /// + /// The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leave_in_target` (default) or `delete_from_target`. + /// + [Input("deleteBehavior")] + public Input? DeleteBehavior { get; set; } + /// /// The slug of the integration to use for this sync /// [Input("integration")] public Input? Integration { get; set; } + /// + /// The AWS KMS key used to encrypt the secret (ID, Alias, or ARN) + /// + [Input("kmsKeyId")] + public Input? KmsKeyId { get; set; } + /// /// The path to the secret in AWS /// @@ -282,6 +331,12 @@ public InputMap Tags set => _tags = value; } + /// + /// If enabled, Doppler will update the AWS secret metadata (e.g. KMS key) during every sync. If disabled, Doppler will only set secret metadata for new AWS secrets. Note that Doppler never updates tags for existing AWS secrets. + /// + [Input("updateMetadata")] + public Input? UpdateMetadata { get; set; } + public AwsSecretsManagerState() { } diff --git a/sdk/dotnet/SecretsSync/Flyio.cs b/sdk/dotnet/SecretsSync/Flyio.cs new file mode 100644 index 0000000..89786b6 --- /dev/null +++ b/sdk/dotnet/SecretsSync/Flyio.cs @@ -0,0 +1,216 @@ +// *** 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; +using Pulumi; + +namespace Pulumiverse.Doppler.SecretsSync +{ + /// + /// Manage a Fly.io Doppler sync. + /// + /// ## Example Usage + /// + /// ```csharp + /// using System.Collections.Generic; + /// using System.Linq; + /// using Pulumi; + /// using Doppler = Pulumiverse.Doppler; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var prod = new Doppler.Integration.Flyio("prod", new() + /// { + /// Name = "TF Fly.io", + /// ApiKey = "fo1_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", + /// }); + /// + /// var backendProd = new Doppler.SecretsSync.Flyio("backend_prod", new() + /// { + /// Integration = prod.Id, + /// Project = "backend", + /// Config = "prd", + /// AppId = "my-app", + /// RestartMachines = true, + /// DeleteBehavior = "leave_in_target", + /// }); + /// + /// }); + /// ``` + /// + [DopplerResourceType("doppler:secretsSync/flyio:Flyio")] + public partial class Flyio : global::Pulumi.CustomResource + { + /// + /// The app ID + /// + [Output("appId")] + public Output AppId { get; private set; } = null!; + + /// + /// The name of the Doppler config + /// + [Output("config")] + public Output Config { get; private set; } = null!; + + /// + /// The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leave_in_target` (default) or `delete_from_target`. + /// + [Output("deleteBehavior")] + public Output DeleteBehavior { get; private set; } = null!; + + /// + /// The slug of the integration to use for this sync + /// + [Output("integration")] + public Output Integration { get; private set; } = null!; + + /// + /// The name of the Doppler project + /// + [Output("project")] + public Output Project { get; private set; } = null!; + + /// + /// Whether or not to restart the Fly.io machines when secrets are updated + /// + [Output("restartMachines")] + public Output RestartMachines { get; private set; } = null!; + + + /// + /// Create a Flyio 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 Flyio(string name, FlyioArgs args, CustomResourceOptions? options = null) + : base("doppler:secretsSync/flyio:Flyio", name, args ?? new FlyioArgs(), MakeResourceOptions(options, "")) + { + } + + private Flyio(string name, Input id, FlyioState? state = null, CustomResourceOptions? options = null) + : base("doppler:secretsSync/flyio:Flyio", name, state, MakeResourceOptions(options, id)) + { + } + + private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input? id) + { + var defaultOptions = new CustomResourceOptions + { + Version = Utilities.Version, + PluginDownloadURL = "github://api.github.com/pulumiverse", + }; + 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 Flyio 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 Flyio Get(string name, Input id, FlyioState? state = null, CustomResourceOptions? options = null) + { + return new Flyio(name, id, state, options); + } + } + + public sealed class FlyioArgs : global::Pulumi.ResourceArgs + { + /// + /// The app ID + /// + [Input("appId", required: true)] + public Input AppId { get; set; } = null!; + + /// + /// The name of the Doppler config + /// + [Input("config", required: true)] + public Input Config { get; set; } = null!; + + /// + /// The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leave_in_target` (default) or `delete_from_target`. + /// + [Input("deleteBehavior")] + public Input? DeleteBehavior { get; set; } + + /// + /// The slug of the integration to use for this sync + /// + [Input("integration", required: true)] + public Input Integration { get; set; } = null!; + + /// + /// The name of the Doppler project + /// + [Input("project", required: true)] + public Input Project { get; set; } = null!; + + /// + /// Whether or not to restart the Fly.io machines when secrets are updated + /// + [Input("restartMachines", required: true)] + public Input RestartMachines { get; set; } = null!; + + public FlyioArgs() + { + } + public static new FlyioArgs Empty => new FlyioArgs(); + } + + public sealed class FlyioState : global::Pulumi.ResourceArgs + { + /// + /// The app ID + /// + [Input("appId")] + public Input? AppId { get; set; } + + /// + /// The name of the Doppler config + /// + [Input("config")] + public Input? Config { get; set; } + + /// + /// The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leave_in_target` (default) or `delete_from_target`. + /// + [Input("deleteBehavior")] + public Input? DeleteBehavior { get; set; } + + /// + /// The slug of the integration to use for this sync + /// + [Input("integration")] + public Input? Integration { get; set; } + + /// + /// The name of the Doppler project + /// + [Input("project")] + public Input? Project { get; set; } + + /// + /// Whether or not to restart the Fly.io machines when secrets are updated + /// + [Input("restartMachines")] + public Input? RestartMachines { get; set; } + + public FlyioState() + { + } + public static new FlyioState Empty => new FlyioState(); + } +} diff --git a/sdk/dotnet/SecretsSync/GithubActions.cs b/sdk/dotnet/SecretsSync/GithubActions.cs index 2aef193..f981fe5 100644 --- a/sdk/dotnet/SecretsSync/GithubActions.cs +++ b/sdk/dotnet/SecretsSync/GithubActions.cs @@ -22,6 +22,12 @@ public partial class GithubActions : global::Pulumi.CustomResource [Output("config")] public Output Config { get; private set; } = null!; + /// + /// The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leave_in_target` (default) or `delete_from_target`. + /// + [Output("deleteBehavior")] + public Output DeleteBehavior { get; private set; } = null!; + /// /// The GitHub repo environment name to sync to (only used when `sync_target` is set to "repo") /// @@ -111,6 +117,12 @@ public sealed class GithubActionsArgs : global::Pulumi.ResourceArgs [Input("config", required: true)] public Input Config { get; set; } = null!; + /// + /// The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leave_in_target` (default) or `delete_from_target`. + /// + [Input("deleteBehavior")] + public Input? DeleteBehavior { get; set; } + /// /// The GitHub repo environment name to sync to (only used when `sync_target` is set to "repo") /// @@ -161,6 +173,12 @@ public sealed class GithubActionsState : global::Pulumi.ResourceArgs [Input("config")] public Input? Config { get; set; } + /// + /// The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leave_in_target` (default) or `delete_from_target`. + /// + [Input("deleteBehavior")] + public Input? DeleteBehavior { get; set; } + /// /// The GitHub repo environment name to sync to (only used when `sync_target` is set to "repo") /// diff --git a/sdk/dotnet/SecretsSync/TerraformCloud.cs b/sdk/dotnet/SecretsSync/TerraformCloud.cs index 46905f4..de26067 100644 --- a/sdk/dotnet/SecretsSync/TerraformCloud.cs +++ b/sdk/dotnet/SecretsSync/TerraformCloud.cs @@ -22,6 +22,12 @@ public partial class TerraformCloud : global::Pulumi.CustomResource [Output("config")] public Output Config { get; private set; } = null!; + /// + /// The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leave_in_target` (default) or `delete_from_target`. + /// + [Output("deleteBehavior")] + public Output DeleteBehavior { get; private set; } = null!; + /// /// The slug of the integration to use for this sync /// @@ -108,6 +114,12 @@ public sealed class TerraformCloudArgs : global::Pulumi.ResourceArgs [Input("config", required: true)] public Input Config { get; set; } = null!; + /// + /// The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leave_in_target` (default) or `delete_from_target`. + /// + [Input("deleteBehavior")] + public Input? DeleteBehavior { get; set; } + /// /// The slug of the integration to use for this sync /// @@ -155,6 +167,12 @@ public sealed class TerraformCloudState : global::Pulumi.ResourceArgs [Input("config")] public Input? Config { get; set; } + /// + /// The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leave_in_target` (default) or `delete_from_target`. + /// + [Input("deleteBehavior")] + public Input? DeleteBehavior { get; set; } + /// /// The slug of the integration to use for this sync /// diff --git a/sdk/dotnet/ServiceAccountToken.cs b/sdk/dotnet/ServiceAccountToken.cs new file mode 100644 index 0000000..e13cbef --- /dev/null +++ b/sdk/dotnet/ServiceAccountToken.cs @@ -0,0 +1,183 @@ +// *** 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; +using Pulumi; + +namespace Pulumiverse.Doppler +{ + /// + /// Manage a Doppler service account token. + /// + [DopplerResourceType("doppler:index/serviceAccountToken:ServiceAccountToken")] + public partial class ServiceAccountToken : global::Pulumi.CustomResource + { + /// + /// The api key used to authenticate the service account + /// + [Output("apiKey")] + public Output ApiKey { get; private set; } = null!; + + /// + /// The datetime that the token was created. + /// + [Output("createdAt")] + public Output CreatedAt { get; private set; } = null!; + + /// + /// The datetime at which the API token should expire. If not provided, the API token will remain valid indefinitely unless manually revoked + /// + [Output("expiresAt")] + public Output ExpiresAt { get; private set; } = null!; + + /// + /// The display name of the API token + /// + [Output("name")] + public Output Name { get; private set; } = null!; + + /// + /// Slug of the service account + /// + [Output("serviceAccountSlug")] + public Output ServiceAccountSlug { get; private set; } = null!; + + /// + /// Slug of the service account token + /// + [Output("slug")] + public Output Slug { get; private set; } = null!; + + + /// + /// Create a ServiceAccountToken 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 ServiceAccountToken(string name, ServiceAccountTokenArgs args, CustomResourceOptions? options = null) + : base("doppler:index/serviceAccountToken:ServiceAccountToken", name, args ?? new ServiceAccountTokenArgs(), MakeResourceOptions(options, "")) + { + } + + private ServiceAccountToken(string name, Input id, ServiceAccountTokenState? state = null, CustomResourceOptions? options = null) + : base("doppler:index/serviceAccountToken:ServiceAccountToken", name, state, MakeResourceOptions(options, id)) + { + } + + private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input? id) + { + var defaultOptions = new CustomResourceOptions + { + Version = Utilities.Version, + PluginDownloadURL = "github://api.github.com/pulumiverse", + AdditionalSecretOutputs = + { + "apiKey", + }, + }; + 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 ServiceAccountToken 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 ServiceAccountToken Get(string name, Input id, ServiceAccountTokenState? state = null, CustomResourceOptions? options = null) + { + return new ServiceAccountToken(name, id, state, options); + } + } + + public sealed class ServiceAccountTokenArgs : global::Pulumi.ResourceArgs + { + /// + /// The datetime at which the API token should expire. If not provided, the API token will remain valid indefinitely unless manually revoked + /// + [Input("expiresAt")] + public Input? ExpiresAt { get; set; } + + /// + /// The display name of the API token + /// + [Input("name", required: true)] + public Input Name { get; set; } = null!; + + /// + /// Slug of the service account + /// + [Input("serviceAccountSlug", required: true)] + public Input ServiceAccountSlug { get; set; } = null!; + + public ServiceAccountTokenArgs() + { + } + public static new ServiceAccountTokenArgs Empty => new ServiceAccountTokenArgs(); + } + + public sealed class ServiceAccountTokenState : global::Pulumi.ResourceArgs + { + [Input("apiKey")] + private Input? _apiKey; + + /// + /// The api key used to authenticate the service account + /// + public Input? ApiKey + { + get => _apiKey; + set + { + var emptySecret = Output.CreateSecret(0); + _apiKey = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } + + /// + /// The datetime that the token was created. + /// + [Input("createdAt")] + public Input? CreatedAt { get; set; } + + /// + /// The datetime at which the API token should expire. If not provided, the API token will remain valid indefinitely unless manually revoked + /// + [Input("expiresAt")] + public Input? ExpiresAt { get; set; } + + /// + /// The display name of the API token + /// + [Input("name")] + public Input? Name { get; set; } + + /// + /// Slug of the service account + /// + [Input("serviceAccountSlug")] + public Input? ServiceAccountSlug { get; set; } + + /// + /// Slug of the service account token + /// + [Input("slug")] + public Input? Slug { get; set; } + + public ServiceAccountTokenState() + { + } + public static new ServiceAccountTokenState Empty => new ServiceAccountTokenState(); + } +} diff --git a/sdk/dotnet/Webhook.cs b/sdk/dotnet/Webhook.cs new file mode 100644 index 0000000..c3b07d3 --- /dev/null +++ b/sdk/dotnet/Webhook.cs @@ -0,0 +1,271 @@ +// *** 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; +using Pulumi; + +namespace Pulumiverse.Doppler +{ + [DopplerResourceType("doppler:index/webhook:Webhook")] + public partial class Webhook : global::Pulumi.CustomResource + { + /// + /// Authentication method used by the webhook + /// + [Output("authentication")] + public Output Authentication { get; private set; } = null!; + + /// + /// Whether the webhook is enabled or disabled. Default to true. + /// + [Output("enabled")] + public Output Enabled { get; private set; } = null!; + + /// + /// Configs this webhook will trigger for + /// + [Output("enabledConfigs")] + public Output> EnabledConfigs { get; private set; } = null!; + + /// + /// The webhook's payload as a JSON string. Leave empty to use the default webhook payload + /// + [Output("payload")] + public Output Payload { get; private set; } = null!; + + /// + /// The name of the Doppler project where the webhook is located + /// + [Output("project")] + public Output Project { get; private set; } = null!; + + /// + /// Secret used for request signing + /// + [Output("secret")] + public Output Secret { get; private set; } = null!; + + /// + /// The slug of the Webhook + /// + [Output("slug")] + public Output Slug { get; private set; } = null!; + + /// + /// The URL of the webhook endpoint + /// + [Output("url")] + public Output Url { get; private set; } = null!; + + + /// + /// Create a Webhook 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 Webhook(string name, WebhookArgs args, CustomResourceOptions? options = null) + : base("doppler:index/webhook:Webhook", name, args ?? new WebhookArgs(), MakeResourceOptions(options, "")) + { + } + + private Webhook(string name, Input id, WebhookState? state = null, CustomResourceOptions? options = null) + : base("doppler:index/webhook:Webhook", name, state, MakeResourceOptions(options, id)) + { + } + + private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input? id) + { + var defaultOptions = new CustomResourceOptions + { + Version = Utilities.Version, + PluginDownloadURL = "github://api.github.com/pulumiverse", + AdditionalSecretOutputs = + { + "payload", + "secret", + }, + }; + 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 Webhook 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 Webhook Get(string name, Input id, WebhookState? state = null, CustomResourceOptions? options = null) + { + return new Webhook(name, id, state, options); + } + } + + public sealed class WebhookArgs : global::Pulumi.ResourceArgs + { + /// + /// Authentication method used by the webhook + /// + [Input("authentication")] + public Input? Authentication { get; set; } + + /// + /// Whether the webhook is enabled or disabled. Default to true. + /// + [Input("enabled")] + public Input? Enabled { get; set; } + + [Input("enabledConfigs")] + private InputList? _enabledConfigs; + + /// + /// Configs this webhook will trigger for + /// + public InputList EnabledConfigs + { + get => _enabledConfigs ?? (_enabledConfigs = new InputList()); + set => _enabledConfigs = value; + } + + [Input("payload")] + private Input? _payload; + + /// + /// The webhook's payload as a JSON string. Leave empty to use the default webhook payload + /// + public Input? Payload + { + get => _payload; + set + { + var emptySecret = Output.CreateSecret(0); + _payload = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } + + /// + /// The name of the Doppler project where the webhook is located + /// + [Input("project", required: true)] + public Input Project { get; set; } = null!; + + [Input("secret")] + private Input? _secret; + + /// + /// Secret used for request signing + /// + public Input? Secret + { + get => _secret; + set + { + var emptySecret = Output.CreateSecret(0); + _secret = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } + + /// + /// The URL of the webhook endpoint + /// + [Input("url", required: true)] + public Input Url { get; set; } = null!; + + public WebhookArgs() + { + } + public static new WebhookArgs Empty => new WebhookArgs(); + } + + public sealed class WebhookState : global::Pulumi.ResourceArgs + { + /// + /// Authentication method used by the webhook + /// + [Input("authentication")] + public Input? Authentication { get; set; } + + /// + /// Whether the webhook is enabled or disabled. Default to true. + /// + [Input("enabled")] + public Input? Enabled { get; set; } + + [Input("enabledConfigs")] + private InputList? _enabledConfigs; + + /// + /// Configs this webhook will trigger for + /// + public InputList EnabledConfigs + { + get => _enabledConfigs ?? (_enabledConfigs = new InputList()); + set => _enabledConfigs = value; + } + + [Input("payload")] + private Input? _payload; + + /// + /// The webhook's payload as a JSON string. Leave empty to use the default webhook payload + /// + public Input? Payload + { + get => _payload; + set + { + var emptySecret = Output.CreateSecret(0); + _payload = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } + + /// + /// The name of the Doppler project where the webhook is located + /// + [Input("project")] + public Input? Project { get; set; } + + [Input("secret")] + private Input? _secret; + + /// + /// Secret used for request signing + /// + public Input? Secret + { + get => _secret; + set + { + var emptySecret = Output.CreateSecret(0); + _secret = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } + + /// + /// The slug of the Webhook + /// + [Input("slug")] + public Input? Slug { get; set; } + + /// + /// The URL of the webhook endpoint + /// + [Input("url")] + public Input? Url { get; set; } + + public WebhookState() + { + } + public static new WebhookState Empty => new WebhookState(); + } +} diff --git a/sdk/go.mod b/sdk/go.mod index 97f5d83..debc98f 100644 --- a/sdk/go.mod +++ b/sdk/go.mod @@ -2,9 +2,12 @@ module github.com/pulumiverse/pulumi-doppler/sdk go 1.21 -require github.com/pulumi/pulumi/sdk/v3 v3.118.0 +require github.com/pulumi/pulumi/sdk/v3 v3.126.0 -require github.com/pkg/errors v0.9.1 // indirect +require ( + github.com/BurntSushi/toml v1.2.1 // indirect + github.com/pkg/errors v0.9.1 // indirect +) require ( dario.cat/mergo v1.0.0 // indirect @@ -17,7 +20,7 @@ require ( github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect github.com/blang/semver v3.5.1+incompatible github.com/charmbracelet/bubbles v0.16.1 // indirect - github.com/charmbracelet/bubbletea v0.24.2 // indirect + github.com/charmbracelet/bubbletea v0.25.0 // indirect github.com/charmbracelet/lipgloss v0.7.1 // indirect github.com/cheggaaa/pb v1.0.29 // indirect github.com/cloudflare/circl v1.3.7 // indirect @@ -55,7 +58,7 @@ require ( github.com/pjbgf/sha1cd v0.3.0 // indirect github.com/pkg/term v1.1.0 // indirect github.com/pulumi/appdash v0.0.0-20231130102222-75f619a67231 // indirect - github.com/pulumi/esc v0.6.2 // indirect + github.com/pulumi/esc v0.9.1 // indirect github.com/rivo/uniseg v0.4.4 // indirect github.com/rogpeppe/go-internal v1.11.0 // indirect github.com/sabhiram/go-gitignore v0.0.0-20210923224102-525f6e181f06 // indirect @@ -72,15 +75,15 @@ require ( github.com/xanzy/ssh-agent v0.3.3 // indirect github.com/zclconf/go-cty v1.13.2 // indirect go.uber.org/atomic v1.9.0 // indirect - golang.org/x/crypto v0.23.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.25.0 // indirect - golang.org/x/sync v0.6.0 // indirect - golang.org/x/sys v0.20.0 // indirect - golang.org/x/term v0.20.0 // indirect - golang.org/x/text v0.15.0 // indirect - golang.org/x/tools v0.15.0 // indirect + golang.org/x/crypto v0.24.0 // indirect + golang.org/x/exp v0.0.0-20240604190554-fc45aab8b7f8 // indirect + golang.org/x/mod v0.18.0 // indirect + golang.org/x/net v0.26.0 // indirect + golang.org/x/sync v0.7.0 // indirect + golang.org/x/sys v0.21.0 // indirect + golang.org/x/term v0.21.0 // indirect + golang.org/x/text v0.16.0 // indirect + golang.org/x/tools v0.22.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20240227224415-6ceb2ff114de // indirect google.golang.org/grpc v1.63.2 // indirect google.golang.org/protobuf v1.33.0 // indirect diff --git a/sdk/go.sum b/sdk/go.sum index eee4f15..7c37722 100644 --- a/sdk/go.sum +++ b/sdk/go.sum @@ -1,5 +1,7 @@ dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= +github.com/BurntSushi/toml v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak= +github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= 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/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= @@ -26,8 +28,8 @@ github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnweb github.com/bwesterb/go-ristretto v1.2.3/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= 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/bubbletea v0.25.0 h1:bAfwk7jRz7FKFl9RzlIULPkStffg5k6pNt5dywy4TcM= +github.com/charmbracelet/bubbletea v0.25.0/go.mod h1:EN3QDR1T5ZdWmdfDzYcqOCAps45+QIJbLOBxmVNWNNg= github.com/charmbracelet/lipgloss v0.7.1 h1:17WMwi7N1b1rVWOjMT+rCh7sQkvDU75B2hbZpc5Kc1E= github.com/charmbracelet/lipgloss v0.7.1/go.mod h1:yG0k3giv8Qj8edTCbbg6AlQ5e8KNWpFujkNawKNhE2c= github.com/cheggaaa/pb v1.0.29 h1:FckUN5ngEk2LpvuG0fw1GEFx6LtyY2pWI/Z2QgCnEYo= @@ -146,10 +148,10 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/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.2 h1:+z+l8cuwIauLSwXQS0uoI3rqB+YG4SzsZYtHfNoXBvw= -github.com/pulumi/esc v0.6.2/go.mod h1:jNnYNjzsOgVTjCp0LL24NsCk8ZJxq4IoLQdCT0X7l8k= -github.com/pulumi/pulumi/sdk/v3 v3.118.0 h1:NboaaB4cNuehzsax38PO1jZOS6Mzbx/jNaDNaHPmg4c= -github.com/pulumi/pulumi/sdk/v3 v3.118.0/go.mod h1:kNea72+FQk82OjZ3yEP4dl6nbAl2ngE8PDBc0iFAaHg= +github.com/pulumi/esc v0.9.1 h1:HH5eEv8sgyxSpY5a8yePyqFXzA8cvBvapfH8457+mIs= +github.com/pulumi/esc v0.9.1/go.mod h1:oEJ6bOsjYlQUpjf70GiX+CXn3VBmpwFDxUTlmtUN84c= +github.com/pulumi/pulumi/sdk/v3 v3.126.0 h1:6GQVhwG2jgnG7wjRiWgrq0/sU39onctAiBcvTlqb20s= +github.com/pulumi/pulumi/sdk/v3 v3.126.0/go.mod h1:p1U24en3zt51agx+WlNboSOV8eLlPWYAkxMzVEXKbnY= 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= @@ -205,18 +207,18 @@ golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= 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.23.0 h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI= -golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= -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/crypto v0.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI= +golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM= +golang.org/x/exp v0.0.0-20240604190554-fc45aab8b7f8 h1:LoYXNGAShUG3m/ehNk4iFctuhGX/+R1ZpfJ4/ia80JM= +golang.org/x/exp v0.0.0-20240604190554-fc45aab8b7f8/go.mod h1:jj3sYF3dwk5D+ghuXyeI3r5MFf+NT2An6/9dOA95KSI= golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/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.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.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/mod v0.18.0 h1:5+9lSbEzPSdWkH32vYPBwEpX8KwDbM52Ud9xBUvNlb0= +golang.org/x/mod v0.18.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -228,15 +230,15 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= golang.org/x/net v0.6.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.25.0 h1:d/OCCoBEUq33pjydKrGQhw7IlUPI2Oylr+8qLx49kac= -golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= +golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ= +golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= 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-20201020160332-67f06af15bc9/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.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= -golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= +golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= 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-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -257,15 +259,15 @@ 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.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y= -golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws= +golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= 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.20.0 h1:VnkxpohqXaOBYJtBmEppKUG6mXpi+4O6purfc2+sMhw= -golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= +golang.org/x/term v0.21.0 h1:WVXCp+/EBEHOj53Rvu+7KiT/iElMrO8ACK16SMZ3jaA= +golang.org/x/term v0.21.0/go.mod h1:ooXLefLobQVslOqselCNF4SxFAaoS6KujMbsGzSDmX0= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= @@ -273,8 +275,8 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.4.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.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk= -golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= +golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= @@ -283,8 +285,8 @@ golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -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/tools v0.22.0 h1:gqSGLZqv+AI9lIQzniJ0nZDRG5GBPsSi+DRNHWNz6yA= +golang.org/x/tools v0.22.0/go.mod h1:aCwcsjqvq7Yqt6TNyX7QMU2enbQ/Gt0bo6krSeEri+c= 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= diff --git a/sdk/go/doppler/environment.go b/sdk/go/doppler/environment.go index 52178db..405d49e 100644 --- a/sdk/go/doppler/environment.go +++ b/sdk/go/doppler/environment.go @@ -52,6 +52,8 @@ type Environment struct { // The name of the Doppler environment Name pulumi.StringOutput `pulumi:"name"` + // Whether or not personal configs are enabled for the environment + PersonalConfigs pulumi.BoolPtrOutput `pulumi:"personalConfigs"` // The name of the Doppler project where the environment is located Project pulumi.StringOutput `pulumi:"project"` // The slug of the Doppler environment @@ -99,6 +101,8 @@ func GetEnvironment(ctx *pulumi.Context, type environmentState struct { // The name of the Doppler environment Name *string `pulumi:"name"` + // Whether or not personal configs are enabled for the environment + PersonalConfigs *bool `pulumi:"personalConfigs"` // The name of the Doppler project where the environment is located Project *string `pulumi:"project"` // The slug of the Doppler environment @@ -108,6 +112,8 @@ type environmentState struct { type EnvironmentState struct { // The name of the Doppler environment Name pulumi.StringPtrInput + // Whether or not personal configs are enabled for the environment + PersonalConfigs pulumi.BoolPtrInput // The name of the Doppler project where the environment is located Project pulumi.StringPtrInput // The slug of the Doppler environment @@ -121,6 +127,8 @@ func (EnvironmentState) ElementType() reflect.Type { type environmentArgs struct { // The name of the Doppler environment Name string `pulumi:"name"` + // Whether or not personal configs are enabled for the environment + PersonalConfigs *bool `pulumi:"personalConfigs"` // The name of the Doppler project where the environment is located Project string `pulumi:"project"` // The slug of the Doppler environment @@ -131,6 +139,8 @@ type environmentArgs struct { type EnvironmentArgs struct { // The name of the Doppler environment Name pulumi.StringInput + // Whether or not personal configs are enabled for the environment + PersonalConfigs pulumi.BoolPtrInput // The name of the Doppler project where the environment is located Project pulumi.StringInput // The slug of the Doppler environment @@ -229,6 +239,11 @@ func (o EnvironmentOutput) Name() pulumi.StringOutput { return o.ApplyT(func(v *Environment) pulumi.StringOutput { return v.Name }).(pulumi.StringOutput) } +// Whether or not personal configs are enabled for the environment +func (o EnvironmentOutput) PersonalConfigs() pulumi.BoolPtrOutput { + return o.ApplyT(func(v *Environment) pulumi.BoolPtrOutput { return v.PersonalConfigs }).(pulumi.BoolPtrOutput) +} + // The name of the Doppler project where the environment is located func (o EnvironmentOutput) Project() pulumi.StringOutput { return o.ApplyT(func(v *Environment) pulumi.StringOutput { return v.Project }).(pulumi.StringOutput) diff --git a/sdk/go/doppler/init.go b/sdk/go/doppler/init.go index 78cdb81..16d2c7c 100644 --- a/sdk/go/doppler/init.go +++ b/sdk/go/doppler/init.go @@ -31,12 +31,18 @@ func (m *module) Construct(ctx *pulumi.Context, name, typ, urn string) (r pulumi r = &GroupMember{} case "doppler:index/project:Project": r = &Project{} + case "doppler:index/projectRole:ProjectRole": + r = &ProjectRole{} case "doppler:index/secret:Secret": r = &Secret{} case "doppler:index/serviceAccount:ServiceAccount": r = &ServiceAccount{} + case "doppler:index/serviceAccountToken:ServiceAccountToken": + r = &ServiceAccountToken{} case "doppler:index/serviceToken:ServiceToken": r = &ServiceToken{} + case "doppler:index/webhook:Webhook": + r = &Webhook{} default: return nil, fmt.Errorf("unknown resource type: %s", typ) } @@ -93,6 +99,11 @@ func init() { "index/project", &module{version}, ) + pulumi.RegisterResourceModule( + "doppler", + "index/projectRole", + &module{version}, + ) pulumi.RegisterResourceModule( "doppler", "index/secret", @@ -103,11 +114,21 @@ func init() { "index/serviceAccount", &module{version}, ) + pulumi.RegisterResourceModule( + "doppler", + "index/serviceAccountToken", + &module{version}, + ) pulumi.RegisterResourceModule( "doppler", "index/serviceToken", &module{version}, ) + pulumi.RegisterResourceModule( + "doppler", + "index/webhook", + &module{version}, + ) pulumi.RegisterResourcePackage( "doppler", &pkg{version}, diff --git a/sdk/go/doppler/integration/awsParameterStore.go b/sdk/go/doppler/integration/awsParameterStore.go index a5ee621..7276a0b 100644 --- a/sdk/go/doppler/integration/awsParameterStore.go +++ b/sdk/go/doppler/integration/awsParameterStore.go @@ -108,6 +108,7 @@ import ( // Tags: pulumi.StringMap{ // "myTag": pulumi.String("enabled"), // }, +// DeleteBehavior: pulumi.String("leave_in_target"), // }) // if err != nil { // return err diff --git a/sdk/go/doppler/integration/awsSecretsManager.go b/sdk/go/doppler/integration/awsSecretsManager.go index 20f742b..b820e84 100644 --- a/sdk/go/doppler/integration/awsSecretsManager.go +++ b/sdk/go/doppler/integration/awsSecretsManager.go @@ -104,6 +104,7 @@ import ( // Tags: pulumi.StringMap{ // "myTag": pulumi.String("enabled"), // }, +// DeleteBehavior: pulumi.String("leave_in_target"), // }) // if err != nil { // return err diff --git a/sdk/go/doppler/integration/flyio.go b/sdk/go/doppler/integration/flyio.go new file mode 100644 index 0000000..0109e4b --- /dev/null +++ b/sdk/go/doppler/integration/flyio.go @@ -0,0 +1,283 @@ +// 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 integration + +import ( + "context" + "reflect" + + "errors" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" + "github.com/pulumiverse/pulumi-doppler/sdk/go/doppler/internal" +) + +// Manage a Fly.io Doppler integration. +// +// ## Example Usage +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// "github.com/pulumiverse/pulumi-doppler/sdk/go/doppler/integration" +// "github.com/pulumiverse/pulumi-doppler/sdk/go/doppler/secretsSync" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// prod, err := integration.NewFlyio(ctx, "prod", &integration.FlyioArgs{ +// Name: pulumi.String("TF Fly.io"), +// ApiKey: pulumi.String("fo1_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"), +// }) +// if err != nil { +// return err +// } +// _, err = secretsSync.NewFlyio(ctx, "backend_prod", &secretsSync.FlyioArgs{ +// Integration: prod.ID(), +// Project: pulumi.String("backend"), +// Config: pulumi.String("prd"), +// AppId: pulumi.String("my-app"), +// RestartMachines: pulumi.Bool(true), +// DeleteBehavior: pulumi.String("leave_in_target"), +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +type Flyio struct { + pulumi.CustomResourceState + + // A Fly.io API key. + ApiKey pulumi.StringOutput `pulumi:"apiKey"` + // The name of the integration + Name pulumi.StringOutput `pulumi:"name"` +} + +// NewFlyio registers a new resource with the given unique name, arguments, and options. +func NewFlyio(ctx *pulumi.Context, + name string, args *FlyioArgs, opts ...pulumi.ResourceOption) (*Flyio, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.ApiKey == nil { + return nil, errors.New("invalid value for required argument 'ApiKey'") + } + if args.Name == nil { + return nil, errors.New("invalid value for required argument 'Name'") + } + if args.ApiKey != nil { + args.ApiKey = pulumi.ToSecret(args.ApiKey).(pulumi.StringInput) + } + secrets := pulumi.AdditionalSecretOutputs([]string{ + "apiKey", + }) + opts = append(opts, secrets) + opts = internal.PkgResourceDefaultOpts(opts) + var resource Flyio + err := ctx.RegisterResource("doppler:integration/flyio:Flyio", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetFlyio gets an existing Flyio 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 GetFlyio(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *FlyioState, opts ...pulumi.ResourceOption) (*Flyio, error) { + var resource Flyio + err := ctx.ReadResource("doppler:integration/flyio:Flyio", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering Flyio resources. +type flyioState struct { + // A Fly.io API key. + ApiKey *string `pulumi:"apiKey"` + // The name of the integration + Name *string `pulumi:"name"` +} + +type FlyioState struct { + // A Fly.io API key. + ApiKey pulumi.StringPtrInput + // The name of the integration + Name pulumi.StringPtrInput +} + +func (FlyioState) ElementType() reflect.Type { + return reflect.TypeOf((*flyioState)(nil)).Elem() +} + +type flyioArgs struct { + // A Fly.io API key. + ApiKey string `pulumi:"apiKey"` + // The name of the integration + Name string `pulumi:"name"` +} + +// The set of arguments for constructing a Flyio resource. +type FlyioArgs struct { + // A Fly.io API key. + ApiKey pulumi.StringInput + // The name of the integration + Name pulumi.StringInput +} + +func (FlyioArgs) ElementType() reflect.Type { + return reflect.TypeOf((*flyioArgs)(nil)).Elem() +} + +type FlyioInput interface { + pulumi.Input + + ToFlyioOutput() FlyioOutput + ToFlyioOutputWithContext(ctx context.Context) FlyioOutput +} + +func (*Flyio) ElementType() reflect.Type { + return reflect.TypeOf((**Flyio)(nil)).Elem() +} + +func (i *Flyio) ToFlyioOutput() FlyioOutput { + return i.ToFlyioOutputWithContext(context.Background()) +} + +func (i *Flyio) ToFlyioOutputWithContext(ctx context.Context) FlyioOutput { + return pulumi.ToOutputWithContext(ctx, i).(FlyioOutput) +} + +// FlyioArrayInput is an input type that accepts FlyioArray and FlyioArrayOutput values. +// You can construct a concrete instance of `FlyioArrayInput` via: +// +// FlyioArray{ FlyioArgs{...} } +type FlyioArrayInput interface { + pulumi.Input + + ToFlyioArrayOutput() FlyioArrayOutput + ToFlyioArrayOutputWithContext(context.Context) FlyioArrayOutput +} + +type FlyioArray []FlyioInput + +func (FlyioArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*Flyio)(nil)).Elem() +} + +func (i FlyioArray) ToFlyioArrayOutput() FlyioArrayOutput { + return i.ToFlyioArrayOutputWithContext(context.Background()) +} + +func (i FlyioArray) ToFlyioArrayOutputWithContext(ctx context.Context) FlyioArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(FlyioArrayOutput) +} + +// FlyioMapInput is an input type that accepts FlyioMap and FlyioMapOutput values. +// You can construct a concrete instance of `FlyioMapInput` via: +// +// FlyioMap{ "key": FlyioArgs{...} } +type FlyioMapInput interface { + pulumi.Input + + ToFlyioMapOutput() FlyioMapOutput + ToFlyioMapOutputWithContext(context.Context) FlyioMapOutput +} + +type FlyioMap map[string]FlyioInput + +func (FlyioMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*Flyio)(nil)).Elem() +} + +func (i FlyioMap) ToFlyioMapOutput() FlyioMapOutput { + return i.ToFlyioMapOutputWithContext(context.Background()) +} + +func (i FlyioMap) ToFlyioMapOutputWithContext(ctx context.Context) FlyioMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(FlyioMapOutput) +} + +type FlyioOutput struct{ *pulumi.OutputState } + +func (FlyioOutput) ElementType() reflect.Type { + return reflect.TypeOf((**Flyio)(nil)).Elem() +} + +func (o FlyioOutput) ToFlyioOutput() FlyioOutput { + return o +} + +func (o FlyioOutput) ToFlyioOutputWithContext(ctx context.Context) FlyioOutput { + return o +} + +// A Fly.io API key. +func (o FlyioOutput) ApiKey() pulumi.StringOutput { + return o.ApplyT(func(v *Flyio) pulumi.StringOutput { return v.ApiKey }).(pulumi.StringOutput) +} + +// The name of the integration +func (o FlyioOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v *Flyio) pulumi.StringOutput { return v.Name }).(pulumi.StringOutput) +} + +type FlyioArrayOutput struct{ *pulumi.OutputState } + +func (FlyioArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*Flyio)(nil)).Elem() +} + +func (o FlyioArrayOutput) ToFlyioArrayOutput() FlyioArrayOutput { + return o +} + +func (o FlyioArrayOutput) ToFlyioArrayOutputWithContext(ctx context.Context) FlyioArrayOutput { + return o +} + +func (o FlyioArrayOutput) Index(i pulumi.IntInput) FlyioOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *Flyio { + return vs[0].([]*Flyio)[vs[1].(int)] + }).(FlyioOutput) +} + +type FlyioMapOutput struct{ *pulumi.OutputState } + +func (FlyioMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*Flyio)(nil)).Elem() +} + +func (o FlyioMapOutput) ToFlyioMapOutput() FlyioMapOutput { + return o +} + +func (o FlyioMapOutput) ToFlyioMapOutputWithContext(ctx context.Context) FlyioMapOutput { + return o +} + +func (o FlyioMapOutput) MapIndex(k pulumi.StringInput) FlyioOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *Flyio { + return vs[0].(map[string]*Flyio)[vs[1].(string)] + }).(FlyioOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*FlyioInput)(nil)).Elem(), &Flyio{}) + pulumi.RegisterInputType(reflect.TypeOf((*FlyioArrayInput)(nil)).Elem(), FlyioArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*FlyioMapInput)(nil)).Elem(), FlyioMap{}) + pulumi.RegisterOutputType(FlyioOutput{}) + pulumi.RegisterOutputType(FlyioArrayOutput{}) + pulumi.RegisterOutputType(FlyioMapOutput{}) +} diff --git a/sdk/go/doppler/integration/init.go b/sdk/go/doppler/integration/init.go index b36639d..f9cd3c2 100644 --- a/sdk/go/doppler/integration/init.go +++ b/sdk/go/doppler/integration/init.go @@ -25,6 +25,8 @@ func (m *module) Construct(ctx *pulumi.Context, name, typ, urn string) (r pulumi r = &AwsParameterStore{} case "doppler:integration/awsSecretsManager:AwsSecretsManager": r = &AwsSecretsManager{} + case "doppler:integration/flyio:Flyio": + r = &Flyio{} case "doppler:integration/terraformCloud:TerraformCloud": r = &TerraformCloud{} default: @@ -50,6 +52,11 @@ func init() { "integration/awsSecretsManager", &module{version}, ) + pulumi.RegisterResourceModule( + "doppler", + "integration/flyio", + &module{version}, + ) pulumi.RegisterResourceModule( "doppler", "integration/terraformCloud", diff --git a/sdk/go/doppler/projectRole.go b/sdk/go/doppler/projectRole.go new file mode 100644 index 0000000..916acff --- /dev/null +++ b/sdk/go/doppler/projectRole.go @@ -0,0 +1,294 @@ +// 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 doppler + +import ( + "context" + "reflect" + + "errors" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" + "github.com/pulumiverse/pulumi-doppler/sdk/go/doppler/internal" +) + +// Manage a Doppler project_role. +// +// ## Example Usage +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// "github.com/pulumiverse/pulumi-doppler/sdk/go/doppler" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := doppler.NewProjectRole(ctx, "log_viewer", &doppler.ProjectRoleArgs{ +// Name: pulumi.String("Log Viewer"), +// Permissions: pulumi.StringArray{ +// pulumi.String("enclave_config_logs"), +// }, +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +// +// ## Import +// +// ```sh +// $ pulumi import doppler:index/projectRole:ProjectRole default +// ``` +type ProjectRole struct { + pulumi.CustomResourceState + + // The role's unique identifier + Identifier pulumi.StringOutput `pulumi:"identifier"` + // Whether or not the role is custom (as opposed to Doppler built-in) + IsCustomRole pulumi.BoolOutput `pulumi:"isCustomRole"` + // The name of the Doppler project role + Name pulumi.StringOutput `pulumi:"name"` + // A list of [Doppler project permissions](https://docs.doppler.com/reference/project_roles-create) + Permissions pulumi.StringArrayOutput `pulumi:"permissions"` +} + +// NewProjectRole registers a new resource with the given unique name, arguments, and options. +func NewProjectRole(ctx *pulumi.Context, + name string, args *ProjectRoleArgs, opts ...pulumi.ResourceOption) (*ProjectRole, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.Name == nil { + return nil, errors.New("invalid value for required argument 'Name'") + } + if args.Permissions == nil { + return nil, errors.New("invalid value for required argument 'Permissions'") + } + opts = internal.PkgResourceDefaultOpts(opts) + var resource ProjectRole + err := ctx.RegisterResource("doppler:index/projectRole:ProjectRole", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetProjectRole gets an existing ProjectRole 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 GetProjectRole(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *ProjectRoleState, opts ...pulumi.ResourceOption) (*ProjectRole, error) { + var resource ProjectRole + err := ctx.ReadResource("doppler:index/projectRole:ProjectRole", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering ProjectRole resources. +type projectRoleState struct { + // The role's unique identifier + Identifier *string `pulumi:"identifier"` + // Whether or not the role is custom (as opposed to Doppler built-in) + IsCustomRole *bool `pulumi:"isCustomRole"` + // The name of the Doppler project role + Name *string `pulumi:"name"` + // A list of [Doppler project permissions](https://docs.doppler.com/reference/project_roles-create) + Permissions []string `pulumi:"permissions"` +} + +type ProjectRoleState struct { + // The role's unique identifier + Identifier pulumi.StringPtrInput + // Whether or not the role is custom (as opposed to Doppler built-in) + IsCustomRole pulumi.BoolPtrInput + // The name of the Doppler project role + Name pulumi.StringPtrInput + // A list of [Doppler project permissions](https://docs.doppler.com/reference/project_roles-create) + Permissions pulumi.StringArrayInput +} + +func (ProjectRoleState) ElementType() reflect.Type { + return reflect.TypeOf((*projectRoleState)(nil)).Elem() +} + +type projectRoleArgs struct { + // The name of the Doppler project role + Name string `pulumi:"name"` + // A list of [Doppler project permissions](https://docs.doppler.com/reference/project_roles-create) + Permissions []string `pulumi:"permissions"` +} + +// The set of arguments for constructing a ProjectRole resource. +type ProjectRoleArgs struct { + // The name of the Doppler project role + Name pulumi.StringInput + // A list of [Doppler project permissions](https://docs.doppler.com/reference/project_roles-create) + Permissions pulumi.StringArrayInput +} + +func (ProjectRoleArgs) ElementType() reflect.Type { + return reflect.TypeOf((*projectRoleArgs)(nil)).Elem() +} + +type ProjectRoleInput interface { + pulumi.Input + + ToProjectRoleOutput() ProjectRoleOutput + ToProjectRoleOutputWithContext(ctx context.Context) ProjectRoleOutput +} + +func (*ProjectRole) ElementType() reflect.Type { + return reflect.TypeOf((**ProjectRole)(nil)).Elem() +} + +func (i *ProjectRole) ToProjectRoleOutput() ProjectRoleOutput { + return i.ToProjectRoleOutputWithContext(context.Background()) +} + +func (i *ProjectRole) ToProjectRoleOutputWithContext(ctx context.Context) ProjectRoleOutput { + return pulumi.ToOutputWithContext(ctx, i).(ProjectRoleOutput) +} + +// ProjectRoleArrayInput is an input type that accepts ProjectRoleArray and ProjectRoleArrayOutput values. +// You can construct a concrete instance of `ProjectRoleArrayInput` via: +// +// ProjectRoleArray{ ProjectRoleArgs{...} } +type ProjectRoleArrayInput interface { + pulumi.Input + + ToProjectRoleArrayOutput() ProjectRoleArrayOutput + ToProjectRoleArrayOutputWithContext(context.Context) ProjectRoleArrayOutput +} + +type ProjectRoleArray []ProjectRoleInput + +func (ProjectRoleArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*ProjectRole)(nil)).Elem() +} + +func (i ProjectRoleArray) ToProjectRoleArrayOutput() ProjectRoleArrayOutput { + return i.ToProjectRoleArrayOutputWithContext(context.Background()) +} + +func (i ProjectRoleArray) ToProjectRoleArrayOutputWithContext(ctx context.Context) ProjectRoleArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(ProjectRoleArrayOutput) +} + +// ProjectRoleMapInput is an input type that accepts ProjectRoleMap and ProjectRoleMapOutput values. +// You can construct a concrete instance of `ProjectRoleMapInput` via: +// +// ProjectRoleMap{ "key": ProjectRoleArgs{...} } +type ProjectRoleMapInput interface { + pulumi.Input + + ToProjectRoleMapOutput() ProjectRoleMapOutput + ToProjectRoleMapOutputWithContext(context.Context) ProjectRoleMapOutput +} + +type ProjectRoleMap map[string]ProjectRoleInput + +func (ProjectRoleMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*ProjectRole)(nil)).Elem() +} + +func (i ProjectRoleMap) ToProjectRoleMapOutput() ProjectRoleMapOutput { + return i.ToProjectRoleMapOutputWithContext(context.Background()) +} + +func (i ProjectRoleMap) ToProjectRoleMapOutputWithContext(ctx context.Context) ProjectRoleMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(ProjectRoleMapOutput) +} + +type ProjectRoleOutput struct{ *pulumi.OutputState } + +func (ProjectRoleOutput) ElementType() reflect.Type { + return reflect.TypeOf((**ProjectRole)(nil)).Elem() +} + +func (o ProjectRoleOutput) ToProjectRoleOutput() ProjectRoleOutput { + return o +} + +func (o ProjectRoleOutput) ToProjectRoleOutputWithContext(ctx context.Context) ProjectRoleOutput { + return o +} + +// The role's unique identifier +func (o ProjectRoleOutput) Identifier() pulumi.StringOutput { + return o.ApplyT(func(v *ProjectRole) pulumi.StringOutput { return v.Identifier }).(pulumi.StringOutput) +} + +// Whether or not the role is custom (as opposed to Doppler built-in) +func (o ProjectRoleOutput) IsCustomRole() pulumi.BoolOutput { + return o.ApplyT(func(v *ProjectRole) pulumi.BoolOutput { return v.IsCustomRole }).(pulumi.BoolOutput) +} + +// The name of the Doppler project role +func (o ProjectRoleOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v *ProjectRole) pulumi.StringOutput { return v.Name }).(pulumi.StringOutput) +} + +// A list of [Doppler project permissions](https://docs.doppler.com/reference/project_roles-create) +func (o ProjectRoleOutput) Permissions() pulumi.StringArrayOutput { + return o.ApplyT(func(v *ProjectRole) pulumi.StringArrayOutput { return v.Permissions }).(pulumi.StringArrayOutput) +} + +type ProjectRoleArrayOutput struct{ *pulumi.OutputState } + +func (ProjectRoleArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*ProjectRole)(nil)).Elem() +} + +func (o ProjectRoleArrayOutput) ToProjectRoleArrayOutput() ProjectRoleArrayOutput { + return o +} + +func (o ProjectRoleArrayOutput) ToProjectRoleArrayOutputWithContext(ctx context.Context) ProjectRoleArrayOutput { + return o +} + +func (o ProjectRoleArrayOutput) Index(i pulumi.IntInput) ProjectRoleOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *ProjectRole { + return vs[0].([]*ProjectRole)[vs[1].(int)] + }).(ProjectRoleOutput) +} + +type ProjectRoleMapOutput struct{ *pulumi.OutputState } + +func (ProjectRoleMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*ProjectRole)(nil)).Elem() +} + +func (o ProjectRoleMapOutput) ToProjectRoleMapOutput() ProjectRoleMapOutput { + return o +} + +func (o ProjectRoleMapOutput) ToProjectRoleMapOutputWithContext(ctx context.Context) ProjectRoleMapOutput { + return o +} + +func (o ProjectRoleMapOutput) MapIndex(k pulumi.StringInput) ProjectRoleOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *ProjectRole { + return vs[0].(map[string]*ProjectRole)[vs[1].(string)] + }).(ProjectRoleOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*ProjectRoleInput)(nil)).Elem(), &ProjectRole{}) + pulumi.RegisterInputType(reflect.TypeOf((*ProjectRoleArrayInput)(nil)).Elem(), ProjectRoleArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*ProjectRoleMapInput)(nil)).Elem(), ProjectRoleMap{}) + pulumi.RegisterOutputType(ProjectRoleOutput{}) + pulumi.RegisterOutputType(ProjectRoleArrayOutput{}) + pulumi.RegisterOutputType(ProjectRoleMapOutput{}) +} diff --git a/sdk/go/doppler/pulumiTypes.go b/sdk/go/doppler/pulumiTypes.go new file mode 100644 index 0000000..cf12b75 --- /dev/null +++ b/sdk/go/doppler/pulumiTypes.go @@ -0,0 +1,199 @@ +// 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 doppler + +import ( + "context" + "reflect" + + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" + "github.com/pulumiverse/pulumi-doppler/sdk/go/doppler/internal" +) + +var _ = internal.GetEnvOrDefault + +type WebhookAuthentication struct { + Password *string `pulumi:"password"` + Token *string `pulumi:"token"` + Type string `pulumi:"type"` + Username *string `pulumi:"username"` +} + +// WebhookAuthenticationInput is an input type that accepts WebhookAuthenticationArgs and WebhookAuthenticationOutput values. +// You can construct a concrete instance of `WebhookAuthenticationInput` via: +// +// WebhookAuthenticationArgs{...} +type WebhookAuthenticationInput interface { + pulumi.Input + + ToWebhookAuthenticationOutput() WebhookAuthenticationOutput + ToWebhookAuthenticationOutputWithContext(context.Context) WebhookAuthenticationOutput +} + +type WebhookAuthenticationArgs struct { + Password pulumi.StringPtrInput `pulumi:"password"` + Token pulumi.StringPtrInput `pulumi:"token"` + Type pulumi.StringInput `pulumi:"type"` + Username pulumi.StringPtrInput `pulumi:"username"` +} + +func (WebhookAuthenticationArgs) ElementType() reflect.Type { + return reflect.TypeOf((*WebhookAuthentication)(nil)).Elem() +} + +func (i WebhookAuthenticationArgs) ToWebhookAuthenticationOutput() WebhookAuthenticationOutput { + return i.ToWebhookAuthenticationOutputWithContext(context.Background()) +} + +func (i WebhookAuthenticationArgs) ToWebhookAuthenticationOutputWithContext(ctx context.Context) WebhookAuthenticationOutput { + return pulumi.ToOutputWithContext(ctx, i).(WebhookAuthenticationOutput) +} + +func (i WebhookAuthenticationArgs) ToWebhookAuthenticationPtrOutput() WebhookAuthenticationPtrOutput { + return i.ToWebhookAuthenticationPtrOutputWithContext(context.Background()) +} + +func (i WebhookAuthenticationArgs) ToWebhookAuthenticationPtrOutputWithContext(ctx context.Context) WebhookAuthenticationPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(WebhookAuthenticationOutput).ToWebhookAuthenticationPtrOutputWithContext(ctx) +} + +// WebhookAuthenticationPtrInput is an input type that accepts WebhookAuthenticationArgs, WebhookAuthenticationPtr and WebhookAuthenticationPtrOutput values. +// You can construct a concrete instance of `WebhookAuthenticationPtrInput` via: +// +// WebhookAuthenticationArgs{...} +// +// or: +// +// nil +type WebhookAuthenticationPtrInput interface { + pulumi.Input + + ToWebhookAuthenticationPtrOutput() WebhookAuthenticationPtrOutput + ToWebhookAuthenticationPtrOutputWithContext(context.Context) WebhookAuthenticationPtrOutput +} + +type webhookAuthenticationPtrType WebhookAuthenticationArgs + +func WebhookAuthenticationPtr(v *WebhookAuthenticationArgs) WebhookAuthenticationPtrInput { + return (*webhookAuthenticationPtrType)(v) +} + +func (*webhookAuthenticationPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**WebhookAuthentication)(nil)).Elem() +} + +func (i *webhookAuthenticationPtrType) ToWebhookAuthenticationPtrOutput() WebhookAuthenticationPtrOutput { + return i.ToWebhookAuthenticationPtrOutputWithContext(context.Background()) +} + +func (i *webhookAuthenticationPtrType) ToWebhookAuthenticationPtrOutputWithContext(ctx context.Context) WebhookAuthenticationPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(WebhookAuthenticationPtrOutput) +} + +type WebhookAuthenticationOutput struct{ *pulumi.OutputState } + +func (WebhookAuthenticationOutput) ElementType() reflect.Type { + return reflect.TypeOf((*WebhookAuthentication)(nil)).Elem() +} + +func (o WebhookAuthenticationOutput) ToWebhookAuthenticationOutput() WebhookAuthenticationOutput { + return o +} + +func (o WebhookAuthenticationOutput) ToWebhookAuthenticationOutputWithContext(ctx context.Context) WebhookAuthenticationOutput { + return o +} + +func (o WebhookAuthenticationOutput) ToWebhookAuthenticationPtrOutput() WebhookAuthenticationPtrOutput { + return o.ToWebhookAuthenticationPtrOutputWithContext(context.Background()) +} + +func (o WebhookAuthenticationOutput) ToWebhookAuthenticationPtrOutputWithContext(ctx context.Context) WebhookAuthenticationPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v WebhookAuthentication) *WebhookAuthentication { + return &v + }).(WebhookAuthenticationPtrOutput) +} + +func (o WebhookAuthenticationOutput) Password() pulumi.StringPtrOutput { + return o.ApplyT(func(v WebhookAuthentication) *string { return v.Password }).(pulumi.StringPtrOutput) +} + +func (o WebhookAuthenticationOutput) Token() pulumi.StringPtrOutput { + return o.ApplyT(func(v WebhookAuthentication) *string { return v.Token }).(pulumi.StringPtrOutput) +} + +func (o WebhookAuthenticationOutput) Type() pulumi.StringOutput { + return o.ApplyT(func(v WebhookAuthentication) string { return v.Type }).(pulumi.StringOutput) +} + +func (o WebhookAuthenticationOutput) Username() pulumi.StringPtrOutput { + return o.ApplyT(func(v WebhookAuthentication) *string { return v.Username }).(pulumi.StringPtrOutput) +} + +type WebhookAuthenticationPtrOutput struct{ *pulumi.OutputState } + +func (WebhookAuthenticationPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**WebhookAuthentication)(nil)).Elem() +} + +func (o WebhookAuthenticationPtrOutput) ToWebhookAuthenticationPtrOutput() WebhookAuthenticationPtrOutput { + return o +} + +func (o WebhookAuthenticationPtrOutput) ToWebhookAuthenticationPtrOutputWithContext(ctx context.Context) WebhookAuthenticationPtrOutput { + return o +} + +func (o WebhookAuthenticationPtrOutput) Elem() WebhookAuthenticationOutput { + return o.ApplyT(func(v *WebhookAuthentication) WebhookAuthentication { + if v != nil { + return *v + } + var ret WebhookAuthentication + return ret + }).(WebhookAuthenticationOutput) +} + +func (o WebhookAuthenticationPtrOutput) Password() pulumi.StringPtrOutput { + return o.ApplyT(func(v *WebhookAuthentication) *string { + if v == nil { + return nil + } + return v.Password + }).(pulumi.StringPtrOutput) +} + +func (o WebhookAuthenticationPtrOutput) Token() pulumi.StringPtrOutput { + return o.ApplyT(func(v *WebhookAuthentication) *string { + if v == nil { + return nil + } + return v.Token + }).(pulumi.StringPtrOutput) +} + +func (o WebhookAuthenticationPtrOutput) Type() pulumi.StringPtrOutput { + return o.ApplyT(func(v *WebhookAuthentication) *string { + if v == nil { + return nil + } + return &v.Type + }).(pulumi.StringPtrOutput) +} + +func (o WebhookAuthenticationPtrOutput) Username() pulumi.StringPtrOutput { + return o.ApplyT(func(v *WebhookAuthentication) *string { + if v == nil { + return nil + } + return v.Username + }).(pulumi.StringPtrOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*WebhookAuthenticationInput)(nil)).Elem(), WebhookAuthenticationArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*WebhookAuthenticationPtrInput)(nil)).Elem(), WebhookAuthenticationArgs{}) + pulumi.RegisterOutputType(WebhookAuthenticationOutput{}) + pulumi.RegisterOutputType(WebhookAuthenticationPtrOutput{}) +} diff --git a/sdk/go/doppler/secretssync/awsParameterStore.go b/sdk/go/doppler/secretssync/awsParameterStore.go index 4980e4d..b33f7e6 100644 --- a/sdk/go/doppler/secretssync/awsParameterStore.go +++ b/sdk/go/doppler/secretssync/awsParameterStore.go @@ -108,6 +108,7 @@ import ( // Tags: pulumi.StringMap{ // "myTag": pulumi.String("enabled"), // }, +// DeleteBehavior: pulumi.String("leave_in_target"), // }) // if err != nil { // return err @@ -122,8 +123,12 @@ type AwsParameterStore struct { // The name of the Doppler config Config pulumi.StringOutput `pulumi:"config"` + // The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leaveInTarget` (default) or `deleteFromTarget`. + DeleteBehavior pulumi.StringPtrOutput `pulumi:"deleteBehavior"` // The slug of the integration to use for this sync Integration pulumi.StringOutput `pulumi:"integration"` + // The AWS KMS key used to encrypt the parameter (ID, Alias, or ARN) + KmsKeyId pulumi.StringPtrOutput `pulumi:"kmsKeyId"` // The path to the parameters in AWS Path pulumi.StringOutput `pulumi:"path"` // The name of the Doppler project @@ -183,8 +188,12 @@ func GetAwsParameterStore(ctx *pulumi.Context, type awsParameterStoreState struct { // The name of the Doppler config Config *string `pulumi:"config"` + // The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leaveInTarget` (default) or `deleteFromTarget`. + DeleteBehavior *string `pulumi:"deleteBehavior"` // The slug of the integration to use for this sync Integration *string `pulumi:"integration"` + // The AWS KMS key used to encrypt the parameter (ID, Alias, or ARN) + KmsKeyId *string `pulumi:"kmsKeyId"` // The path to the parameters in AWS Path *string `pulumi:"path"` // The name of the Doppler project @@ -200,8 +209,12 @@ type awsParameterStoreState struct { type AwsParameterStoreState struct { // The name of the Doppler config Config pulumi.StringPtrInput + // The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leaveInTarget` (default) or `deleteFromTarget`. + DeleteBehavior pulumi.StringPtrInput // The slug of the integration to use for this sync Integration pulumi.StringPtrInput + // The AWS KMS key used to encrypt the parameter (ID, Alias, or ARN) + KmsKeyId pulumi.StringPtrInput // The path to the parameters in AWS Path pulumi.StringPtrInput // The name of the Doppler project @@ -221,8 +234,12 @@ func (AwsParameterStoreState) ElementType() reflect.Type { type awsParameterStoreArgs struct { // The name of the Doppler config Config string `pulumi:"config"` + // The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leaveInTarget` (default) or `deleteFromTarget`. + DeleteBehavior *string `pulumi:"deleteBehavior"` // The slug of the integration to use for this sync Integration string `pulumi:"integration"` + // The AWS KMS key used to encrypt the parameter (ID, Alias, or ARN) + KmsKeyId *string `pulumi:"kmsKeyId"` // The path to the parameters in AWS Path string `pulumi:"path"` // The name of the Doppler project @@ -239,8 +256,12 @@ type awsParameterStoreArgs struct { type AwsParameterStoreArgs struct { // The name of the Doppler config Config pulumi.StringInput + // The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leaveInTarget` (default) or `deleteFromTarget`. + DeleteBehavior pulumi.StringPtrInput // The slug of the integration to use for this sync Integration pulumi.StringInput + // The AWS KMS key used to encrypt the parameter (ID, Alias, or ARN) + KmsKeyId pulumi.StringPtrInput // The path to the parameters in AWS Path pulumi.StringInput // The name of the Doppler project @@ -345,11 +366,21 @@ func (o AwsParameterStoreOutput) Config() pulumi.StringOutput { return o.ApplyT(func(v *AwsParameterStore) pulumi.StringOutput { return v.Config }).(pulumi.StringOutput) } +// The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leaveInTarget` (default) or `deleteFromTarget`. +func (o AwsParameterStoreOutput) DeleteBehavior() pulumi.StringPtrOutput { + return o.ApplyT(func(v *AwsParameterStore) pulumi.StringPtrOutput { return v.DeleteBehavior }).(pulumi.StringPtrOutput) +} + // The slug of the integration to use for this sync func (o AwsParameterStoreOutput) Integration() pulumi.StringOutput { return o.ApplyT(func(v *AwsParameterStore) pulumi.StringOutput { return v.Integration }).(pulumi.StringOutput) } +// The AWS KMS key used to encrypt the parameter (ID, Alias, or ARN) +func (o AwsParameterStoreOutput) KmsKeyId() pulumi.StringPtrOutput { + return o.ApplyT(func(v *AwsParameterStore) pulumi.StringPtrOutput { return v.KmsKeyId }).(pulumi.StringPtrOutput) +} + // The path to the parameters in AWS func (o AwsParameterStoreOutput) Path() pulumi.StringOutput { return o.ApplyT(func(v *AwsParameterStore) pulumi.StringOutput { return v.Path }).(pulumi.StringOutput) diff --git a/sdk/go/doppler/secretssync/awsSecretsManager.go b/sdk/go/doppler/secretssync/awsSecretsManager.go index 9c61a5f..e5d0224 100644 --- a/sdk/go/doppler/secretssync/awsSecretsManager.go +++ b/sdk/go/doppler/secretssync/awsSecretsManager.go @@ -104,6 +104,7 @@ import ( // Tags: pulumi.StringMap{ // "myTag": pulumi.String("enabled"), // }, +// DeleteBehavior: pulumi.String("leave_in_target"), // }) // if err != nil { // return err @@ -118,8 +119,12 @@ type AwsSecretsManager struct { // The name of the Doppler config Config pulumi.StringOutput `pulumi:"config"` + // The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leaveInTarget` (default) or `deleteFromTarget`. + DeleteBehavior pulumi.StringPtrOutput `pulumi:"deleteBehavior"` // The slug of the integration to use for this sync Integration pulumi.StringOutput `pulumi:"integration"` + // The AWS KMS key used to encrypt the secret (ID, Alias, or ARN) + KmsKeyId pulumi.StringPtrOutput `pulumi:"kmsKeyId"` // The path to the secret in AWS Path pulumi.StringOutput `pulumi:"path"` // The name of the Doppler project @@ -128,6 +133,8 @@ type AwsSecretsManager struct { Region pulumi.StringOutput `pulumi:"region"` // AWS tags to attach to the secrets Tags pulumi.StringMapOutput `pulumi:"tags"` + // If enabled, Doppler will update the AWS secret metadata (e.g. KMS key) during every sync. If disabled, Doppler will only set secret metadata for new AWS secrets. Note that Doppler never updates tags for existing AWS secrets. + UpdateMetadata pulumi.BoolPtrOutput `pulumi:"updateMetadata"` } // NewAwsSecretsManager registers a new resource with the given unique name, arguments, and options. @@ -177,8 +184,12 @@ func GetAwsSecretsManager(ctx *pulumi.Context, type awsSecretsManagerState struct { // The name of the Doppler config Config *string `pulumi:"config"` + // The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leaveInTarget` (default) or `deleteFromTarget`. + DeleteBehavior *string `pulumi:"deleteBehavior"` // The slug of the integration to use for this sync Integration *string `pulumi:"integration"` + // The AWS KMS key used to encrypt the secret (ID, Alias, or ARN) + KmsKeyId *string `pulumi:"kmsKeyId"` // The path to the secret in AWS Path *string `pulumi:"path"` // The name of the Doppler project @@ -187,13 +198,19 @@ type awsSecretsManagerState struct { Region *string `pulumi:"region"` // AWS tags to attach to the secrets Tags map[string]string `pulumi:"tags"` + // If enabled, Doppler will update the AWS secret metadata (e.g. KMS key) during every sync. If disabled, Doppler will only set secret metadata for new AWS secrets. Note that Doppler never updates tags for existing AWS secrets. + UpdateMetadata *bool `pulumi:"updateMetadata"` } type AwsSecretsManagerState struct { // The name of the Doppler config Config pulumi.StringPtrInput + // The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leaveInTarget` (default) or `deleteFromTarget`. + DeleteBehavior pulumi.StringPtrInput // The slug of the integration to use for this sync Integration pulumi.StringPtrInput + // The AWS KMS key used to encrypt the secret (ID, Alias, or ARN) + KmsKeyId pulumi.StringPtrInput // The path to the secret in AWS Path pulumi.StringPtrInput // The name of the Doppler project @@ -202,6 +219,8 @@ type AwsSecretsManagerState struct { Region pulumi.StringPtrInput // AWS tags to attach to the secrets Tags pulumi.StringMapInput + // If enabled, Doppler will update the AWS secret metadata (e.g. KMS key) during every sync. If disabled, Doppler will only set secret metadata for new AWS secrets. Note that Doppler never updates tags for existing AWS secrets. + UpdateMetadata pulumi.BoolPtrInput } func (AwsSecretsManagerState) ElementType() reflect.Type { @@ -211,8 +230,12 @@ func (AwsSecretsManagerState) ElementType() reflect.Type { type awsSecretsManagerArgs struct { // The name of the Doppler config Config string `pulumi:"config"` + // The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leaveInTarget` (default) or `deleteFromTarget`. + DeleteBehavior *string `pulumi:"deleteBehavior"` // The slug of the integration to use for this sync Integration string `pulumi:"integration"` + // The AWS KMS key used to encrypt the secret (ID, Alias, or ARN) + KmsKeyId *string `pulumi:"kmsKeyId"` // The path to the secret in AWS Path string `pulumi:"path"` // The name of the Doppler project @@ -221,14 +244,20 @@ type awsSecretsManagerArgs struct { Region string `pulumi:"region"` // AWS tags to attach to the secrets Tags map[string]string `pulumi:"tags"` + // If enabled, Doppler will update the AWS secret metadata (e.g. KMS key) during every sync. If disabled, Doppler will only set secret metadata for new AWS secrets. Note that Doppler never updates tags for existing AWS secrets. + UpdateMetadata *bool `pulumi:"updateMetadata"` } // The set of arguments for constructing a AwsSecretsManager resource. type AwsSecretsManagerArgs struct { // The name of the Doppler config Config pulumi.StringInput + // The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leaveInTarget` (default) or `deleteFromTarget`. + DeleteBehavior pulumi.StringPtrInput // The slug of the integration to use for this sync Integration pulumi.StringInput + // The AWS KMS key used to encrypt the secret (ID, Alias, or ARN) + KmsKeyId pulumi.StringPtrInput // The path to the secret in AWS Path pulumi.StringInput // The name of the Doppler project @@ -237,6 +266,8 @@ type AwsSecretsManagerArgs struct { Region pulumi.StringInput // AWS tags to attach to the secrets Tags pulumi.StringMapInput + // If enabled, Doppler will update the AWS secret metadata (e.g. KMS key) during every sync. If disabled, Doppler will only set secret metadata for new AWS secrets. Note that Doppler never updates tags for existing AWS secrets. + UpdateMetadata pulumi.BoolPtrInput } func (AwsSecretsManagerArgs) ElementType() reflect.Type { @@ -331,11 +362,21 @@ func (o AwsSecretsManagerOutput) Config() pulumi.StringOutput { return o.ApplyT(func(v *AwsSecretsManager) pulumi.StringOutput { return v.Config }).(pulumi.StringOutput) } +// The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leaveInTarget` (default) or `deleteFromTarget`. +func (o AwsSecretsManagerOutput) DeleteBehavior() pulumi.StringPtrOutput { + return o.ApplyT(func(v *AwsSecretsManager) pulumi.StringPtrOutput { return v.DeleteBehavior }).(pulumi.StringPtrOutput) +} + // The slug of the integration to use for this sync func (o AwsSecretsManagerOutput) Integration() pulumi.StringOutput { return o.ApplyT(func(v *AwsSecretsManager) pulumi.StringOutput { return v.Integration }).(pulumi.StringOutput) } +// The AWS KMS key used to encrypt the secret (ID, Alias, or ARN) +func (o AwsSecretsManagerOutput) KmsKeyId() pulumi.StringPtrOutput { + return o.ApplyT(func(v *AwsSecretsManager) pulumi.StringPtrOutput { return v.KmsKeyId }).(pulumi.StringPtrOutput) +} + // The path to the secret in AWS func (o AwsSecretsManagerOutput) Path() pulumi.StringOutput { return o.ApplyT(func(v *AwsSecretsManager) pulumi.StringOutput { return v.Path }).(pulumi.StringOutput) @@ -356,6 +397,11 @@ func (o AwsSecretsManagerOutput) Tags() pulumi.StringMapOutput { return o.ApplyT(func(v *AwsSecretsManager) pulumi.StringMapOutput { return v.Tags }).(pulumi.StringMapOutput) } +// If enabled, Doppler will update the AWS secret metadata (e.g. KMS key) during every sync. If disabled, Doppler will only set secret metadata for new AWS secrets. Note that Doppler never updates tags for existing AWS secrets. +func (o AwsSecretsManagerOutput) UpdateMetadata() pulumi.BoolPtrOutput { + return o.ApplyT(func(v *AwsSecretsManager) pulumi.BoolPtrOutput { return v.UpdateMetadata }).(pulumi.BoolPtrOutput) +} + type AwsSecretsManagerArrayOutput struct{ *pulumi.OutputState } func (AwsSecretsManagerArrayOutput) ElementType() reflect.Type { diff --git a/sdk/go/doppler/secretssync/flyio.go b/sdk/go/doppler/secretssync/flyio.go new file mode 100644 index 0000000..c061d71 --- /dev/null +++ b/sdk/go/doppler/secretssync/flyio.go @@ -0,0 +1,345 @@ +// 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 secretssync + +import ( + "context" + "reflect" + + "errors" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" + "github.com/pulumiverse/pulumi-doppler/sdk/go/doppler/internal" +) + +// Manage a Fly.io Doppler sync. +// +// ## Example Usage +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// "github.com/pulumiverse/pulumi-doppler/sdk/go/doppler/integration" +// "github.com/pulumiverse/pulumi-doppler/sdk/go/doppler/secretsSync" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// prod, err := integration.NewFlyio(ctx, "prod", &integration.FlyioArgs{ +// Name: pulumi.String("TF Fly.io"), +// ApiKey: pulumi.String("fo1_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"), +// }) +// if err != nil { +// return err +// } +// _, err = secretsSync.NewFlyio(ctx, "backend_prod", &secretsSync.FlyioArgs{ +// Integration: prod.ID(), +// Project: pulumi.String("backend"), +// Config: pulumi.String("prd"), +// AppId: pulumi.String("my-app"), +// RestartMachines: pulumi.Bool(true), +// DeleteBehavior: pulumi.String("leave_in_target"), +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +type Flyio struct { + pulumi.CustomResourceState + + // The app ID + AppId pulumi.StringOutput `pulumi:"appId"` + // The name of the Doppler config + Config pulumi.StringOutput `pulumi:"config"` + // The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leaveInTarget` (default) or `deleteFromTarget`. + DeleteBehavior pulumi.StringPtrOutput `pulumi:"deleteBehavior"` + // The slug of the integration to use for this sync + Integration pulumi.StringOutput `pulumi:"integration"` + // The name of the Doppler project + Project pulumi.StringOutput `pulumi:"project"` + // Whether or not to restart the Fly.io machines when secrets are updated + RestartMachines pulumi.BoolOutput `pulumi:"restartMachines"` +} + +// NewFlyio registers a new resource with the given unique name, arguments, and options. +func NewFlyio(ctx *pulumi.Context, + name string, args *FlyioArgs, opts ...pulumi.ResourceOption) (*Flyio, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.AppId == nil { + return nil, errors.New("invalid value for required argument 'AppId'") + } + if args.Config == nil { + return nil, errors.New("invalid value for required argument 'Config'") + } + if args.Integration == nil { + return nil, errors.New("invalid value for required argument 'Integration'") + } + if args.Project == nil { + return nil, errors.New("invalid value for required argument 'Project'") + } + if args.RestartMachines == nil { + return nil, errors.New("invalid value for required argument 'RestartMachines'") + } + opts = internal.PkgResourceDefaultOpts(opts) + var resource Flyio + err := ctx.RegisterResource("doppler:secretsSync/flyio:Flyio", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetFlyio gets an existing Flyio 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 GetFlyio(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *FlyioState, opts ...pulumi.ResourceOption) (*Flyio, error) { + var resource Flyio + err := ctx.ReadResource("doppler:secretsSync/flyio:Flyio", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering Flyio resources. +type flyioState struct { + // The app ID + AppId *string `pulumi:"appId"` + // The name of the Doppler config + Config *string `pulumi:"config"` + // The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leaveInTarget` (default) or `deleteFromTarget`. + DeleteBehavior *string `pulumi:"deleteBehavior"` + // The slug of the integration to use for this sync + Integration *string `pulumi:"integration"` + // The name of the Doppler project + Project *string `pulumi:"project"` + // Whether or not to restart the Fly.io machines when secrets are updated + RestartMachines *bool `pulumi:"restartMachines"` +} + +type FlyioState struct { + // The app ID + AppId pulumi.StringPtrInput + // The name of the Doppler config + Config pulumi.StringPtrInput + // The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leaveInTarget` (default) or `deleteFromTarget`. + DeleteBehavior pulumi.StringPtrInput + // The slug of the integration to use for this sync + Integration pulumi.StringPtrInput + // The name of the Doppler project + Project pulumi.StringPtrInput + // Whether or not to restart the Fly.io machines when secrets are updated + RestartMachines pulumi.BoolPtrInput +} + +func (FlyioState) ElementType() reflect.Type { + return reflect.TypeOf((*flyioState)(nil)).Elem() +} + +type flyioArgs struct { + // The app ID + AppId string `pulumi:"appId"` + // The name of the Doppler config + Config string `pulumi:"config"` + // The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leaveInTarget` (default) or `deleteFromTarget`. + DeleteBehavior *string `pulumi:"deleteBehavior"` + // The slug of the integration to use for this sync + Integration string `pulumi:"integration"` + // The name of the Doppler project + Project string `pulumi:"project"` + // Whether or not to restart the Fly.io machines when secrets are updated + RestartMachines bool `pulumi:"restartMachines"` +} + +// The set of arguments for constructing a Flyio resource. +type FlyioArgs struct { + // The app ID + AppId pulumi.StringInput + // The name of the Doppler config + Config pulumi.StringInput + // The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leaveInTarget` (default) or `deleteFromTarget`. + DeleteBehavior pulumi.StringPtrInput + // The slug of the integration to use for this sync + Integration pulumi.StringInput + // The name of the Doppler project + Project pulumi.StringInput + // Whether or not to restart the Fly.io machines when secrets are updated + RestartMachines pulumi.BoolInput +} + +func (FlyioArgs) ElementType() reflect.Type { + return reflect.TypeOf((*flyioArgs)(nil)).Elem() +} + +type FlyioInput interface { + pulumi.Input + + ToFlyioOutput() FlyioOutput + ToFlyioOutputWithContext(ctx context.Context) FlyioOutput +} + +func (*Flyio) ElementType() reflect.Type { + return reflect.TypeOf((**Flyio)(nil)).Elem() +} + +func (i *Flyio) ToFlyioOutput() FlyioOutput { + return i.ToFlyioOutputWithContext(context.Background()) +} + +func (i *Flyio) ToFlyioOutputWithContext(ctx context.Context) FlyioOutput { + return pulumi.ToOutputWithContext(ctx, i).(FlyioOutput) +} + +// FlyioArrayInput is an input type that accepts FlyioArray and FlyioArrayOutput values. +// You can construct a concrete instance of `FlyioArrayInput` via: +// +// FlyioArray{ FlyioArgs{...} } +type FlyioArrayInput interface { + pulumi.Input + + ToFlyioArrayOutput() FlyioArrayOutput + ToFlyioArrayOutputWithContext(context.Context) FlyioArrayOutput +} + +type FlyioArray []FlyioInput + +func (FlyioArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*Flyio)(nil)).Elem() +} + +func (i FlyioArray) ToFlyioArrayOutput() FlyioArrayOutput { + return i.ToFlyioArrayOutputWithContext(context.Background()) +} + +func (i FlyioArray) ToFlyioArrayOutputWithContext(ctx context.Context) FlyioArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(FlyioArrayOutput) +} + +// FlyioMapInput is an input type that accepts FlyioMap and FlyioMapOutput values. +// You can construct a concrete instance of `FlyioMapInput` via: +// +// FlyioMap{ "key": FlyioArgs{...} } +type FlyioMapInput interface { + pulumi.Input + + ToFlyioMapOutput() FlyioMapOutput + ToFlyioMapOutputWithContext(context.Context) FlyioMapOutput +} + +type FlyioMap map[string]FlyioInput + +func (FlyioMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*Flyio)(nil)).Elem() +} + +func (i FlyioMap) ToFlyioMapOutput() FlyioMapOutput { + return i.ToFlyioMapOutputWithContext(context.Background()) +} + +func (i FlyioMap) ToFlyioMapOutputWithContext(ctx context.Context) FlyioMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(FlyioMapOutput) +} + +type FlyioOutput struct{ *pulumi.OutputState } + +func (FlyioOutput) ElementType() reflect.Type { + return reflect.TypeOf((**Flyio)(nil)).Elem() +} + +func (o FlyioOutput) ToFlyioOutput() FlyioOutput { + return o +} + +func (o FlyioOutput) ToFlyioOutputWithContext(ctx context.Context) FlyioOutput { + return o +} + +// The app ID +func (o FlyioOutput) AppId() pulumi.StringOutput { + return o.ApplyT(func(v *Flyio) pulumi.StringOutput { return v.AppId }).(pulumi.StringOutput) +} + +// The name of the Doppler config +func (o FlyioOutput) Config() pulumi.StringOutput { + return o.ApplyT(func(v *Flyio) pulumi.StringOutput { return v.Config }).(pulumi.StringOutput) +} + +// The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leaveInTarget` (default) or `deleteFromTarget`. +func (o FlyioOutput) DeleteBehavior() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Flyio) pulumi.StringPtrOutput { return v.DeleteBehavior }).(pulumi.StringPtrOutput) +} + +// The slug of the integration to use for this sync +func (o FlyioOutput) Integration() pulumi.StringOutput { + return o.ApplyT(func(v *Flyio) pulumi.StringOutput { return v.Integration }).(pulumi.StringOutput) +} + +// The name of the Doppler project +func (o FlyioOutput) Project() pulumi.StringOutput { + return o.ApplyT(func(v *Flyio) pulumi.StringOutput { return v.Project }).(pulumi.StringOutput) +} + +// Whether or not to restart the Fly.io machines when secrets are updated +func (o FlyioOutput) RestartMachines() pulumi.BoolOutput { + return o.ApplyT(func(v *Flyio) pulumi.BoolOutput { return v.RestartMachines }).(pulumi.BoolOutput) +} + +type FlyioArrayOutput struct{ *pulumi.OutputState } + +func (FlyioArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*Flyio)(nil)).Elem() +} + +func (o FlyioArrayOutput) ToFlyioArrayOutput() FlyioArrayOutput { + return o +} + +func (o FlyioArrayOutput) ToFlyioArrayOutputWithContext(ctx context.Context) FlyioArrayOutput { + return o +} + +func (o FlyioArrayOutput) Index(i pulumi.IntInput) FlyioOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *Flyio { + return vs[0].([]*Flyio)[vs[1].(int)] + }).(FlyioOutput) +} + +type FlyioMapOutput struct{ *pulumi.OutputState } + +func (FlyioMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*Flyio)(nil)).Elem() +} + +func (o FlyioMapOutput) ToFlyioMapOutput() FlyioMapOutput { + return o +} + +func (o FlyioMapOutput) ToFlyioMapOutputWithContext(ctx context.Context) FlyioMapOutput { + return o +} + +func (o FlyioMapOutput) MapIndex(k pulumi.StringInput) FlyioOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *Flyio { + return vs[0].(map[string]*Flyio)[vs[1].(string)] + }).(FlyioOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*FlyioInput)(nil)).Elem(), &Flyio{}) + pulumi.RegisterInputType(reflect.TypeOf((*FlyioArrayInput)(nil)).Elem(), FlyioArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*FlyioMapInput)(nil)).Elem(), FlyioMap{}) + pulumi.RegisterOutputType(FlyioOutput{}) + pulumi.RegisterOutputType(FlyioArrayOutput{}) + pulumi.RegisterOutputType(FlyioMapOutput{}) +} diff --git a/sdk/go/doppler/secretssync/githubActions.go b/sdk/go/doppler/secretssync/githubActions.go index 5c36c6d..0551621 100644 --- a/sdk/go/doppler/secretssync/githubActions.go +++ b/sdk/go/doppler/secretssync/githubActions.go @@ -18,6 +18,8 @@ type GithubActions struct { // The name of the Doppler config Config pulumi.StringOutput `pulumi:"config"` + // The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leaveInTarget` (default) or `deleteFromTarget`. + DeleteBehavior pulumi.StringPtrOutput `pulumi:"deleteBehavior"` // The GitHub repo environment name to sync to (only used when `syncTarget` is set to "repo") EnvironmentName pulumi.StringPtrOutput `pulumi:"environmentName"` // The slug of the integration to use for this sync @@ -76,6 +78,8 @@ func GetGithubActions(ctx *pulumi.Context, type githubActionsState struct { // The name of the Doppler config Config *string `pulumi:"config"` + // The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leaveInTarget` (default) or `deleteFromTarget`. + DeleteBehavior *string `pulumi:"deleteBehavior"` // The GitHub repo environment name to sync to (only used when `syncTarget` is set to "repo") EnvironmentName *string `pulumi:"environmentName"` // The slug of the integration to use for this sync @@ -93,6 +97,8 @@ type githubActionsState struct { type GithubActionsState struct { // The name of the Doppler config Config pulumi.StringPtrInput + // The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leaveInTarget` (default) or `deleteFromTarget`. + DeleteBehavior pulumi.StringPtrInput // The GitHub repo environment name to sync to (only used when `syncTarget` is set to "repo") EnvironmentName pulumi.StringPtrInput // The slug of the integration to use for this sync @@ -114,6 +120,8 @@ func (GithubActionsState) ElementType() reflect.Type { type githubActionsArgs struct { // The name of the Doppler config Config string `pulumi:"config"` + // The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leaveInTarget` (default) or `deleteFromTarget`. + DeleteBehavior *string `pulumi:"deleteBehavior"` // The GitHub repo environment name to sync to (only used when `syncTarget` is set to "repo") EnvironmentName *string `pulumi:"environmentName"` // The slug of the integration to use for this sync @@ -132,6 +140,8 @@ type githubActionsArgs struct { type GithubActionsArgs struct { // The name of the Doppler config Config pulumi.StringInput + // The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leaveInTarget` (default) or `deleteFromTarget`. + DeleteBehavior pulumi.StringPtrInput // The GitHub repo environment name to sync to (only used when `syncTarget` is set to "repo") EnvironmentName pulumi.StringPtrInput // The slug of the integration to use for this sync @@ -238,6 +248,11 @@ func (o GithubActionsOutput) Config() pulumi.StringOutput { return o.ApplyT(func(v *GithubActions) pulumi.StringOutput { return v.Config }).(pulumi.StringOutput) } +// The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leaveInTarget` (default) or `deleteFromTarget`. +func (o GithubActionsOutput) DeleteBehavior() pulumi.StringPtrOutput { + return o.ApplyT(func(v *GithubActions) pulumi.StringPtrOutput { return v.DeleteBehavior }).(pulumi.StringPtrOutput) +} + // The GitHub repo environment name to sync to (only used when `syncTarget` is set to "repo") func (o GithubActionsOutput) EnvironmentName() pulumi.StringPtrOutput { return o.ApplyT(func(v *GithubActions) pulumi.StringPtrOutput { return v.EnvironmentName }).(pulumi.StringPtrOutput) diff --git a/sdk/go/doppler/secretssync/init.go b/sdk/go/doppler/secretssync/init.go index 181ab5e..a1b1fa7 100644 --- a/sdk/go/doppler/secretssync/init.go +++ b/sdk/go/doppler/secretssync/init.go @@ -25,6 +25,8 @@ func (m *module) Construct(ctx *pulumi.Context, name, typ, urn string) (r pulumi r = &AwsParameterStore{} case "doppler:secretsSync/awsSecretsManager:AwsSecretsManager": r = &AwsSecretsManager{} + case "doppler:secretsSync/flyio:Flyio": + r = &Flyio{} case "doppler:secretsSync/githubActions:GithubActions": r = &GithubActions{} case "doppler:secretsSync/terraformCloud:TerraformCloud": @@ -52,6 +54,11 @@ func init() { "secretsSync/awsSecretsManager", &module{version}, ) + pulumi.RegisterResourceModule( + "doppler", + "secretsSync/flyio", + &module{version}, + ) pulumi.RegisterResourceModule( "doppler", "secretsSync/githubActions", diff --git a/sdk/go/doppler/secretssync/terraformCloud.go b/sdk/go/doppler/secretssync/terraformCloud.go index ac9668c..3af40f4 100644 --- a/sdk/go/doppler/secretssync/terraformCloud.go +++ b/sdk/go/doppler/secretssync/terraformCloud.go @@ -18,6 +18,8 @@ type TerraformCloud struct { // The name of the Doppler config Config pulumi.StringOutput `pulumi:"config"` + // The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leaveInTarget` (default) or `deleteFromTarget`. + DeleteBehavior pulumi.StringPtrOutput `pulumi:"deleteBehavior"` // The slug of the integration to use for this sync Integration pulumi.StringOutput `pulumi:"integration"` // A name transform to apply before syncing secrets: "none" or "lowercase" @@ -81,6 +83,8 @@ func GetTerraformCloud(ctx *pulumi.Context, type terraformCloudState struct { // The name of the Doppler config Config *string `pulumi:"config"` + // The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leaveInTarget` (default) or `deleteFromTarget`. + DeleteBehavior *string `pulumi:"deleteBehavior"` // The slug of the integration to use for this sync Integration *string `pulumi:"integration"` // A name transform to apply before syncing secrets: "none" or "lowercase" @@ -97,6 +101,8 @@ type terraformCloudState struct { type TerraformCloudState struct { // The name of the Doppler config Config pulumi.StringPtrInput + // The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leaveInTarget` (default) or `deleteFromTarget`. + DeleteBehavior pulumi.StringPtrInput // The slug of the integration to use for this sync Integration pulumi.StringPtrInput // A name transform to apply before syncing secrets: "none" or "lowercase" @@ -117,6 +123,8 @@ func (TerraformCloudState) ElementType() reflect.Type { type terraformCloudArgs struct { // The name of the Doppler config Config string `pulumi:"config"` + // The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leaveInTarget` (default) or `deleteFromTarget`. + DeleteBehavior *string `pulumi:"deleteBehavior"` // The slug of the integration to use for this sync Integration string `pulumi:"integration"` // A name transform to apply before syncing secrets: "none" or "lowercase" @@ -134,6 +142,8 @@ type terraformCloudArgs struct { type TerraformCloudArgs struct { // The name of the Doppler config Config pulumi.StringInput + // The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leaveInTarget` (default) or `deleteFromTarget`. + DeleteBehavior pulumi.StringPtrInput // The slug of the integration to use for this sync Integration pulumi.StringInput // A name transform to apply before syncing secrets: "none" or "lowercase" @@ -239,6 +249,11 @@ func (o TerraformCloudOutput) Config() pulumi.StringOutput { return o.ApplyT(func(v *TerraformCloud) pulumi.StringOutput { return v.Config }).(pulumi.StringOutput) } +// The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leaveInTarget` (default) or `deleteFromTarget`. +func (o TerraformCloudOutput) DeleteBehavior() pulumi.StringPtrOutput { + return o.ApplyT(func(v *TerraformCloud) pulumi.StringPtrOutput { return v.DeleteBehavior }).(pulumi.StringPtrOutput) +} + // The slug of the integration to use for this sync func (o TerraformCloudOutput) Integration() pulumi.StringOutput { return o.ApplyT(func(v *TerraformCloud) pulumi.StringOutput { return v.Integration }).(pulumi.StringOutput) diff --git a/sdk/go/doppler/serviceAccountToken.go b/sdk/go/doppler/serviceAccountToken.go new file mode 100644 index 0000000..6432dd8 --- /dev/null +++ b/sdk/go/doppler/serviceAccountToken.go @@ -0,0 +1,289 @@ +// 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 doppler + +import ( + "context" + "reflect" + + "errors" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" + "github.com/pulumiverse/pulumi-doppler/sdk/go/doppler/internal" +) + +// Manage a Doppler service account token. +type ServiceAccountToken struct { + pulumi.CustomResourceState + + // The api key used to authenticate the service account + ApiKey pulumi.StringOutput `pulumi:"apiKey"` + // The datetime that the token was created. + CreatedAt pulumi.StringOutput `pulumi:"createdAt"` + // The datetime at which the API token should expire. If not provided, the API token will remain valid indefinitely unless manually revoked + ExpiresAt pulumi.StringPtrOutput `pulumi:"expiresAt"` + // The display name of the API token + Name pulumi.StringOutput `pulumi:"name"` + // Slug of the service account + ServiceAccountSlug pulumi.StringOutput `pulumi:"serviceAccountSlug"` + // Slug of the service account token + Slug pulumi.StringOutput `pulumi:"slug"` +} + +// NewServiceAccountToken registers a new resource with the given unique name, arguments, and options. +func NewServiceAccountToken(ctx *pulumi.Context, + name string, args *ServiceAccountTokenArgs, opts ...pulumi.ResourceOption) (*ServiceAccountToken, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.Name == nil { + return nil, errors.New("invalid value for required argument 'Name'") + } + if args.ServiceAccountSlug == nil { + return nil, errors.New("invalid value for required argument 'ServiceAccountSlug'") + } + secrets := pulumi.AdditionalSecretOutputs([]string{ + "apiKey", + }) + opts = append(opts, secrets) + opts = internal.PkgResourceDefaultOpts(opts) + var resource ServiceAccountToken + err := ctx.RegisterResource("doppler:index/serviceAccountToken:ServiceAccountToken", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetServiceAccountToken gets an existing ServiceAccountToken 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 GetServiceAccountToken(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *ServiceAccountTokenState, opts ...pulumi.ResourceOption) (*ServiceAccountToken, error) { + var resource ServiceAccountToken + err := ctx.ReadResource("doppler:index/serviceAccountToken:ServiceAccountToken", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering ServiceAccountToken resources. +type serviceAccountTokenState struct { + // The api key used to authenticate the service account + ApiKey *string `pulumi:"apiKey"` + // The datetime that the token was created. + CreatedAt *string `pulumi:"createdAt"` + // The datetime at which the API token should expire. If not provided, the API token will remain valid indefinitely unless manually revoked + ExpiresAt *string `pulumi:"expiresAt"` + // The display name of the API token + Name *string `pulumi:"name"` + // Slug of the service account + ServiceAccountSlug *string `pulumi:"serviceAccountSlug"` + // Slug of the service account token + Slug *string `pulumi:"slug"` +} + +type ServiceAccountTokenState struct { + // The api key used to authenticate the service account + ApiKey pulumi.StringPtrInput + // The datetime that the token was created. + CreatedAt pulumi.StringPtrInput + // The datetime at which the API token should expire. If not provided, the API token will remain valid indefinitely unless manually revoked + ExpiresAt pulumi.StringPtrInput + // The display name of the API token + Name pulumi.StringPtrInput + // Slug of the service account + ServiceAccountSlug pulumi.StringPtrInput + // Slug of the service account token + Slug pulumi.StringPtrInput +} + +func (ServiceAccountTokenState) ElementType() reflect.Type { + return reflect.TypeOf((*serviceAccountTokenState)(nil)).Elem() +} + +type serviceAccountTokenArgs struct { + // The datetime at which the API token should expire. If not provided, the API token will remain valid indefinitely unless manually revoked + ExpiresAt *string `pulumi:"expiresAt"` + // The display name of the API token + Name string `pulumi:"name"` + // Slug of the service account + ServiceAccountSlug string `pulumi:"serviceAccountSlug"` +} + +// The set of arguments for constructing a ServiceAccountToken resource. +type ServiceAccountTokenArgs struct { + // The datetime at which the API token should expire. If not provided, the API token will remain valid indefinitely unless manually revoked + ExpiresAt pulumi.StringPtrInput + // The display name of the API token + Name pulumi.StringInput + // Slug of the service account + ServiceAccountSlug pulumi.StringInput +} + +func (ServiceAccountTokenArgs) ElementType() reflect.Type { + return reflect.TypeOf((*serviceAccountTokenArgs)(nil)).Elem() +} + +type ServiceAccountTokenInput interface { + pulumi.Input + + ToServiceAccountTokenOutput() ServiceAccountTokenOutput + ToServiceAccountTokenOutputWithContext(ctx context.Context) ServiceAccountTokenOutput +} + +func (*ServiceAccountToken) ElementType() reflect.Type { + return reflect.TypeOf((**ServiceAccountToken)(nil)).Elem() +} + +func (i *ServiceAccountToken) ToServiceAccountTokenOutput() ServiceAccountTokenOutput { + return i.ToServiceAccountTokenOutputWithContext(context.Background()) +} + +func (i *ServiceAccountToken) ToServiceAccountTokenOutputWithContext(ctx context.Context) ServiceAccountTokenOutput { + return pulumi.ToOutputWithContext(ctx, i).(ServiceAccountTokenOutput) +} + +// ServiceAccountTokenArrayInput is an input type that accepts ServiceAccountTokenArray and ServiceAccountTokenArrayOutput values. +// You can construct a concrete instance of `ServiceAccountTokenArrayInput` via: +// +// ServiceAccountTokenArray{ ServiceAccountTokenArgs{...} } +type ServiceAccountTokenArrayInput interface { + pulumi.Input + + ToServiceAccountTokenArrayOutput() ServiceAccountTokenArrayOutput + ToServiceAccountTokenArrayOutputWithContext(context.Context) ServiceAccountTokenArrayOutput +} + +type ServiceAccountTokenArray []ServiceAccountTokenInput + +func (ServiceAccountTokenArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*ServiceAccountToken)(nil)).Elem() +} + +func (i ServiceAccountTokenArray) ToServiceAccountTokenArrayOutput() ServiceAccountTokenArrayOutput { + return i.ToServiceAccountTokenArrayOutputWithContext(context.Background()) +} + +func (i ServiceAccountTokenArray) ToServiceAccountTokenArrayOutputWithContext(ctx context.Context) ServiceAccountTokenArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(ServiceAccountTokenArrayOutput) +} + +// ServiceAccountTokenMapInput is an input type that accepts ServiceAccountTokenMap and ServiceAccountTokenMapOutput values. +// You can construct a concrete instance of `ServiceAccountTokenMapInput` via: +// +// ServiceAccountTokenMap{ "key": ServiceAccountTokenArgs{...} } +type ServiceAccountTokenMapInput interface { + pulumi.Input + + ToServiceAccountTokenMapOutput() ServiceAccountTokenMapOutput + ToServiceAccountTokenMapOutputWithContext(context.Context) ServiceAccountTokenMapOutput +} + +type ServiceAccountTokenMap map[string]ServiceAccountTokenInput + +func (ServiceAccountTokenMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*ServiceAccountToken)(nil)).Elem() +} + +func (i ServiceAccountTokenMap) ToServiceAccountTokenMapOutput() ServiceAccountTokenMapOutput { + return i.ToServiceAccountTokenMapOutputWithContext(context.Background()) +} + +func (i ServiceAccountTokenMap) ToServiceAccountTokenMapOutputWithContext(ctx context.Context) ServiceAccountTokenMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(ServiceAccountTokenMapOutput) +} + +type ServiceAccountTokenOutput struct{ *pulumi.OutputState } + +func (ServiceAccountTokenOutput) ElementType() reflect.Type { + return reflect.TypeOf((**ServiceAccountToken)(nil)).Elem() +} + +func (o ServiceAccountTokenOutput) ToServiceAccountTokenOutput() ServiceAccountTokenOutput { + return o +} + +func (o ServiceAccountTokenOutput) ToServiceAccountTokenOutputWithContext(ctx context.Context) ServiceAccountTokenOutput { + return o +} + +// The api key used to authenticate the service account +func (o ServiceAccountTokenOutput) ApiKey() pulumi.StringOutput { + return o.ApplyT(func(v *ServiceAccountToken) pulumi.StringOutput { return v.ApiKey }).(pulumi.StringOutput) +} + +// The datetime that the token was created. +func (o ServiceAccountTokenOutput) CreatedAt() pulumi.StringOutput { + return o.ApplyT(func(v *ServiceAccountToken) pulumi.StringOutput { return v.CreatedAt }).(pulumi.StringOutput) +} + +// The datetime at which the API token should expire. If not provided, the API token will remain valid indefinitely unless manually revoked +func (o ServiceAccountTokenOutput) ExpiresAt() pulumi.StringPtrOutput { + return o.ApplyT(func(v *ServiceAccountToken) pulumi.StringPtrOutput { return v.ExpiresAt }).(pulumi.StringPtrOutput) +} + +// The display name of the API token +func (o ServiceAccountTokenOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v *ServiceAccountToken) pulumi.StringOutput { return v.Name }).(pulumi.StringOutput) +} + +// Slug of the service account +func (o ServiceAccountTokenOutput) ServiceAccountSlug() pulumi.StringOutput { + return o.ApplyT(func(v *ServiceAccountToken) pulumi.StringOutput { return v.ServiceAccountSlug }).(pulumi.StringOutput) +} + +// Slug of the service account token +func (o ServiceAccountTokenOutput) Slug() pulumi.StringOutput { + return o.ApplyT(func(v *ServiceAccountToken) pulumi.StringOutput { return v.Slug }).(pulumi.StringOutput) +} + +type ServiceAccountTokenArrayOutput struct{ *pulumi.OutputState } + +func (ServiceAccountTokenArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*ServiceAccountToken)(nil)).Elem() +} + +func (o ServiceAccountTokenArrayOutput) ToServiceAccountTokenArrayOutput() ServiceAccountTokenArrayOutput { + return o +} + +func (o ServiceAccountTokenArrayOutput) ToServiceAccountTokenArrayOutputWithContext(ctx context.Context) ServiceAccountTokenArrayOutput { + return o +} + +func (o ServiceAccountTokenArrayOutput) Index(i pulumi.IntInput) ServiceAccountTokenOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *ServiceAccountToken { + return vs[0].([]*ServiceAccountToken)[vs[1].(int)] + }).(ServiceAccountTokenOutput) +} + +type ServiceAccountTokenMapOutput struct{ *pulumi.OutputState } + +func (ServiceAccountTokenMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*ServiceAccountToken)(nil)).Elem() +} + +func (o ServiceAccountTokenMapOutput) ToServiceAccountTokenMapOutput() ServiceAccountTokenMapOutput { + return o +} + +func (o ServiceAccountTokenMapOutput) ToServiceAccountTokenMapOutputWithContext(ctx context.Context) ServiceAccountTokenMapOutput { + return o +} + +func (o ServiceAccountTokenMapOutput) MapIndex(k pulumi.StringInput) ServiceAccountTokenOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *ServiceAccountToken { + return vs[0].(map[string]*ServiceAccountToken)[vs[1].(string)] + }).(ServiceAccountTokenOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*ServiceAccountTokenInput)(nil)).Elem(), &ServiceAccountToken{}) + pulumi.RegisterInputType(reflect.TypeOf((*ServiceAccountTokenArrayInput)(nil)).Elem(), ServiceAccountTokenArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*ServiceAccountTokenMapInput)(nil)).Elem(), ServiceAccountTokenMap{}) + pulumi.RegisterOutputType(ServiceAccountTokenOutput{}) + pulumi.RegisterOutputType(ServiceAccountTokenArrayOutput{}) + pulumi.RegisterOutputType(ServiceAccountTokenMapOutput{}) +} diff --git a/sdk/go/doppler/webhook.go b/sdk/go/doppler/webhook.go new file mode 100644 index 0000000..ad993fa --- /dev/null +++ b/sdk/go/doppler/webhook.go @@ -0,0 +1,333 @@ +// 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 doppler + +import ( + "context" + "reflect" + + "errors" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" + "github.com/pulumiverse/pulumi-doppler/sdk/go/doppler/internal" +) + +type Webhook struct { + pulumi.CustomResourceState + + // Authentication method used by the webhook + Authentication WebhookAuthenticationPtrOutput `pulumi:"authentication"` + // Whether the webhook is enabled or disabled. Default to true. + Enabled pulumi.BoolPtrOutput `pulumi:"enabled"` + // Configs this webhook will trigger for + EnabledConfigs pulumi.StringArrayOutput `pulumi:"enabledConfigs"` + // The webhook's payload as a JSON string. Leave empty to use the default webhook payload + Payload pulumi.StringPtrOutput `pulumi:"payload"` + // The name of the Doppler project where the webhook is located + Project pulumi.StringOutput `pulumi:"project"` + // Secret used for request signing + Secret pulumi.StringPtrOutput `pulumi:"secret"` + // The slug of the Webhook + Slug pulumi.StringOutput `pulumi:"slug"` + // The URL of the webhook endpoint + Url pulumi.StringOutput `pulumi:"url"` +} + +// NewWebhook registers a new resource with the given unique name, arguments, and options. +func NewWebhook(ctx *pulumi.Context, + name string, args *WebhookArgs, opts ...pulumi.ResourceOption) (*Webhook, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.Project == nil { + return nil, errors.New("invalid value for required argument 'Project'") + } + if args.Url == nil { + return nil, errors.New("invalid value for required argument 'Url'") + } + if args.Payload != nil { + args.Payload = pulumi.ToSecret(args.Payload).(pulumi.StringPtrInput) + } + if args.Secret != nil { + args.Secret = pulumi.ToSecret(args.Secret).(pulumi.StringPtrInput) + } + secrets := pulumi.AdditionalSecretOutputs([]string{ + "payload", + "secret", + }) + opts = append(opts, secrets) + opts = internal.PkgResourceDefaultOpts(opts) + var resource Webhook + err := ctx.RegisterResource("doppler:index/webhook:Webhook", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetWebhook gets an existing Webhook 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 GetWebhook(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *WebhookState, opts ...pulumi.ResourceOption) (*Webhook, error) { + var resource Webhook + err := ctx.ReadResource("doppler:index/webhook:Webhook", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering Webhook resources. +type webhookState struct { + // Authentication method used by the webhook + Authentication *WebhookAuthentication `pulumi:"authentication"` + // Whether the webhook is enabled or disabled. Default to true. + Enabled *bool `pulumi:"enabled"` + // Configs this webhook will trigger for + EnabledConfigs []string `pulumi:"enabledConfigs"` + // The webhook's payload as a JSON string. Leave empty to use the default webhook payload + Payload *string `pulumi:"payload"` + // The name of the Doppler project where the webhook is located + Project *string `pulumi:"project"` + // Secret used for request signing + Secret *string `pulumi:"secret"` + // The slug of the Webhook + Slug *string `pulumi:"slug"` + // The URL of the webhook endpoint + Url *string `pulumi:"url"` +} + +type WebhookState struct { + // Authentication method used by the webhook + Authentication WebhookAuthenticationPtrInput + // Whether the webhook is enabled or disabled. Default to true. + Enabled pulumi.BoolPtrInput + // Configs this webhook will trigger for + EnabledConfigs pulumi.StringArrayInput + // The webhook's payload as a JSON string. Leave empty to use the default webhook payload + Payload pulumi.StringPtrInput + // The name of the Doppler project where the webhook is located + Project pulumi.StringPtrInput + // Secret used for request signing + Secret pulumi.StringPtrInput + // The slug of the Webhook + Slug pulumi.StringPtrInput + // The URL of the webhook endpoint + Url pulumi.StringPtrInput +} + +func (WebhookState) ElementType() reflect.Type { + return reflect.TypeOf((*webhookState)(nil)).Elem() +} + +type webhookArgs struct { + // Authentication method used by the webhook + Authentication *WebhookAuthentication `pulumi:"authentication"` + // Whether the webhook is enabled or disabled. Default to true. + Enabled *bool `pulumi:"enabled"` + // Configs this webhook will trigger for + EnabledConfigs []string `pulumi:"enabledConfigs"` + // The webhook's payload as a JSON string. Leave empty to use the default webhook payload + Payload *string `pulumi:"payload"` + // The name of the Doppler project where the webhook is located + Project string `pulumi:"project"` + // Secret used for request signing + Secret *string `pulumi:"secret"` + // The URL of the webhook endpoint + Url string `pulumi:"url"` +} + +// The set of arguments for constructing a Webhook resource. +type WebhookArgs struct { + // Authentication method used by the webhook + Authentication WebhookAuthenticationPtrInput + // Whether the webhook is enabled or disabled. Default to true. + Enabled pulumi.BoolPtrInput + // Configs this webhook will trigger for + EnabledConfigs pulumi.StringArrayInput + // The webhook's payload as a JSON string. Leave empty to use the default webhook payload + Payload pulumi.StringPtrInput + // The name of the Doppler project where the webhook is located + Project pulumi.StringInput + // Secret used for request signing + Secret pulumi.StringPtrInput + // The URL of the webhook endpoint + Url pulumi.StringInput +} + +func (WebhookArgs) ElementType() reflect.Type { + return reflect.TypeOf((*webhookArgs)(nil)).Elem() +} + +type WebhookInput interface { + pulumi.Input + + ToWebhookOutput() WebhookOutput + ToWebhookOutputWithContext(ctx context.Context) WebhookOutput +} + +func (*Webhook) ElementType() reflect.Type { + return reflect.TypeOf((**Webhook)(nil)).Elem() +} + +func (i *Webhook) ToWebhookOutput() WebhookOutput { + return i.ToWebhookOutputWithContext(context.Background()) +} + +func (i *Webhook) ToWebhookOutputWithContext(ctx context.Context) WebhookOutput { + return pulumi.ToOutputWithContext(ctx, i).(WebhookOutput) +} + +// WebhookArrayInput is an input type that accepts WebhookArray and WebhookArrayOutput values. +// You can construct a concrete instance of `WebhookArrayInput` via: +// +// WebhookArray{ WebhookArgs{...} } +type WebhookArrayInput interface { + pulumi.Input + + ToWebhookArrayOutput() WebhookArrayOutput + ToWebhookArrayOutputWithContext(context.Context) WebhookArrayOutput +} + +type WebhookArray []WebhookInput + +func (WebhookArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*Webhook)(nil)).Elem() +} + +func (i WebhookArray) ToWebhookArrayOutput() WebhookArrayOutput { + return i.ToWebhookArrayOutputWithContext(context.Background()) +} + +func (i WebhookArray) ToWebhookArrayOutputWithContext(ctx context.Context) WebhookArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(WebhookArrayOutput) +} + +// WebhookMapInput is an input type that accepts WebhookMap and WebhookMapOutput values. +// You can construct a concrete instance of `WebhookMapInput` via: +// +// WebhookMap{ "key": WebhookArgs{...} } +type WebhookMapInput interface { + pulumi.Input + + ToWebhookMapOutput() WebhookMapOutput + ToWebhookMapOutputWithContext(context.Context) WebhookMapOutput +} + +type WebhookMap map[string]WebhookInput + +func (WebhookMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*Webhook)(nil)).Elem() +} + +func (i WebhookMap) ToWebhookMapOutput() WebhookMapOutput { + return i.ToWebhookMapOutputWithContext(context.Background()) +} + +func (i WebhookMap) ToWebhookMapOutputWithContext(ctx context.Context) WebhookMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(WebhookMapOutput) +} + +type WebhookOutput struct{ *pulumi.OutputState } + +func (WebhookOutput) ElementType() reflect.Type { + return reflect.TypeOf((**Webhook)(nil)).Elem() +} + +func (o WebhookOutput) ToWebhookOutput() WebhookOutput { + return o +} + +func (o WebhookOutput) ToWebhookOutputWithContext(ctx context.Context) WebhookOutput { + return o +} + +// Authentication method used by the webhook +func (o WebhookOutput) Authentication() WebhookAuthenticationPtrOutput { + return o.ApplyT(func(v *Webhook) WebhookAuthenticationPtrOutput { return v.Authentication }).(WebhookAuthenticationPtrOutput) +} + +// Whether the webhook is enabled or disabled. Default to true. +func (o WebhookOutput) Enabled() pulumi.BoolPtrOutput { + return o.ApplyT(func(v *Webhook) pulumi.BoolPtrOutput { return v.Enabled }).(pulumi.BoolPtrOutput) +} + +// Configs this webhook will trigger for +func (o WebhookOutput) EnabledConfigs() pulumi.StringArrayOutput { + return o.ApplyT(func(v *Webhook) pulumi.StringArrayOutput { return v.EnabledConfigs }).(pulumi.StringArrayOutput) +} + +// The webhook's payload as a JSON string. Leave empty to use the default webhook payload +func (o WebhookOutput) Payload() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Webhook) pulumi.StringPtrOutput { return v.Payload }).(pulumi.StringPtrOutput) +} + +// The name of the Doppler project where the webhook is located +func (o WebhookOutput) Project() pulumi.StringOutput { + return o.ApplyT(func(v *Webhook) pulumi.StringOutput { return v.Project }).(pulumi.StringOutput) +} + +// Secret used for request signing +func (o WebhookOutput) Secret() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Webhook) pulumi.StringPtrOutput { return v.Secret }).(pulumi.StringPtrOutput) +} + +// The slug of the Webhook +func (o WebhookOutput) Slug() pulumi.StringOutput { + return o.ApplyT(func(v *Webhook) pulumi.StringOutput { return v.Slug }).(pulumi.StringOutput) +} + +// The URL of the webhook endpoint +func (o WebhookOutput) Url() pulumi.StringOutput { + return o.ApplyT(func(v *Webhook) pulumi.StringOutput { return v.Url }).(pulumi.StringOutput) +} + +type WebhookArrayOutput struct{ *pulumi.OutputState } + +func (WebhookArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*Webhook)(nil)).Elem() +} + +func (o WebhookArrayOutput) ToWebhookArrayOutput() WebhookArrayOutput { + return o +} + +func (o WebhookArrayOutput) ToWebhookArrayOutputWithContext(ctx context.Context) WebhookArrayOutput { + return o +} + +func (o WebhookArrayOutput) Index(i pulumi.IntInput) WebhookOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *Webhook { + return vs[0].([]*Webhook)[vs[1].(int)] + }).(WebhookOutput) +} + +type WebhookMapOutput struct{ *pulumi.OutputState } + +func (WebhookMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*Webhook)(nil)).Elem() +} + +func (o WebhookMapOutput) ToWebhookMapOutput() WebhookMapOutput { + return o +} + +func (o WebhookMapOutput) ToWebhookMapOutputWithContext(ctx context.Context) WebhookMapOutput { + return o +} + +func (o WebhookMapOutput) MapIndex(k pulumi.StringInput) WebhookOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *Webhook { + return vs[0].(map[string]*Webhook)[vs[1].(string)] + }).(WebhookOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*WebhookInput)(nil)).Elem(), &Webhook{}) + pulumi.RegisterInputType(reflect.TypeOf((*WebhookArrayInput)(nil)).Elem(), WebhookArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*WebhookMapInput)(nil)).Elem(), WebhookMap{}) + pulumi.RegisterOutputType(WebhookOutput{}) + pulumi.RegisterOutputType(WebhookArrayOutput{}) + pulumi.RegisterOutputType(WebhookMapOutput{}) +} diff --git a/sdk/nodejs/environment.ts b/sdk/nodejs/environment.ts index 13ed5ed..3a1c858 100644 --- a/sdk/nodejs/environment.ts +++ b/sdk/nodejs/environment.ts @@ -58,6 +58,10 @@ export class Environment extends pulumi.CustomResource { * The name of the Doppler environment */ public readonly name!: pulumi.Output; + /** + * Whether or not personal configs are enabled for the environment + */ + public readonly personalConfigs!: pulumi.Output; /** * The name of the Doppler project where the environment is located */ @@ -81,6 +85,7 @@ export class Environment extends pulumi.CustomResource { if (opts.id) { const state = argsOrState as EnvironmentState | undefined; resourceInputs["name"] = state ? state.name : undefined; + resourceInputs["personalConfigs"] = state ? state.personalConfigs : undefined; resourceInputs["project"] = state ? state.project : undefined; resourceInputs["slug"] = state ? state.slug : undefined; } else { @@ -95,6 +100,7 @@ export class Environment extends pulumi.CustomResource { throw new Error("Missing required property 'slug'"); } resourceInputs["name"] = args ? args.name : undefined; + resourceInputs["personalConfigs"] = args ? args.personalConfigs : undefined; resourceInputs["project"] = args ? args.project : undefined; resourceInputs["slug"] = args ? args.slug : undefined; } @@ -111,6 +117,10 @@ export interface EnvironmentState { * The name of the Doppler environment */ name?: pulumi.Input; + /** + * Whether or not personal configs are enabled for the environment + */ + personalConfigs?: pulumi.Input; /** * The name of the Doppler project where the environment is located */ @@ -129,6 +139,10 @@ export interface EnvironmentArgs { * The name of the Doppler environment */ name: pulumi.Input; + /** + * Whether or not personal configs are enabled for the environment + */ + personalConfigs?: pulumi.Input; /** * The name of the Doppler project where the environment is located */ diff --git a/sdk/nodejs/index.ts b/sdk/nodejs/index.ts index b1c4ab1..0712e9d 100644 --- a/sdk/nodejs/index.ts +++ b/sdk/nodejs/index.ts @@ -40,6 +40,11 @@ export type Project = import("./project").Project; export const Project: typeof import("./project").Project = null as any; utilities.lazyLoad(exports, ["Project"], () => require("./project")); +export { ProjectRoleArgs, ProjectRoleState } from "./projectRole"; +export type ProjectRole = import("./projectRole").ProjectRole; +export const ProjectRole: typeof import("./projectRole").ProjectRole = null as any; +utilities.lazyLoad(exports, ["ProjectRole"], () => require("./projectRole")); + export { ProviderArgs } from "./provider"; export type Provider = import("./provider").Provider; export const Provider: typeof import("./provider").Provider = null as any; @@ -55,23 +60,35 @@ export type ServiceAccount = import("./serviceAccount").ServiceAccount; export const ServiceAccount: typeof import("./serviceAccount").ServiceAccount = null as any; utilities.lazyLoad(exports, ["ServiceAccount"], () => require("./serviceAccount")); +export { ServiceAccountTokenArgs, ServiceAccountTokenState } from "./serviceAccountToken"; +export type ServiceAccountToken = import("./serviceAccountToken").ServiceAccountToken; +export const ServiceAccountToken: typeof import("./serviceAccountToken").ServiceAccountToken = null as any; +utilities.lazyLoad(exports, ["ServiceAccountToken"], () => require("./serviceAccountToken")); + export { ServiceTokenArgs, ServiceTokenState } from "./serviceToken"; export type ServiceToken = import("./serviceToken").ServiceToken; export const ServiceToken: typeof import("./serviceToken").ServiceToken = null as any; utilities.lazyLoad(exports, ["ServiceToken"], () => require("./serviceToken")); +export { WebhookArgs, WebhookState } from "./webhook"; +export type Webhook = import("./webhook").Webhook; +export const Webhook: typeof import("./webhook").Webhook = null as any; +utilities.lazyLoad(exports, ["Webhook"], () => require("./webhook")); + // Export sub-modules: import * as config from "./config"; import * as integration from "./integration"; import * as projectmember from "./projectmember"; import * as secretssync from "./secretssync"; +import * as types from "./types"; export { config, integration, projectmember, secretssync, + types, }; const _module = { @@ -88,12 +105,18 @@ const _module = { return new GroupMember(name, undefined, { urn }) case "doppler:index/project:Project": return new Project(name, undefined, { urn }) + case "doppler:index/projectRole:ProjectRole": + return new ProjectRole(name, undefined, { urn }) case "doppler:index/secret:Secret": return new Secret(name, undefined, { urn }) case "doppler:index/serviceAccount:ServiceAccount": return new ServiceAccount(name, undefined, { urn }) + case "doppler:index/serviceAccountToken:ServiceAccountToken": + return new ServiceAccountToken(name, undefined, { urn }) case "doppler:index/serviceToken:ServiceToken": return new ServiceToken(name, undefined, { urn }) + case "doppler:index/webhook:Webhook": + return new Webhook(name, undefined, { urn }) default: throw new Error(`unknown resource type ${type}`); } @@ -104,9 +127,12 @@ pulumi.runtime.registerResourceModule("doppler", "index/environment", _module) pulumi.runtime.registerResourceModule("doppler", "index/group", _module) pulumi.runtime.registerResourceModule("doppler", "index/groupMember", _module) pulumi.runtime.registerResourceModule("doppler", "index/project", _module) +pulumi.runtime.registerResourceModule("doppler", "index/projectRole", _module) pulumi.runtime.registerResourceModule("doppler", "index/secret", _module) pulumi.runtime.registerResourceModule("doppler", "index/serviceAccount", _module) +pulumi.runtime.registerResourceModule("doppler", "index/serviceAccountToken", _module) pulumi.runtime.registerResourceModule("doppler", "index/serviceToken", _module) +pulumi.runtime.registerResourceModule("doppler", "index/webhook", _module) pulumi.runtime.registerResourcePackage("doppler", { version: utilities.getVersion(), constructProvider: (name: string, type: string, urn: string): pulumi.ProviderResource => { diff --git a/sdk/nodejs/integration/awsParameterStore.ts b/sdk/nodejs/integration/awsParameterStore.ts index c4147e4..4dd7d2b 100644 --- a/sdk/nodejs/integration/awsParameterStore.ts +++ b/sdk/nodejs/integration/awsParameterStore.ts @@ -68,6 +68,7 @@ import * as utilities from "../utilities"; * tags: { * myTag: "enabled", * }, + * deleteBehavior: "leave_in_target", * }); * ``` */ diff --git a/sdk/nodejs/integration/awsSecretsManager.ts b/sdk/nodejs/integration/awsSecretsManager.ts index b88913d..c9ced9d 100644 --- a/sdk/nodejs/integration/awsSecretsManager.ts +++ b/sdk/nodejs/integration/awsSecretsManager.ts @@ -64,6 +64,7 @@ import * as utilities from "../utilities"; * tags: { * myTag: "enabled", * }, + * deleteBehavior: "leave_in_target", * }); * ``` */ diff --git a/sdk/nodejs/integration/flyio.ts b/sdk/nodejs/integration/flyio.ts new file mode 100644 index 0000000..4fee5ed --- /dev/null +++ b/sdk/nodejs/integration/flyio.ts @@ -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! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as utilities from "../utilities"; + +/** + * Manage a Fly.io Doppler integration. + * + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as doppler from "@pulumiverse/doppler"; + * + * const prod = new doppler.integration.Flyio("prod", { + * name: "TF Fly.io", + * apiKey: "fo1_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", + * }); + * const backendProd = new doppler.secretssync.Flyio("backend_prod", { + * integration: prod.id, + * project: "backend", + * config: "prd", + * appId: "my-app", + * restartMachines: true, + * deleteBehavior: "leave_in_target", + * }); + * ``` + */ +export class Flyio extends pulumi.CustomResource { + /** + * Get an existing Flyio 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?: FlyioState, opts?: pulumi.CustomResourceOptions): Flyio { + return new Flyio(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'doppler:integration/flyio:Flyio'; + + /** + * Returns true if the given object is an instance of Flyio. 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 Flyio { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === Flyio.__pulumiType; + } + + /** + * A Fly.io API key. + */ + public readonly apiKey!: pulumi.Output; + /** + * The name of the integration + */ + public readonly name!: pulumi.Output; + + /** + * Create a Flyio 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: FlyioArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: FlyioArgs | FlyioState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as FlyioState | undefined; + resourceInputs["apiKey"] = state ? state.apiKey : undefined; + resourceInputs["name"] = state ? state.name : undefined; + } else { + const args = argsOrState as FlyioArgs | undefined; + if ((!args || args.apiKey === undefined) && !opts.urn) { + throw new Error("Missing required property 'apiKey'"); + } + if ((!args || args.name === undefined) && !opts.urn) { + throw new Error("Missing required property 'name'"); + } + resourceInputs["apiKey"] = args?.apiKey ? pulumi.secret(args.apiKey) : undefined; + resourceInputs["name"] = args ? args.name : undefined; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + const secretOpts = { additionalSecretOutputs: ["apiKey"] }; + opts = pulumi.mergeOptions(opts, secretOpts); + super(Flyio.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering Flyio resources. + */ +export interface FlyioState { + /** + * A Fly.io API key. + */ + apiKey?: pulumi.Input; + /** + * The name of the integration + */ + name?: pulumi.Input; +} + +/** + * The set of arguments for constructing a Flyio resource. + */ +export interface FlyioArgs { + /** + * A Fly.io API key. + */ + apiKey: pulumi.Input; + /** + * The name of the integration + */ + name: pulumi.Input; +} diff --git a/sdk/nodejs/integration/index.ts b/sdk/nodejs/integration/index.ts index 3e755be..e3a0899 100644 --- a/sdk/nodejs/integration/index.ts +++ b/sdk/nodejs/integration/index.ts @@ -15,6 +15,11 @@ export type AwsSecretsManager = import("./awsSecretsManager").AwsSecretsManager; export const AwsSecretsManager: typeof import("./awsSecretsManager").AwsSecretsManager = null as any; utilities.lazyLoad(exports, ["AwsSecretsManager"], () => require("./awsSecretsManager")); +export { FlyioArgs, FlyioState } from "./flyio"; +export type Flyio = import("./flyio").Flyio; +export const Flyio: typeof import("./flyio").Flyio = null as any; +utilities.lazyLoad(exports, ["Flyio"], () => require("./flyio")); + export { TerraformCloudArgs, TerraformCloudState } from "./terraformCloud"; export type TerraformCloud = import("./terraformCloud").TerraformCloud; export const TerraformCloud: typeof import("./terraformCloud").TerraformCloud = null as any; @@ -29,6 +34,8 @@ const _module = { return new AwsParameterStore(name, undefined, { urn }) case "doppler:integration/awsSecretsManager:AwsSecretsManager": return new AwsSecretsManager(name, undefined, { urn }) + case "doppler:integration/flyio:Flyio": + return new Flyio(name, undefined, { urn }) case "doppler:integration/terraformCloud:TerraformCloud": return new TerraformCloud(name, undefined, { urn }) default: @@ -38,4 +45,5 @@ const _module = { }; pulumi.runtime.registerResourceModule("doppler", "integration/awsParameterStore", _module) pulumi.runtime.registerResourceModule("doppler", "integration/awsSecretsManager", _module) +pulumi.runtime.registerResourceModule("doppler", "integration/flyio", _module) pulumi.runtime.registerResourceModule("doppler", "integration/terraformCloud", _module) diff --git a/sdk/nodejs/projectRole.ts b/sdk/nodejs/projectRole.ts new file mode 100644 index 0000000..536becf --- /dev/null +++ b/sdk/nodejs/projectRole.ts @@ -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! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as utilities from "./utilities"; + +/** + * Manage a Doppler project_role. + * + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as doppler from "@pulumiverse/doppler"; + * + * const logViewer = new doppler.ProjectRole("log_viewer", { + * name: "Log Viewer", + * permissions: ["enclave_config_logs"], + * }); + * ``` + * + * ## Import + * + * ```sh + * $ pulumi import doppler:index/projectRole:ProjectRole default + * ``` + */ +export class ProjectRole extends pulumi.CustomResource { + /** + * Get an existing ProjectRole 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?: ProjectRoleState, opts?: pulumi.CustomResourceOptions): ProjectRole { + return new ProjectRole(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'doppler:index/projectRole:ProjectRole'; + + /** + * Returns true if the given object is an instance of ProjectRole. 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 ProjectRole { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === ProjectRole.__pulumiType; + } + + /** + * The role's unique identifier + */ + public /*out*/ readonly identifier!: pulumi.Output; + /** + * Whether or not the role is custom (as opposed to Doppler built-in) + */ + public /*out*/ readonly isCustomRole!: pulumi.Output; + /** + * The name of the Doppler project role + */ + public readonly name!: pulumi.Output; + /** + * A list of [Doppler project permissions](https://docs.doppler.com/reference/project_roles-create) + */ + public readonly permissions!: pulumi.Output; + + /** + * Create a ProjectRole 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: ProjectRoleArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: ProjectRoleArgs | ProjectRoleState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as ProjectRoleState | undefined; + resourceInputs["identifier"] = state ? state.identifier : undefined; + resourceInputs["isCustomRole"] = state ? state.isCustomRole : undefined; + resourceInputs["name"] = state ? state.name : undefined; + resourceInputs["permissions"] = state ? state.permissions : undefined; + } else { + const args = argsOrState as ProjectRoleArgs | undefined; + if ((!args || args.name === undefined) && !opts.urn) { + throw new Error("Missing required property 'name'"); + } + if ((!args || args.permissions === undefined) && !opts.urn) { + throw new Error("Missing required property 'permissions'"); + } + resourceInputs["name"] = args ? args.name : undefined; + resourceInputs["permissions"] = args ? args.permissions : undefined; + resourceInputs["identifier"] = undefined /*out*/; + resourceInputs["isCustomRole"] = undefined /*out*/; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + super(ProjectRole.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering ProjectRole resources. + */ +export interface ProjectRoleState { + /** + * The role's unique identifier + */ + identifier?: pulumi.Input; + /** + * Whether or not the role is custom (as opposed to Doppler built-in) + */ + isCustomRole?: pulumi.Input; + /** + * The name of the Doppler project role + */ + name?: pulumi.Input; + /** + * A list of [Doppler project permissions](https://docs.doppler.com/reference/project_roles-create) + */ + permissions?: pulumi.Input[]>; +} + +/** + * The set of arguments for constructing a ProjectRole resource. + */ +export interface ProjectRoleArgs { + /** + * The name of the Doppler project role + */ + name: pulumi.Input; + /** + * A list of [Doppler project permissions](https://docs.doppler.com/reference/project_roles-create) + */ + permissions: pulumi.Input[]>; +} diff --git a/sdk/nodejs/secretssync/awsParameterStore.ts b/sdk/nodejs/secretssync/awsParameterStore.ts index b67216d..1c97b30 100644 --- a/sdk/nodejs/secretssync/awsParameterStore.ts +++ b/sdk/nodejs/secretssync/awsParameterStore.ts @@ -68,6 +68,7 @@ import * as utilities from "../utilities"; * tags: { * myTag: "enabled", * }, + * deleteBehavior: "leave_in_target", * }); * ``` */ @@ -103,10 +104,18 @@ export class AwsParameterStore extends pulumi.CustomResource { * The name of the Doppler config */ public readonly config!: pulumi.Output; + /** + * The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leaveInTarget` (default) or `deleteFromTarget`. + */ + public readonly deleteBehavior!: pulumi.Output; /** * The slug of the integration to use for this sync */ public readonly integration!: pulumi.Output; + /** + * The AWS KMS key used to encrypt the parameter (ID, Alias, or ARN) + */ + public readonly kmsKeyId!: pulumi.Output; /** * The path to the parameters in AWS */ @@ -142,7 +151,9 @@ export class AwsParameterStore extends pulumi.CustomResource { if (opts.id) { const state = argsOrState as AwsParameterStoreState | undefined; resourceInputs["config"] = state ? state.config : undefined; + resourceInputs["deleteBehavior"] = state ? state.deleteBehavior : undefined; resourceInputs["integration"] = state ? state.integration : undefined; + resourceInputs["kmsKeyId"] = state ? state.kmsKeyId : undefined; resourceInputs["path"] = state ? state.path : undefined; resourceInputs["project"] = state ? state.project : undefined; resourceInputs["region"] = state ? state.region : undefined; @@ -166,7 +177,9 @@ export class AwsParameterStore extends pulumi.CustomResource { throw new Error("Missing required property 'region'"); } resourceInputs["config"] = args ? args.config : undefined; + resourceInputs["deleteBehavior"] = args ? args.deleteBehavior : undefined; resourceInputs["integration"] = args ? args.integration : undefined; + resourceInputs["kmsKeyId"] = args ? args.kmsKeyId : undefined; resourceInputs["path"] = args ? args.path : undefined; resourceInputs["project"] = args ? args.project : undefined; resourceInputs["region"] = args ? args.region : undefined; @@ -186,10 +199,18 @@ export interface AwsParameterStoreState { * The name of the Doppler config */ config?: pulumi.Input; + /** + * The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leaveInTarget` (default) or `deleteFromTarget`. + */ + deleteBehavior?: pulumi.Input; /** * The slug of the integration to use for this sync */ integration?: pulumi.Input; + /** + * The AWS KMS key used to encrypt the parameter (ID, Alias, or ARN) + */ + kmsKeyId?: pulumi.Input; /** * The path to the parameters in AWS */ @@ -220,10 +241,18 @@ export interface AwsParameterStoreArgs { * The name of the Doppler config */ config: pulumi.Input; + /** + * The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leaveInTarget` (default) or `deleteFromTarget`. + */ + deleteBehavior?: pulumi.Input; /** * The slug of the integration to use for this sync */ integration: pulumi.Input; + /** + * The AWS KMS key used to encrypt the parameter (ID, Alias, or ARN) + */ + kmsKeyId?: pulumi.Input; /** * The path to the parameters in AWS */ diff --git a/sdk/nodejs/secretssync/awsSecretsManager.ts b/sdk/nodejs/secretssync/awsSecretsManager.ts index b5e8574..da0e920 100644 --- a/sdk/nodejs/secretssync/awsSecretsManager.ts +++ b/sdk/nodejs/secretssync/awsSecretsManager.ts @@ -64,6 +64,7 @@ import * as utilities from "../utilities"; * tags: { * myTag: "enabled", * }, + * deleteBehavior: "leave_in_target", * }); * ``` */ @@ -99,10 +100,18 @@ export class AwsSecretsManager extends pulumi.CustomResource { * The name of the Doppler config */ public readonly config!: pulumi.Output; + /** + * The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leaveInTarget` (default) or `deleteFromTarget`. + */ + public readonly deleteBehavior!: pulumi.Output; /** * The slug of the integration to use for this sync */ public readonly integration!: pulumi.Output; + /** + * The AWS KMS key used to encrypt the secret (ID, Alias, or ARN) + */ + public readonly kmsKeyId!: pulumi.Output; /** * The path to the secret in AWS */ @@ -119,6 +128,10 @@ export class AwsSecretsManager extends pulumi.CustomResource { * AWS tags to attach to the secrets */ public readonly tags!: pulumi.Output<{[key: string]: string} | undefined>; + /** + * If enabled, Doppler will update the AWS secret metadata (e.g. KMS key) during every sync. If disabled, Doppler will only set secret metadata for new AWS secrets. Note that Doppler never updates tags for existing AWS secrets. + */ + public readonly updateMetadata!: pulumi.Output; /** * Create a AwsSecretsManager resource with the given unique name, arguments, and options. @@ -134,11 +147,14 @@ export class AwsSecretsManager extends pulumi.CustomResource { if (opts.id) { const state = argsOrState as AwsSecretsManagerState | undefined; resourceInputs["config"] = state ? state.config : undefined; + resourceInputs["deleteBehavior"] = state ? state.deleteBehavior : undefined; resourceInputs["integration"] = state ? state.integration : undefined; + resourceInputs["kmsKeyId"] = state ? state.kmsKeyId : undefined; resourceInputs["path"] = state ? state.path : undefined; resourceInputs["project"] = state ? state.project : undefined; resourceInputs["region"] = state ? state.region : undefined; resourceInputs["tags"] = state ? state.tags : undefined; + resourceInputs["updateMetadata"] = state ? state.updateMetadata : undefined; } else { const args = argsOrState as AwsSecretsManagerArgs | undefined; if ((!args || args.config === undefined) && !opts.urn) { @@ -157,11 +173,14 @@ export class AwsSecretsManager extends pulumi.CustomResource { throw new Error("Missing required property 'region'"); } resourceInputs["config"] = args ? args.config : undefined; + resourceInputs["deleteBehavior"] = args ? args.deleteBehavior : undefined; resourceInputs["integration"] = args ? args.integration : undefined; + resourceInputs["kmsKeyId"] = args ? args.kmsKeyId : undefined; resourceInputs["path"] = args ? args.path : undefined; resourceInputs["project"] = args ? args.project : undefined; resourceInputs["region"] = args ? args.region : undefined; resourceInputs["tags"] = args ? args.tags : undefined; + resourceInputs["updateMetadata"] = args ? args.updateMetadata : undefined; } opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); super(AwsSecretsManager.__pulumiType, name, resourceInputs, opts); @@ -176,10 +195,18 @@ export interface AwsSecretsManagerState { * The name of the Doppler config */ config?: pulumi.Input; + /** + * The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leaveInTarget` (default) or `deleteFromTarget`. + */ + deleteBehavior?: pulumi.Input; /** * The slug of the integration to use for this sync */ integration?: pulumi.Input; + /** + * The AWS KMS key used to encrypt the secret (ID, Alias, or ARN) + */ + kmsKeyId?: pulumi.Input; /** * The path to the secret in AWS */ @@ -196,6 +223,10 @@ export interface AwsSecretsManagerState { * AWS tags to attach to the secrets */ tags?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * If enabled, Doppler will update the AWS secret metadata (e.g. KMS key) during every sync. If disabled, Doppler will only set secret metadata for new AWS secrets. Note that Doppler never updates tags for existing AWS secrets. + */ + updateMetadata?: pulumi.Input; } /** @@ -206,10 +237,18 @@ export interface AwsSecretsManagerArgs { * The name of the Doppler config */ config: pulumi.Input; + /** + * The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leaveInTarget` (default) or `deleteFromTarget`. + */ + deleteBehavior?: pulumi.Input; /** * The slug of the integration to use for this sync */ integration: pulumi.Input; + /** + * The AWS KMS key used to encrypt the secret (ID, Alias, or ARN) + */ + kmsKeyId?: pulumi.Input; /** * The path to the secret in AWS */ @@ -226,4 +265,8 @@ export interface AwsSecretsManagerArgs { * AWS tags to attach to the secrets */ tags?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * If enabled, Doppler will update the AWS secret metadata (e.g. KMS key) during every sync. If disabled, Doppler will only set secret metadata for new AWS secrets. Note that Doppler never updates tags for existing AWS secrets. + */ + updateMetadata?: pulumi.Input; } diff --git a/sdk/nodejs/secretssync/flyio.ts b/sdk/nodejs/secretssync/flyio.ts new file mode 100644 index 0000000..0572f3d --- /dev/null +++ b/sdk/nodejs/secretssync/flyio.ts @@ -0,0 +1,189 @@ +// *** 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"; + +/** + * Manage a Fly.io Doppler sync. + * + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as doppler from "@pulumiverse/doppler"; + * + * const prod = new doppler.integration.Flyio("prod", { + * name: "TF Fly.io", + * apiKey: "fo1_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", + * }); + * const backendProd = new doppler.secretssync.Flyio("backend_prod", { + * integration: prod.id, + * project: "backend", + * config: "prd", + * appId: "my-app", + * restartMachines: true, + * deleteBehavior: "leave_in_target", + * }); + * ``` + */ +export class Flyio extends pulumi.CustomResource { + /** + * Get an existing Flyio 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?: FlyioState, opts?: pulumi.CustomResourceOptions): Flyio { + return new Flyio(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'doppler:secretsSync/flyio:Flyio'; + + /** + * Returns true if the given object is an instance of Flyio. 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 Flyio { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === Flyio.__pulumiType; + } + + /** + * The app ID + */ + public readonly appId!: pulumi.Output; + /** + * The name of the Doppler config + */ + public readonly config!: pulumi.Output; + /** + * The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leaveInTarget` (default) or `deleteFromTarget`. + */ + public readonly deleteBehavior!: pulumi.Output; + /** + * The slug of the integration to use for this sync + */ + public readonly integration!: pulumi.Output; + /** + * The name of the Doppler project + */ + public readonly project!: pulumi.Output; + /** + * Whether or not to restart the Fly.io machines when secrets are updated + */ + public readonly restartMachines!: pulumi.Output; + + /** + * Create a Flyio 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: FlyioArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: FlyioArgs | FlyioState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as FlyioState | undefined; + resourceInputs["appId"] = state ? state.appId : undefined; + resourceInputs["config"] = state ? state.config : undefined; + resourceInputs["deleteBehavior"] = state ? state.deleteBehavior : undefined; + resourceInputs["integration"] = state ? state.integration : undefined; + resourceInputs["project"] = state ? state.project : undefined; + resourceInputs["restartMachines"] = state ? state.restartMachines : undefined; + } else { + const args = argsOrState as FlyioArgs | undefined; + if ((!args || args.appId === undefined) && !opts.urn) { + throw new Error("Missing required property 'appId'"); + } + if ((!args || args.config === undefined) && !opts.urn) { + throw new Error("Missing required property 'config'"); + } + if ((!args || args.integration === undefined) && !opts.urn) { + throw new Error("Missing required property 'integration'"); + } + if ((!args || args.project === undefined) && !opts.urn) { + throw new Error("Missing required property 'project'"); + } + if ((!args || args.restartMachines === undefined) && !opts.urn) { + throw new Error("Missing required property 'restartMachines'"); + } + resourceInputs["appId"] = args ? args.appId : undefined; + resourceInputs["config"] = args ? args.config : undefined; + resourceInputs["deleteBehavior"] = args ? args.deleteBehavior : undefined; + resourceInputs["integration"] = args ? args.integration : undefined; + resourceInputs["project"] = args ? args.project : undefined; + resourceInputs["restartMachines"] = args ? args.restartMachines : undefined; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + super(Flyio.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering Flyio resources. + */ +export interface FlyioState { + /** + * The app ID + */ + appId?: pulumi.Input; + /** + * The name of the Doppler config + */ + config?: pulumi.Input; + /** + * The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leaveInTarget` (default) or `deleteFromTarget`. + */ + deleteBehavior?: pulumi.Input; + /** + * The slug of the integration to use for this sync + */ + integration?: pulumi.Input; + /** + * The name of the Doppler project + */ + project?: pulumi.Input; + /** + * Whether or not to restart the Fly.io machines when secrets are updated + */ + restartMachines?: pulumi.Input; +} + +/** + * The set of arguments for constructing a Flyio resource. + */ +export interface FlyioArgs { + /** + * The app ID + */ + appId: pulumi.Input; + /** + * The name of the Doppler config + */ + config: pulumi.Input; + /** + * The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leaveInTarget` (default) or `deleteFromTarget`. + */ + deleteBehavior?: pulumi.Input; + /** + * The slug of the integration to use for this sync + */ + integration: pulumi.Input; + /** + * The name of the Doppler project + */ + project: pulumi.Input; + /** + * Whether or not to restart the Fly.io machines when secrets are updated + */ + restartMachines: pulumi.Input; +} diff --git a/sdk/nodejs/secretssync/githubActions.ts b/sdk/nodejs/secretssync/githubActions.ts index 0296174..d1db05e 100644 --- a/sdk/nodejs/secretssync/githubActions.ts +++ b/sdk/nodejs/secretssync/githubActions.ts @@ -39,6 +39,10 @@ export class GithubActions extends pulumi.CustomResource { * The name of the Doppler config */ public readonly config!: pulumi.Output; + /** + * The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leaveInTarget` (default) or `deleteFromTarget`. + */ + public readonly deleteBehavior!: pulumi.Output; /** * The GitHub repo environment name to sync to (only used when `syncTarget` is set to "repo") */ @@ -78,6 +82,7 @@ export class GithubActions extends pulumi.CustomResource { if (opts.id) { const state = argsOrState as GithubActionsState | undefined; resourceInputs["config"] = state ? state.config : undefined; + resourceInputs["deleteBehavior"] = state ? state.deleteBehavior : undefined; resourceInputs["environmentName"] = state ? state.environmentName : undefined; resourceInputs["integration"] = state ? state.integration : undefined; resourceInputs["orgScope"] = state ? state.orgScope : undefined; @@ -99,6 +104,7 @@ export class GithubActions extends pulumi.CustomResource { throw new Error("Missing required property 'syncTarget'"); } resourceInputs["config"] = args ? args.config : undefined; + resourceInputs["deleteBehavior"] = args ? args.deleteBehavior : undefined; resourceInputs["environmentName"] = args ? args.environmentName : undefined; resourceInputs["integration"] = args ? args.integration : undefined; resourceInputs["orgScope"] = args ? args.orgScope : undefined; @@ -119,6 +125,10 @@ export interface GithubActionsState { * The name of the Doppler config */ config?: pulumi.Input; + /** + * The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leaveInTarget` (default) or `deleteFromTarget`. + */ + deleteBehavior?: pulumi.Input; /** * The GitHub repo environment name to sync to (only used when `syncTarget` is set to "repo") */ @@ -153,6 +163,10 @@ export interface GithubActionsArgs { * The name of the Doppler config */ config: pulumi.Input; + /** + * The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leaveInTarget` (default) or `deleteFromTarget`. + */ + deleteBehavior?: pulumi.Input; /** * The GitHub repo environment name to sync to (only used when `syncTarget` is set to "repo") */ diff --git a/sdk/nodejs/secretssync/index.ts b/sdk/nodejs/secretssync/index.ts index faf0761..3e33553 100644 --- a/sdk/nodejs/secretssync/index.ts +++ b/sdk/nodejs/secretssync/index.ts @@ -15,6 +15,11 @@ export type AwsSecretsManager = import("./awsSecretsManager").AwsSecretsManager; export const AwsSecretsManager: typeof import("./awsSecretsManager").AwsSecretsManager = null as any; utilities.lazyLoad(exports, ["AwsSecretsManager"], () => require("./awsSecretsManager")); +export { FlyioArgs, FlyioState } from "./flyio"; +export type Flyio = import("./flyio").Flyio; +export const Flyio: typeof import("./flyio").Flyio = null as any; +utilities.lazyLoad(exports, ["Flyio"], () => require("./flyio")); + export { GithubActionsArgs, GithubActionsState } from "./githubActions"; export type GithubActions = import("./githubActions").GithubActions; export const GithubActions: typeof import("./githubActions").GithubActions = null as any; @@ -34,6 +39,8 @@ const _module = { return new AwsParameterStore(name, undefined, { urn }) case "doppler:secretsSync/awsSecretsManager:AwsSecretsManager": return new AwsSecretsManager(name, undefined, { urn }) + case "doppler:secretsSync/flyio:Flyio": + return new Flyio(name, undefined, { urn }) case "doppler:secretsSync/githubActions:GithubActions": return new GithubActions(name, undefined, { urn }) case "doppler:secretsSync/terraformCloud:TerraformCloud": @@ -45,5 +52,6 @@ const _module = { }; pulumi.runtime.registerResourceModule("doppler", "secretsSync/awsParameterStore", _module) pulumi.runtime.registerResourceModule("doppler", "secretsSync/awsSecretsManager", _module) +pulumi.runtime.registerResourceModule("doppler", "secretsSync/flyio", _module) pulumi.runtime.registerResourceModule("doppler", "secretsSync/githubActions", _module) pulumi.runtime.registerResourceModule("doppler", "secretsSync/terraformCloud", _module) diff --git a/sdk/nodejs/secretssync/terraformCloud.ts b/sdk/nodejs/secretssync/terraformCloud.ts index a58a56d..e064318 100644 --- a/sdk/nodejs/secretssync/terraformCloud.ts +++ b/sdk/nodejs/secretssync/terraformCloud.ts @@ -39,6 +39,10 @@ export class TerraformCloud extends pulumi.CustomResource { * The name of the Doppler config */ public readonly config!: pulumi.Output; + /** + * The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leaveInTarget` (default) or `deleteFromTarget`. + */ + public readonly deleteBehavior!: pulumi.Output; /** * The slug of the integration to use for this sync */ @@ -73,6 +77,7 @@ export class TerraformCloud extends pulumi.CustomResource { if (opts.id) { const state = argsOrState as TerraformCloudState | undefined; resourceInputs["config"] = state ? state.config : undefined; + resourceInputs["deleteBehavior"] = state ? state.deleteBehavior : undefined; resourceInputs["integration"] = state ? state.integration : undefined; resourceInputs["nameTransform"] = state ? state.nameTransform : undefined; resourceInputs["project"] = state ? state.project : undefined; @@ -101,6 +106,7 @@ export class TerraformCloud extends pulumi.CustomResource { throw new Error("Missing required property 'variableSyncType'"); } resourceInputs["config"] = args ? args.config : undefined; + resourceInputs["deleteBehavior"] = args ? args.deleteBehavior : undefined; resourceInputs["integration"] = args ? args.integration : undefined; resourceInputs["nameTransform"] = args ? args.nameTransform : undefined; resourceInputs["project"] = args ? args.project : undefined; @@ -122,6 +128,10 @@ export interface TerraformCloudState { * The name of the Doppler config */ config?: pulumi.Input; + /** + * The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leaveInTarget` (default) or `deleteFromTarget`. + */ + deleteBehavior?: pulumi.Input; /** * The slug of the integration to use for this sync */ @@ -151,6 +161,10 @@ export interface TerraformCloudArgs { * The name of the Doppler config */ config: pulumi.Input; + /** + * The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leaveInTarget` (default) or `deleteFromTarget`. + */ + deleteBehavior?: pulumi.Input; /** * The slug of the integration to use for this sync */ diff --git a/sdk/nodejs/serviceAccountToken.ts b/sdk/nodejs/serviceAccountToken.ts new file mode 100644 index 0000000..2d9049e --- /dev/null +++ b/sdk/nodejs/serviceAccountToken.ts @@ -0,0 +1,150 @@ +// *** 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"; + +/** + * Manage a Doppler service account token. + */ +export class ServiceAccountToken extends pulumi.CustomResource { + /** + * Get an existing ServiceAccountToken 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?: ServiceAccountTokenState, opts?: pulumi.CustomResourceOptions): ServiceAccountToken { + return new ServiceAccountToken(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'doppler:index/serviceAccountToken:ServiceAccountToken'; + + /** + * Returns true if the given object is an instance of ServiceAccountToken. 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 ServiceAccountToken { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === ServiceAccountToken.__pulumiType; + } + + /** + * The api key used to authenticate the service account + */ + public /*out*/ readonly apiKey!: pulumi.Output; + /** + * The datetime that the token was created. + */ + public /*out*/ readonly createdAt!: pulumi.Output; + /** + * The datetime at which the API token should expire. If not provided, the API token will remain valid indefinitely unless manually revoked + */ + public readonly expiresAt!: pulumi.Output; + /** + * The display name of the API token + */ + public readonly name!: pulumi.Output; + /** + * Slug of the service account + */ + public readonly serviceAccountSlug!: pulumi.Output; + /** + * Slug of the service account token + */ + public /*out*/ readonly slug!: pulumi.Output; + + /** + * Create a ServiceAccountToken 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: ServiceAccountTokenArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: ServiceAccountTokenArgs | ServiceAccountTokenState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as ServiceAccountTokenState | undefined; + resourceInputs["apiKey"] = state ? state.apiKey : undefined; + resourceInputs["createdAt"] = state ? state.createdAt : undefined; + resourceInputs["expiresAt"] = state ? state.expiresAt : undefined; + resourceInputs["name"] = state ? state.name : undefined; + resourceInputs["serviceAccountSlug"] = state ? state.serviceAccountSlug : undefined; + resourceInputs["slug"] = state ? state.slug : undefined; + } else { + const args = argsOrState as ServiceAccountTokenArgs | undefined; + if ((!args || args.name === undefined) && !opts.urn) { + throw new Error("Missing required property 'name'"); + } + if ((!args || args.serviceAccountSlug === undefined) && !opts.urn) { + throw new Error("Missing required property 'serviceAccountSlug'"); + } + resourceInputs["expiresAt"] = args ? args.expiresAt : undefined; + resourceInputs["name"] = args ? args.name : undefined; + resourceInputs["serviceAccountSlug"] = args ? args.serviceAccountSlug : undefined; + resourceInputs["apiKey"] = undefined /*out*/; + resourceInputs["createdAt"] = undefined /*out*/; + resourceInputs["slug"] = undefined /*out*/; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + const secretOpts = { additionalSecretOutputs: ["apiKey"] }; + opts = pulumi.mergeOptions(opts, secretOpts); + super(ServiceAccountToken.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering ServiceAccountToken resources. + */ +export interface ServiceAccountTokenState { + /** + * The api key used to authenticate the service account + */ + apiKey?: pulumi.Input; + /** + * The datetime that the token was created. + */ + createdAt?: pulumi.Input; + /** + * The datetime at which the API token should expire. If not provided, the API token will remain valid indefinitely unless manually revoked + */ + expiresAt?: pulumi.Input; + /** + * The display name of the API token + */ + name?: pulumi.Input; + /** + * Slug of the service account + */ + serviceAccountSlug?: pulumi.Input; + /** + * Slug of the service account token + */ + slug?: pulumi.Input; +} + +/** + * The set of arguments for constructing a ServiceAccountToken resource. + */ +export interface ServiceAccountTokenArgs { + /** + * The datetime at which the API token should expire. If not provided, the API token will remain valid indefinitely unless manually revoked + */ + expiresAt?: pulumi.Input; + /** + * The display name of the API token + */ + name: pulumi.Input; + /** + * Slug of the service account + */ + serviceAccountSlug: pulumi.Input; +} diff --git a/sdk/nodejs/tsconfig.json b/sdk/nodejs/tsconfig.json index 923f960..e39bd71 100644 --- a/sdk/nodejs/tsconfig.json +++ b/sdk/nodejs/tsconfig.json @@ -24,9 +24,11 @@ "index.ts", "integration/awsParameterStore.ts", "integration/awsSecretsManager.ts", + "integration/flyio.ts", "integration/index.ts", "integration/terraformCloud.ts", "project.ts", + "projectRole.ts", "projectmember/group.ts", "projectmember/index.ts", "projectmember/serviceAccount.ts", @@ -34,11 +36,17 @@ "secret.ts", "secretssync/awsParameterStore.ts", "secretssync/awsSecretsManager.ts", + "secretssync/flyio.ts", "secretssync/githubActions.ts", "secretssync/index.ts", "secretssync/terraformCloud.ts", "serviceAccount.ts", + "serviceAccountToken.ts", "serviceToken.ts", - "utilities.ts" + "types/index.ts", + "types/input.ts", + "types/output.ts", + "utilities.ts", + "webhook.ts" ] } 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..24525d4 --- /dev/null +++ b/sdk/nodejs/types/input.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 pulumi from "@pulumi/pulumi"; +import * as inputs from "../types/input"; +import * as outputs from "../types/output"; + +export interface WebhookAuthentication { + password?: pulumi.Input; + token?: pulumi.Input; + type: pulumi.Input; + username?: pulumi.Input; +} diff --git a/sdk/nodejs/types/output.ts b/sdk/nodejs/types/output.ts new file mode 100644 index 0000000..b3abd68 --- /dev/null +++ b/sdk/nodejs/types/output.ts @@ -0,0 +1,14 @@ +// *** 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 WebhookAuthentication { + password?: string; + token?: string; + type: string; + username?: string; +} + diff --git a/sdk/nodejs/webhook.ts b/sdk/nodejs/webhook.ts new file mode 100644 index 0000000..b78873a --- /dev/null +++ b/sdk/nodejs/webhook.ts @@ -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! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as inputs from "./types/input"; +import * as outputs from "./types/output"; +import * as utilities from "./utilities"; + +export class Webhook extends pulumi.CustomResource { + /** + * Get an existing Webhook 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?: WebhookState, opts?: pulumi.CustomResourceOptions): Webhook { + return new Webhook(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'doppler:index/webhook:Webhook'; + + /** + * Returns true if the given object is an instance of Webhook. 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 Webhook { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === Webhook.__pulumiType; + } + + /** + * Authentication method used by the webhook + */ + public readonly authentication!: pulumi.Output; + /** + * Whether the webhook is enabled or disabled. Default to true. + */ + public readonly enabled!: pulumi.Output; + /** + * Configs this webhook will trigger for + */ + public readonly enabledConfigs!: pulumi.Output; + /** + * The webhook's payload as a JSON string. Leave empty to use the default webhook payload + */ + public readonly payload!: pulumi.Output; + /** + * The name of the Doppler project where the webhook is located + */ + public readonly project!: pulumi.Output; + /** + * Secret used for request signing + */ + public readonly secret!: pulumi.Output; + /** + * The slug of the Webhook + */ + public /*out*/ readonly slug!: pulumi.Output; + /** + * The URL of the webhook endpoint + */ + public readonly url!: pulumi.Output; + + /** + * Create a Webhook 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: WebhookArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: WebhookArgs | WebhookState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as WebhookState | undefined; + resourceInputs["authentication"] = state ? state.authentication : undefined; + resourceInputs["enabled"] = state ? state.enabled : undefined; + resourceInputs["enabledConfigs"] = state ? state.enabledConfigs : undefined; + resourceInputs["payload"] = state ? state.payload : undefined; + resourceInputs["project"] = state ? state.project : undefined; + resourceInputs["secret"] = state ? state.secret : undefined; + resourceInputs["slug"] = state ? state.slug : undefined; + resourceInputs["url"] = state ? state.url : undefined; + } else { + const args = argsOrState as WebhookArgs | undefined; + if ((!args || args.project === undefined) && !opts.urn) { + throw new Error("Missing required property 'project'"); + } + if ((!args || args.url === undefined) && !opts.urn) { + throw new Error("Missing required property 'url'"); + } + resourceInputs["authentication"] = args ? args.authentication : undefined; + resourceInputs["enabled"] = args ? args.enabled : undefined; + resourceInputs["enabledConfigs"] = args ? args.enabledConfigs : undefined; + resourceInputs["payload"] = args?.payload ? pulumi.secret(args.payload) : undefined; + resourceInputs["project"] = args ? args.project : undefined; + resourceInputs["secret"] = args?.secret ? pulumi.secret(args.secret) : undefined; + resourceInputs["url"] = args ? args.url : undefined; + resourceInputs["slug"] = undefined /*out*/; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + const secretOpts = { additionalSecretOutputs: ["payload", "secret"] }; + opts = pulumi.mergeOptions(opts, secretOpts); + super(Webhook.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering Webhook resources. + */ +export interface WebhookState { + /** + * Authentication method used by the webhook + */ + authentication?: pulumi.Input; + /** + * Whether the webhook is enabled or disabled. Default to true. + */ + enabled?: pulumi.Input; + /** + * Configs this webhook will trigger for + */ + enabledConfigs?: pulumi.Input[]>; + /** + * The webhook's payload as a JSON string. Leave empty to use the default webhook payload + */ + payload?: pulumi.Input; + /** + * The name of the Doppler project where the webhook is located + */ + project?: pulumi.Input; + /** + * Secret used for request signing + */ + secret?: pulumi.Input; + /** + * The slug of the Webhook + */ + slug?: pulumi.Input; + /** + * The URL of the webhook endpoint + */ + url?: pulumi.Input; +} + +/** + * The set of arguments for constructing a Webhook resource. + */ +export interface WebhookArgs { + /** + * Authentication method used by the webhook + */ + authentication?: pulumi.Input; + /** + * Whether the webhook is enabled or disabled. Default to true. + */ + enabled?: pulumi.Input; + /** + * Configs this webhook will trigger for + */ + enabledConfigs?: pulumi.Input[]>; + /** + * The webhook's payload as a JSON string. Leave empty to use the default webhook payload + */ + payload?: pulumi.Input; + /** + * The name of the Doppler project where the webhook is located + */ + project: pulumi.Input; + /** + * Secret used for request signing + */ + secret?: pulumi.Input; + /** + * The URL of the webhook endpoint + */ + url: pulumi.Input; +} diff --git a/sdk/python/pulumiverse_doppler/__init__.py b/sdk/python/pulumiverse_doppler/__init__.py index fb3ccbc..4832446 100644 --- a/sdk/python/pulumiverse_doppler/__init__.py +++ b/sdk/python/pulumiverse_doppler/__init__.py @@ -12,10 +12,15 @@ from .group import * from .group_member import * from .project import * +from .project_role import * from .provider import * from .secret import * from .service_account import * +from .service_account_token import * from .service_token import * +from .webhook import * +from ._inputs import * +from . import outputs # Make subpackages available: if typing.TYPE_CHECKING: @@ -76,6 +81,14 @@ "doppler:index/project:Project": "Project" } }, + { + "pkg": "doppler", + "mod": "index/projectRole", + "fqn": "pulumiverse_doppler", + "classes": { + "doppler:index/projectRole:ProjectRole": "ProjectRole" + } + }, { "pkg": "doppler", "mod": "index/secret", @@ -92,6 +105,14 @@ "doppler:index/serviceAccount:ServiceAccount": "ServiceAccount" } }, + { + "pkg": "doppler", + "mod": "index/serviceAccountToken", + "fqn": "pulumiverse_doppler", + "classes": { + "doppler:index/serviceAccountToken:ServiceAccountToken": "ServiceAccountToken" + } + }, { "pkg": "doppler", "mod": "index/serviceToken", @@ -100,6 +121,14 @@ "doppler:index/serviceToken:ServiceToken": "ServiceToken" } }, + { + "pkg": "doppler", + "mod": "index/webhook", + "fqn": "pulumiverse_doppler", + "classes": { + "doppler:index/webhook:Webhook": "Webhook" + } + }, { "pkg": "doppler", "mod": "integration/awsParameterStore", @@ -116,6 +145,14 @@ "doppler:integration/awsSecretsManager:AwsSecretsManager": "AwsSecretsManager" } }, + { + "pkg": "doppler", + "mod": "integration/flyio", + "fqn": "pulumiverse_doppler.integration", + "classes": { + "doppler:integration/flyio:Flyio": "Flyio" + } + }, { "pkg": "doppler", "mod": "integration/terraformCloud", @@ -156,6 +193,14 @@ "doppler:secretsSync/awsSecretsManager:AwsSecretsManager": "AwsSecretsManager" } }, + { + "pkg": "doppler", + "mod": "secretsSync/flyio", + "fqn": "pulumiverse_doppler.secretssync", + "classes": { + "doppler:secretsSync/flyio:Flyio": "Flyio" + } + }, { "pkg": "doppler", "mod": "secretsSync/githubActions", diff --git a/sdk/python/pulumiverse_doppler/_inputs.py b/sdk/python/pulumiverse_doppler/_inputs.py new file mode 100644 index 0000000..0d0930c --- /dev/null +++ b/sdk/python/pulumiverse_doppler/_inputs.py @@ -0,0 +1,67 @@ +# 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__ = [ + 'WebhookAuthenticationArgs', +] + +@pulumi.input_type +class WebhookAuthenticationArgs: + def __init__(__self__, *, + type: pulumi.Input[str], + password: Optional[pulumi.Input[str]] = None, + token: Optional[pulumi.Input[str]] = None, + username: Optional[pulumi.Input[str]] = None): + pulumi.set(__self__, "type", type) + if password is not None: + pulumi.set(__self__, "password", password) + if token is not None: + pulumi.set(__self__, "token", token) + if username is not None: + pulumi.set(__self__, "username", username) + + @property + @pulumi.getter + def type(self) -> pulumi.Input[str]: + return pulumi.get(self, "type") + + @type.setter + def type(self, value: pulumi.Input[str]): + pulumi.set(self, "type", value) + + @property + @pulumi.getter + def password(self) -> Optional[pulumi.Input[str]]: + return pulumi.get(self, "password") + + @password.setter + def password(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "password", value) + + @property + @pulumi.getter + def token(self) -> Optional[pulumi.Input[str]]: + return pulumi.get(self, "token") + + @token.setter + def token(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "token", value) + + @property + @pulumi.getter + def username(self) -> Optional[pulumi.Input[str]]: + return pulumi.get(self, "username") + + @username.setter + def username(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "username", value) + + diff --git a/sdk/python/pulumiverse_doppler/_utilities.py b/sdk/python/pulumiverse_doppler/_utilities.py index b7a29b8..e1b3372 100644 --- a/sdk/python/pulumiverse_doppler/_utilities.py +++ b/sdk/python/pulumiverse_doppler/_utilities.py @@ -4,6 +4,7 @@ import asyncio +import functools import importlib.metadata import importlib.util import inspect @@ -11,14 +12,19 @@ import os import sys import typing +import warnings +import base64 import pulumi import pulumi.runtime from pulumi.runtime.sync_await import _sync_await +from pulumi.runtime.proto import resource_pb2 from semver import VersionInfo as SemverVersion from parver import Version as PEP440Version +C = typing.TypeVar("C", bound=typing.Callable) + def get_env(*args): for v in args: @@ -96,10 +102,6 @@ def _get_semver_version(): _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(), @@ -287,5 +289,39 @@ async def _await_output(o: pulumi.Output[typing.Any]) -> typing.Tuple[object, bo await o._resources, ) + +# This is included to provide an upgrade path for users who are using a version +# of the Pulumi SDK (<3.121.0) that does not include the `deprecated` decorator. +def deprecated(message: str) -> typing.Callable[[C], C]: + """ + Decorator to indicate a function is deprecated. + + As well as inserting appropriate statements to indicate that the function is + deprecated, this decorator also tags the function with a special attribute + so that Pulumi code can detect that it is deprecated and react appropriately + in certain situations. + + message is the deprecation message that should be printed if the function is called. + """ + + def decorator(fn: C) -> C: + if not callable(fn): + raise TypeError("Expected fn to be callable") + + @functools.wraps(fn) + def deprecated_fn(*args, **kwargs): + warnings.warn(message) + pulumi.warn(f"{fn.__name__} is deprecated: {message}") + + return fn(*args, **kwargs) + + deprecated_fn.__dict__["_pulumi_deprecated_callable"] = fn + return typing.cast(C, deprecated_fn) + + return decorator + def get_plugin_download_url(): return "github://api.github.com/pulumiverse" + +def get_version(): + return _version_str diff --git a/sdk/python/pulumiverse_doppler/environment.py b/sdk/python/pulumiverse_doppler/environment.py index 3dfaba3..631e0ef 100644 --- a/sdk/python/pulumiverse_doppler/environment.py +++ b/sdk/python/pulumiverse_doppler/environment.py @@ -16,16 +16,20 @@ class EnvironmentArgs: def __init__(__self__, *, name: pulumi.Input[str], project: pulumi.Input[str], - slug: pulumi.Input[str]): + slug: pulumi.Input[str], + personal_configs: Optional[pulumi.Input[bool]] = None): """ The set of arguments for constructing a Environment resource. :param pulumi.Input[str] name: The name of the Doppler environment :param pulumi.Input[str] project: The name of the Doppler project where the environment is located :param pulumi.Input[str] slug: The slug of the Doppler environment + :param pulumi.Input[bool] personal_configs: Whether or not personal configs are enabled for the environment """ pulumi.set(__self__, "name", name) pulumi.set(__self__, "project", project) pulumi.set(__self__, "slug", slug) + if personal_configs is not None: + pulumi.set(__self__, "personal_configs", personal_configs) @property @pulumi.getter @@ -63,21 +67,37 @@ def slug(self) -> pulumi.Input[str]: def slug(self, value: pulumi.Input[str]): pulumi.set(self, "slug", value) + @property + @pulumi.getter(name="personalConfigs") + def personal_configs(self) -> Optional[pulumi.Input[bool]]: + """ + Whether or not personal configs are enabled for the environment + """ + return pulumi.get(self, "personal_configs") + + @personal_configs.setter + def personal_configs(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "personal_configs", value) + @pulumi.input_type class _EnvironmentState: def __init__(__self__, *, name: Optional[pulumi.Input[str]] = None, + personal_configs: Optional[pulumi.Input[bool]] = None, project: Optional[pulumi.Input[str]] = None, slug: Optional[pulumi.Input[str]] = None): """ Input properties used for looking up and filtering Environment resources. :param pulumi.Input[str] name: The name of the Doppler environment + :param pulumi.Input[bool] personal_configs: Whether or not personal configs are enabled for the environment :param pulumi.Input[str] project: The name of the Doppler project where the environment is located :param pulumi.Input[str] slug: The slug of the Doppler environment """ if name is not None: pulumi.set(__self__, "name", name) + if personal_configs is not None: + pulumi.set(__self__, "personal_configs", personal_configs) if project is not None: pulumi.set(__self__, "project", project) if slug is not None: @@ -95,6 +115,18 @@ def name(self) -> Optional[pulumi.Input[str]]: def name(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "name", value) + @property + @pulumi.getter(name="personalConfigs") + def personal_configs(self) -> Optional[pulumi.Input[bool]]: + """ + Whether or not personal configs are enabled for the environment + """ + return pulumi.get(self, "personal_configs") + + @personal_configs.setter + def personal_configs(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "personal_configs", value) + @property @pulumi.getter def project(self) -> Optional[pulumi.Input[str]]: @@ -126,6 +158,7 @@ def __init__(__self__, resource_name: str, opts: Optional[pulumi.ResourceOptions] = None, name: Optional[pulumi.Input[str]] = None, + personal_configs: Optional[pulumi.Input[bool]] = None, project: Optional[pulumi.Input[str]] = None, slug: Optional[pulumi.Input[str]] = None, __props__=None): @@ -153,6 +186,7 @@ def __init__(__self__, :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 Doppler environment + :param pulumi.Input[bool] personal_configs: Whether or not personal configs are enabled for the environment :param pulumi.Input[str] project: The name of the Doppler project where the environment is located :param pulumi.Input[str] slug: The slug of the Doppler environment """ @@ -199,6 +233,7 @@ def _internal_init(__self__, resource_name: str, opts: Optional[pulumi.ResourceOptions] = None, name: Optional[pulumi.Input[str]] = None, + personal_configs: Optional[pulumi.Input[bool]] = None, project: Optional[pulumi.Input[str]] = None, slug: Optional[pulumi.Input[str]] = None, __props__=None): @@ -213,6 +248,7 @@ def _internal_init(__self__, if name is None and not opts.urn: raise TypeError("Missing required property 'name'") __props__.__dict__["name"] = name + __props__.__dict__["personal_configs"] = personal_configs if project is None and not opts.urn: raise TypeError("Missing required property 'project'") __props__.__dict__["project"] = project @@ -230,6 +266,7 @@ def get(resource_name: str, id: pulumi.Input[str], opts: Optional[pulumi.ResourceOptions] = None, name: Optional[pulumi.Input[str]] = None, + personal_configs: Optional[pulumi.Input[bool]] = None, project: Optional[pulumi.Input[str]] = None, slug: Optional[pulumi.Input[str]] = None) -> 'Environment': """ @@ -240,6 +277,7 @@ def get(resource_name: str, :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 Doppler environment + :param pulumi.Input[bool] personal_configs: Whether or not personal configs are enabled for the environment :param pulumi.Input[str] project: The name of the Doppler project where the environment is located :param pulumi.Input[str] slug: The slug of the Doppler environment """ @@ -248,6 +286,7 @@ def get(resource_name: str, __props__ = _EnvironmentState.__new__(_EnvironmentState) __props__.__dict__["name"] = name + __props__.__dict__["personal_configs"] = personal_configs __props__.__dict__["project"] = project __props__.__dict__["slug"] = slug return Environment(resource_name, opts=opts, __props__=__props__) @@ -260,6 +299,14 @@ def name(self) -> pulumi.Output[str]: """ return pulumi.get(self, "name") + @property + @pulumi.getter(name="personalConfigs") + def personal_configs(self) -> pulumi.Output[Optional[bool]]: + """ + Whether or not personal configs are enabled for the environment + """ + return pulumi.get(self, "personal_configs") + @property @pulumi.getter def project(self) -> pulumi.Output[str]: diff --git a/sdk/python/pulumiverse_doppler/integration/__init__.py b/sdk/python/pulumiverse_doppler/integration/__init__.py index 66966a2..c4f153c 100644 --- a/sdk/python/pulumiverse_doppler/integration/__init__.py +++ b/sdk/python/pulumiverse_doppler/integration/__init__.py @@ -7,4 +7,5 @@ # Export this package's modules as members: from .aws_parameter_store import * from .aws_secrets_manager import * +from .flyio import * from .terraform_cloud import * diff --git a/sdk/python/pulumiverse_doppler/integration/aws_parameter_store.py b/sdk/python/pulumiverse_doppler/integration/aws_parameter_store.py index 3615329..6901418 100644 --- a/sdk/python/pulumiverse_doppler/integration/aws_parameter_store.py +++ b/sdk/python/pulumiverse_doppler/integration/aws_parameter_store.py @@ -125,12 +125,12 @@ def __init__(__self__, }, }], }), - inline_policies=[aws.iam.RoleInlinePolicyArgs( - name="doppler_secret_manager", - policy=json.dumps({ - "Version": "2012-10-17", - "Statement": [{ - "Action": [ + inline_policies=[{ + "name": "doppler_secret_manager", + "policy": json.dumps({ + "version": "2012-10-17", + "statement": [{ + "action": [ "ssm:PutParameter", "ssm:LabelParameterVersion", "ssm:DeleteParameter", @@ -142,11 +142,11 @@ def __init__(__self__, "ssm:GetParameter", "ssm:DeleteParameters", ], - "Effect": "Allow", - "Resource": "*", + "effect": "Allow", + "resource": "*", }], }), - )]) + }]) prod = doppler.integration.AwsParameterStore("prod", name="Production", assume_role_arn=doppler_parameter_store.arn) @@ -159,7 +159,8 @@ def __init__(__self__, secure_string=True, tags={ "myTag": "enabled", - }) + }, + delete_behavior="leave_in_target") ``` :param str resource_name: The name of the resource. @@ -201,12 +202,12 @@ def __init__(__self__, }, }], }), - inline_policies=[aws.iam.RoleInlinePolicyArgs( - name="doppler_secret_manager", - policy=json.dumps({ - "Version": "2012-10-17", - "Statement": [{ - "Action": [ + inline_policies=[{ + "name": "doppler_secret_manager", + "policy": json.dumps({ + "version": "2012-10-17", + "statement": [{ + "action": [ "ssm:PutParameter", "ssm:LabelParameterVersion", "ssm:DeleteParameter", @@ -218,11 +219,11 @@ def __init__(__self__, "ssm:GetParameter", "ssm:DeleteParameters", ], - "Effect": "Allow", - "Resource": "*", + "effect": "Allow", + "resource": "*", }], }), - )]) + }]) prod = doppler.integration.AwsParameterStore("prod", name="Production", assume_role_arn=doppler_parameter_store.arn) @@ -235,7 +236,8 @@ def __init__(__self__, secure_string=True, tags={ "myTag": "enabled", - }) + }, + delete_behavior="leave_in_target") ``` :param str resource_name: The name of the resource. diff --git a/sdk/python/pulumiverse_doppler/integration/aws_secrets_manager.py b/sdk/python/pulumiverse_doppler/integration/aws_secrets_manager.py index 74cdd74..ded2de3 100644 --- a/sdk/python/pulumiverse_doppler/integration/aws_secrets_manager.py +++ b/sdk/python/pulumiverse_doppler/integration/aws_secrets_manager.py @@ -125,12 +125,12 @@ def __init__(__self__, }, }], }), - inline_policies=[aws.iam.RoleInlinePolicyArgs( - name="doppler_secret_manager", - policy=json.dumps({ - "Version": "2012-10-17", - "Statement": [{ - "Action": [ + inline_policies=[{ + "name": "doppler_secret_manager", + "policy": json.dumps({ + "version": "2012-10-17", + "statement": [{ + "action": [ "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret", "secretsmanager:PutSecretValue", @@ -139,11 +139,11 @@ def __init__(__self__, "secretsmanager:TagResource", "secretsmanager:UpdateSecret", ], - "Effect": "Allow", - "Resource": "*", + "effect": "Allow", + "resource": "*", }], }), - )]) + }]) prod = doppler.integration.AwsSecretsManager("prod", name="Production", assume_role_arn=doppler_secrets_manager.arn) @@ -155,7 +155,8 @@ def __init__(__self__, path="/backend/", tags={ "myTag": "enabled", - }) + }, + delete_behavior="leave_in_target") ``` :param str resource_name: The name of the resource. @@ -197,12 +198,12 @@ def __init__(__self__, }, }], }), - inline_policies=[aws.iam.RoleInlinePolicyArgs( - name="doppler_secret_manager", - policy=json.dumps({ - "Version": "2012-10-17", - "Statement": [{ - "Action": [ + inline_policies=[{ + "name": "doppler_secret_manager", + "policy": json.dumps({ + "version": "2012-10-17", + "statement": [{ + "action": [ "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret", "secretsmanager:PutSecretValue", @@ -211,11 +212,11 @@ def __init__(__self__, "secretsmanager:TagResource", "secretsmanager:UpdateSecret", ], - "Effect": "Allow", - "Resource": "*", + "effect": "Allow", + "resource": "*", }], }), - )]) + }]) prod = doppler.integration.AwsSecretsManager("prod", name="Production", assume_role_arn=doppler_secrets_manager.arn) @@ -227,7 +228,8 @@ def __init__(__self__, path="/backend/", tags={ "myTag": "enabled", - }) + }, + delete_behavior="leave_in_target") ``` :param str resource_name: The name of the resource. diff --git a/sdk/python/pulumiverse_doppler/integration/flyio.py b/sdk/python/pulumiverse_doppler/integration/flyio.py new file mode 100644 index 0000000..c251d62 --- /dev/null +++ b/sdk/python/pulumiverse_doppler/integration/flyio.py @@ -0,0 +1,232 @@ +# 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__ = ['FlyioArgs', 'Flyio'] + +@pulumi.input_type +class FlyioArgs: + def __init__(__self__, *, + api_key: pulumi.Input[str], + name: pulumi.Input[str]): + """ + The set of arguments for constructing a Flyio resource. + :param pulumi.Input[str] api_key: A Fly.io API key. + :param pulumi.Input[str] name: The name of the integration + """ + pulumi.set(__self__, "api_key", api_key) + pulumi.set(__self__, "name", name) + + @property + @pulumi.getter(name="apiKey") + def api_key(self) -> pulumi.Input[str]: + """ + A Fly.io API key. + """ + return pulumi.get(self, "api_key") + + @api_key.setter + def api_key(self, value: pulumi.Input[str]): + pulumi.set(self, "api_key", value) + + @property + @pulumi.getter + def name(self) -> pulumi.Input[str]: + """ + The name of the integration + """ + return pulumi.get(self, "name") + + @name.setter + def name(self, value: pulumi.Input[str]): + pulumi.set(self, "name", value) + + +@pulumi.input_type +class _FlyioState: + def __init__(__self__, *, + api_key: Optional[pulumi.Input[str]] = None, + name: Optional[pulumi.Input[str]] = None): + """ + Input properties used for looking up and filtering Flyio resources. + :param pulumi.Input[str] api_key: A Fly.io API key. + :param pulumi.Input[str] name: The name of the integration + """ + if api_key is not None: + pulumi.set(__self__, "api_key", api_key) + if name is not None: + pulumi.set(__self__, "name", name) + + @property + @pulumi.getter(name="apiKey") + def api_key(self) -> Optional[pulumi.Input[str]]: + """ + A Fly.io API key. + """ + return pulumi.get(self, "api_key") + + @api_key.setter + def api_key(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "api_key", value) + + @property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[str]]: + """ + The name of the integration + """ + return pulumi.get(self, "name") + + @name.setter + def name(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "name", value) + + +class Flyio(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + api_key: Optional[pulumi.Input[str]] = None, + name: Optional[pulumi.Input[str]] = None, + __props__=None): + """ + Manage a Fly.io Doppler integration. + + ## Example Usage + + ```python + import pulumi + import pulumiverse_doppler as doppler + + prod = doppler.integration.Flyio("prod", + name="TF Fly.io", + api_key="fo1_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx") + backend_prod = doppler.secrets_sync.Flyio("backend_prod", + integration=prod.id, + project="backend", + config="prd", + app_id="my-app", + restart_machines=True, + delete_behavior="leave_in_target") + ``` + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[str] api_key: A Fly.io API key. + :param pulumi.Input[str] name: The name of the integration + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: FlyioArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + Manage a Fly.io Doppler integration. + + ## Example Usage + + ```python + import pulumi + import pulumiverse_doppler as doppler + + prod = doppler.integration.Flyio("prod", + name="TF Fly.io", + api_key="fo1_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx") + backend_prod = doppler.secrets_sync.Flyio("backend_prod", + integration=prod.id, + project="backend", + config="prd", + app_id="my-app", + restart_machines=True, + delete_behavior="leave_in_target") + ``` + + :param str resource_name: The name of the resource. + :param FlyioArgs 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(FlyioArgs, 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_key: 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__ = FlyioArgs.__new__(FlyioArgs) + + if api_key is None and not opts.urn: + raise TypeError("Missing required property 'api_key'") + __props__.__dict__["api_key"] = None if api_key is None else pulumi.Output.secret(api_key) + if name is None and not opts.urn: + raise TypeError("Missing required property 'name'") + __props__.__dict__["name"] = name + secret_opts = pulumi.ResourceOptions(additional_secret_outputs=["apiKey"]) + opts = pulumi.ResourceOptions.merge(opts, secret_opts) + super(Flyio, __self__).__init__( + 'doppler:integration/flyio:Flyio', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + api_key: Optional[pulumi.Input[str]] = None, + name: Optional[pulumi.Input[str]] = None) -> 'Flyio': + """ + Get an existing Flyio 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] api_key: A Fly.io API key. + :param pulumi.Input[str] name: The name of the integration + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _FlyioState.__new__(_FlyioState) + + __props__.__dict__["api_key"] = api_key + __props__.__dict__["name"] = name + return Flyio(resource_name, opts=opts, __props__=__props__) + + @property + @pulumi.getter(name="apiKey") + def api_key(self) -> pulumi.Output[str]: + """ + A Fly.io API key. + """ + return pulumi.get(self, "api_key") + + @property + @pulumi.getter + def name(self) -> pulumi.Output[str]: + """ + The name of the integration + """ + return pulumi.get(self, "name") + diff --git a/sdk/python/pulumiverse_doppler/outputs.py b/sdk/python/pulumiverse_doppler/outputs.py new file mode 100644 index 0000000..1c0f177 --- /dev/null +++ b/sdk/python/pulumiverse_doppler/outputs.py @@ -0,0 +1,51 @@ +# 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__ = [ + 'WebhookAuthentication', +] + +@pulumi.output_type +class WebhookAuthentication(dict): + def __init__(__self__, *, + type: str, + password: Optional[str] = None, + token: Optional[str] = None, + username: Optional[str] = None): + pulumi.set(__self__, "type", type) + if password is not None: + pulumi.set(__self__, "password", password) + if token is not None: + pulumi.set(__self__, "token", token) + if username is not None: + pulumi.set(__self__, "username", username) + + @property + @pulumi.getter + def type(self) -> str: + return pulumi.get(self, "type") + + @property + @pulumi.getter + def password(self) -> Optional[str]: + return pulumi.get(self, "password") + + @property + @pulumi.getter + def token(self) -> Optional[str]: + return pulumi.get(self, "token") + + @property + @pulumi.getter + def username(self) -> Optional[str]: + return pulumi.get(self, "username") + + diff --git a/sdk/python/pulumiverse_doppler/project_role.py b/sdk/python/pulumiverse_doppler/project_role.py new file mode 100644 index 0000000..b94200a --- /dev/null +++ b/sdk/python/pulumiverse_doppler/project_role.py @@ -0,0 +1,284 @@ +# 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__ = ['ProjectRoleArgs', 'ProjectRole'] + +@pulumi.input_type +class ProjectRoleArgs: + def __init__(__self__, *, + name: pulumi.Input[str], + permissions: pulumi.Input[Sequence[pulumi.Input[str]]]): + """ + The set of arguments for constructing a ProjectRole resource. + :param pulumi.Input[str] name: The name of the Doppler project role + :param pulumi.Input[Sequence[pulumi.Input[str]]] permissions: A list of [Doppler project permissions](https://docs.doppler.com/reference/project_roles-create) + """ + pulumi.set(__self__, "name", name) + pulumi.set(__self__, "permissions", permissions) + + @property + @pulumi.getter + def name(self) -> pulumi.Input[str]: + """ + The name of the Doppler project role + """ + return pulumi.get(self, "name") + + @name.setter + def name(self, value: pulumi.Input[str]): + pulumi.set(self, "name", value) + + @property + @pulumi.getter + def permissions(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]: + """ + A list of [Doppler project permissions](https://docs.doppler.com/reference/project_roles-create) + """ + return pulumi.get(self, "permissions") + + @permissions.setter + def permissions(self, value: pulumi.Input[Sequence[pulumi.Input[str]]]): + pulumi.set(self, "permissions", value) + + +@pulumi.input_type +class _ProjectRoleState: + def __init__(__self__, *, + identifier: Optional[pulumi.Input[str]] = None, + is_custom_role: Optional[pulumi.Input[bool]] = None, + name: Optional[pulumi.Input[str]] = None, + permissions: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None): + """ + Input properties used for looking up and filtering ProjectRole resources. + :param pulumi.Input[str] identifier: The role's unique identifier + :param pulumi.Input[bool] is_custom_role: Whether or not the role is custom (as opposed to Doppler built-in) + :param pulumi.Input[str] name: The name of the Doppler project role + :param pulumi.Input[Sequence[pulumi.Input[str]]] permissions: A list of [Doppler project permissions](https://docs.doppler.com/reference/project_roles-create) + """ + if identifier is not None: + pulumi.set(__self__, "identifier", identifier) + if is_custom_role is not None: + pulumi.set(__self__, "is_custom_role", is_custom_role) + if name is not None: + pulumi.set(__self__, "name", name) + if permissions is not None: + pulumi.set(__self__, "permissions", permissions) + + @property + @pulumi.getter + def identifier(self) -> Optional[pulumi.Input[str]]: + """ + The role's unique identifier + """ + return pulumi.get(self, "identifier") + + @identifier.setter + def identifier(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "identifier", value) + + @property + @pulumi.getter(name="isCustomRole") + def is_custom_role(self) -> Optional[pulumi.Input[bool]]: + """ + Whether or not the role is custom (as opposed to Doppler built-in) + """ + return pulumi.get(self, "is_custom_role") + + @is_custom_role.setter + def is_custom_role(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "is_custom_role", value) + + @property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[str]]: + """ + The name of the Doppler project role + """ + return pulumi.get(self, "name") + + @name.setter + def name(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "name", value) + + @property + @pulumi.getter + def permissions(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]: + """ + A list of [Doppler project permissions](https://docs.doppler.com/reference/project_roles-create) + """ + return pulumi.get(self, "permissions") + + @permissions.setter + def permissions(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]): + pulumi.set(self, "permissions", value) + + +class ProjectRole(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + name: Optional[pulumi.Input[str]] = None, + permissions: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, + __props__=None): + """ + Manage a Doppler project_role. + + ## Example Usage + + ```python + import pulumi + import pulumiverse_doppler as doppler + + log_viewer = doppler.ProjectRole("log_viewer", + name="Log Viewer", + permissions=["enclave_config_logs"]) + ``` + + ## Import + + ```sh + $ pulumi import doppler:index/projectRole:ProjectRole default + ``` + + :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 Doppler project role + :param pulumi.Input[Sequence[pulumi.Input[str]]] permissions: A list of [Doppler project permissions](https://docs.doppler.com/reference/project_roles-create) + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: ProjectRoleArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + Manage a Doppler project_role. + + ## Example Usage + + ```python + import pulumi + import pulumiverse_doppler as doppler + + log_viewer = doppler.ProjectRole("log_viewer", + name="Log Viewer", + permissions=["enclave_config_logs"]) + ``` + + ## Import + + ```sh + $ pulumi import doppler:index/projectRole:ProjectRole default + ``` + + :param str resource_name: The name of the resource. + :param ProjectRoleArgs 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(ProjectRoleArgs, 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, + permissions: 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__ = ProjectRoleArgs.__new__(ProjectRoleArgs) + + if name is None and not opts.urn: + raise TypeError("Missing required property 'name'") + __props__.__dict__["name"] = name + if permissions is None and not opts.urn: + raise TypeError("Missing required property 'permissions'") + __props__.__dict__["permissions"] = permissions + __props__.__dict__["identifier"] = None + __props__.__dict__["is_custom_role"] = None + super(ProjectRole, __self__).__init__( + 'doppler:index/projectRole:ProjectRole', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + identifier: Optional[pulumi.Input[str]] = None, + is_custom_role: Optional[pulumi.Input[bool]] = None, + name: Optional[pulumi.Input[str]] = None, + permissions: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None) -> 'ProjectRole': + """ + Get an existing ProjectRole 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] identifier: The role's unique identifier + :param pulumi.Input[bool] is_custom_role: Whether or not the role is custom (as opposed to Doppler built-in) + :param pulumi.Input[str] name: The name of the Doppler project role + :param pulumi.Input[Sequence[pulumi.Input[str]]] permissions: A list of [Doppler project permissions](https://docs.doppler.com/reference/project_roles-create) + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _ProjectRoleState.__new__(_ProjectRoleState) + + __props__.__dict__["identifier"] = identifier + __props__.__dict__["is_custom_role"] = is_custom_role + __props__.__dict__["name"] = name + __props__.__dict__["permissions"] = permissions + return ProjectRole(resource_name, opts=opts, __props__=__props__) + + @property + @pulumi.getter + def identifier(self) -> pulumi.Output[str]: + """ + The role's unique identifier + """ + return pulumi.get(self, "identifier") + + @property + @pulumi.getter(name="isCustomRole") + def is_custom_role(self) -> pulumi.Output[bool]: + """ + Whether or not the role is custom (as opposed to Doppler built-in) + """ + return pulumi.get(self, "is_custom_role") + + @property + @pulumi.getter + def name(self) -> pulumi.Output[str]: + """ + The name of the Doppler project role + """ + return pulumi.get(self, "name") + + @property + @pulumi.getter + def permissions(self) -> pulumi.Output[Sequence[str]]: + """ + A list of [Doppler project permissions](https://docs.doppler.com/reference/project_roles-create) + """ + return pulumi.get(self, "permissions") + diff --git a/sdk/python/pulumiverse_doppler/secretssync/__init__.py b/sdk/python/pulumiverse_doppler/secretssync/__init__.py index 81f82df..deea018 100644 --- a/sdk/python/pulumiverse_doppler/secretssync/__init__.py +++ b/sdk/python/pulumiverse_doppler/secretssync/__init__.py @@ -7,5 +7,6 @@ # Export this package's modules as members: from .aws_parameter_store import * from .aws_secrets_manager import * +from .flyio import * from .github_actions import * from .terraform_cloud import * diff --git a/sdk/python/pulumiverse_doppler/secretssync/aws_parameter_store.py b/sdk/python/pulumiverse_doppler/secretssync/aws_parameter_store.py index 7387226..c6ef4d4 100644 --- a/sdk/python/pulumiverse_doppler/secretssync/aws_parameter_store.py +++ b/sdk/python/pulumiverse_doppler/secretssync/aws_parameter_store.py @@ -19,6 +19,8 @@ def __init__(__self__, *, path: pulumi.Input[str], project: pulumi.Input[str], region: pulumi.Input[str], + delete_behavior: Optional[pulumi.Input[str]] = None, + kms_key_id: Optional[pulumi.Input[str]] = None, secure_string: Optional[pulumi.Input[bool]] = None, tags: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None): """ @@ -28,6 +30,8 @@ def __init__(__self__, *, :param pulumi.Input[str] path: The path to the parameters in AWS :param pulumi.Input[str] project: The name of the Doppler project :param pulumi.Input[str] region: The AWS region + :param pulumi.Input[str] delete_behavior: The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leave_in_target` (default) or `delete_from_target`. + :param pulumi.Input[str] kms_key_id: The AWS KMS key used to encrypt the parameter (ID, Alias, or ARN) :param pulumi.Input[bool] secure_string: Whether or not the parameters are stored as a secure string :param pulumi.Input[Mapping[str, pulumi.Input[str]]] tags: AWS tags to attach to the parameters """ @@ -36,6 +40,10 @@ def __init__(__self__, *, pulumi.set(__self__, "path", path) pulumi.set(__self__, "project", project) pulumi.set(__self__, "region", region) + if delete_behavior is not None: + pulumi.set(__self__, "delete_behavior", delete_behavior) + if kms_key_id is not None: + pulumi.set(__self__, "kms_key_id", kms_key_id) if secure_string is not None: pulumi.set(__self__, "secure_string", secure_string) if tags is not None: @@ -101,6 +109,30 @@ def region(self) -> pulumi.Input[str]: def region(self, value: pulumi.Input[str]): pulumi.set(self, "region", value) + @property + @pulumi.getter(name="deleteBehavior") + def delete_behavior(self) -> Optional[pulumi.Input[str]]: + """ + The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leave_in_target` (default) or `delete_from_target`. + """ + return pulumi.get(self, "delete_behavior") + + @delete_behavior.setter + def delete_behavior(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "delete_behavior", value) + + @property + @pulumi.getter(name="kmsKeyId") + def kms_key_id(self) -> Optional[pulumi.Input[str]]: + """ + The AWS KMS key used to encrypt the parameter (ID, Alias, or ARN) + """ + return pulumi.get(self, "kms_key_id") + + @kms_key_id.setter + def kms_key_id(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "kms_key_id", value) + @property @pulumi.getter(name="secureString") def secure_string(self) -> Optional[pulumi.Input[bool]]: @@ -130,7 +162,9 @@ def tags(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): class _AwsParameterStoreState: def __init__(__self__, *, config: Optional[pulumi.Input[str]] = None, + delete_behavior: Optional[pulumi.Input[str]] = None, integration: Optional[pulumi.Input[str]] = None, + kms_key_id: Optional[pulumi.Input[str]] = None, path: Optional[pulumi.Input[str]] = None, project: Optional[pulumi.Input[str]] = None, region: Optional[pulumi.Input[str]] = None, @@ -139,7 +173,9 @@ def __init__(__self__, *, """ Input properties used for looking up and filtering AwsParameterStore resources. :param pulumi.Input[str] config: The name of the Doppler config + :param pulumi.Input[str] delete_behavior: The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leave_in_target` (default) or `delete_from_target`. :param pulumi.Input[str] integration: The slug of the integration to use for this sync + :param pulumi.Input[str] kms_key_id: The AWS KMS key used to encrypt the parameter (ID, Alias, or ARN) :param pulumi.Input[str] path: The path to the parameters in AWS :param pulumi.Input[str] project: The name of the Doppler project :param pulumi.Input[str] region: The AWS region @@ -148,8 +184,12 @@ def __init__(__self__, *, """ if config is not None: pulumi.set(__self__, "config", config) + if delete_behavior is not None: + pulumi.set(__self__, "delete_behavior", delete_behavior) if integration is not None: pulumi.set(__self__, "integration", integration) + if kms_key_id is not None: + pulumi.set(__self__, "kms_key_id", kms_key_id) if path is not None: pulumi.set(__self__, "path", path) if project is not None: @@ -173,6 +213,18 @@ def config(self) -> Optional[pulumi.Input[str]]: def config(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "config", value) + @property + @pulumi.getter(name="deleteBehavior") + def delete_behavior(self) -> Optional[pulumi.Input[str]]: + """ + The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leave_in_target` (default) or `delete_from_target`. + """ + return pulumi.get(self, "delete_behavior") + + @delete_behavior.setter + def delete_behavior(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "delete_behavior", value) + @property @pulumi.getter def integration(self) -> Optional[pulumi.Input[str]]: @@ -185,6 +237,18 @@ def integration(self) -> Optional[pulumi.Input[str]]: def integration(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "integration", value) + @property + @pulumi.getter(name="kmsKeyId") + def kms_key_id(self) -> Optional[pulumi.Input[str]]: + """ + The AWS KMS key used to encrypt the parameter (ID, Alias, or ARN) + """ + return pulumi.get(self, "kms_key_id") + + @kms_key_id.setter + def kms_key_id(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "kms_key_id", value) + @property @pulumi.getter def path(self) -> Optional[pulumi.Input[str]]: @@ -252,7 +316,9 @@ def __init__(__self__, resource_name: str, opts: Optional[pulumi.ResourceOptions] = None, config: Optional[pulumi.Input[str]] = None, + delete_behavior: Optional[pulumi.Input[str]] = None, integration: Optional[pulumi.Input[str]] = None, + kms_key_id: Optional[pulumi.Input[str]] = None, path: Optional[pulumi.Input[str]] = None, project: Optional[pulumi.Input[str]] = None, region: Optional[pulumi.Input[str]] = None, @@ -287,12 +353,12 @@ def __init__(__self__, }, }], }), - inline_policies=[aws.iam.RoleInlinePolicyArgs( - name="doppler_secret_manager", - policy=json.dumps({ - "Version": "2012-10-17", - "Statement": [{ - "Action": [ + inline_policies=[{ + "name": "doppler_secret_manager", + "policy": json.dumps({ + "version": "2012-10-17", + "statement": [{ + "action": [ "ssm:PutParameter", "ssm:LabelParameterVersion", "ssm:DeleteParameter", @@ -304,11 +370,11 @@ def __init__(__self__, "ssm:GetParameter", "ssm:DeleteParameters", ], - "Effect": "Allow", - "Resource": "*", + "effect": "Allow", + "resource": "*", }], }), - )]) + }]) prod = doppler.integration.AwsParameterStore("prod", name="Production", assume_role_arn=doppler_parameter_store.arn) @@ -321,13 +387,16 @@ def __init__(__self__, secure_string=True, tags={ "myTag": "enabled", - }) + }, + delete_behavior="leave_in_target") ``` :param str resource_name: The name of the resource. :param pulumi.ResourceOptions opts: Options for the resource. :param pulumi.Input[str] config: The name of the Doppler config + :param pulumi.Input[str] delete_behavior: The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leave_in_target` (default) or `delete_from_target`. :param pulumi.Input[str] integration: The slug of the integration to use for this sync + :param pulumi.Input[str] kms_key_id: The AWS KMS key used to encrypt the parameter (ID, Alias, or ARN) :param pulumi.Input[str] path: The path to the parameters in AWS :param pulumi.Input[str] project: The name of the Doppler project :param pulumi.Input[str] region: The AWS region @@ -368,12 +437,12 @@ def __init__(__self__, }, }], }), - inline_policies=[aws.iam.RoleInlinePolicyArgs( - name="doppler_secret_manager", - policy=json.dumps({ - "Version": "2012-10-17", - "Statement": [{ - "Action": [ + inline_policies=[{ + "name": "doppler_secret_manager", + "policy": json.dumps({ + "version": "2012-10-17", + "statement": [{ + "action": [ "ssm:PutParameter", "ssm:LabelParameterVersion", "ssm:DeleteParameter", @@ -385,11 +454,11 @@ def __init__(__self__, "ssm:GetParameter", "ssm:DeleteParameters", ], - "Effect": "Allow", - "Resource": "*", + "effect": "Allow", + "resource": "*", }], }), - )]) + }]) prod = doppler.integration.AwsParameterStore("prod", name="Production", assume_role_arn=doppler_parameter_store.arn) @@ -402,7 +471,8 @@ def __init__(__self__, secure_string=True, tags={ "myTag": "enabled", - }) + }, + delete_behavior="leave_in_target") ``` :param str resource_name: The name of the resource. @@ -421,7 +491,9 @@ def _internal_init(__self__, resource_name: str, opts: Optional[pulumi.ResourceOptions] = None, config: Optional[pulumi.Input[str]] = None, + delete_behavior: Optional[pulumi.Input[str]] = None, integration: Optional[pulumi.Input[str]] = None, + kms_key_id: Optional[pulumi.Input[str]] = None, path: Optional[pulumi.Input[str]] = None, project: Optional[pulumi.Input[str]] = None, region: Optional[pulumi.Input[str]] = None, @@ -439,9 +511,11 @@ def _internal_init(__self__, if config is None and not opts.urn: raise TypeError("Missing required property 'config'") __props__.__dict__["config"] = config + __props__.__dict__["delete_behavior"] = delete_behavior if integration is None and not opts.urn: raise TypeError("Missing required property 'integration'") __props__.__dict__["integration"] = integration + __props__.__dict__["kms_key_id"] = kms_key_id if path is None and not opts.urn: raise TypeError("Missing required property 'path'") __props__.__dict__["path"] = path @@ -464,7 +538,9 @@ def get(resource_name: str, id: pulumi.Input[str], opts: Optional[pulumi.ResourceOptions] = None, config: Optional[pulumi.Input[str]] = None, + delete_behavior: Optional[pulumi.Input[str]] = None, integration: Optional[pulumi.Input[str]] = None, + kms_key_id: Optional[pulumi.Input[str]] = None, path: Optional[pulumi.Input[str]] = None, project: Optional[pulumi.Input[str]] = None, region: Optional[pulumi.Input[str]] = None, @@ -478,7 +554,9 @@ def get(resource_name: str, :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] config: The name of the Doppler config + :param pulumi.Input[str] delete_behavior: The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leave_in_target` (default) or `delete_from_target`. :param pulumi.Input[str] integration: The slug of the integration to use for this sync + :param pulumi.Input[str] kms_key_id: The AWS KMS key used to encrypt the parameter (ID, Alias, or ARN) :param pulumi.Input[str] path: The path to the parameters in AWS :param pulumi.Input[str] project: The name of the Doppler project :param pulumi.Input[str] region: The AWS region @@ -490,7 +568,9 @@ def get(resource_name: str, __props__ = _AwsParameterStoreState.__new__(_AwsParameterStoreState) __props__.__dict__["config"] = config + __props__.__dict__["delete_behavior"] = delete_behavior __props__.__dict__["integration"] = integration + __props__.__dict__["kms_key_id"] = kms_key_id __props__.__dict__["path"] = path __props__.__dict__["project"] = project __props__.__dict__["region"] = region @@ -506,6 +586,14 @@ def config(self) -> pulumi.Output[str]: """ return pulumi.get(self, "config") + @property + @pulumi.getter(name="deleteBehavior") + def delete_behavior(self) -> pulumi.Output[Optional[str]]: + """ + The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leave_in_target` (default) or `delete_from_target`. + """ + return pulumi.get(self, "delete_behavior") + @property @pulumi.getter def integration(self) -> pulumi.Output[str]: @@ -514,6 +602,14 @@ def integration(self) -> pulumi.Output[str]: """ return pulumi.get(self, "integration") + @property + @pulumi.getter(name="kmsKeyId") + def kms_key_id(self) -> pulumi.Output[Optional[str]]: + """ + The AWS KMS key used to encrypt the parameter (ID, Alias, or ARN) + """ + return pulumi.get(self, "kms_key_id") + @property @pulumi.getter def path(self) -> pulumi.Output[str]: diff --git a/sdk/python/pulumiverse_doppler/secretssync/aws_secrets_manager.py b/sdk/python/pulumiverse_doppler/secretssync/aws_secrets_manager.py index b0e3a8d..826ca15 100644 --- a/sdk/python/pulumiverse_doppler/secretssync/aws_secrets_manager.py +++ b/sdk/python/pulumiverse_doppler/secretssync/aws_secrets_manager.py @@ -19,7 +19,10 @@ def __init__(__self__, *, path: pulumi.Input[str], project: pulumi.Input[str], region: pulumi.Input[str], - tags: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None): + delete_behavior: Optional[pulumi.Input[str]] = None, + kms_key_id: Optional[pulumi.Input[str]] = None, + tags: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + update_metadata: Optional[pulumi.Input[bool]] = None): """ The set of arguments for constructing a AwsSecretsManager resource. :param pulumi.Input[str] config: The name of the Doppler config @@ -27,15 +30,24 @@ def __init__(__self__, *, :param pulumi.Input[str] path: The path to the secret in AWS :param pulumi.Input[str] project: The name of the Doppler project :param pulumi.Input[str] region: The AWS region + :param pulumi.Input[str] delete_behavior: The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leave_in_target` (default) or `delete_from_target`. + :param pulumi.Input[str] kms_key_id: The AWS KMS key used to encrypt the secret (ID, Alias, or ARN) :param pulumi.Input[Mapping[str, pulumi.Input[str]]] tags: AWS tags to attach to the secrets + :param pulumi.Input[bool] update_metadata: If enabled, Doppler will update the AWS secret metadata (e.g. KMS key) during every sync. If disabled, Doppler will only set secret metadata for new AWS secrets. Note that Doppler never updates tags for existing AWS secrets. """ pulumi.set(__self__, "config", config) pulumi.set(__self__, "integration", integration) pulumi.set(__self__, "path", path) pulumi.set(__self__, "project", project) pulumi.set(__self__, "region", region) + if delete_behavior is not None: + pulumi.set(__self__, "delete_behavior", delete_behavior) + if kms_key_id is not None: + pulumi.set(__self__, "kms_key_id", kms_key_id) if tags is not None: pulumi.set(__self__, "tags", tags) + if update_metadata is not None: + pulumi.set(__self__, "update_metadata", update_metadata) @property @pulumi.getter @@ -97,6 +109,30 @@ def region(self) -> pulumi.Input[str]: def region(self, value: pulumi.Input[str]): pulumi.set(self, "region", value) + @property + @pulumi.getter(name="deleteBehavior") + def delete_behavior(self) -> Optional[pulumi.Input[str]]: + """ + The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leave_in_target` (default) or `delete_from_target`. + """ + return pulumi.get(self, "delete_behavior") + + @delete_behavior.setter + def delete_behavior(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "delete_behavior", value) + + @property + @pulumi.getter(name="kmsKeyId") + def kms_key_id(self) -> Optional[pulumi.Input[str]]: + """ + The AWS KMS key used to encrypt the secret (ID, Alias, or ARN) + """ + return pulumi.get(self, "kms_key_id") + + @kms_key_id.setter + def kms_key_id(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "kms_key_id", value) + @property @pulumi.getter def tags(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: @@ -109,29 +145,51 @@ def tags(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: def tags(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): pulumi.set(self, "tags", value) + @property + @pulumi.getter(name="updateMetadata") + def update_metadata(self) -> Optional[pulumi.Input[bool]]: + """ + If enabled, Doppler will update the AWS secret metadata (e.g. KMS key) during every sync. If disabled, Doppler will only set secret metadata for new AWS secrets. Note that Doppler never updates tags for existing AWS secrets. + """ + return pulumi.get(self, "update_metadata") + + @update_metadata.setter + def update_metadata(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "update_metadata", value) + @pulumi.input_type class _AwsSecretsManagerState: def __init__(__self__, *, config: Optional[pulumi.Input[str]] = None, + delete_behavior: Optional[pulumi.Input[str]] = None, integration: Optional[pulumi.Input[str]] = None, + kms_key_id: Optional[pulumi.Input[str]] = None, path: Optional[pulumi.Input[str]] = None, project: Optional[pulumi.Input[str]] = None, region: Optional[pulumi.Input[str]] = None, - tags: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None): + tags: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + update_metadata: Optional[pulumi.Input[bool]] = None): """ Input properties used for looking up and filtering AwsSecretsManager resources. :param pulumi.Input[str] config: The name of the Doppler config + :param pulumi.Input[str] delete_behavior: The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leave_in_target` (default) or `delete_from_target`. :param pulumi.Input[str] integration: The slug of the integration to use for this sync + :param pulumi.Input[str] kms_key_id: The AWS KMS key used to encrypt the secret (ID, Alias, or ARN) :param pulumi.Input[str] path: The path to the secret in AWS :param pulumi.Input[str] project: The name of the Doppler project :param pulumi.Input[str] region: The AWS region :param pulumi.Input[Mapping[str, pulumi.Input[str]]] tags: AWS tags to attach to the secrets + :param pulumi.Input[bool] update_metadata: If enabled, Doppler will update the AWS secret metadata (e.g. KMS key) during every sync. If disabled, Doppler will only set secret metadata for new AWS secrets. Note that Doppler never updates tags for existing AWS secrets. """ if config is not None: pulumi.set(__self__, "config", config) + if delete_behavior is not None: + pulumi.set(__self__, "delete_behavior", delete_behavior) if integration is not None: pulumi.set(__self__, "integration", integration) + if kms_key_id is not None: + pulumi.set(__self__, "kms_key_id", kms_key_id) if path is not None: pulumi.set(__self__, "path", path) if project is not None: @@ -140,6 +198,8 @@ def __init__(__self__, *, pulumi.set(__self__, "region", region) if tags is not None: pulumi.set(__self__, "tags", tags) + if update_metadata is not None: + pulumi.set(__self__, "update_metadata", update_metadata) @property @pulumi.getter @@ -153,6 +213,18 @@ def config(self) -> Optional[pulumi.Input[str]]: def config(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "config", value) + @property + @pulumi.getter(name="deleteBehavior") + def delete_behavior(self) -> Optional[pulumi.Input[str]]: + """ + The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leave_in_target` (default) or `delete_from_target`. + """ + return pulumi.get(self, "delete_behavior") + + @delete_behavior.setter + def delete_behavior(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "delete_behavior", value) + @property @pulumi.getter def integration(self) -> Optional[pulumi.Input[str]]: @@ -165,6 +237,18 @@ def integration(self) -> Optional[pulumi.Input[str]]: def integration(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "integration", value) + @property + @pulumi.getter(name="kmsKeyId") + def kms_key_id(self) -> Optional[pulumi.Input[str]]: + """ + The AWS KMS key used to encrypt the secret (ID, Alias, or ARN) + """ + return pulumi.get(self, "kms_key_id") + + @kms_key_id.setter + def kms_key_id(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "kms_key_id", value) + @property @pulumi.getter def path(self) -> Optional[pulumi.Input[str]]: @@ -213,6 +297,18 @@ def tags(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: def tags(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): pulumi.set(self, "tags", value) + @property + @pulumi.getter(name="updateMetadata") + def update_metadata(self) -> Optional[pulumi.Input[bool]]: + """ + If enabled, Doppler will update the AWS secret metadata (e.g. KMS key) during every sync. If disabled, Doppler will only set secret metadata for new AWS secrets. Note that Doppler never updates tags for existing AWS secrets. + """ + return pulumi.get(self, "update_metadata") + + @update_metadata.setter + def update_metadata(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "update_metadata", value) + class AwsSecretsManager(pulumi.CustomResource): @overload @@ -220,11 +316,14 @@ def __init__(__self__, resource_name: str, opts: Optional[pulumi.ResourceOptions] = None, config: Optional[pulumi.Input[str]] = None, + delete_behavior: Optional[pulumi.Input[str]] = None, integration: Optional[pulumi.Input[str]] = None, + kms_key_id: Optional[pulumi.Input[str]] = None, path: Optional[pulumi.Input[str]] = None, project: Optional[pulumi.Input[str]] = None, region: Optional[pulumi.Input[str]] = None, tags: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + update_metadata: Optional[pulumi.Input[bool]] = None, __props__=None): """ Manage an AWS Secrets Manager Doppler sync. @@ -254,12 +353,12 @@ def __init__(__self__, }, }], }), - inline_policies=[aws.iam.RoleInlinePolicyArgs( - name="doppler_secret_manager", - policy=json.dumps({ - "Version": "2012-10-17", - "Statement": [{ - "Action": [ + inline_policies=[{ + "name": "doppler_secret_manager", + "policy": json.dumps({ + "version": "2012-10-17", + "statement": [{ + "action": [ "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret", "secretsmanager:PutSecretValue", @@ -268,11 +367,11 @@ def __init__(__self__, "secretsmanager:TagResource", "secretsmanager:UpdateSecret", ], - "Effect": "Allow", - "Resource": "*", + "effect": "Allow", + "resource": "*", }], }), - )]) + }]) prod = doppler.integration.AwsSecretsManager("prod", name="Production", assume_role_arn=doppler_secrets_manager.arn) @@ -284,17 +383,21 @@ def __init__(__self__, path="/backend/", tags={ "myTag": "enabled", - }) + }, + delete_behavior="leave_in_target") ``` :param str resource_name: The name of the resource. :param pulumi.ResourceOptions opts: Options for the resource. :param pulumi.Input[str] config: The name of the Doppler config + :param pulumi.Input[str] delete_behavior: The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leave_in_target` (default) or `delete_from_target`. :param pulumi.Input[str] integration: The slug of the integration to use for this sync + :param pulumi.Input[str] kms_key_id: The AWS KMS key used to encrypt the secret (ID, Alias, or ARN) :param pulumi.Input[str] path: The path to the secret in AWS :param pulumi.Input[str] project: The name of the Doppler project :param pulumi.Input[str] region: The AWS region :param pulumi.Input[Mapping[str, pulumi.Input[str]]] tags: AWS tags to attach to the secrets + :param pulumi.Input[bool] update_metadata: If enabled, Doppler will update the AWS secret metadata (e.g. KMS key) during every sync. If disabled, Doppler will only set secret metadata for new AWS secrets. Note that Doppler never updates tags for existing AWS secrets. """ ... @overload @@ -330,12 +433,12 @@ def __init__(__self__, }, }], }), - inline_policies=[aws.iam.RoleInlinePolicyArgs( - name="doppler_secret_manager", - policy=json.dumps({ - "Version": "2012-10-17", - "Statement": [{ - "Action": [ + inline_policies=[{ + "name": "doppler_secret_manager", + "policy": json.dumps({ + "version": "2012-10-17", + "statement": [{ + "action": [ "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret", "secretsmanager:PutSecretValue", @@ -344,11 +447,11 @@ def __init__(__self__, "secretsmanager:TagResource", "secretsmanager:UpdateSecret", ], - "Effect": "Allow", - "Resource": "*", + "effect": "Allow", + "resource": "*", }], }), - )]) + }]) prod = doppler.integration.AwsSecretsManager("prod", name="Production", assume_role_arn=doppler_secrets_manager.arn) @@ -360,7 +463,8 @@ def __init__(__self__, path="/backend/", tags={ "myTag": "enabled", - }) + }, + delete_behavior="leave_in_target") ``` :param str resource_name: The name of the resource. @@ -379,11 +483,14 @@ def _internal_init(__self__, resource_name: str, opts: Optional[pulumi.ResourceOptions] = None, config: Optional[pulumi.Input[str]] = None, + delete_behavior: Optional[pulumi.Input[str]] = None, integration: Optional[pulumi.Input[str]] = None, + kms_key_id: Optional[pulumi.Input[str]] = None, path: Optional[pulumi.Input[str]] = None, project: Optional[pulumi.Input[str]] = None, region: Optional[pulumi.Input[str]] = None, tags: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + update_metadata: Optional[pulumi.Input[bool]] = None, __props__=None): opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts) if not isinstance(opts, pulumi.ResourceOptions): @@ -396,9 +503,11 @@ def _internal_init(__self__, if config is None and not opts.urn: raise TypeError("Missing required property 'config'") __props__.__dict__["config"] = config + __props__.__dict__["delete_behavior"] = delete_behavior if integration is None and not opts.urn: raise TypeError("Missing required property 'integration'") __props__.__dict__["integration"] = integration + __props__.__dict__["kms_key_id"] = kms_key_id if path is None and not opts.urn: raise TypeError("Missing required property 'path'") __props__.__dict__["path"] = path @@ -409,6 +518,7 @@ def _internal_init(__self__, raise TypeError("Missing required property 'region'") __props__.__dict__["region"] = region __props__.__dict__["tags"] = tags + __props__.__dict__["update_metadata"] = update_metadata super(AwsSecretsManager, __self__).__init__( 'doppler:secretsSync/awsSecretsManager:AwsSecretsManager', resource_name, @@ -420,11 +530,14 @@ def get(resource_name: str, id: pulumi.Input[str], opts: Optional[pulumi.ResourceOptions] = None, config: Optional[pulumi.Input[str]] = None, + delete_behavior: Optional[pulumi.Input[str]] = None, integration: Optional[pulumi.Input[str]] = None, + kms_key_id: Optional[pulumi.Input[str]] = None, path: Optional[pulumi.Input[str]] = None, project: Optional[pulumi.Input[str]] = None, region: Optional[pulumi.Input[str]] = None, - tags: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None) -> 'AwsSecretsManager': + tags: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + update_metadata: Optional[pulumi.Input[bool]] = None) -> 'AwsSecretsManager': """ Get an existing AwsSecretsManager resource's state with the given name, id, and optional extra properties used to qualify the lookup. @@ -433,22 +546,28 @@ def get(resource_name: str, :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] config: The name of the Doppler config + :param pulumi.Input[str] delete_behavior: The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leave_in_target` (default) or `delete_from_target`. :param pulumi.Input[str] integration: The slug of the integration to use for this sync + :param pulumi.Input[str] kms_key_id: The AWS KMS key used to encrypt the secret (ID, Alias, or ARN) :param pulumi.Input[str] path: The path to the secret in AWS :param pulumi.Input[str] project: The name of the Doppler project :param pulumi.Input[str] region: The AWS region :param pulumi.Input[Mapping[str, pulumi.Input[str]]] tags: AWS tags to attach to the secrets + :param pulumi.Input[bool] update_metadata: If enabled, Doppler will update the AWS secret metadata (e.g. KMS key) during every sync. If disabled, Doppler will only set secret metadata for new AWS secrets. Note that Doppler never updates tags for existing AWS secrets. """ opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) __props__ = _AwsSecretsManagerState.__new__(_AwsSecretsManagerState) __props__.__dict__["config"] = config + __props__.__dict__["delete_behavior"] = delete_behavior __props__.__dict__["integration"] = integration + __props__.__dict__["kms_key_id"] = kms_key_id __props__.__dict__["path"] = path __props__.__dict__["project"] = project __props__.__dict__["region"] = region __props__.__dict__["tags"] = tags + __props__.__dict__["update_metadata"] = update_metadata return AwsSecretsManager(resource_name, opts=opts, __props__=__props__) @property @@ -459,6 +578,14 @@ def config(self) -> pulumi.Output[str]: """ return pulumi.get(self, "config") + @property + @pulumi.getter(name="deleteBehavior") + def delete_behavior(self) -> pulumi.Output[Optional[str]]: + """ + The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leave_in_target` (default) or `delete_from_target`. + """ + return pulumi.get(self, "delete_behavior") + @property @pulumi.getter def integration(self) -> pulumi.Output[str]: @@ -467,6 +594,14 @@ def integration(self) -> pulumi.Output[str]: """ return pulumi.get(self, "integration") + @property + @pulumi.getter(name="kmsKeyId") + def kms_key_id(self) -> pulumi.Output[Optional[str]]: + """ + The AWS KMS key used to encrypt the secret (ID, Alias, or ARN) + """ + return pulumi.get(self, "kms_key_id") + @property @pulumi.getter def path(self) -> pulumi.Output[str]: @@ -499,3 +634,11 @@ def tags(self) -> pulumi.Output[Optional[Mapping[str, str]]]: """ return pulumi.get(self, "tags") + @property + @pulumi.getter(name="updateMetadata") + def update_metadata(self) -> pulumi.Output[Optional[bool]]: + """ + If enabled, Doppler will update the AWS secret metadata (e.g. KMS key) during every sync. If disabled, Doppler will only set secret metadata for new AWS secrets. Note that Doppler never updates tags for existing AWS secrets. + """ + return pulumi.get(self, "update_metadata") + diff --git a/sdk/python/pulumiverse_doppler/secretssync/flyio.py b/sdk/python/pulumiverse_doppler/secretssync/flyio.py new file mode 100644 index 0000000..72ad6d6 --- /dev/null +++ b/sdk/python/pulumiverse_doppler/secretssync/flyio.py @@ -0,0 +1,421 @@ +# 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__ = ['FlyioArgs', 'Flyio'] + +@pulumi.input_type +class FlyioArgs: + def __init__(__self__, *, + app_id: pulumi.Input[str], + config: pulumi.Input[str], + integration: pulumi.Input[str], + project: pulumi.Input[str], + restart_machines: pulumi.Input[bool], + delete_behavior: Optional[pulumi.Input[str]] = None): + """ + The set of arguments for constructing a Flyio resource. + :param pulumi.Input[str] app_id: The app ID + :param pulumi.Input[str] config: The name of the Doppler config + :param pulumi.Input[str] integration: The slug of the integration to use for this sync + :param pulumi.Input[str] project: The name of the Doppler project + :param pulumi.Input[bool] restart_machines: Whether or not to restart the Fly.io machines when secrets are updated + :param pulumi.Input[str] delete_behavior: The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leave_in_target` (default) or `delete_from_target`. + """ + pulumi.set(__self__, "app_id", app_id) + pulumi.set(__self__, "config", config) + pulumi.set(__self__, "integration", integration) + pulumi.set(__self__, "project", project) + pulumi.set(__self__, "restart_machines", restart_machines) + if delete_behavior is not None: + pulumi.set(__self__, "delete_behavior", delete_behavior) + + @property + @pulumi.getter(name="appId") + def app_id(self) -> pulumi.Input[str]: + """ + The app ID + """ + return pulumi.get(self, "app_id") + + @app_id.setter + def app_id(self, value: pulumi.Input[str]): + pulumi.set(self, "app_id", value) + + @property + @pulumi.getter + def config(self) -> pulumi.Input[str]: + """ + The name of the Doppler config + """ + return pulumi.get(self, "config") + + @config.setter + def config(self, value: pulumi.Input[str]): + pulumi.set(self, "config", value) + + @property + @pulumi.getter + def integration(self) -> pulumi.Input[str]: + """ + The slug of the integration to use for this sync + """ + return pulumi.get(self, "integration") + + @integration.setter + def integration(self, value: pulumi.Input[str]): + pulumi.set(self, "integration", value) + + @property + @pulumi.getter + def project(self) -> pulumi.Input[str]: + """ + The name of the Doppler project + """ + return pulumi.get(self, "project") + + @project.setter + def project(self, value: pulumi.Input[str]): + pulumi.set(self, "project", value) + + @property + @pulumi.getter(name="restartMachines") + def restart_machines(self) -> pulumi.Input[bool]: + """ + Whether or not to restart the Fly.io machines when secrets are updated + """ + return pulumi.get(self, "restart_machines") + + @restart_machines.setter + def restart_machines(self, value: pulumi.Input[bool]): + pulumi.set(self, "restart_machines", value) + + @property + @pulumi.getter(name="deleteBehavior") + def delete_behavior(self) -> Optional[pulumi.Input[str]]: + """ + The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leave_in_target` (default) or `delete_from_target`. + """ + return pulumi.get(self, "delete_behavior") + + @delete_behavior.setter + def delete_behavior(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "delete_behavior", value) + + +@pulumi.input_type +class _FlyioState: + def __init__(__self__, *, + app_id: Optional[pulumi.Input[str]] = None, + config: Optional[pulumi.Input[str]] = None, + delete_behavior: Optional[pulumi.Input[str]] = None, + integration: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + restart_machines: Optional[pulumi.Input[bool]] = None): + """ + Input properties used for looking up and filtering Flyio resources. + :param pulumi.Input[str] app_id: The app ID + :param pulumi.Input[str] config: The name of the Doppler config + :param pulumi.Input[str] delete_behavior: The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leave_in_target` (default) or `delete_from_target`. + :param pulumi.Input[str] integration: The slug of the integration to use for this sync + :param pulumi.Input[str] project: The name of the Doppler project + :param pulumi.Input[bool] restart_machines: Whether or not to restart the Fly.io machines when secrets are updated + """ + if app_id is not None: + pulumi.set(__self__, "app_id", app_id) + if config is not None: + pulumi.set(__self__, "config", config) + if delete_behavior is not None: + pulumi.set(__self__, "delete_behavior", delete_behavior) + if integration is not None: + pulumi.set(__self__, "integration", integration) + if project is not None: + pulumi.set(__self__, "project", project) + if restart_machines is not None: + pulumi.set(__self__, "restart_machines", restart_machines) + + @property + @pulumi.getter(name="appId") + def app_id(self) -> Optional[pulumi.Input[str]]: + """ + The app ID + """ + return pulumi.get(self, "app_id") + + @app_id.setter + def app_id(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "app_id", value) + + @property + @pulumi.getter + def config(self) -> Optional[pulumi.Input[str]]: + """ + The name of the Doppler config + """ + return pulumi.get(self, "config") + + @config.setter + def config(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "config", value) + + @property + @pulumi.getter(name="deleteBehavior") + def delete_behavior(self) -> Optional[pulumi.Input[str]]: + """ + The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leave_in_target` (default) or `delete_from_target`. + """ + return pulumi.get(self, "delete_behavior") + + @delete_behavior.setter + def delete_behavior(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "delete_behavior", value) + + @property + @pulumi.getter + def integration(self) -> Optional[pulumi.Input[str]]: + """ + The slug of the integration to use for this sync + """ + return pulumi.get(self, "integration") + + @integration.setter + def integration(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "integration", value) + + @property + @pulumi.getter + def project(self) -> Optional[pulumi.Input[str]]: + """ + The name of the Doppler project + """ + return pulumi.get(self, "project") + + @project.setter + def project(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "project", value) + + @property + @pulumi.getter(name="restartMachines") + def restart_machines(self) -> Optional[pulumi.Input[bool]]: + """ + Whether or not to restart the Fly.io machines when secrets are updated + """ + return pulumi.get(self, "restart_machines") + + @restart_machines.setter + def restart_machines(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "restart_machines", value) + + +class Flyio(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + app_id: Optional[pulumi.Input[str]] = None, + config: Optional[pulumi.Input[str]] = None, + delete_behavior: Optional[pulumi.Input[str]] = None, + integration: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + restart_machines: Optional[pulumi.Input[bool]] = None, + __props__=None): + """ + Manage a Fly.io Doppler sync. + + ## Example Usage + + ```python + import pulumi + import pulumiverse_doppler as doppler + + prod = doppler.integration.Flyio("prod", + name="TF Fly.io", + api_key="fo1_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx") + backend_prod = doppler.secrets_sync.Flyio("backend_prod", + integration=prod.id, + project="backend", + config="prd", + app_id="my-app", + restart_machines=True, + delete_behavior="leave_in_target") + ``` + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[str] app_id: The app ID + :param pulumi.Input[str] config: The name of the Doppler config + :param pulumi.Input[str] delete_behavior: The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leave_in_target` (default) or `delete_from_target`. + :param pulumi.Input[str] integration: The slug of the integration to use for this sync + :param pulumi.Input[str] project: The name of the Doppler project + :param pulumi.Input[bool] restart_machines: Whether or not to restart the Fly.io machines when secrets are updated + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: FlyioArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + Manage a Fly.io Doppler sync. + + ## Example Usage + + ```python + import pulumi + import pulumiverse_doppler as doppler + + prod = doppler.integration.Flyio("prod", + name="TF Fly.io", + api_key="fo1_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx") + backend_prod = doppler.secrets_sync.Flyio("backend_prod", + integration=prod.id, + project="backend", + config="prd", + app_id="my-app", + restart_machines=True, + delete_behavior="leave_in_target") + ``` + + :param str resource_name: The name of the resource. + :param FlyioArgs 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(FlyioArgs, 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, + app_id: Optional[pulumi.Input[str]] = None, + config: Optional[pulumi.Input[str]] = None, + delete_behavior: Optional[pulumi.Input[str]] = None, + integration: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + restart_machines: 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__ = FlyioArgs.__new__(FlyioArgs) + + if app_id is None and not opts.urn: + raise TypeError("Missing required property 'app_id'") + __props__.__dict__["app_id"] = app_id + if config is None and not opts.urn: + raise TypeError("Missing required property 'config'") + __props__.__dict__["config"] = config + __props__.__dict__["delete_behavior"] = delete_behavior + if integration is None and not opts.urn: + raise TypeError("Missing required property 'integration'") + __props__.__dict__["integration"] = integration + if project is None and not opts.urn: + raise TypeError("Missing required property 'project'") + __props__.__dict__["project"] = project + if restart_machines is None and not opts.urn: + raise TypeError("Missing required property 'restart_machines'") + __props__.__dict__["restart_machines"] = restart_machines + super(Flyio, __self__).__init__( + 'doppler:secretsSync/flyio:Flyio', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + app_id: Optional[pulumi.Input[str]] = None, + config: Optional[pulumi.Input[str]] = None, + delete_behavior: Optional[pulumi.Input[str]] = None, + integration: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + restart_machines: Optional[pulumi.Input[bool]] = None) -> 'Flyio': + """ + Get an existing Flyio 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] app_id: The app ID + :param pulumi.Input[str] config: The name of the Doppler config + :param pulumi.Input[str] delete_behavior: The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leave_in_target` (default) or `delete_from_target`. + :param pulumi.Input[str] integration: The slug of the integration to use for this sync + :param pulumi.Input[str] project: The name of the Doppler project + :param pulumi.Input[bool] restart_machines: Whether or not to restart the Fly.io machines when secrets are updated + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _FlyioState.__new__(_FlyioState) + + __props__.__dict__["app_id"] = app_id + __props__.__dict__["config"] = config + __props__.__dict__["delete_behavior"] = delete_behavior + __props__.__dict__["integration"] = integration + __props__.__dict__["project"] = project + __props__.__dict__["restart_machines"] = restart_machines + return Flyio(resource_name, opts=opts, __props__=__props__) + + @property + @pulumi.getter(name="appId") + def app_id(self) -> pulumi.Output[str]: + """ + The app ID + """ + return pulumi.get(self, "app_id") + + @property + @pulumi.getter + def config(self) -> pulumi.Output[str]: + """ + The name of the Doppler config + """ + return pulumi.get(self, "config") + + @property + @pulumi.getter(name="deleteBehavior") + def delete_behavior(self) -> pulumi.Output[Optional[str]]: + """ + The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leave_in_target` (default) or `delete_from_target`. + """ + return pulumi.get(self, "delete_behavior") + + @property + @pulumi.getter + def integration(self) -> pulumi.Output[str]: + """ + The slug of the integration to use for this sync + """ + return pulumi.get(self, "integration") + + @property + @pulumi.getter + def project(self) -> pulumi.Output[str]: + """ + The name of the Doppler project + """ + return pulumi.get(self, "project") + + @property + @pulumi.getter(name="restartMachines") + def restart_machines(self) -> pulumi.Output[bool]: + """ + Whether or not to restart the Fly.io machines when secrets are updated + """ + return pulumi.get(self, "restart_machines") + diff --git a/sdk/python/pulumiverse_doppler/secretssync/github_actions.py b/sdk/python/pulumiverse_doppler/secretssync/github_actions.py index 1fe2ee1..a2691a1 100644 --- a/sdk/python/pulumiverse_doppler/secretssync/github_actions.py +++ b/sdk/python/pulumiverse_doppler/secretssync/github_actions.py @@ -18,6 +18,7 @@ def __init__(__self__, *, integration: pulumi.Input[str], project: pulumi.Input[str], sync_target: pulumi.Input[str], + delete_behavior: Optional[pulumi.Input[str]] = None, environment_name: Optional[pulumi.Input[str]] = None, org_scope: Optional[pulumi.Input[str]] = None, repo_name: Optional[pulumi.Input[str]] = None): @@ -27,6 +28,7 @@ def __init__(__self__, *, :param pulumi.Input[str] integration: The slug of the integration to use for this sync :param pulumi.Input[str] project: The name of the Doppler project :param pulumi.Input[str] sync_target: Either "repo" or "org", based on the resource type to sync to + :param pulumi.Input[str] delete_behavior: The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leave_in_target` (default) or `delete_from_target`. :param pulumi.Input[str] environment_name: The GitHub repo environment name to sync to (only used when `sync_target` is set to "repo") :param pulumi.Input[str] org_scope: Either "all" or "private", based on the which repos you want to have access (only used when `sync_target` is set to "org") :param pulumi.Input[str] repo_name: The GitHub repo name to sync to (only used when `sync_target` is set to "repo") @@ -35,6 +37,8 @@ def __init__(__self__, *, pulumi.set(__self__, "integration", integration) pulumi.set(__self__, "project", project) pulumi.set(__self__, "sync_target", sync_target) + if delete_behavior is not None: + pulumi.set(__self__, "delete_behavior", delete_behavior) if environment_name is not None: pulumi.set(__self__, "environment_name", environment_name) if org_scope is not None: @@ -90,6 +94,18 @@ def sync_target(self) -> pulumi.Input[str]: def sync_target(self, value: pulumi.Input[str]): pulumi.set(self, "sync_target", value) + @property + @pulumi.getter(name="deleteBehavior") + def delete_behavior(self) -> Optional[pulumi.Input[str]]: + """ + The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leave_in_target` (default) or `delete_from_target`. + """ + return pulumi.get(self, "delete_behavior") + + @delete_behavior.setter + def delete_behavior(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "delete_behavior", value) + @property @pulumi.getter(name="environmentName") def environment_name(self) -> Optional[pulumi.Input[str]]: @@ -131,6 +147,7 @@ def repo_name(self, value: Optional[pulumi.Input[str]]): class _GithubActionsState: def __init__(__self__, *, config: Optional[pulumi.Input[str]] = None, + delete_behavior: Optional[pulumi.Input[str]] = None, environment_name: Optional[pulumi.Input[str]] = None, integration: Optional[pulumi.Input[str]] = None, org_scope: Optional[pulumi.Input[str]] = None, @@ -140,6 +157,7 @@ def __init__(__self__, *, """ Input properties used for looking up and filtering GithubActions resources. :param pulumi.Input[str] config: The name of the Doppler config + :param pulumi.Input[str] delete_behavior: The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leave_in_target` (default) or `delete_from_target`. :param pulumi.Input[str] environment_name: The GitHub repo environment name to sync to (only used when `sync_target` is set to "repo") :param pulumi.Input[str] integration: The slug of the integration to use for this sync :param pulumi.Input[str] org_scope: Either "all" or "private", based on the which repos you want to have access (only used when `sync_target` is set to "org") @@ -149,6 +167,8 @@ def __init__(__self__, *, """ if config is not None: pulumi.set(__self__, "config", config) + if delete_behavior is not None: + pulumi.set(__self__, "delete_behavior", delete_behavior) if environment_name is not None: pulumi.set(__self__, "environment_name", environment_name) if integration is not None: @@ -174,6 +194,18 @@ def config(self) -> Optional[pulumi.Input[str]]: def config(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "config", value) + @property + @pulumi.getter(name="deleteBehavior") + def delete_behavior(self) -> Optional[pulumi.Input[str]]: + """ + The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leave_in_target` (default) or `delete_from_target`. + """ + return pulumi.get(self, "delete_behavior") + + @delete_behavior.setter + def delete_behavior(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "delete_behavior", value) + @property @pulumi.getter(name="environmentName") def environment_name(self) -> Optional[pulumi.Input[str]]: @@ -253,6 +285,7 @@ def __init__(__self__, resource_name: str, opts: Optional[pulumi.ResourceOptions] = None, config: Optional[pulumi.Input[str]] = None, + delete_behavior: Optional[pulumi.Input[str]] = None, environment_name: Optional[pulumi.Input[str]] = None, integration: Optional[pulumi.Input[str]] = None, org_scope: Optional[pulumi.Input[str]] = None, @@ -266,6 +299,7 @@ def __init__(__self__, :param str resource_name: The name of the resource. :param pulumi.ResourceOptions opts: Options for the resource. :param pulumi.Input[str] config: The name of the Doppler config + :param pulumi.Input[str] delete_behavior: The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leave_in_target` (default) or `delete_from_target`. :param pulumi.Input[str] environment_name: The GitHub repo environment name to sync to (only used when `sync_target` is set to "repo") :param pulumi.Input[str] integration: The slug of the integration to use for this sync :param pulumi.Input[str] org_scope: Either "all" or "private", based on the which repos you want to have access (only used when `sync_target` is set to "org") @@ -298,6 +332,7 @@ def _internal_init(__self__, resource_name: str, opts: Optional[pulumi.ResourceOptions] = None, config: Optional[pulumi.Input[str]] = None, + delete_behavior: Optional[pulumi.Input[str]] = None, environment_name: Optional[pulumi.Input[str]] = None, integration: Optional[pulumi.Input[str]] = None, org_scope: Optional[pulumi.Input[str]] = None, @@ -316,6 +351,7 @@ def _internal_init(__self__, if config is None and not opts.urn: raise TypeError("Missing required property 'config'") __props__.__dict__["config"] = config + __props__.__dict__["delete_behavior"] = delete_behavior __props__.__dict__["environment_name"] = environment_name if integration is None and not opts.urn: raise TypeError("Missing required property 'integration'") @@ -339,6 +375,7 @@ def get(resource_name: str, id: pulumi.Input[str], opts: Optional[pulumi.ResourceOptions] = None, config: Optional[pulumi.Input[str]] = None, + delete_behavior: Optional[pulumi.Input[str]] = None, environment_name: Optional[pulumi.Input[str]] = None, integration: Optional[pulumi.Input[str]] = None, org_scope: Optional[pulumi.Input[str]] = None, @@ -353,6 +390,7 @@ def get(resource_name: str, :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] config: The name of the Doppler config + :param pulumi.Input[str] delete_behavior: The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leave_in_target` (default) or `delete_from_target`. :param pulumi.Input[str] environment_name: The GitHub repo environment name to sync to (only used when `sync_target` is set to "repo") :param pulumi.Input[str] integration: The slug of the integration to use for this sync :param pulumi.Input[str] org_scope: Either "all" or "private", based on the which repos you want to have access (only used when `sync_target` is set to "org") @@ -365,6 +403,7 @@ def get(resource_name: str, __props__ = _GithubActionsState.__new__(_GithubActionsState) __props__.__dict__["config"] = config + __props__.__dict__["delete_behavior"] = delete_behavior __props__.__dict__["environment_name"] = environment_name __props__.__dict__["integration"] = integration __props__.__dict__["org_scope"] = org_scope @@ -381,6 +420,14 @@ def config(self) -> pulumi.Output[str]: """ return pulumi.get(self, "config") + @property + @pulumi.getter(name="deleteBehavior") + def delete_behavior(self) -> pulumi.Output[Optional[str]]: + """ + The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leave_in_target` (default) or `delete_from_target`. + """ + return pulumi.get(self, "delete_behavior") + @property @pulumi.getter(name="environmentName") def environment_name(self) -> pulumi.Output[Optional[str]]: diff --git a/sdk/python/pulumiverse_doppler/secretssync/terraform_cloud.py b/sdk/python/pulumiverse_doppler/secretssync/terraform_cloud.py index cf6b886..2c3b6de 100644 --- a/sdk/python/pulumiverse_doppler/secretssync/terraform_cloud.py +++ b/sdk/python/pulumiverse_doppler/secretssync/terraform_cloud.py @@ -20,6 +20,7 @@ def __init__(__self__, *, project: pulumi.Input[str], sync_target: pulumi.Input[str], variable_sync_type: pulumi.Input[str], + delete_behavior: Optional[pulumi.Input[str]] = None, variable_set_id: Optional[pulumi.Input[str]] = None, workspace_id: Optional[pulumi.Input[str]] = None): """ @@ -29,6 +30,7 @@ def __init__(__self__, *, :param pulumi.Input[str] name_transform: A name transform to apply before syncing secrets: "none" or "lowercase" :param pulumi.Input[str] project: The name of the Doppler project :param pulumi.Input[str] sync_target: Either "workspace" or "variableSet", based on the resource type to sync to + :param pulumi.Input[str] delete_behavior: The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leave_in_target` (default) or `delete_from_target`. """ pulumi.set(__self__, "config", config) pulumi.set(__self__, "integration", integration) @@ -36,6 +38,8 @@ def __init__(__self__, *, pulumi.set(__self__, "project", project) pulumi.set(__self__, "sync_target", sync_target) pulumi.set(__self__, "variable_sync_type", variable_sync_type) + if delete_behavior is not None: + pulumi.set(__self__, "delete_behavior", delete_behavior) if variable_set_id is not None: pulumi.set(__self__, "variable_set_id", variable_set_id) if workspace_id is not None: @@ -110,6 +114,18 @@ def variable_sync_type(self) -> pulumi.Input[str]: def variable_sync_type(self, value: pulumi.Input[str]): pulumi.set(self, "variable_sync_type", value) + @property + @pulumi.getter(name="deleteBehavior") + def delete_behavior(self) -> Optional[pulumi.Input[str]]: + """ + The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leave_in_target` (default) or `delete_from_target`. + """ + return pulumi.get(self, "delete_behavior") + + @delete_behavior.setter + def delete_behavior(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "delete_behavior", value) + @property @pulumi.getter(name="variableSetId") def variable_set_id(self) -> Optional[pulumi.Input[str]]: @@ -133,6 +149,7 @@ def workspace_id(self, value: Optional[pulumi.Input[str]]): class _TerraformCloudState: def __init__(__self__, *, config: Optional[pulumi.Input[str]] = None, + delete_behavior: Optional[pulumi.Input[str]] = None, integration: Optional[pulumi.Input[str]] = None, name_transform: Optional[pulumi.Input[str]] = None, project: Optional[pulumi.Input[str]] = None, @@ -143,6 +160,7 @@ def __init__(__self__, *, """ Input properties used for looking up and filtering TerraformCloud resources. :param pulumi.Input[str] config: The name of the Doppler config + :param pulumi.Input[str] delete_behavior: The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leave_in_target` (default) or `delete_from_target`. :param pulumi.Input[str] integration: The slug of the integration to use for this sync :param pulumi.Input[str] name_transform: A name transform to apply before syncing secrets: "none" or "lowercase" :param pulumi.Input[str] project: The name of the Doppler project @@ -150,6 +168,8 @@ def __init__(__self__, *, """ if config is not None: pulumi.set(__self__, "config", config) + if delete_behavior is not None: + pulumi.set(__self__, "delete_behavior", delete_behavior) if integration is not None: pulumi.set(__self__, "integration", integration) if name_transform is not None: @@ -177,6 +197,18 @@ def config(self) -> Optional[pulumi.Input[str]]: def config(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "config", value) + @property + @pulumi.getter(name="deleteBehavior") + def delete_behavior(self) -> Optional[pulumi.Input[str]]: + """ + The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leave_in_target` (default) or `delete_from_target`. + """ + return pulumi.get(self, "delete_behavior") + + @delete_behavior.setter + def delete_behavior(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "delete_behavior", value) + @property @pulumi.getter def integration(self) -> Optional[pulumi.Input[str]]: @@ -259,6 +291,7 @@ def __init__(__self__, resource_name: str, opts: Optional[pulumi.ResourceOptions] = None, config: Optional[pulumi.Input[str]] = None, + delete_behavior: Optional[pulumi.Input[str]] = None, integration: Optional[pulumi.Input[str]] = None, name_transform: Optional[pulumi.Input[str]] = None, project: Optional[pulumi.Input[str]] = None, @@ -273,6 +306,7 @@ def __init__(__self__, :param str resource_name: The name of the resource. :param pulumi.ResourceOptions opts: Options for the resource. :param pulumi.Input[str] config: The name of the Doppler config + :param pulumi.Input[str] delete_behavior: The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leave_in_target` (default) or `delete_from_target`. :param pulumi.Input[str] integration: The slug of the integration to use for this sync :param pulumi.Input[str] name_transform: A name transform to apply before syncing secrets: "none" or "lowercase" :param pulumi.Input[str] project: The name of the Doppler project @@ -303,6 +337,7 @@ def _internal_init(__self__, resource_name: str, opts: Optional[pulumi.ResourceOptions] = None, config: Optional[pulumi.Input[str]] = None, + delete_behavior: Optional[pulumi.Input[str]] = None, integration: Optional[pulumi.Input[str]] = None, name_transform: Optional[pulumi.Input[str]] = None, project: Optional[pulumi.Input[str]] = None, @@ -322,6 +357,7 @@ def _internal_init(__self__, if config is None and not opts.urn: raise TypeError("Missing required property 'config'") __props__.__dict__["config"] = config + __props__.__dict__["delete_behavior"] = delete_behavior if integration is None and not opts.urn: raise TypeError("Missing required property 'integration'") __props__.__dict__["integration"] = integration @@ -350,6 +386,7 @@ def get(resource_name: str, id: pulumi.Input[str], opts: Optional[pulumi.ResourceOptions] = None, config: Optional[pulumi.Input[str]] = None, + delete_behavior: Optional[pulumi.Input[str]] = None, integration: Optional[pulumi.Input[str]] = None, name_transform: Optional[pulumi.Input[str]] = None, project: Optional[pulumi.Input[str]] = None, @@ -365,6 +402,7 @@ def get(resource_name: str, :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] config: The name of the Doppler config + :param pulumi.Input[str] delete_behavior: The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leave_in_target` (default) or `delete_from_target`. :param pulumi.Input[str] integration: The slug of the integration to use for this sync :param pulumi.Input[str] name_transform: A name transform to apply before syncing secrets: "none" or "lowercase" :param pulumi.Input[str] project: The name of the Doppler project @@ -375,6 +413,7 @@ def get(resource_name: str, __props__ = _TerraformCloudState.__new__(_TerraformCloudState) __props__.__dict__["config"] = config + __props__.__dict__["delete_behavior"] = delete_behavior __props__.__dict__["integration"] = integration __props__.__dict__["name_transform"] = name_transform __props__.__dict__["project"] = project @@ -392,6 +431,14 @@ def config(self) -> pulumi.Output[str]: """ return pulumi.get(self, "config") + @property + @pulumi.getter(name="deleteBehavior") + def delete_behavior(self) -> pulumi.Output[Optional[str]]: + """ + The behavior to be performed on the secrets in the sync target when this resource is deleted or recreated. Either `leave_in_target` (default) or `delete_from_target`. + """ + return pulumi.get(self, "delete_behavior") + @property @pulumi.getter def integration(self) -> pulumi.Output[str]: diff --git a/sdk/python/pulumiverse_doppler/service_account_token.py b/sdk/python/pulumiverse_doppler/service_account_token.py new file mode 100644 index 0000000..c441c3b --- /dev/null +++ b/sdk/python/pulumiverse_doppler/service_account_token.py @@ -0,0 +1,327 @@ +# 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__ = ['ServiceAccountTokenArgs', 'ServiceAccountToken'] + +@pulumi.input_type +class ServiceAccountTokenArgs: + def __init__(__self__, *, + name: pulumi.Input[str], + service_account_slug: pulumi.Input[str], + expires_at: Optional[pulumi.Input[str]] = None): + """ + The set of arguments for constructing a ServiceAccountToken resource. + :param pulumi.Input[str] name: The display name of the API token + :param pulumi.Input[str] service_account_slug: Slug of the service account + :param pulumi.Input[str] expires_at: The datetime at which the API token should expire. If not provided, the API token will remain valid indefinitely unless manually revoked + """ + pulumi.set(__self__, "name", name) + pulumi.set(__self__, "service_account_slug", service_account_slug) + if expires_at is not None: + pulumi.set(__self__, "expires_at", expires_at) + + @property + @pulumi.getter + def name(self) -> pulumi.Input[str]: + """ + The display name of the API token + """ + return pulumi.get(self, "name") + + @name.setter + def name(self, value: pulumi.Input[str]): + pulumi.set(self, "name", value) + + @property + @pulumi.getter(name="serviceAccountSlug") + def service_account_slug(self) -> pulumi.Input[str]: + """ + Slug of the service account + """ + return pulumi.get(self, "service_account_slug") + + @service_account_slug.setter + def service_account_slug(self, value: pulumi.Input[str]): + pulumi.set(self, "service_account_slug", value) + + @property + @pulumi.getter(name="expiresAt") + def expires_at(self) -> Optional[pulumi.Input[str]]: + """ + The datetime at which the API token should expire. If not provided, the API token will remain valid indefinitely unless manually revoked + """ + return pulumi.get(self, "expires_at") + + @expires_at.setter + def expires_at(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "expires_at", value) + + +@pulumi.input_type +class _ServiceAccountTokenState: + def __init__(__self__, *, + api_key: Optional[pulumi.Input[str]] = None, + created_at: Optional[pulumi.Input[str]] = None, + expires_at: Optional[pulumi.Input[str]] = None, + name: Optional[pulumi.Input[str]] = None, + service_account_slug: Optional[pulumi.Input[str]] = None, + slug: Optional[pulumi.Input[str]] = None): + """ + Input properties used for looking up and filtering ServiceAccountToken resources. + :param pulumi.Input[str] api_key: The api key used to authenticate the service account + :param pulumi.Input[str] created_at: The datetime that the token was created. + :param pulumi.Input[str] expires_at: The datetime at which the API token should expire. If not provided, the API token will remain valid indefinitely unless manually revoked + :param pulumi.Input[str] name: The display name of the API token + :param pulumi.Input[str] service_account_slug: Slug of the service account + :param pulumi.Input[str] slug: Slug of the service account token + """ + if api_key is not None: + pulumi.set(__self__, "api_key", api_key) + if created_at is not None: + pulumi.set(__self__, "created_at", created_at) + if expires_at is not None: + pulumi.set(__self__, "expires_at", expires_at) + if name is not None: + pulumi.set(__self__, "name", name) + if service_account_slug is not None: + pulumi.set(__self__, "service_account_slug", service_account_slug) + if slug is not None: + pulumi.set(__self__, "slug", slug) + + @property + @pulumi.getter(name="apiKey") + def api_key(self) -> Optional[pulumi.Input[str]]: + """ + The api key used to authenticate the service account + """ + return pulumi.get(self, "api_key") + + @api_key.setter + def api_key(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "api_key", value) + + @property + @pulumi.getter(name="createdAt") + def created_at(self) -> Optional[pulumi.Input[str]]: + """ + The datetime that the token was created. + """ + return pulumi.get(self, "created_at") + + @created_at.setter + def created_at(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "created_at", value) + + @property + @pulumi.getter(name="expiresAt") + def expires_at(self) -> Optional[pulumi.Input[str]]: + """ + The datetime at which the API token should expire. If not provided, the API token will remain valid indefinitely unless manually revoked + """ + return pulumi.get(self, "expires_at") + + @expires_at.setter + def expires_at(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "expires_at", value) + + @property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[str]]: + """ + The display name of the API token + """ + return pulumi.get(self, "name") + + @name.setter + def name(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "name", value) + + @property + @pulumi.getter(name="serviceAccountSlug") + def service_account_slug(self) -> Optional[pulumi.Input[str]]: + """ + Slug of the service account + """ + return pulumi.get(self, "service_account_slug") + + @service_account_slug.setter + def service_account_slug(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "service_account_slug", value) + + @property + @pulumi.getter + def slug(self) -> Optional[pulumi.Input[str]]: + """ + Slug of the service account token + """ + return pulumi.get(self, "slug") + + @slug.setter + def slug(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "slug", value) + + +class ServiceAccountToken(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + expires_at: Optional[pulumi.Input[str]] = None, + name: Optional[pulumi.Input[str]] = None, + service_account_slug: Optional[pulumi.Input[str]] = None, + __props__=None): + """ + Manage a Doppler service account token. + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[str] expires_at: The datetime at which the API token should expire. If not provided, the API token will remain valid indefinitely unless manually revoked + :param pulumi.Input[str] name: The display name of the API token + :param pulumi.Input[str] service_account_slug: Slug of the service account + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: ServiceAccountTokenArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + Manage a Doppler service account token. + + :param str resource_name: The name of the resource. + :param ServiceAccountTokenArgs 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(ServiceAccountTokenArgs, 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, + expires_at: Optional[pulumi.Input[str]] = None, + name: Optional[pulumi.Input[str]] = None, + service_account_slug: 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__ = ServiceAccountTokenArgs.__new__(ServiceAccountTokenArgs) + + __props__.__dict__["expires_at"] = expires_at + if name is None and not opts.urn: + raise TypeError("Missing required property 'name'") + __props__.__dict__["name"] = name + if service_account_slug is None and not opts.urn: + raise TypeError("Missing required property 'service_account_slug'") + __props__.__dict__["service_account_slug"] = service_account_slug + __props__.__dict__["api_key"] = None + __props__.__dict__["created_at"] = None + __props__.__dict__["slug"] = None + secret_opts = pulumi.ResourceOptions(additional_secret_outputs=["apiKey"]) + opts = pulumi.ResourceOptions.merge(opts, secret_opts) + super(ServiceAccountToken, __self__).__init__( + 'doppler:index/serviceAccountToken:ServiceAccountToken', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + api_key: Optional[pulumi.Input[str]] = None, + created_at: Optional[pulumi.Input[str]] = None, + expires_at: Optional[pulumi.Input[str]] = None, + name: Optional[pulumi.Input[str]] = None, + service_account_slug: Optional[pulumi.Input[str]] = None, + slug: Optional[pulumi.Input[str]] = None) -> 'ServiceAccountToken': + """ + Get an existing ServiceAccountToken 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] api_key: The api key used to authenticate the service account + :param pulumi.Input[str] created_at: The datetime that the token was created. + :param pulumi.Input[str] expires_at: The datetime at which the API token should expire. If not provided, the API token will remain valid indefinitely unless manually revoked + :param pulumi.Input[str] name: The display name of the API token + :param pulumi.Input[str] service_account_slug: Slug of the service account + :param pulumi.Input[str] slug: Slug of the service account token + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _ServiceAccountTokenState.__new__(_ServiceAccountTokenState) + + __props__.__dict__["api_key"] = api_key + __props__.__dict__["created_at"] = created_at + __props__.__dict__["expires_at"] = expires_at + __props__.__dict__["name"] = name + __props__.__dict__["service_account_slug"] = service_account_slug + __props__.__dict__["slug"] = slug + return ServiceAccountToken(resource_name, opts=opts, __props__=__props__) + + @property + @pulumi.getter(name="apiKey") + def api_key(self) -> pulumi.Output[str]: + """ + The api key used to authenticate the service account + """ + return pulumi.get(self, "api_key") + + @property + @pulumi.getter(name="createdAt") + def created_at(self) -> pulumi.Output[str]: + """ + The datetime that the token was created. + """ + return pulumi.get(self, "created_at") + + @property + @pulumi.getter(name="expiresAt") + def expires_at(self) -> pulumi.Output[Optional[str]]: + """ + The datetime at which the API token should expire. If not provided, the API token will remain valid indefinitely unless manually revoked + """ + return pulumi.get(self, "expires_at") + + @property + @pulumi.getter + def name(self) -> pulumi.Output[str]: + """ + The display name of the API token + """ + return pulumi.get(self, "name") + + @property + @pulumi.getter(name="serviceAccountSlug") + def service_account_slug(self) -> pulumi.Output[str]: + """ + Slug of the service account + """ + return pulumi.get(self, "service_account_slug") + + @property + @pulumi.getter + def slug(self) -> pulumi.Output[str]: + """ + Slug of the service account token + """ + return pulumi.get(self, "slug") + diff --git a/sdk/python/pulumiverse_doppler/webhook.py b/sdk/python/pulumiverse_doppler/webhook.py new file mode 100644 index 0000000..8685bd7 --- /dev/null +++ b/sdk/python/pulumiverse_doppler/webhook.py @@ -0,0 +1,459 @@ +# 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__ = ['WebhookArgs', 'Webhook'] + +@pulumi.input_type +class WebhookArgs: + def __init__(__self__, *, + project: pulumi.Input[str], + url: pulumi.Input[str], + authentication: Optional[pulumi.Input['WebhookAuthenticationArgs']] = None, + enabled: Optional[pulumi.Input[bool]] = None, + enabled_configs: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, + payload: Optional[pulumi.Input[str]] = None, + secret: Optional[pulumi.Input[str]] = None): + """ + The set of arguments for constructing a Webhook resource. + :param pulumi.Input[str] project: The name of the Doppler project where the webhook is located + :param pulumi.Input[str] url: The URL of the webhook endpoint + :param pulumi.Input['WebhookAuthenticationArgs'] authentication: Authentication method used by the webhook + :param pulumi.Input[bool] enabled: Whether the webhook is enabled or disabled. Default to true. + :param pulumi.Input[Sequence[pulumi.Input[str]]] enabled_configs: Configs this webhook will trigger for + :param pulumi.Input[str] payload: The webhook's payload as a JSON string. Leave empty to use the default webhook payload + :param pulumi.Input[str] secret: Secret used for request signing + """ + pulumi.set(__self__, "project", project) + pulumi.set(__self__, "url", url) + if authentication is not None: + pulumi.set(__self__, "authentication", authentication) + if enabled is not None: + pulumi.set(__self__, "enabled", enabled) + if enabled_configs is not None: + pulumi.set(__self__, "enabled_configs", enabled_configs) + if payload is not None: + pulumi.set(__self__, "payload", payload) + if secret is not None: + pulumi.set(__self__, "secret", secret) + + @property + @pulumi.getter + def project(self) -> pulumi.Input[str]: + """ + The name of the Doppler project where the webhook is located + """ + return pulumi.get(self, "project") + + @project.setter + def project(self, value: pulumi.Input[str]): + pulumi.set(self, "project", value) + + @property + @pulumi.getter + def url(self) -> pulumi.Input[str]: + """ + The URL of the webhook endpoint + """ + return pulumi.get(self, "url") + + @url.setter + def url(self, value: pulumi.Input[str]): + pulumi.set(self, "url", value) + + @property + @pulumi.getter + def authentication(self) -> Optional[pulumi.Input['WebhookAuthenticationArgs']]: + """ + Authentication method used by the webhook + """ + return pulumi.get(self, "authentication") + + @authentication.setter + def authentication(self, value: Optional[pulumi.Input['WebhookAuthenticationArgs']]): + pulumi.set(self, "authentication", value) + + @property + @pulumi.getter + def enabled(self) -> Optional[pulumi.Input[bool]]: + """ + Whether the webhook is enabled or disabled. Default to true. + """ + return pulumi.get(self, "enabled") + + @enabled.setter + def enabled(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "enabled", value) + + @property + @pulumi.getter(name="enabledConfigs") + def enabled_configs(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]: + """ + Configs this webhook will trigger for + """ + return pulumi.get(self, "enabled_configs") + + @enabled_configs.setter + def enabled_configs(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]): + pulumi.set(self, "enabled_configs", value) + + @property + @pulumi.getter + def payload(self) -> Optional[pulumi.Input[str]]: + """ + The webhook's payload as a JSON string. Leave empty to use the default webhook payload + """ + return pulumi.get(self, "payload") + + @payload.setter + def payload(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "payload", value) + + @property + @pulumi.getter + def secret(self) -> Optional[pulumi.Input[str]]: + """ + Secret used for request signing + """ + return pulumi.get(self, "secret") + + @secret.setter + def secret(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "secret", value) + + +@pulumi.input_type +class _WebhookState: + def __init__(__self__, *, + authentication: Optional[pulumi.Input['WebhookAuthenticationArgs']] = None, + enabled: Optional[pulumi.Input[bool]] = None, + enabled_configs: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, + payload: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + secret: Optional[pulumi.Input[str]] = None, + slug: Optional[pulumi.Input[str]] = None, + url: Optional[pulumi.Input[str]] = None): + """ + Input properties used for looking up and filtering Webhook resources. + :param pulumi.Input['WebhookAuthenticationArgs'] authentication: Authentication method used by the webhook + :param pulumi.Input[bool] enabled: Whether the webhook is enabled or disabled. Default to true. + :param pulumi.Input[Sequence[pulumi.Input[str]]] enabled_configs: Configs this webhook will trigger for + :param pulumi.Input[str] payload: The webhook's payload as a JSON string. Leave empty to use the default webhook payload + :param pulumi.Input[str] project: The name of the Doppler project where the webhook is located + :param pulumi.Input[str] secret: Secret used for request signing + :param pulumi.Input[str] slug: The slug of the Webhook + :param pulumi.Input[str] url: The URL of the webhook endpoint + """ + if authentication is not None: + pulumi.set(__self__, "authentication", authentication) + if enabled is not None: + pulumi.set(__self__, "enabled", enabled) + if enabled_configs is not None: + pulumi.set(__self__, "enabled_configs", enabled_configs) + if payload is not None: + pulumi.set(__self__, "payload", payload) + if project is not None: + pulumi.set(__self__, "project", project) + if secret is not None: + pulumi.set(__self__, "secret", secret) + if slug is not None: + pulumi.set(__self__, "slug", slug) + if url is not None: + pulumi.set(__self__, "url", url) + + @property + @pulumi.getter + def authentication(self) -> Optional[pulumi.Input['WebhookAuthenticationArgs']]: + """ + Authentication method used by the webhook + """ + return pulumi.get(self, "authentication") + + @authentication.setter + def authentication(self, value: Optional[pulumi.Input['WebhookAuthenticationArgs']]): + pulumi.set(self, "authentication", value) + + @property + @pulumi.getter + def enabled(self) -> Optional[pulumi.Input[bool]]: + """ + Whether the webhook is enabled or disabled. Default to true. + """ + return pulumi.get(self, "enabled") + + @enabled.setter + def enabled(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "enabled", value) + + @property + @pulumi.getter(name="enabledConfigs") + def enabled_configs(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]: + """ + Configs this webhook will trigger for + """ + return pulumi.get(self, "enabled_configs") + + @enabled_configs.setter + def enabled_configs(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]): + pulumi.set(self, "enabled_configs", value) + + @property + @pulumi.getter + def payload(self) -> Optional[pulumi.Input[str]]: + """ + The webhook's payload as a JSON string. Leave empty to use the default webhook payload + """ + return pulumi.get(self, "payload") + + @payload.setter + def payload(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "payload", value) + + @property + @pulumi.getter + def project(self) -> Optional[pulumi.Input[str]]: + """ + The name of the Doppler project where the webhook is located + """ + return pulumi.get(self, "project") + + @project.setter + def project(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "project", value) + + @property + @pulumi.getter + def secret(self) -> Optional[pulumi.Input[str]]: + """ + Secret used for request signing + """ + return pulumi.get(self, "secret") + + @secret.setter + def secret(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "secret", value) + + @property + @pulumi.getter + def slug(self) -> Optional[pulumi.Input[str]]: + """ + The slug of the Webhook + """ + return pulumi.get(self, "slug") + + @slug.setter + def slug(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "slug", value) + + @property + @pulumi.getter + def url(self) -> Optional[pulumi.Input[str]]: + """ + The URL of the webhook endpoint + """ + return pulumi.get(self, "url") + + @url.setter + def url(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "url", value) + + +class Webhook(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + authentication: Optional[pulumi.Input[pulumi.InputType['WebhookAuthenticationArgs']]] = None, + enabled: Optional[pulumi.Input[bool]] = None, + enabled_configs: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, + payload: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + secret: Optional[pulumi.Input[str]] = None, + url: Optional[pulumi.Input[str]] = None, + __props__=None): + """ + Create a Webhook resource with the given unique name, props, and options. + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[pulumi.InputType['WebhookAuthenticationArgs']] authentication: Authentication method used by the webhook + :param pulumi.Input[bool] enabled: Whether the webhook is enabled or disabled. Default to true. + :param pulumi.Input[Sequence[pulumi.Input[str]]] enabled_configs: Configs this webhook will trigger for + :param pulumi.Input[str] payload: The webhook's payload as a JSON string. Leave empty to use the default webhook payload + :param pulumi.Input[str] project: The name of the Doppler project where the webhook is located + :param pulumi.Input[str] secret: Secret used for request signing + :param pulumi.Input[str] url: The URL of the webhook endpoint + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: WebhookArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + Create a Webhook resource with the given unique name, props, and options. + :param str resource_name: The name of the resource. + :param WebhookArgs 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(WebhookArgs, 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, + authentication: Optional[pulumi.Input[pulumi.InputType['WebhookAuthenticationArgs']]] = None, + enabled: Optional[pulumi.Input[bool]] = None, + enabled_configs: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, + payload: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + secret: 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__ = WebhookArgs.__new__(WebhookArgs) + + __props__.__dict__["authentication"] = authentication + __props__.__dict__["enabled"] = enabled + __props__.__dict__["enabled_configs"] = enabled_configs + __props__.__dict__["payload"] = None if payload is None else pulumi.Output.secret(payload) + if project is None and not opts.urn: + raise TypeError("Missing required property 'project'") + __props__.__dict__["project"] = project + __props__.__dict__["secret"] = None if secret is None else pulumi.Output.secret(secret) + if url is None and not opts.urn: + raise TypeError("Missing required property 'url'") + __props__.__dict__["url"] = url + __props__.__dict__["slug"] = None + secret_opts = pulumi.ResourceOptions(additional_secret_outputs=["payload", "secret"]) + opts = pulumi.ResourceOptions.merge(opts, secret_opts) + super(Webhook, __self__).__init__( + 'doppler:index/webhook:Webhook', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + authentication: Optional[pulumi.Input[pulumi.InputType['WebhookAuthenticationArgs']]] = None, + enabled: Optional[pulumi.Input[bool]] = None, + enabled_configs: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, + payload: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + secret: Optional[pulumi.Input[str]] = None, + slug: Optional[pulumi.Input[str]] = None, + url: Optional[pulumi.Input[str]] = None) -> 'Webhook': + """ + Get an existing Webhook 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['WebhookAuthenticationArgs']] authentication: Authentication method used by the webhook + :param pulumi.Input[bool] enabled: Whether the webhook is enabled or disabled. Default to true. + :param pulumi.Input[Sequence[pulumi.Input[str]]] enabled_configs: Configs this webhook will trigger for + :param pulumi.Input[str] payload: The webhook's payload as a JSON string. Leave empty to use the default webhook payload + :param pulumi.Input[str] project: The name of the Doppler project where the webhook is located + :param pulumi.Input[str] secret: Secret used for request signing + :param pulumi.Input[str] slug: The slug of the Webhook + :param pulumi.Input[str] url: The URL of the webhook endpoint + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _WebhookState.__new__(_WebhookState) + + __props__.__dict__["authentication"] = authentication + __props__.__dict__["enabled"] = enabled + __props__.__dict__["enabled_configs"] = enabled_configs + __props__.__dict__["payload"] = payload + __props__.__dict__["project"] = project + __props__.__dict__["secret"] = secret + __props__.__dict__["slug"] = slug + __props__.__dict__["url"] = url + return Webhook(resource_name, opts=opts, __props__=__props__) + + @property + @pulumi.getter + def authentication(self) -> pulumi.Output[Optional['outputs.WebhookAuthentication']]: + """ + Authentication method used by the webhook + """ + return pulumi.get(self, "authentication") + + @property + @pulumi.getter + def enabled(self) -> pulumi.Output[Optional[bool]]: + """ + Whether the webhook is enabled or disabled. Default to true. + """ + return pulumi.get(self, "enabled") + + @property + @pulumi.getter(name="enabledConfigs") + def enabled_configs(self) -> pulumi.Output[Optional[Sequence[str]]]: + """ + Configs this webhook will trigger for + """ + return pulumi.get(self, "enabled_configs") + + @property + @pulumi.getter + def payload(self) -> pulumi.Output[Optional[str]]: + """ + The webhook's payload as a JSON string. Leave empty to use the default webhook payload + """ + return pulumi.get(self, "payload") + + @property + @pulumi.getter + def project(self) -> pulumi.Output[str]: + """ + The name of the Doppler project where the webhook is located + """ + return pulumi.get(self, "project") + + @property + @pulumi.getter + def secret(self) -> pulumi.Output[Optional[str]]: + """ + Secret used for request signing + """ + return pulumi.get(self, "secret") + + @property + @pulumi.getter + def slug(self) -> pulumi.Output[str]: + """ + The slug of the Webhook + """ + return pulumi.get(self, "slug") + + @property + @pulumi.getter + def url(self) -> pulumi.Output[str]: + """ + The URL of the webhook endpoint + """ + return pulumi.get(self, "url") +